MessagePack-CSharp icon indicating copy to clipboard operation
MessagePack-CSharp copied to clipboard

Stack Overflow in Analyzer (v3.1.4)

Open PawelGerr opened this issue 5 months ago • 0 comments

Bug description

Stack overflow in analyzer during build.

Repro steps

Create a new project, copy the content below into a c# file und hit "build".

The reason is most likely the combination of struct + generic interface in generic constraint + nullable generic struct T? in IMessagePackFormatter<T?>.

using System;
using MessagePack;
using MessagePack.Formatters;

namespace MessagePackTest;

public interface IMyGenericInterface<T>;

public class MyGenericFormatter<T> : IMessagePackFormatter<T?>
   where T : struct, IMyGenericInterface<T>
{
   public void Serialize(ref MessagePackWriter writer, T? value, MessagePackSerializerOptions options)
   {
      throw new NotImplementedException();
   }

   public T? Deserialize(ref MessagePackReader reader, MessagePackSerializerOptions options)
   {
      throw new NotImplementedException();
   }
}
<Project Sdk="Microsoft.NET.Sdk">

    <PropertyGroup>
        <TargetFramework>net9.0</TargetFramework>
    </PropertyGroup>

    <ItemGroup>
      <PackageReference Include="MessagePack" Version="3.1.4" />
    </ItemGroup>

</Project>

Expected behavior

No stack overflow exception.

Actual behavior

What happened instead of what you expected.

  • Version used: 3.1.4
  • Runtime: .NET 8/9/10

Additional context

Error returned by MSBuild

0>Microsoft.CSharp.Core.targets(84,5): Error  :    at System.Linq.ImmutableArrayExtensions.SequenceEqual[[System.__Canon, System.Private.CoreLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.__Canon, System.Private.CoreLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]](System.Collections.Immutable.ImmutableArray`1<System.__Canon>, System.Collections.Immutable.ImmutableArray`1<System.__Canon>, System.Collections.Generic.IEqualityComparer`1<System.__Canon>)
0>Microsoft.CSharp.Core.targets(84,5): Error  :    at System.SpanHelpers.SequenceEqual[[System.__Canon, System.Private.CoreLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]](System.__Canon ByRef, System.__Canon ByRef, Int32)
0>Microsoft.CSharp.Core.targets(84,5): Error  :    at MessagePack.SourceGenerator.CodeAnalysis.GenericTypeParameterInfo.Equals(MessagePack.SourceGenerator.CodeAnalysis.GenericTypeParameterInfo)
0>Microsoft.CSharp.Core.targets(84,5): Error  :    at System.Linq.ImmutableArrayExtensions.SequenceEqual[[System.__Canon, System.Private.CoreLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.__Canon, System.Private.CoreLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]](System.Collections.Immutable.ImmutableArray`1<System.__Canon>, System.Collections.Immutable.ImmutableArray`1<System.__Canon>, System.Collections.Generic.IEqualityComparer`1<System.__Canon>)
0>Microsoft.CSharp.Core.targets(84,5): Error  :    at System.SpanHelpers.SequenceEqual[[System.__Canon, System.Private.CoreLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]](System.__Canon ByRef, System.__Canon ByRef, Int32)
0>Microsoft.CSharp.Core.targets(84,5): Error  :    at MessagePack.SourceGenerator.CodeAnalysis.GenericTypeParameterInfo.Equals(MessagePack.SourceGenerator.CodeAnalysis.GenericTypeParameterInfo)
0>Microsoft.CSharp.Core.targets(84,5): Error  :    at System.Linq.ImmutableArrayExtensions.SequenceEqual[[System.__Canon, System.Private.CoreLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.__Canon, System.Private.CoreLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]](System.Collections.Immutable.ImmutableArray`1<System.__Canon>, System.Collections.Immutable.ImmutableArray`1<System.__Canon>, System.Collections.Generic.IEqualityComparer`1<System.__Canon>)
0>Microsoft.CSharp.Core.targets(84,5): Error  :    at System.SpanHelpers.SequenceEqual[[System.__Canon, System.Private.CoreLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]](System.__Canon ByRef, System.__Canon ByRef, Int32)
0>Microsoft.CSharp.Core.targets(84,5): Error  :    at MessagePack.SourceGenerator.CodeAnalysis.GenericTypeParameterInfo.Equals(MessagePack.SourceGenerator.CodeAnalysis.GenericTypeParameterInfo)
0>Microsoft.CSharp.Core.targets(84,5): Error  :    at System.Linq.ImmutableArrayExtensions.SequenceEqual[[System.__Canon, System.Private.CoreLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.__Canon, System.Private.CoreLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]](System.Collections.Immutable.ImmutableArray`1<System.__Canon>, System.Collections.Immutable.ImmutableArray`1<System.__Canon>, System.Collections.Generic.IEqualityComparer`1<System.__Canon>)
0>Microsoft.CSharp.Core.targets(84,5): Error  :    at System.SpanHelpers.SequenceEqual[[System.__Canon, System.Private.CoreLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]](System.__Canon ByRef, System.__Canon ByRef, Int32)
0>Microsoft.CSharp.Core.targets(84,5): Error  :    at MessagePack.SourceGenerator.CodeAnalysis.GenericTypeParameterInfo.Equals(MessagePack.SourceGenerator.CodeAnalysis.GenericTypeParameterInfo)
0>Microsoft.CSharp.Core.targets(84,5): Error  :    at System.Linq.ImmutableArrayExtensions.SequenceEqual[[System.__Canon, System.Private.CoreLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.__Canon, System.Private.CoreLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]](System.Collections.Immutable.ImmutableArray`1<System.__Canon>, System.Collections.Immutable.ImmutableArray`1<System.__Canon>, System.Collections.Generic.IEqualityComparer`1<System.__Canon>)
0>Microsoft.CSharp.Core.targets(84,5): Error  :    at System.SpanHelpers.SequenceEqual[[System.__Canon, System.Private.CoreLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]](System.__Canon ByRef, System.__Canon ByRef, Int32)
0>Microsoft.CSharp.Core.targets(84,5): Error  :    at MessagePack.SourceGenerator.CodeAnalysis.GenericTypeParameterInfo.Equals(MessagePack.SourceGenerator.CodeAnalysis.GenericTypeParameterInfo)
0>Microsoft.CSharp.Core.targets(84,5): Error  :    at System.Linq.ImmutableArrayExtensions.SequenceEqual[[System.__Canon, System.Private.CoreLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.__Canon, System.Private.CoreLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]](System.Collections.Immutable.ImmutableArray`1<System.__Canon>, System.Collections.Immutable.ImmutableArray`1<System.__Canon>, System.Collections.Generic.IEqualityComparer`1<System.__Canon>)
0>Microsoft.CSharp.Core.targets(84,5): Error  :    at System.Collections.Immutable.ImmutableDictionary`2+HashBucket[[System.__Canon, System.Private.CoreLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.__Canon, System.Private.CoreLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].TryGetValue(System.__Canon, Comparers<System.__Canon,System.__Canon>, System.__Canon ByRef)
0>Microsoft.CSharp.Core.targets(84,5): Error  :    at MessagePack.SourceGenerator.Analyzers.MsgPack00xMessagePackAnalyzer.SymbolStartAction(Microsoft.CodeAnalysis.Diagnostics.SymbolStartAnalysisContext, MessagePack.SourceGenerator.CodeAnalysis.ReferenceSymbols, MessagePack.SourceGenerator.CodeAnalysis.AnalyzerOptions)
0>Microsoft.CSharp.Core.targets(84,5): Error  :    at Microsoft.CodeAnalysis.Diagnostics.AnalyzerExecutor.ExecuteAndCatchIfThrows_NoLock[[System.ValueTuple`2[[System.__Canon, System.Private.CoreLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.__Canon, System.Private.CoreLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], System.Private.CoreLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]](Microsoft.CodeAnalysis.Diagnostics.DiagnosticAnalyzer, System.Action`1<System.ValueTuple`2<System.__Canon,System.__Canon>>, System.ValueTuple`2<System.__Canon,System.__Canon>, System.Nullable`1<Microsoft.CodeAnalysis.Diagnostics.AnalysisContextInfo>, System.Threading.CancellationToken)
0>Microsoft.CSharp.Core.targets(84,5): Error  :    at Microsoft.CodeAnalysis.Diagnostics.AnalyzerExecutor.ExecuteAndCatchIfThrows[[System.ValueTuple`2[[System.__Canon, System.Private.CoreLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.__Canon, System.Private.CoreLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], System.Private.CoreLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]](Microsoft.CodeAnalysis.Diagnostics.DiagnosticAnalyzer, System.Action`1<System.ValueTuple`2<System.__Canon,System.__Canon>>, System.ValueTuple`2<System.__Canon,System.__Canon>, System.Nullable`1<Microsoft.CodeAnalysis.Diagnostics.AnalysisContextInfo>, System.Threading.CancellationToken)
0>Microsoft.CSharp.Core.targets(84,5): Error  :    at Microsoft.CodeAnalysis.Diagnostics.AnalyzerExecutor.ExecuteSymbolStartActions(Microsoft.CodeAnalysis.ISymbol, System.Collections.Immutable.ImmutableArray`1<Microsoft.CodeAnalysis.Diagnostics.SymbolStartAnalyzerAction>, Microsoft.CodeAnalysis.Diagnostics.HostSymbolStartAnalysisScope, Boolean, Microsoft.CodeAnalysis.SyntaxTree, System.Nullable`1<Microsoft.CodeAnalysis.Text.TextSpan>, System.Threading.CancellationToken)
0>Microsoft.CSharp.Core.targets(84,5): Error  :    at Microsoft.CodeAnalysis.Diagnostics.AnalyzerManager+AnalyzerExecutionContext+<>c__DisplayClass15_0.<GetSymbolAnalysisScopeAsync>g__getSymbolAnalysisScopeCore|2()
0>Microsoft.CSharp.Core.targets(84,5): Error  :    at System.Threading.Tasks.Task`1[[System.__Canon, System.Private.CoreLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].InnerInvoke()
0>Microsoft.CSharp.Core.targets(84,5): Error  :    at System.Threading.ExecutionContext.RunFromThreadPoolDispatchLoop(System.Threading.Thread, System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)
0>Microsoft.CSharp.Core.targets(84,5): Error  :    at System.Threading.Tasks.Task.ExecuteWithThreadLocal(System.Threading.Tasks.Task ByRef, System.Threading.Thread)
0>Microsoft.CSharp.Core.targets(84,5): Error  :    at System.Threading.ThreadPoolWorkQueue.Dispatch()
0>Microsoft.CSharp.Core.targets(84,5): Error  :    at System.Threading.PortableThreadPool+WorkerThread.WorkerThreadStart()
0>Microsoft.CSharp.Core.targets(84,5): Error  :    at System.Threading.Thread.StartCallback()

PawelGerr avatar Nov 14 '25 22:11 PawelGerr