Skip to content

Source Generator Compilation Error: Stack overflow #2149

@msfredb7

Description

@msfredb7

Bug description

A stack overflow error occurs in the source generator, preventing compilation.

Stack overflow.
Repeat 905 times:
--------------------------------
   at System.Linq.Enumerable+SelectArrayIterator`2[[System.__Canon, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.__Canon, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].ToArray()
   at System.Linq.Enumerable.ToArray[[System.__Canon, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]](System.Collections.Generic.IEnumerable`1<System.__Canon>)
   at MessagePack.SourceGenerator.ImmutableEquatableArray`1[[System.__Canon, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]]..ctor(System.Collections.Generic.IEnumerable`1<System.__Canon>)
   at MessagePack.SourceGenerator.ImmutableEquatableArray.ToImmutableEquatableArray[[System.__Canon, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]](System.Collections.Generic.IEnumerable`1<System.__Canon>)
   at MessagePack.SourceGenerator.CodeAnalysis.GenericTypeParameterInfo..ctor(Microsoft.CodeAnalysis.ITypeParameterSymbol, System.Collections.Immutable.ImmutableStack`1<MessagePack.SourceGenerator.CodeAnalysis.GenericTypeParameterInfo>)
   at MessagePack.SourceGenerator.CodeAnalysis.GenericTypeParameterInfo.Create(Microsoft.CodeAnalysis.ITypeParameterSymbol, System.Collections.Immutable.ImmutableStack`1<MessagePack.SourceGenerator.CodeAnalysis.GenericTypeParameterInfo>)
   at MessagePack.SourceGenerator.CodeAnalysis.CodeAnalysisUtilities+<>c__DisplayClass9_0.<GetTypeParameters>b__0(Microsoft.CodeAnalysis.ITypeParameterSymbol)
   at System.Linq.Enumerable+SelectArrayIterator`2[[System.__Canon, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.__Canon, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].ToArray()
   at System.Linq.Enumerable.ToArray[[System.__Canon, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]](System.Collections.Generic.IEnumerable`1<System.__Canon>)
   at System.Collections.Immutable.ImmutableArray.CreateRange[[System.__Canon, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]](System.Collections.Generic.IEnumerable`1<System.__Canon>)
   at System.Collections.Immutable.ImmutableArray.ToImmutableArray[[System.__Canon, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]](System.Collections.Generic.IEnumerable`1<System.__Canon>)
   at MessagePack.SourceGenerator.CodeAnalysis.CodeAnalysisUtilities.GetTypeParameters(Microsoft.CodeAnalysis.ITypeSymbol, System.Collections.Immutable.ImmutableStack`1<MessagePack.SourceGenerator.CodeAnalysis.GenericTypeParameterInfo>)
   at MessagePack.SourceGenerator.CodeAnalysis.QualifiedNamedTypeName..ctor(Microsoft.CodeAnalysis.INamedTypeSymbol, System.Collections.Immutable.ImmutableStack`1<MessagePack.SourceGenerator.CodeAnalysis.GenericTypeParameterInfo>)
   at MessagePack.SourceGenerator.CodeAnalysis.QualifiedNamedTypeName..ctor(Microsoft.CodeAnalysis.INamedTypeSymbol, System.Collections.Immutable.ImmutableStack`1<MessagePack.SourceGenerator.CodeAnalysis.GenericTypeParameterInfo>)
   at MessagePack.SourceGenerator.CodeAnalysis.QualifiedTypeName.Create(Microsoft.CodeAnalysis.ITypeSymbol, System.Collections.Immutable.ImmutableStack`1<MessagePack.SourceGenerator.CodeAnalysis.GenericTypeParameterInfo>)
   at MessagePack.SourceGenerator.CodeAnalysis.GenericTypeParameterInfo+<>c__DisplayClass8_0.<.ctor>b__0(Microsoft.CodeAnalysis.ITypeSymbol)
--------------------------------
   at System.Linq.Enumerable+SelectArrayIterator`2[[System.__Canon, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.__Canon, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].ToArray()
   at System.Linq.Enumerable.ToArray[[System.__Canon, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]](System.Collections.Generic.IEnumerable`1<System.__Canon>)
   at MessagePack.SourceGenerator.ImmutableEquatableArray`1[[System.__Canon, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]]..ctor(System.Collections.Generic.IEnumerable`1<System.__Canon>)
   at MessagePack.SourceGenerator.ImmutableEquatableArray.ToImmutableEquatableArray[[System.__Canon, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]](System.Collections.Generic.IEnumerable`1<System.__Canon>)
   at MessagePack.SourceGenerator.CodeAnalysis.GenericTypeParameterInfo..ctor(Microsoft.CodeAnalysis.ITypeParameterSymbol, System.Collections.Immutable.ImmutableStack`1<MessagePack.SourceGenerator.CodeAnalysis.GenericTypeParameterInfo>)
   at MessagePack.SourceGenerator.CodeAnalysis.GenericTypeParameterInfo.Create(Microsoft.CodeAnalysis.ITypeParameterSymbol, System.Collections.Immutable.ImmutableStack`1<MessagePack.SourceGenerator.CodeAnalysis.GenericTypeParameterInfo>)
   at MessagePack.SourceGenerator.CodeAnalysis.CodeAnalysisUtilities+<>c__DisplayClass9_0.<GetTypeParameters>b__0(Microsoft.CodeAnalysis.ITypeParameterSymbol)
   at System.Linq.Enumerable+SelectArrayIterator`2[[System.__Canon, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.__Canon, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].ToArray()
   at System.Linq.Enumerable.ToArray[[System.__Canon, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]](System.Collections.Generic.IEnumerable`1<System.__Canon>)
   at System.Collections.Immutable.ImmutableArray.CreateRange[[System.__Canon, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]](System.Collections.Generic.IEnumerable`1<System.__Canon>)
   at System.Collections.Immutable.ImmutableArray.ToImmutableArray[[System.__Canon, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]](System.Collections.Generic.IEnumerable`1<System.__Canon>)
   at MessagePack.SourceGenerator.CodeAnalysis.CodeAnalysisUtilities.GetTypeParameters(Microsoft.CodeAnalysis.ITypeSymbol, System.Collections.Immutable.ImmutableStack`1<MessagePack.SourceGenerator.CodeAnalysis.GenericTypeParameterInfo>)
   at MessagePack.SourceGenerator.CodeAnalysis.QualifiedNamedTypeName..ctor(Microsoft.CodeAnalysis.INamedTypeSymbol, System.Collections.Immutable.ImmutableStack`1<MessagePack.SourceGenerator.CodeAnalysis.GenericTypeParameterInfo>)
   at MessagePack.SourceGenerator.Analyzers.MsgPack00xMessagePackAnalyzer.SymbolStartAction(Microsoft.CodeAnalysis.Diagnostics.SymbolStartAnalysisContext, MessagePack.SourceGenerator.CodeAnalysis.ReferenceSymbols, MessagePack.SourceGenerator.CodeAnalysis.AnalyzerOptions)
   at MessagePack.SourceGenerator.Analyzers.MsgPack00xMessagePackAnalyzer+<>c__DisplayClass55_0.<Initialize>b__2(Microsoft.CodeAnalysis.Diagnostics.SymbolStartAnalysisContext)
   at Microsoft.CodeAnalysis.Diagnostics.AnalyzerExecutor+<>c.<ExecuteSymbolStartActions>b__45_0(System.ValueTuple`2<System.Action`1<Microsoft.CodeAnalysis.Diagnostics.SymbolStartAnalysisContext>,Microsoft.CodeAnalysis.Diagnostics.AnalyzerSymbolStartAnalysisContext>)
   at Microsoft.CodeAnalysis.Diagnostics.AnalyzerExecutor.ExecuteAndCatchIfThrows_NoLock[[System.ValueTuple`2[[System.__Canon, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.__Canon, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], System.Private.CoreLib, Version=6.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>)
   at Microsoft.CodeAnalysis.Diagnostics.AnalyzerExecutor.ExecuteAndCatchIfThrows[[System.ValueTuple`2[[System.__Canon, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.__Canon, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], System.Private.CoreLib, Version=6.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>)
   at Microsoft.CodeAnalysis.Diagnostics.AnalyzerExecutor.ExecuteSymbolStartActions(Microsoft.CodeAnalysis.ISymbol, Microsoft.CodeAnalysis.Diagnostics.DiagnosticAnalyzer, System.Collections.Immutable.ImmutableArray`1<Microsoft.CodeAnalysis.Diagnostics.SymbolStartAnalyzerAction>, Microsoft.CodeAnalysis.Diagnostics.HostSymbolStartAnalysisScope)
   at Microsoft.CodeAnalysis.Diagnostics.AnalyzerManager+AnalyzerExecutionContext+<>c__DisplayClass14_0.<GetSymbolAnalysisScopeAsync>g__getSymbolAnalysisScopeCore|2()
   at Microsoft.CodeAnalysis.Diagnostics.AnalyzerManager+AnalyzerExecutionContext+<>c__DisplayClass14_0.<GetSymbolAnalysisScopeAsync>b__1()
   at System.Threading.Tasks.Task`1[[System.__Canon, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].InnerInvoke()
   at System.Threading.Tasks.Task+<>c.<.cctor>b__272_0(System.Object)
   at System.Threading.ExecutionContext.RunFromThreadPoolDispatchLoop(System.Threading.Thread, System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)
   at System.Threading.Tasks.Task.ExecuteWithThreadLocal(System.Threading.Tasks.Task ByRef, System.Threading.Thread)
   at System.Threading.Tasks.Task.ExecuteEntryUnsafe(System.Threading.Thread)
   at System.Threading.Tasks.Task.ExecuteFromThreadPool(System.Threading.Thread)
   at System.Threading.ThreadPoolWorkQueue.Dispatch()
   at System.Threading.PortableThreadPool+WorkerThread.WorkerThreadStart()
   at System.Threading.Thread.StartCallback()

Repro steps

Compiling with these two classes will produce the bug.

public class ClassA<T> where T : ClassA<T>.ClassB
{
    public class ClassB
    {
    }
}

Expected behavior

Compiles without error. I do not want to serialize these types with MessagePack. They are simply part of my game's code.

Environment Used

  • MessagePack version: 3.1.2
  • Unity 6000.0.33f1
  • Scripting Backend: Mono
  • API Compatiblity Level: .NET Standard 2.1
  • Fresh project with no user code, except for the code mentioned above.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions