Skip to content

Stack overflow in compiler binding out-vars in implicit object creation. #80518

@CyrusNajmabadi

Description

@CyrusNajmabadi
                using System;
                public class C
                {
                    public C(out int x) { x = 0; }

                    public void M()
                    {
                        Goo(new(out var x), x);
                    }

                    void Foo(C c, int x) { }
                }
  Message: 
System.InvalidOperationException : concurrentTypeResolutions < 50

  Stack Trace: 
ThrowingTraceListener.Fail(String message, String detailMessage) line 26
TraceInternal.Fail(String message, String detailMessage)
Debug.Fail(String message, String detailMessage)
SourceLocalSymbol.get_TypeWithAnnotations() line 299
LocalSymbol.get_Type() line 73
Binder.BindNonMethod(SimpleNameSyntax node, Symbol symbol, BindingDiagnosticBag diagnostics, LookupResultKind resultKind, Boolean indexed, Boolean isError) line 2092
Binder.BindIdentifier(SimpleNameSyntax node, Boolean invoked, Boolean indexed, BindingDiagnosticBag diagnostics) line 1674
Binder.<BindExpressionInternal>g__bindExpressionInternal|349_0(ExpressionSyntax node, BindingDiagnosticBag diagnostics, Boolean invoked, Boolean indexed) line 628
Binder.BindExpressionInternal(ExpressionSyntax node, BindingDiagnosticBag diagnostics, Boolean invoked, Boolean indexed) line 586
Binder.BindExpressionAllowArgList(ExpressionSyntax node, BindingDiagnosticBag diagnostics) line 561
<1013 more frames...>
MethodCompiler.CompileMethodBodies(CSharpCompilation compilation, PEModuleBuilder moduleBeingBuiltOpt, Boolean emittingPdb, Boolean hasDeclarationErrors, Boolean emitMethodBodies, BindingDiagnosticBag diagnostics, Predicate`1 filterOpt, CancellationToken cancellationToken) line 160
CSharpCompilation.GetDiagnosticsForAllMethodBodies(BindingDiagnosticBag diagnostics, Boolean doLowering, CancellationToken cancellationToken) line 3104
CSharpCompilation.GetDiagnosticsWithoutSeverityFiltering(CompilationStage stage, Boolean includeEarlierStages, BindingDiagnosticBag builder, Predicate`1 symbolFilter, CancellationToken cancellationToken) line 3076
CSharpCompilation.GetDiagnostics(CompilationStage stage, Boolean includeEarlierStages, DiagnosticBag diagnostics, Predicate`1 symbolFilter, CancellationToken cancellationToken) line 2987
CSharpCompilation.GetDiagnostics(CompilationStage stage, Boolean includeEarlierStages, Predicate`1 symbolFilter, CancellationToken cancellationToken) line 2975
CSharpCompilation.GetDiagnostics(CancellationToken cancellationToken) line 2969
DiagnosticExtensions.VerifyDiagnostics[TCompilation](TCompilation c, DiagnosticDescription[] expected) line 108
OutVarTests.TestUsedInImplicitObjectCreation() line 36579
RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor)
MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr)

Several other examples are in: #80517

Metadata

Metadata

Assignees

Type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions