Skip to content

Sdk 3.1.400+ breaks multi string pattern matching switch #5087

@Spaceman1861

Description

@Spaceman1861

Issue Title

Sdk 3.1.400+ breaks multi string pattern matching switch.

General

Hi all,

I updated to the latest visual studio today which bumped me from 3.1.301 up to 3.1.401.

After this update I started getting this build error saying there was a null ref exception inside of rosyln.

I tried rolling forward to the 5.0.1 preview and got the same issue.

I managed to isolate it to a single code block which I have included below.

By removing the second last statement in the switch it builds again.

No idea why.

This block fails in any sdk above 3.1.301. (On runtime 3.1.5)

var shouldRecalc = (originalStatus, status) switch
{
    (_, EmailWorkflowStatus.Exception) => true,
    (_, EmailWorkflowStatus.ErrorProcessingDocuments) => true,
    (EmailWorkflowStatus.ProcessingAttachments, EmailWorkflowStatus.ActionRequired) => true,
    (EmailWorkflowStatus.ProcessingAttachments, EmailWorkflowStatus.UnknownSender) => true,
    (EmailWorkflowStatus.ErrorProcessingDocuments, EmailWorkflowStatus.ProcessingAttachments) => true,
    (EmailWorkflowStatus.ErrorProcessingDocuments, EmailWorkflowStatus.Ignored) => true,
    (EmailWorkflowStatus.ActionRequired, EmailWorkflowStatus.ProcessingAttachments) => true,
    (EmailWorkflowStatus.ActionRequired, EmailWorkflowStatus.Ignored) => true,
    (EmailWorkflowStatus.UnknownSender, EmailWorkflowStatus.ProcessingAttachments) => true,
    (EmailWorkflowStatus.UnknownSender, EmailWorkflowStatus.Ignored) => true,
    (EmailWorkflowStatus.Exception, EmailWorkflowStatus.ProcessingAttachments) => true,
    (EmailWorkflowStatus.Exception, EmailWorkflowStatus.Ignored) => true,
    (EmailWorkflowStatus.ActionRequired, EmailWorkflowStatus.Complete) => true,
    (EmailWorkflowStatus.Loading, EmailWorkflowStatus.Unprocessed) => false,
    (_, EmailWorkflowStatus.Unprocessed) => true,
    _ => false
};

This does not fail:

var shouldRecalc = (originalStatus, status) switch
{
    (_, EmailWorkflowStatus.Exception) => true,
    (_, EmailWorkflowStatus.ErrorProcessingDocuments) => true,
    (EmailWorkflowStatus.ProcessingAttachments, EmailWorkflowStatus.ActionRequired) => true,
    (EmailWorkflowStatus.ProcessingAttachments, EmailWorkflowStatus.UnknownSender) => true,
    (EmailWorkflowStatus.ErrorProcessingDocuments, EmailWorkflowStatus.ProcessingAttachments) => true,
    (EmailWorkflowStatus.ErrorProcessingDocuments, EmailWorkflowStatus.Ignored) => true,
    (EmailWorkflowStatus.ActionRequired, EmailWorkflowStatus.ProcessingAttachments) => true,
    (EmailWorkflowStatus.ActionRequired, EmailWorkflowStatus.Ignored) => true,
    (EmailWorkflowStatus.UnknownSender, EmailWorkflowStatus.ProcessingAttachments) => true,
    (EmailWorkflowStatus.UnknownSender, EmailWorkflowStatus.Ignored) => true,
    (EmailWorkflowStatus.Exception, EmailWorkflowStatus.ProcessingAttachments) => true,
    (EmailWorkflowStatus.Exception, EmailWorkflowStatus.Ignored) => true,
    (EmailWorkflowStatus.ActionRequired, EmailWorkflowStatus.Complete) => true,
    (EmailWorkflowStatus.Loading, EmailWorkflowStatus.Unprocessed) => false,
    //(_, EmailWorkflowStatus.Unprocessed) => true,
    _ => false
};

Where all of EmailWorkflowStatus.* are const strings eg

    public static class EmailWorkflowStatus
    {
        ...
        public const string Loading = "Loading";

        public const string Exception = "Exception";
        ...
C:\Program Files\dotnet\sdk\5.0.100-preview.7.20366.6\Roslyn\Microsoft.CSharp.Core.targets(70,5): error :    at Microsoft.CodeAnalysis.CodeGen.ILBuilder.BasicBlock.ShortenBranches(Int32& delta) [C:\REDACTED\Modules\REDACTED\REDACTED.csproj]
C:\Program Files\dotnet\sdk\5.0.100-preview.7.20366.6\Roslyn\Microsoft.CSharp.Core.targets(70,5): error :    at Microsoft.CodeAnalysis.CodeGen.ILBuilder.ComputeOffsetsAndAdjustBranches() [C:\REDACTED\Modules\REDACTED\REDACTED.csproj]
C:\Program Files\dotnet\sdk\5.0.100-preview.7.20366.6\Roslyn\Microsoft.CSharp.Core.targets(70,5): error :    at Microsoft.CodeAnalysis.CodeGen.ILBuilder.RealizeBlocks() [C:\REDACTED\Modules\REDACTED\REDACTED.csproj]
C:\Program Files\dotnet\sdk\5.0.100-preview.7.20366.6\Roslyn\Microsoft.CSharp.Core.targets(70,5): error :    at Microsoft.CodeAnalysis.CodeGen.ILBuilder.Realize() [C:\REDACTED\Modules\REDACTED\REDACTED.csproj]
C:\Program Files\dotnet\sdk\5.0.100-preview.7.20366.6\Roslyn\Microsoft.CSharp.Core.targets(70,5): error :    at Microsoft.CodeAnalysis.CSharp.CodeGen.CodeGenerator.GenerateImpl() [C:\REDACTED\Modules\REDACTED\REDACTED.csproj]
C:\Program Files\dotnet\sdk\5.0.100-preview.7.20366.6\Roslyn\Microsoft.CSharp.Core.targets(70,5): error :    at Microsoft.CodeAnalysis.CSharp.CodeGen.CodeGenerator.Generate(Int32& asyncCatchHandlerOffset, ImmutableArray`1& asyncYieldPoints, ImmutableArray`1& asyncResumePoints, Boolean& hasStackAlloc) [C:\REDACTED\Modules\REDACTED\REDACTED.csproj]
C:\Program Files\dotnet\sdk\5.0.100-preview.7.20366.6\Roslyn\Microsoft.CSharp.Core.targets(70,5): error :    at Microsoft.CodeAnalysis.CSharp.MethodCompiler.GenerateMethodBody(PEModuleBuilder moduleBuilder, MethodSymbol method, Int32 methodOrdinal, BoundStatement block, ImmutableArray`1 lambdaDebugInfo, ImmutableArray`1 closureDebugInfo, StateMachineTypeSymbol stateMachineTypeOpt, VariableSlotAllocator variableSlotAllocatorOpt, DiagnosticBag diagnostics, DebugDocumentProvider debugDocumentProvider, ImportChain importChainOpt, Boolean emittingPdb, Boolean emitTestCoverageData, ImmutableArray`1 dynamicAnalysisSpans, AsyncForwardEntryPoint entryPointOpt) [C:\REDACTED\Modules\REDACTED\REDACTED.csproj]
C:\Program Files\dotnet\sdk\5.0.100-preview.7.20366.6\Roslyn\Microsoft.CSharp.Core.targets(70,5): error :    at Microsoft.CodeAnalysis.CSharp.MethodCompiler.CompileSynthesizedMethods(TypeCompilationState compilationState) [C:\REDACTED\Modules\REDACTED\REDACTED.csproj]
C:\Program Files\dotnet\sdk\5.0.100-preview.7.20366.6\Roslyn\Microsoft.CSharp.Core.targets(70,5): error :    at Microsoft.CodeAnalysis.CSharp.MethodCompiler.CompileNamedType(NamedTypeSymbol containingType) [C:\REDACTED\Modules\REDACTED\REDACTED.csproj]
C:\Program Files\dotnet\sdk\5.0.100-preview.7.20366.6\Roslyn\Microsoft.CSharp.Core.targets(70,5): error :    at Microsoft.CodeAnalysis.CSharp.MethodCompiler.<>c__DisplayClass22_0.<CompileNamedTypeAsync>b__0() [C:\REDACTED\Modules\REDACTED\REDACTED.csproj]
C:\Program Files\dotnet\sdk\5.0.100-preview.7.20366.6\Roslyn\Microsoft.CSharp.Core.targets(70,5): error :    at System.Environment.FailFast(System.String, System.Exception) [C:\REDACTED\Modules\REDACTED\REDACTED.csproj]
C:\Program Files\dotnet\sdk\5.0.100-preview.7.20366.6\Roslyn\Microsoft.CSharp.Core.targets(70,5): error :    at Microsoft.CodeAnalysis.FailFast.OnFatalException(System.Exception) [C:\REDACTED\Modules\REDACTED\REDACTED.csproj]
C:\Program Files\dotnet\sdk\5.0.100-preview.7.20366.6\Roslyn\Microsoft.CSharp.Core.targets(70,5): error :    at Microsoft.CodeAnalysis.FatalError.Report(System.Exception, System.Action`1<System.Exception>) [C:\REDACTED\Modules\REDACTED\REDACTED.csproj]
C:\Program Files\dotnet\sdk\5.0.100-preview.7.20366.6\Roslyn\Microsoft.CSharp.Core.targets(70,5): error :    at Microsoft.CodeAnalysis.FatalError.ReportUnlessCanceled(System.Exception) [C:\REDACTED\Modules\REDACTED\REDACTED.csproj]
C:\Program Files\dotnet\sdk\5.0.100-preview.7.20366.6\Roslyn\Microsoft.CSharp.Core.targets(70,5): error :    at Microsoft.CodeAnalysis.CSharp.MethodCompiler+<>c__DisplayClass22_0.<CompileNamedTypeAsync>b__0() [C:\REDACTED\Modules\REDACTED\REDACTED.csproj]
C:\Program Files\dotnet\sdk\5.0.100-preview.7.20366.6\Roslyn\Microsoft.CSharp.Core.targets(70,5): error :    at Microsoft.CodeAnalysis.CodeGen.ILBuilder+BasicBlock.ShortenBranches(Int32 ByRef) [C:\REDACTED\Modules\REDACTED\REDACTED.csproj]
C:\Program Files\dotnet\sdk\5.0.100-preview.7.20366.6\Roslyn\Microsoft.CSharp.Core.targets(70,5): error :    at Microsoft.CodeAnalysis.CodeGen.ILBuilder.ComputeOffsetsAndAdjustBranches() [C:\REDACTED\Modules\REDACTED\REDACTED.csproj]
C:\Program Files\dotnet\sdk\5.0.100-preview.7.20366.6\Roslyn\Microsoft.CSharp.Core.targets(70,5): error :    at Microsoft.CodeAnalysis.CodeGen.ILBuilder.RealizeBlocks() [C:\REDACTED\Modules\REDACTED\REDACTED.csproj]
C:\Program Files\dotnet\sdk\5.0.100-preview.7.20366.6\Roslyn\Microsoft.CSharp.Core.targets(70,5): error :    at Microsoft.CodeAnalysis.CodeGen.ILBuilder.Realize() [C:\REDACTED\Modules\REDACTED\REDACTED.csproj]
C:\Program Files\dotnet\sdk\5.0.100-preview.7.20366.6\Roslyn\Microsoft.CSharp.Core.targets(70,5): error :    at Microsoft.CodeAnalysis.CSharp.CodeGen.CodeGenerator.GenerateImpl() [C:\REDACTED\Modules\REDACTED\REDACTED.csproj]
C:\Program Files\dotnet\sdk\5.0.100-preview.7.20366.6\Roslyn\Microsoft.CSharp.Core.targets(70,5): error :    at Microsoft.CodeAnalysis.CSharp.CodeGen.CodeGenerator.Generate(Int32 ByRef, System.Collections.Immutable.ImmutableArray`1<Int32> ByRef, System.Collections.Immutable.ImmutableArray`1<Int32> ByRef, Boolean ByRef) [C:\REDACTED\Modules\REDACTED\REDACTED.csproj]
C:\Program Files\dotnet\sdk\5.0.100-preview.7.20366.6\Roslyn\Microsoft.CSharp.Core.targets(70,5): error :    at Microsoft.CodeAnalysis.CSharp.MethodCompiler.GenerateMethodBody(Microsoft.CodeAnalysis.CSharp.Emit.PEModuleBuilder, Microsoft.CodeAnalysis.CSharp.Symbols.MethodSymbol, Int32, Microsoft.CodeAnalysis.CSharp.BoundStatement, System.Collections.Immutable.ImmutableArray`1<Microsoft.CodeAnalysis.CodeGen.LambdaDebugInfo>, System.Collections.Immutable.ImmutableArray`1<Microsoft.CodeAnalysis.CodeGen.ClosureDebugInfo>, Microsoft.CodeAnalysis.CSharp.StateMachineTypeSymbol, Microsoft.CodeAnalysis.CodeGen.VariableSlotAllocator, Microsoft.CodeAnalysis.DiagnosticBag, Microsoft.CodeAnalysis.CodeGen.DebugDocumentProvider, Microsoft.CodeAnalysis.CSharp.ImportChain, Boolean, Boolean, System.Collections.Immutable.ImmutableArray`1<Microsoft.CodeAnalysis.CodeGen.SourceSpan>, AsyncForwardEntryPoint) [C:\REDACTED\Modules\REDACTED\REDACTED.csproj]
C:\Program Files\dotnet\sdk\5.0.100-preview.7.20366.6\Roslyn\Microsoft.CSharp.Core.targets(70,5): error :    at Microsoft.CodeAnalysis.CSharp.MethodCompiler.CompileSynthesizedMethods(Microsoft.CodeAnalysis.CSharp.TypeCompilationState) [C:\REDACTED\Modules\REDACTED\REDACTED.csproj]
C:\Program Files\dotnet\sdk\5.0.100-preview.7.20366.6\Roslyn\Microsoft.CSharp.Core.targets(70,5): error :    at Microsoft.CodeAnalysis.CSharp.MethodCompiler.CompileNamedType(Microsoft.CodeAnalysis.CSharp.Symbols.NamedTypeSymbol) [C:\REDACTED\Modules\REDACTED\REDACTED.csproj]
C:\Program Files\dotnet\sdk\5.0.100-preview.7.20366.6\Roslyn\Microsoft.CSharp.Core.targets(70,5): error :    at Microsoft.CodeAnalysis.CSharp.MethodCompiler+<>c__DisplayClass22_0.<CompileNamedTypeAsync>b__0() [C:\REDACTED\Modules\REDACTED\REDACTED.csproj]
C:\Program Files\dotnet\sdk\5.0.100-preview.7.20366.6\Roslyn\Microsoft.CSharp.Core.targets(70,5): error :    at Roslyn.Utilities.UICultureUtilities+<>c__DisplayClass5_0.<WithCurrentUICulture>b__0() [C:\REDACTED\Modules\REDACTED\REDACTED.csproj]
C:\Program Files\dotnet\sdk\5.0.100-preview.7.20366.6\Roslyn\Microsoft.CSharp.Core.targets(70,5): error :    at System.Threading.Tasks.Task.InnerInvoke() [C:\REDACTED\Modules\REDACTED\REDACTED.csproj]
C:\Program Files\dotnet\sdk\5.0.100-preview.7.20366.6\Roslyn\Microsoft.CSharp.Core.targets(70,5): error :    at System.Threading.Tasks.Task+<>c.<.cctor>b__277_0(System.Object) [C:\REDACTED\Modules\REDACTED\REDACTED.csproj]
C:\Program Files\dotnet\sdk\5.0.100-preview.7.20366.6\Roslyn\Microsoft.CSharp.Core.targets(70,5): error :    at System.Threading.ExecutionContext.RunFromThreadPoolDispatchLoop(System.Threading.Thread, System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object) [C:\REDACTED\Modules\REDACTED\REDACTED.csproj]
C:\Program Files\dotnet\sdk\5.0.100-preview.7.20366.6\Roslyn\Microsoft.CSharp.Core.targets(70,5): error :    at System.Threading.Tasks.Task.ExecuteWithThreadLocal(System.Threading.Tasks.Task ByRef, System.Threading.Thread) [C:\REDACTED\Modules\REDACTED\REDACTED.csproj]
C:\Program Files\dotnet\sdk\5.0.100-preview.7.20366.6\Roslyn\Microsoft.CSharp.Core.targets(70,5): error :    at System.Threading.Tasks.Task.ExecuteEntryUnsafe(System.Threading.Thread) [C:\REDACTED\Modules\REDACTED\REDACTED.csproj]
C:\Program Files\dotnet\sdk\5.0.100-preview.7.20366.6\Roslyn\Microsoft.CSharp.Core.targets(70,5): error :    at System.Threading.Tasks.Task.ExecuteFromThreadPool(System.Threading.Thread) [C:\REDACTED\Modules\REDACTED\REDACTED.csproj]
C:\Program Files\dotnet\sdk\5.0.100-preview.7.20366.6\Roslyn\Microsoft.CSharp.Core.targets(70,5): error :    at System.Threading.ThreadPoolWorkQueue.Dispatch() [C:\REDACTED\Modules\REDACTED\REDACTED.csproj]
C:\Program Files\dotnet\sdk\5.0.100-preview.7.20366.6\Roslyn\Microsoft.CSharp.Core.targets(70,5): error :    at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback() [C:\REDACTED\Modules\REDACTED\REDACTED.csproj]
C:\Program Files\dotnet\sdk\5.0.100-preview.7.20366.6\Roslyn\Microsoft.CSharp.Core.targets(70,5): error : System.NullReferenceException: Object reference not set to an instance of an object. [C:\REDACTED\Modules\REDACTED\REDACTED.csproj]
C:\Program Files\dotnet\sdk\5.0.100-preview.7.20366.6\Roslyn\Microsoft.CSharp.Core.targets(70,5): error :    at Microsoft.CodeAnalysis.CodeGen.ILBuilder.BasicBlock.ShortenBranches(Int32& delta) [C:\REDACTED\Modules\REDACTED\REDACTED.csproj]
C:\Program Files\dotnet\sdk\5.0.100-preview.7.20366.6\Roslyn\Microsoft.CSharp.Core.targets(70,5): error :    at Microsoft.CodeAnalysis.CodeGen.ILBuilder.ComputeOffsetsAndAdjustBranches() [C:\REDACTED\Modules\REDACTED\REDACTED.csproj]
C:\Program Files\dotnet\sdk\5.0.100-preview.7.20366.6\Roslyn\Microsoft.CSharp.Core.targets(70,5): error :    at Microsoft.CodeAnalysis.CodeGen.ILBuilder.RealizeBlocks() [C:\REDACTED\Modules\REDACTED\REDACTED.csproj]
C:\Program Files\dotnet\sdk\5.0.100-preview.7.20366.6\Roslyn\Microsoft.CSharp.Core.targets(70,5): error :    at Microsoft.CodeAnalysis.CodeGen.ILBuilder.Realize() [C:\REDACTED\Modules\REDACTED\REDACTED.csproj]
C:\Program Files\dotnet\sdk\5.0.100-preview.7.20366.6\Roslyn\Microsoft.CSharp.Core.targets(70,5): error :    at Microsoft.CodeAnalysis.CSharp.CodeGen.CodeGenerator.GenerateImpl() [C:\REDACTED\Modules\REDACTED\REDACTED.csproj]
C:\Program Files\dotnet\sdk\5.0.100-preview.7.20366.6\Roslyn\Microsoft.CSharp.Core.targets(70,5): error :    at Microsoft.CodeAnalysis.CSharp.CodeGen.CodeGenerator.Generate(Int32& asyncCatchHandlerOffset, ImmutableArray`1& asyncYieldPoints, ImmutableArray`1& asyncResumePoints, Boolean& hasStackAlloc) [C:\REDACTED\Modules\REDACTED\REDACTED.csproj]
C:\Program Files\dotnet\sdk\5.0.100-preview.7.20366.6\Roslyn\Microsoft.CSharp.Core.targets(70,5): error :    at Microsoft.CodeAnalysis.CSharp.MethodCompiler.GenerateMethodBody(PEModuleBuilder moduleBuilder, MethodSymbol method, Int32 methodOrdinal, BoundStatement block, ImmutableArray`1 lambdaDebugInfo, ImmutableArray`1 closureDebugInfo, StateMachineTypeSymbol stateMachineTypeOpt, VariableSlotAllocator variableSlotAllocatorOpt, DiagnosticBag diagnostics, DebugDocumentProvider debugDocumentProvider, ImportChain importChainOpt, Boolean emittingPdb, Boolean emitTestCoverageData, ImmutableArray`1 dynamicAnalysisSpans, AsyncForwardEntryPoint entryPointOpt) [C:\REDACTED\Modules\REDACTED\REDACTED.csproj]
C:\Program Files\dotnet\sdk\5.0.100-preview.7.20366.6\Roslyn\Microsoft.CSharp.Core.targets(70,5): error :    at Microsoft.CodeAnalysis.CSharp.MethodCompiler.CompileSynthesizedMethods(TypeCompilationState compilationState) [C:\REDACTED\Modules\REDACTED\REDACTED.csproj]
C:\Program Files\dotnet\sdk\5.0.100-preview.7.20366.6\Roslyn\Microsoft.CSharp.Core.targets(70,5): error :    at Microsoft.CodeAnalysis.CSharp.MethodCompiler.CompileNamedType(NamedTypeSymbol containingType) [C:\REDACTED\Modules\REDACTED\REDACTED.csproj]
C:\Program Files\dotnet\sdk\5.0.100-preview.7.20366.6\Roslyn\Microsoft.CSharp.Core.targets(70,5): error :    at Microsoft.CodeAnalysis.CSharp.MethodCompiler.<>c__DisplayClass22_0.<CompileNamedTypeAsync>b__0() [C:\REDACTED\Modules\REDACTED\REDACTED.csproj]```

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