Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Assertion failed in Microsoft.CodeAnalysis.CSharp.SynthesizedClosureEnvironment.AssertIsClosureScopeSyntax #76559

Open
tmat opened this issue Dec 23, 2024 · 1 comment
Labels
Area-Compilers untriaged Issues and PRs which have not yet been triaged by a lead

Comments

@tmat
Copy link
Member

tmat commented Dec 23, 2024

Clone https://github.com/microsoft/Microsoft.Unity.Analyzers, open src\Microsoft.Unity.Analyzers.sln in VS with debug build of Roslyn from main branch. Build the solution.

The build also fails with error MSB6006: "csc.exe" exited with code -2146232797

---------------------------
Assertion Failed: Abort=Quit, Retry=Debug, Ignore=Continue
---------------------------
Unexpected value 'VariableDeclarator' of type 'Microsoft.CodeAnalysis.CSharp.SyntaxKind'

   at Roslyn.Utilities.ExceptionUtilities.UnexpectedValue(Object o) in C:\R0\src\Compilers\Core\Portable\InternalUtilities\ExceptionUtilities.cs:line 22

   at Microsoft.CodeAnalysis.CSharp.SynthesizedClosureEnvironment.AssertIsClosureScopeSyntax(SyntaxNode syntaxOpt) in C:\R0\src\Compilers\CSharp\Portable\Lowering\ClosureConversion\SynthesizedClosureEnvironment.cs:line 106

   at Microsoft.CodeAnalysis.CSharp.SynthesizedClosureEnvironment..ctor(MethodSymbol topLevelMethod, MethodSymbol containingMethod, Boolean isStruct, SyntaxNode scopeSyntaxOpt, DebugId methodId, DebugId closureId, Nullable`1 rudeEdit) in C:\R0\src\Compilers\CSharp\Portable\Lowering\ClosureConversion\SynthesizedClosureEnvironment.cs:line 71

   at Microsoft.CodeAnalysis.CSharp.ClosureConversion.<>c__DisplayClass36_0.<SynthesizeClosureEnvironments>g__MakeFrame|1(Scope scope, ClosureEnvironment env) in C:\R0\src\Compilers\CSharp\Portable\Lowering\ClosureConversion\ClosureConversion.cs:line 379

   at Microsoft.CodeAnalysis.CSharp.ClosureConversion.<>c__DisplayClass36_0.<SynthesizeClosureEnvironments>b__0(Scope scope) in C:\R0\src\Compilers\CSharp\Portable\Lowering\ClosureConversion\ClosureConversion.cs:line 346

   at Microsoft.CodeAnalysis.CSharp.ClosureConversion.Analysis.VisitScopeTree(Scope treeRoot, Action`1 action) in C:\R0\src\Compilers\CSharp\Portable\Lowering\ClosureConversion\ClosureConversion.Analysis.Tree.cs:line 262

   at Microsoft.CodeAnalysis.CSharp.ClosureConversion.Analysis.VisitScopeTree(Scope treeRoot, Action`1 action) in C:\R0\src\Compilers\CSharp\Portable\Lowering\ClosureConversion\ClosureConversion.Analysis.Tree.cs:line 266

   at Microsoft.CodeAnalysis.CSharp.ClosureConversion.SynthesizeClosureEnvironments(ArrayBuilder`1 closureDebugInfo) in C:\R0\src\Compilers\CSharp\Portable\Lowering\ClosureConversion\ClosureConversion.cs:line 340

   at Microsoft.CodeAnalysis.CSharp.ClosureConversion.Rewrite(BoundStatement loweredBody, NamedTypeSymbol thisType, ParameterSymbol thisParameter, MethodSymbol method, Int32 methodOrdinal, MethodSymbol substitutedSourceMethod, ArrayBuilder`1 lambdaDebugInfoBuilder, ArrayBuilder`1 lambdaRuntimeRudeEditsBuilder, ArrayBuilder`1 closureDebugInfoBuilder, VariableSlotAllocator slotAllocator, TypeCompilationState compilationState, BindingDiagnosticBag diagnostics, HashSet`1 assignLocals) in C:\R0\src\Compilers\CSharp\Portable\Lowering\ClosureConversion\ClosureConversion.cs:line 269

   at Microsoft.CodeAnalysis.CSharp.MethodCompiler.LowerBodyOrInitializer(MethodSymbol method, Int32 methodOrdinal, BoundStatement body, SynthesizedSubmissionFields previousSubmissionFields, TypeCompilationState compilationState, MethodInstrumentation instrumentation, DebugDocumentProvider debugDocumentProvider, ImmutableArray`1& codeCoverageSpans, BindingDiagnosticBag diagnostics, VariableSlotAllocator& lazyVariableSlotAllocator, ArrayBuilder`1 lambdaDebugInfoBuilder, ArrayBuilder`1 lambdaRuntimeRudeEditsBuilder, ArrayBuilder`1 closureDebugInfoBuilder, ArrayBuilder`1 stateMachineStateDebugInfoBuilder, StateMachineTypeSymbol& stateMachineTypeOpt) in C:\R0\src\Compilers\CSharp\Portable\Compiler\MethodCompiler.cs:line 1437

   at Microsoft.CodeAnalysis.CSharp.MethodCompiler.CompileMethod(MethodSymbol methodSymbol, Int32 methodOrdinal, ProcessedFieldInitializers& processedInitializers, SynthesizedSubmissionFields previousSubmissionFields, TypeCompilationState compilationState) in C:\R0\src\Compilers\CSharp\Portable\Compiler\MethodCompiler.cs:line 1176

   at Microsoft.CodeAnalysis.CSharp.MethodCompiler.CompileNamedType(NamedTypeSymbol containingType) in C:\R0\src\Compilers\CSharp\Portable\Compiler\MethodCompiler.cs:line 537

   at Microsoft.CodeAnalysis.CSharp.MethodCompiler.<>c__DisplayClass25_0.<CompileNamedTypeAsync>b__0() in C:\R0\src\Compilers\CSharp\Portable\Compiler\MethodCompiler.cs:line 439

   at Roslyn.Utilities.UICultureUtilities.<>c__DisplayClass5_0.<WithCurrentUICulture>b__0() in C:\R0\src\Compilers\Core\Portable\InternalUtilities\UICultureUtilities.cs:line 139

   at System.Threading.Tasks.Task.Execute()

   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)

   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)

   at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task& currentTaskSlot)

   at System.Threading.Tasks.Task.ExecuteEntry(Boolean bPreventDoubleExecution)

   at System.Threading.ThreadPoolWorkQueue.Dispatch()


---------------------------
Abort   Retry   Ignore   
---------------------------

The assertion is triggered when compiling lambda:

Func<CancellationToken, Task<Document>>? action = node switch
{
  BinaryExpressionSyntax bes => ct => ReplaceBinaryExpressionAsync(context.Document, bes, ct),
  InvocationExpressionSyntax ies => ct => ReplaceInvocationExpressionAsync(context.Document, ies, ct),
  _ => null
};

The bound block of the Analysis.Scope is associated with VariableDeclaratorSyntax, which is not an expected closure syntax node.

@dotnet-issue-labeler dotnet-issue-labeler bot added Area-Compilers untriaged Issues and PRs which have not yet been triaged by a lead labels Dec 23, 2024
@sailro
Copy link

sailro commented Dec 26, 2024

cc @jbevain

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Area-Compilers untriaged Issues and PRs which have not yet been triaged by a lead
Projects
None yet
Development

No branches or pull requests

2 participants