-
-
Notifications
You must be signed in to change notification settings - Fork 755
Open
Description
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()
Metadata
Metadata
Assignees
Labels
No labels