Skip to content

Param nullchecking emit crash with async method #58796

@RikkiGibson

Description

@RikkiGibson

Version Used: f29f937

Steps to Reproduce:

  1. Change ToolsetVersion in eng/Versions.props to 4.2.0-1.22061.4
  2. Change this method to the following:
        /// <summary>
        /// Gets all the diagnostics in the given document filtered by <see cref="DiagnosticIds"/>.
        /// </summary>
        public async Task<ImmutableArray<Diagnostic>> GetDocumentDiagnosticsAsync(Document document!!)
        {
            if (this.Project.Language != document.Project.Language)
            {
                return ImmutableArray<Diagnostic>.Empty;
            }

            var getDiagnosticsTask = State.DiagnosticProvider.GetDocumentDiagnosticsAsync(document, this.CancellationToken);
            return await GetFilteredDiagnosticsAsync(getDiagnosticsTask, this.DiagnosticIds).ConfigureAwait(false);
        }
  1. Run a build

Expected Behavior: Builds successfully.

Actual Behavior: Crash during emit:

error MSB6006: "csc.exe" exited with code -2146232797. [C:\Users\rikki\src\roslyn2\src\Workspaces\Core\Portab le\Microsoft.CodeAnalysis.Workspaces.csproj]

I attached a debugger and have a stack trace:

Microsoft.CodeAnalysis.CodeGen.LocalSlotManager.DeclareLocal(Microsoft.Cci.ITypeReference type, Microsoft.CodeAnalysis.Symbols.ILocalSymbolInternal symbol, string name, Microsoft.CodeAnalysis.SynthesizedLocalKind kind, Microsoft.CodeAnalysis.CodeGen.LocalDebugId id, System.Reflection.Metadata.LocalVariableAttributes pdbAttributes, Microsoft.CodeAnalysis.LocalSlotConstraints constraints, System.Collections.Immutable.ImmutableArray<bool> dynamicTransformFlags, System.Collections.Immutable.ImmutableArray<string> tupleElementNames, bool isSlotReusable) Line 138	C#
Microsoft.CodeAnalysis.CSharp.CodeGen.CodeGenerator.DefineLocal(Microsoft.CodeAnalysis.CSharp.Symbols.LocalSymbol local, Microsoft.CodeAnalysis.SyntaxNode syntaxNode) Line 1417	C#
Microsoft.CodeAnalysis.CSharp.CodeGen.CodeGenerator.EmitBlock(Microsoft.CodeAnalysis.CSharp.BoundBlock block) Line 638	C#
Microsoft.CodeAnalysis.CSharp.CodeGen.CodeGenerator.EmitStatement(Microsoft.CodeAnalysis.CSharp.BoundStatement statement) Line 31	C#
Microsoft.CodeAnalysis.CSharp.CodeGen.CodeGenerator.EmitStatements(System.Collections.Immutable.ImmutableArray<Microsoft.CodeAnalysis.CSharp.BoundStatement> statements) Line 665	C#
Microsoft.CodeAnalysis.CSharp.CodeGen.CodeGenerator.EmitBlock(Microsoft.CodeAnalysis.CSharp.BoundBlock block) Line 642	C#
Microsoft.CodeAnalysis.CSharp.CodeGen.CodeGenerator.EmitStatement(Microsoft.CodeAnalysis.CSharp.BoundStatement statement) Line 31	C#
Microsoft.CodeAnalysis.CSharp.CodeGen.CodeGenerator.EmitStatements(System.Collections.Immutable.ImmutableArray<Microsoft.CodeAnalysis.CSharp.BoundStatement> statements) Line 665	C#
Microsoft.CodeAnalysis.CSharp.CodeGen.CodeGenerator.EmitBlock(Microsoft.CodeAnalysis.CSharp.BoundBlock block) Line 642	C#
Microsoft.CodeAnalysis.CSharp.CodeGen.CodeGenerator.EmitStatement(Microsoft.CodeAnalysis.CSharp.BoundStatement statement) Line 31	C#
Microsoft.CodeAnalysis.CSharp.CodeGen.CodeGenerator.EmitStatementList(Microsoft.CodeAnalysis.CSharp.BoundStatementList list) Line 128	C#
Microsoft.CodeAnalysis.CSharp.CodeGen.CodeGenerator.EmitStatement(Microsoft.CodeAnalysis.CSharp.BoundStatement statement) Line 63	C#
Microsoft.CodeAnalysis.CSharp.CodeGen.CodeGenerator.GenerateImpl() Line 280	C#
Microsoft.CodeAnalysis.CSharp.CodeGen.CodeGenerator.Generate(out bool hasStackalloc) Line 209	C#
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 1559	C#
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 1318	C#
Microsoft.CodeAnalysis.CSharp.MethodCompiler.CompileNamedType(Microsoft.CodeAnalysis.CSharp.Symbols.NamedTypeSymbol containingType) Line 529	C#
Microsoft.CodeAnalysis.CSharp.MethodCompiler.CompileNamedTypeAsync.AnonymousMethod__0() Line 419	C#
Roslyn.Utilities.UICultureUtilities.WithCurrentUICulture.AnonymousMethod__0() Line 139	C#

It looks like we are trying to add a local that was already added. Must be an issue with param-nullchecking lowering.

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