Skip to content

InvalidOperationException when using field keyword in a struct with 2+ fields #77909

@h3xds1nz

Description

@h3xds1nz

As of 10.0.100-preview.4.25169.12 SDK toolset, this snippet of code crashes Roslyn, I've simplified it as most as I can. If I only use 1 field, or others are e.g. auto props, it works fine. Also in a class it works fine.

This did previously work on e.g. 10.0.100-preview.3.25125.5.

Version Used: 10.0.100-preview.4.25169.12

Sample code that crashes:

public struct CrashMe
{
    public  uint Value1
    {
        get => field;
        set => field = value;
    }
    public  uint Value2
    {
        get => field;
        set => field = value;
    }
}

Stack trace:

Application: csc.exe
Framework Version: v4.0.30319
Description: The application requested process termination through System.Environment.FailFast(string message).
Message: System.InvalidOperationException: Unexpected value 'ConsoleApp3.CrashMe.Value2.field' of type 'Microsoft.CodeAnalysis.CSharp.Symbols.SynthesizedBackingFieldSymbol'
   at Microsoft.CodeAnalysis.CSharp.NullableWalker.GetTypeOrReturnTypeWithAnnotations(Symbol symbol)
   at Microsoft.CodeAnalysis.CSharp.NullableWalker.InheritNullableStateOfMember(Int32 targetContainerSlot, Int32 valueContainerSlot, Symbol member, Boolean isDefaultValue, Int32 skipSlot)
   at Microsoft.CodeAnalysis.CSharp.NullableWalker.InheritNullableStateOfTrackableStruct(TypeSymbol targetType, Int32 targetSlot, Int32 valueSlot, Boolean isDefaultValue, Int32 skipSlot)
   at Microsoft.CodeAnalysis.CSharp.NullableWalker.EnterParameter(ParameterSymbol parameter, TypeWithAnnotations parameterType)
   at Microsoft.CodeAnalysis.CSharp.NullableWalker.Scan(Boolean& badRegion)
   at Microsoft.CodeAnalysis.CSharp.AbstractFlowPass`2.Analyze(Boolean& badRegion, Optional`1 initialState)
   at Microsoft.CodeAnalysis.CSharp.NullableWalker.Analyze(NullableWalker walker, Symbol symbol, DiagnosticBag diagnostics, Optional`1 initialState, Builder snapshotBuilderOpt, Boolean requiresAnalysis)
   at Microsoft.CodeAnalysis.CSharp.NullableWalker.Analyze(CSharpCompilation compilation, Symbol symbol, BoundNode node, Binder binder, Conversions conversions, DiagnosticBag diagnostics, Boolean useConstructorExitWarnings, Nullable`1 getterNullResilienceData, Boolean useDelegateInvokeParameterTypes, Boolean useDelegateInvokeReturnType, MethodSymbol delegateInvokeMethodOpt, VariableState initialState, MethodSymbol baseOrThisInitializer, Builder analyzedNullabilityMapOpt, Builder snapshotBuilderOpt, ArrayBuilder`1 returnTypesOpt, Boolean getFinalNullableState, VariableState& finalNullableState, Boolean requiresAnalysis)
   at Microsoft.CodeAnalysis.CSharp.NullableWalker.AnalyzeIfNeeded(Binder binder, BoundNode node, SyntaxNode syntax, DiagnosticBag diagnostics, Nullable`1 getterNullResilienceData)
   at Microsoft.CodeAnalysis.CSharp.Symbols.SynthesizedBackingFieldSymbol.<ComputeInferredNullableAnnotation>g__nullableAnalyzeAndFilterDiagnostics|23_0(NullableAnnotation assumedNullableAnnotation, <>c__DisplayClass23_0& )
   at Microsoft.CodeAnalysis.CSharp.Symbols.SynthesizedBackingFieldSymbol.ComputeInferredNullableAnnotation()
   at Microsoft.CodeAnalysis.CSharp.Symbols.SynthesizedBackingFieldSymbol.GetInferredNullableAnnotation()
   at Microsoft.CodeAnalysis.CSharp.NullableWalker.GetTypeOrReturnTypeWithAnnotations(Symbol symbol)
   at Microsoft.CodeAnalysis.CSharp.NullableWalker.InheritNullableStateOfMember(Int32 targetContainerSlot, Int32 valueContainerSlot, Symbol member, Boolean isDefaultValue, Int32 skipSlot)
   at Microsoft.CodeAnalysis.CSharp.NullableWalker.InheritNullableStateOfTrackableStruct(TypeSymbol targetType, Int32 targetSlot, Int32 valueSlot, Boolean isDefaultValue, Int32 skipSlot)
   at Microsoft.CodeAnalysis.CSharp.NullableWalker.EnterParameter(ParameterSymbol parameter, TypeWithAnnotations parameterType)
   at Microsoft.CodeAnalysis.CSharp.NullableWalker.Scan(Boolean& badRegion)
   at Microsoft.CodeAnalysis.CSharp.AbstractFlowPass`2.Analyze(Boolean& badRegion, Optional`1 initialState)
   at Microsoft.CodeAnalysis.CSharp.NullableWalker.Analyze(NullableWalker walker, Symbol symbol, DiagnosticBag diagnostics, Optional`1 initialState, Builder snapshotBuilderOpt, Boolean requiresAnalysis)
   at Microsoft.CodeAnalysis.CSharp.NullableWalker.Analyze(CSharpCompilation compilation, Symbol symbol, BoundNode node, Binder binder, Conversions conversions, DiagnosticBag diagnostics, Boolean useConstructorExitWarnings, Nullable`1 getterNullResilienceData, Boolean useDelegateInvokeParameterTypes, Boolean useDelegateInvokeReturnType, MethodSymbol delegateInvokeMethodOpt, VariableState initialState, MethodSymbol baseOrThisInitializer, Builder analyzedNullabilityMapOpt, Builder snapshotBuilderOpt, ArrayBuilder`1 returnTypesOpt, Boolean getFinalNullableState, VariableState& finalNullableState, Boolean requiresAnalysis)
   at Microsoft.CodeAnalysis.CSharp.NullableWalker.AnalyzeWithSemanticInfo(CSharpCompilation compilation, Symbol symbol, BoundNode node, Binder binder, VariableState initialState, DiagnosticBag diagnostics, Boolean createSnapshots, Boolean requiresAnalysis)
   at Microsoft.CodeAnalysis.CSharp.MethodCompiler.BindMethodBody(MethodSymbol method, TypeCompilationState compilationState, BindingDiagnosticBag diagnostics, Boolean includeInitializersInBody, BoundNode initializersBody, Boolean reportNullableDiagnostics, ImportChain& importChain, Boolean& originalBodyNested, Boolean& prependedDefaultValueTypeConstructorInitializer, InitialState& forSemanticModel)
   at Microsoft.CodeAnalysis.CSharp.MethodCompiler.CompileMethod(MethodSymbol methodSymbol, Int32 methodOrdinal, ProcessedFieldInitializers& processedInitializers, SynthesizedSubmissionFields previousSubmissionFields, TypeCompilationState compilationState)
   at Microsoft.CodeAnalysis.CSharp.MethodCompiler.CompileNamedType(NamedTypeSymbol containingType)
   at Microsoft.CodeAnalysis.CSharp.MethodCompiler.<>c__DisplayClass25_0.<CompileNamedTypeAsync>b__0()
Stack:
   at System.Environment.FailFast(System.String, System.Exception)
   at Microsoft.CodeAnalysis.FailFast.OnFatalException(System.Exception)
   at Microsoft.CodeAnalysis.ErrorReporting.FatalError.Report(System.Exception, Microsoft.CodeAnalysis.ErrorReporting.ErrorSeverity, Boolean)
   at Microsoft.CodeAnalysis.ErrorReporting.FatalError.ReportAndPropagateUnlessCanceled(System.Exception, Microsoft.CodeAnalysis.ErrorReporting.ErrorSeverity)
   at Microsoft.CodeAnalysis.CSharp.MethodCompiler+<>c__DisplayClass25_0.<CompileNamedTypeAsync>b__0()
   at Microsoft.CodeAnalysis.CSharp.NullableWalker.GetTypeOrReturnTypeWithAnnotations(Microsoft.CodeAnalysis.CSharp.Symbol)
   at Microsoft.CodeAnalysis.CSharp.NullableWalker.InheritNullableStateOfMember(Int32, Int32, Microsoft.CodeAnalysis.CSharp.Symbol, Boolean, Int32)
   at Microsoft.CodeAnalysis.CSharp.NullableWalker.InheritNullableStateOfTrackableStruct(Microsoft.CodeAnalysis.CSharp.Symbols.TypeSymbol, Int32, Int32, Boolean, Int32)
   at Microsoft.CodeAnalysis.CSharp.NullableWalker.EnterParameter(Microsoft.CodeAnalysis.CSharp.Symbols.ParameterSymbol, Microsoft.CodeAnalysis.CSharp.Symbols.TypeWithAnnotations)
   at Microsoft.CodeAnalysis.CSharp.NullableWalker.Scan(Boolean ByRef)
   at Microsoft.CodeAnalysis.CSharp.AbstractFlowPass`2[[Microsoft.CodeAnalysis.CSharp.NullableWalker+LocalState, Microsoft.CodeAnalysis.CSharp, Version=4.14.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35],[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].Analyze(Boolean ByRef, Microsoft.CodeAnalysis.Optional`1<LocalState>)
   at Microsoft.CodeAnalysis.CSharp.NullableWalker.Analyze(Microsoft.CodeAnalysis.CSharp.NullableWalker, Microsoft.CodeAnalysis.CSharp.Symbol, Microsoft.CodeAnalysis.DiagnosticBag, Microsoft.CodeAnalysis.Optional`1<LocalState>, Builder, Boolean)
   at Microsoft.CodeAnalysis.CSharp.NullableWalker.Analyze(Microsoft.CodeAnalysis.CSharp.CSharpCompilation, Microsoft.CodeAnalysis.CSharp.Symbol, Microsoft.CodeAnalysis.CSharp.BoundNode, Microsoft.CodeAnalysis.CSharp.Binder, Microsoft.CodeAnalysis.CSharp.Conversions, Microsoft.CodeAnalysis.DiagnosticBag, Boolean, System.Nullable`1<System.ValueTuple`2<Microsoft.CodeAnalysis.CSharp.Symbols.SynthesizedBackingFieldSymbol,Microsoft.CodeAnalysis.CSharp.NullableAnnotation>>, Boolean, Boolean, Microsoft.CodeAnalysis.CSharp.Symbols.MethodSymbol, VariableState, Microsoft.CodeAnalysis.CSharp.Symbols.MethodSymbol, Builder<Microsoft.CodeAnalysis.CSharp.BoundExpression,System.ValueTuple`2<Microsoft.CodeAnalysis.NullabilityInfo,Microsoft.CodeAnalysis.CSharp.Symbols.TypeSymbol>>, Builder, Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1<System.ValueTuple`2<Microsoft.CodeAnalysis.CSharp.BoundReturnStatement,Microsoft.CodeAnalysis.CSharp.Symbols.TypeWithAnnotations>>, Boolean, VariableState ByRef, Boolean)
   at Microsoft.CodeAnalysis.CSharp.NullableWalker.AnalyzeIfNeeded(Microsoft.CodeAnalysis.CSharp.Binder, Microsoft.CodeAnalysis.CSharp.BoundNode, Microsoft.CodeAnalysis.SyntaxNode, Microsoft.CodeAnalysis.DiagnosticBag, System.Nullable`1<System.ValueTuple`3<Microsoft.CodeAnalysis.CSharp.Symbols.SourcePropertyAccessorSymbol,Microsoft.CodeAnalysis.CSharp.Symbols.SynthesizedBackingFieldSymbol,Microsoft.CodeAnalysis.CSharp.NullableAnnotation>>)
   at Microsoft.CodeAnalysis.CSharp.Symbols.SynthesizedBackingFieldSymbol.<ComputeInferredNullableAnnotation>g__nullableAnalyzeAndFilterDiagnostics|23_0(Microsoft.CodeAnalysis.CSharp.NullableAnnotation, <>c__DisplayClass23_0 ByRef)
   at Microsoft.CodeAnalysis.CSharp.Symbols.SynthesizedBackingFieldSymbol.ComputeInferredNullableAnnotation()
   at Microsoft.CodeAnalysis.CSharp.Symbols.SynthesizedBackingFieldSymbol.GetInferredNullableAnnotation()
   at Microsoft.CodeAnalysis.CSharp.NullableWalker.GetTypeOrReturnTypeWithAnnotations(Microsoft.CodeAnalysis.CSharp.Symbol)
   at Microsoft.CodeAnalysis.CSharp.NullableWalker.InheritNullableStateOfMember(Int32, Int32, Microsoft.CodeAnalysis.CSharp.Symbol, Boolean, Int32)
   at Microsoft.CodeAnalysis.CSharp.NullableWalker.InheritNullableStateOfTrackableStruct(Microsoft.CodeAnalysis.CSharp.Symbols.TypeSymbol, Int32, Int32, Boolean, Int32)
   at Microsoft.CodeAnalysis.CSharp.NullableWalker.EnterParameter(Microsoft.CodeAnalysis.CSharp.Symbols.ParameterSymbol, Microsoft.CodeAnalysis.CSharp.Symbols.TypeWithAnnotations)
   at Microsoft.CodeAnalysis.CSharp.NullableWalker.Scan(Boolean ByRef)
   at Microsoft.CodeAnalysis.CSharp.AbstractFlowPass`2[[Microsoft.CodeAnalysis.CSharp.NullableWalker+LocalState, Microsoft.CodeAnalysis.CSharp, Version=4.14.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35],[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].Analyze(Boolean ByRef, Microsoft.CodeAnalysis.Optional`1<LocalState>)
   at Microsoft.CodeAnalysis.CSharp.NullableWalker.Analyze(Microsoft.CodeAnalysis.CSharp.NullableWalker, Microsoft.CodeAnalysis.CSharp.Symbol, Microsoft.CodeAnalysis.DiagnosticBag, Microsoft.CodeAnalysis.Optional`1<LocalState>, Builder, Boolean)
   at Microsoft.CodeAnalysis.CSharp.NullableWalker.Analyze(Microsoft.CodeAnalysis.CSharp.CSharpCompilation, Microsoft.CodeAnalysis.CSharp.Symbol, Microsoft.CodeAnalysis.CSharp.BoundNode, Microsoft.CodeAnalysis.CSharp.Binder, Microsoft.CodeAnalysis.CSharp.Conversions, Microsoft.CodeAnalysis.DiagnosticBag, Boolean, System.Nullable`1<System.ValueTuple`2<Microsoft.CodeAnalysis.CSharp.Symbols.SynthesizedBackingFieldSymbol,Microsoft.CodeAnalysis.CSharp.NullableAnnotation>>, Boolean, Boolean, Microsoft.CodeAnalysis.CSharp.Symbols.MethodSymbol, VariableState, Microsoft.CodeAnalysis.CSharp.Symbols.MethodSymbol, Builder<Microsoft.CodeAnalysis.CSharp.BoundExpression,System.ValueTuple`2<Microsoft.CodeAnalysis.NullabilityInfo,Microsoft.CodeAnalysis.CSharp.Symbols.TypeSymbol>>, Builder, Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1<System.ValueTuple`2<Microsoft.CodeAnalysis.CSharp.BoundReturnStatement,Microsoft.CodeAnalysis.CSharp.Symbols.TypeWithAnnotations>>, Boolean, VariableState ByRef, Boolean)
   at Microsoft.CodeAnalysis.CSharp.NullableWalker.AnalyzeWithSemanticInfo(Microsoft.CodeAnalysis.CSharp.CSharpCompilation, Microsoft.CodeAnalysis.CSharp.Symbol, Microsoft.CodeAnalysis.CSharp.BoundNode, Microsoft.CodeAnalysis.CSharp.Binder, VariableState, Microsoft.CodeAnalysis.DiagnosticBag, Boolean, Boolean)
   at Microsoft.CodeAnalysis.CSharp.MethodCompiler.BindMethodBody(Microsoft.CodeAnalysis.CSharp.Symbols.MethodSymbol, Microsoft.CodeAnalysis.CSharp.TypeCompilationState, Microsoft.CodeAnalysis.CSharp.BindingDiagnosticBag, Boolean, Microsoft.CodeAnalysis.CSharp.BoundNode, Boolean, Microsoft.CodeAnalysis.CSharp.ImportChain ByRef, Boolean ByRef, Boolean ByRef, InitialState ByRef)
   at Microsoft.CodeAnalysis.CSharp.MethodCompiler.CompileMethod(Microsoft.CodeAnalysis.CSharp.Symbols.MethodSymbol, Int32, ProcessedFieldInitializers ByRef, Microsoft.CodeAnalysis.CSharp.SynthesizedSubmissionFields, Microsoft.CodeAnalysis.CSharp.TypeCompilationState)
   at Microsoft.CodeAnalysis.CSharp.MethodCompiler.CompileNamedType(Microsoft.CodeAnalysis.CSharp.Symbols.NamedTypeSymbol)
   at Microsoft.CodeAnalysis.CSharp.MethodCompiler+<>c__DisplayClass25_0.<CompileNamedTypeAsync>b__0()
   at Roslyn.Utilities.UICultureUtilities+<>c__DisplayClass5_0.<WithCurrentUICulture>b__0()
   at System.Threading.Tasks.Task.Execute()
   at System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
   at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
   at System.Threading.Tasks.Task.ExecuteWithThreadLocal(System.Threading.Tasks.Task ByRef)
   at System.Threading.Tasks.Task.ExecuteEntry(Boolean)
   at System.Threading.ThreadPoolWorkQueue.Dispatch()

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions