Skip to content

Param-nullchecking crash in EmbeddedTypesManager #58824

@RikkiGibson

Description

@RikkiGibson

Version Used: https://github.com/rikkigibson/roslyn/tree/pnc-fix-all

Steps to Reproduce:

  1. Build and pack latest main separately (after Fix emit of param-nullchecking on async methods #58822 is merged)
  2. Reference your freshly built Toolset nupkg in a similar manner as testing on runtime repo
  3. Run a build

Expected Behavior: Build completes, possibly with warnings or errors

Actual Behavior: Compiler crashes during the build.

C:\Users\rikki\.nuget\packages\microsoft.net.compilers.toolset\4.2.0-dev\tasks\net472\Microsoft.CSharp.Core.targets(75,5): error MSB6006: "csc.exe" exited with code -2146232797. [C:\Users\rikki\src\roslyn2\src\VisualStudio\Core\Def\Microsoft.VisualStudio.LanguageServices_10qms0wq_wpftmp.csproj]

Call stack
>	Microsoft.CodeAnalysis.CSharp.dll!Microsoft.CodeAnalysis.CSharp.Emit.NoPia.EmbeddedTypesManager.IsValidEmbeddableType(Microsoft.CodeAnalysis.CSharp.Symbols.NamedTypeSymbol namedType, Microsoft.CodeAnalysis.SyntaxNode syntaxNodeOpt, Microsoft.CodeAnalysis.DiagnosticBag diagnostics, Microsoft.CodeAnalysis.CSharp.Emit.NoPia.EmbeddedTypesManager optTypeManager) Line 242	C#
 	Microsoft.CodeAnalysis.CSharp.dll!Microsoft.CodeAnalysis.CSharp.Emit.NoPia.EmbeddedTypesManager.GetEmbeddedTypeForMember(Microsoft.CodeAnalysis.CSharp.SymbolAdapter member, Microsoft.CodeAnalysis.SyntaxNode syntaxNodeOpt, Microsoft.CodeAnalysis.DiagnosticBag diagnostics) Line 594	C#
 	Microsoft.CodeAnalysis.dll!Microsoft.CodeAnalysis.Emit.NoPia.EmbeddedTypesManager<Microsoft.CodeAnalysis.CSharp.Emit.PEModuleBuilder, Microsoft.CodeAnalysis.CSharp.ModuleCompilationState, Microsoft.CodeAnalysis.CSharp.Emit.NoPia.EmbeddedTypesManager, Microsoft.CodeAnalysis.SyntaxNode, Microsoft.CodeAnalysis.CSharp.Symbols.CSharpAttributeData, Microsoft.CodeAnalysis.CSharp.SymbolAdapter, Microsoft.CodeAnalysis.CSharp.Symbols.AssemblySymbol, Microsoft.CodeAnalysis.CSharp.Symbols.NamedTypeSymbolAdapter, Microsoft.CodeAnalysis.CSharp.Symbols.FieldSymbolAdapter, Microsoft.CodeAnalysis.CSharp.Symbols.MethodSymbolAdapter, Microsoft.CodeAnalysis.CSharp.Symbols.EventSymbolAdapter, Microsoft.CodeAnalysis.CSharp.Symbols.PropertySymbolAdapter, Microsoft.CodeAnalysis.CSharp.Symbols.ParameterSymbolAdapter, Microsoft.CodeAnalysis.CSharp.Symbols.TypeParameterSymbolAdapter, Microsoft.CodeAnalysis.CSharp.Emit.NoPia.EmbeddedType, Microsoft.CodeAnalysis.CSharp.Emit.NoPia.EmbeddedField, Microsoft.CodeAnalysis.CSharp.Emit.NoPia.EmbeddedMethod, Microsoft.CodeAnalysis.CSharp.Emit.NoPia.EmbeddedEvent, Microsoft.CodeAnalysis.CSharp.Emit.NoPia.EmbeddedProperty, Microsoft.CodeAnalysis.CSharp.Emit.NoPia.EmbeddedParameter, Microsoft.CodeAnalysis.CSharp.Emit.NoPia.EmbeddedTypeParameter>.EmbedMethodIfNeedTo(Microsoft.CodeAnalysis.CSharp.Symbols.MethodSymbolAdapter methodSymbol, Microsoft.CodeAnalysis.SyntaxNode syntaxNodeOpt, Microsoft.CodeAnalysis.DiagnosticBag diagnostics) Line 223	C#
 	Microsoft.CodeAnalysis.CSharp.dll!Microsoft.CodeAnalysis.CSharp.Emit.PEModuleBuilder.Translate(Microsoft.CodeAnalysis.CSharp.Symbols.MethodSymbol methodSymbol, Microsoft.CodeAnalysis.SyntaxNode syntaxNodeOpt, Microsoft.CodeAnalysis.DiagnosticBag diagnostics, bool needDeclaration) Line 1362	C#
 	Microsoft.CodeAnalysis.CSharp.dll!Microsoft.CodeAnalysis.CSharp.Emit.PEModuleBuilder.Translate(Microsoft.CodeAnalysis.CSharp.Symbols.MethodSymbol methodSymbol, Microsoft.CodeAnalysis.SyntaxNode syntaxNodeOpt, Microsoft.CodeAnalysis.DiagnosticBag diagnostics, Microsoft.CodeAnalysis.CSharp.BoundArgListOperator optArgList, bool needDeclaration) Line 1269	C#
 	Microsoft.CodeAnalysis.CSharp.dll!Microsoft.CodeAnalysis.CSharp.CodeGen.CodeGenerator.EmitSymbolToken(Microsoft.CodeAnalysis.CSharp.Symbols.MethodSymbol method, Microsoft.CodeAnalysis.SyntaxNode syntaxNode, Microsoft.CodeAnalysis.CSharp.BoundArgListOperator optArgList, bool encodeAsRawDefinitionToken) Line 351	C#
 	Microsoft.CodeAnalysis.CSharp.dll!Microsoft.CodeAnalysis.CSharp.CodeGen.CodeGenerator.EmitStaticCallExpression(Microsoft.CodeAnalysis.CSharp.BoundCall call, Microsoft.CodeAnalysis.CSharp.CodeGen.CodeGenerator.UseKind useKind) Line 1547	C#
 	Microsoft.CodeAnalysis.CSharp.dll!Microsoft.CodeAnalysis.CSharp.CodeGen.CodeGenerator.EmitCallExpression(Microsoft.CodeAnalysis.CSharp.BoundCall call, Microsoft.CodeAnalysis.CSharp.CodeGen.CodeGenerator.UseKind useKind) Line 1494	C#
 	Microsoft.CodeAnalysis.CSharp.dll!Microsoft.CodeAnalysis.CSharp.CodeGen.CodeGenerator.EmitExpressionCore(Microsoft.CodeAnalysis.CSharp.BoundExpression expression, bool used) Line 100	C#
 	Microsoft.CodeAnalysis.CSharp.dll!Microsoft.CodeAnalysis.CSharp.CodeGen.CodeGenerator.EmitExpressionCoreWithStackGuard(Microsoft.CodeAnalysis.CSharp.BoundExpression expression, bool used) Line 80	C#
 	Microsoft.CodeAnalysis.CSharp.dll!Microsoft.CodeAnalysis.CSharp.CodeGen.CodeGenerator.EmitExpression(Microsoft.CodeAnalysis.CSharp.BoundExpression expression, bool used) Line 68	C#
 	Microsoft.CodeAnalysis.CSharp.dll!Microsoft.CodeAnalysis.CSharp.CodeGen.CodeGenerator.EmitStatement(Microsoft.CodeAnalysis.CSharp.BoundStatement statement) Line 59	C#
 	Microsoft.CodeAnalysis.CSharp.dll!Microsoft.CodeAnalysis.CSharp.CodeGen.CodeGenerator.EmitStatementAndCountInstructions(Microsoft.CodeAnalysis.CSharp.BoundStatement statement) Line 120	C#
 	Microsoft.CodeAnalysis.CSharp.dll!Microsoft.CodeAnalysis.CSharp.CodeGen.CodeGenerator.EmitSequencePointStatement(Microsoft.CodeAnalysis.CSharp.BoundSequencePoint node) Line 383	C#
 	Microsoft.CodeAnalysis.CSharp.dll!Microsoft.CodeAnalysis.CSharp.CodeGen.CodeGenerator.EmitStatement(Microsoft.CodeAnalysis.CSharp.BoundStatement statement) Line 39	C#
 	Microsoft.CodeAnalysis.CSharp.dll!Microsoft.CodeAnalysis.CSharp.CodeGen.CodeGenerator.EmitStatementList(Microsoft.CodeAnalysis.CSharp.BoundStatementList list) Line 128	C#
 	Microsoft.CodeAnalysis.CSharp.dll!Microsoft.CodeAnalysis.CSharp.CodeGen.CodeGenerator.EmitStatement(Microsoft.CodeAnalysis.CSharp.BoundStatement statement) Line 63	C#
 	Microsoft.CodeAnalysis.CSharp.dll!Microsoft.CodeAnalysis.CSharp.CodeGen.CodeGenerator.GenerateImpl() Line 280	C#
 	Microsoft.CodeAnalysis.CSharp.dll!Microsoft.CodeAnalysis.CSharp.CodeGen.CodeGenerator.Generate(out bool hasStackalloc) Line 209	C#
 	Microsoft.CodeAnalysis.CSharp.dll!Microsoft.CodeAnalysis.CSharp.MethodCompiler.GenerateMethodBody(Microsoft.CodeAnalysis.CSharp.Emit.PEModuleBuilder moduleBuilder, Microsoft.CodeAnalysis.CSharp.Symbols.MethodSymbol method, int methodOrdinal, Microsoft.CodeAnalysis.CSharp.BoundStatement block, System.Collections.Immutable.ImmutableArray<Microsoft.CodeAnalysis.CodeGen.LambdaDebugInfo> lambdaDebugInfo, System.Collections.Immutable.ImmutableArray<Microsoft.CodeAnalysis.CodeGen.ClosureDebugInfo> closureDebugInfo, Microsoft.CodeAnalysis.CSharp.StateMachineTypeSymbol stateMachineTypeOpt, Microsoft.CodeAnalysis.CodeGen.VariableSlotAllocator variableSlotAllocatorOpt, Microsoft.CodeAnalysis.CSharp.BindingDiagnosticBag diagnostics, Microsoft.CodeAnalysis.CodeGen.DebugDocumentProvider debugDocumentProvider, Microsoft.CodeAnalysis.CSharp.ImportChain importChainOpt, bool emittingPdb, bool emitTestCoverageData, System.Collections.Immutable.ImmutableArray<Microsoft.CodeAnalysis.CodeGen.SourceSpan> dynamicAnalysisSpans, Microsoft.CodeAnalysis.CSharp.Symbols.SynthesizedEntryPointSymbol.AsyncForwardEntryPoint entryPointOpt) Line 1563	C#
 	Microsoft.CodeAnalysis.CSharp.dll!Microsoft.CodeAnalysis.CSharp.MethodCompiler.CompileMethod(Microsoft.CodeAnalysis.CSharp.Symbols.MethodSymbol methodSymbol, int methodOrdinal, ref Microsoft.CodeAnalysis.CSharp.Binder.ProcessedFieldInitializers processedInitializers, Microsoft.CodeAnalysis.CSharp.SynthesizedSubmissionFields previousSubmissionFields, Microsoft.CodeAnalysis.CSharp.TypeCompilationState compilationState) Line 1322	C#
 	Microsoft.CodeAnalysis.CSharp.dll!Microsoft.CodeAnalysis.CSharp.MethodCompiler.CompileNamedType(Microsoft.CodeAnalysis.CSharp.Symbols.NamedTypeSymbol containingType) Line 529	C#
 	Microsoft.CodeAnalysis.CSharp.dll!Microsoft.CodeAnalysis.CSharp.MethodCompiler.CompileNamedTypeAsync.AnonymousMethod__0() Line 419	C#
 	Microsoft.CodeAnalysis.dll!Roslyn.Utilities.UICultureUtilities.WithCurrentUICulture.AnonymousMethod__0() Line 139	C#

syntaxNodeOpt in IsValidEmbeddableType is:

public static async Task<GraphNodeId> CreateNodeIdAsync(ISymbol symbol!!, Solution solution!!, CancellationToken cancellationToken)
{
switch (symbol.Kind)
{
case SymbolKind.Assembly:
return await GraphNodeIdCreation.GetIdForAssemblyAsync((IAssemblySymbol)symbol, solution, cancellationToken).ConfigureAwait(false);
case SymbolKind.Namespace:
return await GraphNodeIdCreation.GetIdForNamespaceAsync((INamespaceSymbol)symbol, solution, cancellationToken).ConfigureAwait(false);
case SymbolKind.NamedType:
return await GraphNodeIdCreation.GetIdForTypeAsync((ITypeSymbol)symbol, solution, cancellationToken).ConfigureAwait(false);
case SymbolKind.Method:
case SymbolKind.Field:
case SymbolKind.Property:
case SymbolKind.Event:
return await GraphNodeIdCreation.GetIdForMemberAsync(symbol, solution, cancellationToken).ConfigureAwait(false);
case SymbolKind.Parameter:
return await GraphNodeIdCreation.GetIdForParameterAsync((IParameterSymbol)symbol, solution, cancellationToken).ConfigureAwait(false);
case SymbolKind.Local:
case SymbolKind.RangeVariable:
return await GraphNodeIdCreation.GetIdForLocalVariableAsync(symbol, solution, cancellationToken).ConfigureAwait(false);
default:
throw new ArgumentException(string.Format(ServicesVSResources.Can_t_create_a_node_id_for_this_symbol_kind_colon_0, symbol));
}
}

Metadata

Metadata

Assignees

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions