Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

flow into dotnet/runtime main blocked #66900

Closed
lewing opened this issue Feb 15, 2023 · 1 comment · Fixed by #66993
Closed

flow into dotnet/runtime main blocked #66900

lewing opened this issue Feb 15, 2023 · 1 comment · Fixed by #66993

Comments

@lewing
Copy link
Member

lewing commented Feb 15, 2023

Runtime hasn't taken a new roslyn build for several weeks, the failure described here is blocking code flow.

Version Used:

The roslyn flow into dotnet/runtime is breaking on dotnet/runtime#81164

Steps to Reproduce:

See linked issue

Diagnostic Id:

`src/libraries/System.Text.Json/tests/Common/TestClasses/TestClasses.Constructor.cs(2394,9): error CS8078: (NETCORE_ENGINEERING_TELEMETRY=Build) An expression is too long or complex to compile``

Expected Behavior:

See the discussion

Actual Behavior:

CS8078 when compiling a test that uses a 1000 parameter constructor

@dotnet-issue-labeler dotnet-issue-labeler bot added Area-Compilers untriaged Issues and PRs which have not yet been triaged by a lead labels Feb 15, 2023
@lewing lewing changed the title CS8078 when compiling a test that uses a 1000 parameter constructor flow into dotnet/runtime main blocked Feb 16, 2023
@jaredpar jaredpar added Bug and removed untriaged Issues and PRs which have not yet been triaged by a lead labels Feb 19, 2023
@jaredpar jaredpar added this to the 17.6 milestone Feb 19, 2023
@AlekseyTs
Copy link
Contributor

AlekseyTs commented Feb 21, 2023

I am not able to to reproduce the issue for a record with a 1000 parameters. Got an error for 1720 parameters, no error for 1710 parameters. Here are several top frames:

>	Microsoft.CodeAnalysis.dll!Microsoft.CodeAnalysis.StackGuard.EnsureSufficientExecutionStack(int recursionDepth) Line 29	C#
 	Microsoft.CodeAnalysis.CSharp.dll!Microsoft.CodeAnalysis.CSharp.CodeGen.CodeGenerator.EmitCondBranch(Microsoft.CodeAnalysis.CSharp.BoundExpression condition, ref object dest, bool sense) Line 363	C#
 	Microsoft.CodeAnalysis.CSharp.dll!Microsoft.CodeAnalysis.CSharp.CodeGen.CodeGenerator.EmitCondBranchCore(Microsoft.CodeAnalysis.CSharp.BoundExpression condition, ref object dest, bool sense) Line 450	C#
 	Microsoft.CodeAnalysis.CSharp.dll!Microsoft.CodeAnalysis.CSharp.CodeGen.CodeGenerator.EmitCondBranch(Microsoft.CodeAnalysis.CSharp.BoundExpression condition, ref object dest, bool sense) Line 365	C#
 	Microsoft.CodeAnalysis.CSharp.dll!Microsoft.CodeAnalysis.CSharp.CodeGen.CodeGenerator.EmitCondBranchCore(Microsoft.CodeAnalysis.CSharp.BoundExpression condition, ref object dest, bool sense) Line 450	C#
 	Microsoft.CodeAnalysis.CSharp.dll!Microsoft.CodeAnalysis.CSharp.CodeGen.CodeGenerator.EmitCondBranch(Microsoft.CodeAnalysis.CSharp.BoundExpression condition, ref object dest, bool sense) Line 365	C#
 	Microsoft.CodeAnalysis.CSharp.dll!Microsoft.CodeAnalysis.CSharp.CodeGen.CodeGenerator.EmitCondBranchCore(Microsoft.CodeAnalysis.CSharp.BoundExpression condition, ref object dest, bool sense) Line 450	C#
 	Microsoft.CodeAnalysis.CSharp.dll!Microsoft.CodeAnalysis.CSharp.CodeGen.CodeGenerator.EmitCondBranch(Microsoft.CodeAnalysis.CSharp.BoundExpression condition, ref object dest, bool sense) Line 365	C#
 	Microsoft.CodeAnalysis.CSharp.dll!Microsoft.CodeAnalysis.CSharp.CodeGen.CodeGenerator.EmitCondBranchCore(Microsoft.CodeAnalysis.CSharp.BoundExpression condition, ref object dest, bool sense) Line 450	C#
 	Microsoft.CodeAnalysis.CSharp.dll!Microsoft.CodeAnalysis.CSharp.CodeGen.CodeGenerator.EmitCondBranch(Microsoft.CodeAnalysis.CSharp.BoundExpression condition, ref object dest, bool sense) Line 365	C#
 	Microsoft.CodeAnalysis.CSharp.dll!Microsoft.CodeAnalysis.CSharp.CodeGen.CodeGenerator.EmitCondBranchCore(Microsoft.CodeAnalysis.CSharp.BoundExpression condition, ref object dest, bool sense) Line 450	C#
 	Microsoft.CodeAnalysis.CSharp.dll!Microsoft.CodeAnalysis.CSharp.CodeGen.CodeGenerator.EmitCondBranch(Microsoft.CodeAnalysis.CSharp.BoundExpression condition, ref object dest, bool sense) Line 365	C#
 	Microsoft.CodeAnalysis.CSharp.dll!Microsoft.CodeAnalysis.CSharp.CodeGen.CodeGenerator.EmitCondBranchCore(Microsoft.CodeAnalysis.CSharp.BoundExpression condition, ref object dest, bool sense) Line 450	C#
 	Microsoft.CodeAnalysis.CSharp.dll!Microsoft.CodeAnalysis.CSharp.CodeGen.CodeGenerator.EmitCondBranch(Microsoft.CodeAnalysis.CSharp.BoundExpression condition, ref object dest, bool sense) Line 365	C#
 	Microsoft.CodeAnalysis.CSharp.dll!Microsoft.CodeAnalysis.CSharp.CodeGen.CodeGenerator.EmitCondBranchCore(Microsoft.CodeAnalysis.CSharp.BoundExpression condition, ref object dest, bool sense) Line 450	C#
 	Microsoft.CodeAnalysis.CSharp.dll!Microsoft.CodeAnalysis.CSharp.CodeGen.CodeGenerator.EmitCondBranch(Microsoft.CodeAnalysis.CSharp.BoundExpression condition, ref object dest, bool sense) Line 365	C#
 	Microsoft.CodeAnalysis.CSharp.dll!Microsoft.CodeAnalysis.CSharp.CodeGen.CodeGenerator.EmitCondBranchCore(Microsoft.CodeAnalysis.CSharp.BoundExpression condition, ref object dest, bool sense) Line 450	C#
 	Microsoft.CodeAnalysis.CSharp.dll!Microsoft.CodeAnalysis.CSharp.CodeGen.CodeGenerator.EmitCondBranch(Microsoft.CodeAnalysis.CSharp.BoundExpression condition, ref object dest, bool sense) Line 365	C#
 	Microsoft.CodeAnalysis.CSharp.dll!Microsoft.CodeAnalysis.CSharp.CodeGen.CodeGenerator.EmitCondBranchCore(Microsoft.CodeAnalysis.CSharp.BoundExpression condition, ref object dest, bool sense) Line 450	C#
 	Microsoft.CodeAnalysis.CSharp.dll!Microsoft.CodeAnalysis.CSharp.CodeGen.CodeGenerator.EmitCondBranch(Microsoft.CodeAnalysis.CSharp.BoundExpression condition, ref object dest, bool sense) Line 365	C#
 	Microsoft.CodeAnalysis.CSharp.dll!Microsoft.CodeAnalysis.CSharp.CodeGen.CodeGenerator.EmitCondBranchCore(Microsoft.CodeAnalysis.CSharp.BoundExpression condition, ref object dest, bool sense) Line 450	C#
 	Microsoft.CodeAnalysis.CSharp.dll!Microsoft.CodeAnalysis.CSharp.CodeGen.CodeGenerator.EmitCondBranch(Microsoft.CodeAnalysis.CSharp.BoundExpression condition, ref object dest, bool sense) Line 365	C#
 	Microsoft.CodeAnalysis.CSharp.dll!Microsoft.CodeAnalysis.CSharp.CodeGen.CodeGenerator.EmitCondBranchCore(Microsoft.CodeAnalysis.CSharp.BoundExpression condition, ref object dest, bool sense) Line 450	C#
 	Microsoft.CodeAnalysis.CSharp.dll!Microsoft.CodeAnalysis.CSharp.CodeGen.CodeGenerator.EmitCondBranch(Microsoft.CodeAnalysis.CSharp.BoundExpression condition, ref object dest, bool sense) Line 365	C#
 	Microsoft.CodeAnalysis.CSharp.dll!Microsoft.CodeAnalysis.CSharp.CodeGen.CodeGenerator.EmitCondBranchCore(Microsoft.CodeAnalysis.CSharp.BoundExpression condition, ref object dest, bool sense) Line 450	C#
 	Microsoft.CodeAnalysis.CSharp.dll!Microsoft.CodeAnalysis.CSharp.CodeGen.CodeGenerator.EmitCondBranch(Microsoft.CodeAnalysis.CSharp.BoundExpression condition, ref object dest, bool sense) Line 365	C#
 	Microsoft.CodeAnalysis.CSharp.dll!Microsoft.CodeAnalysis.CSharp.CodeGen.CodeGenerator.EmitCondBranchCore(Microsoft.CodeAnalysis.CSharp.BoundExpression condition, ref object dest, bool sense) Line 450	C#
 	Microsoft.CodeAnalysis.CSharp.dll!Microsoft.CodeAnalysis.CSharp.CodeGen.CodeGenerator.EmitCondBranch(Microsoft.CodeAnalysis.CSharp.BoundExpression condition, ref object dest, bool sense) Line 365	C#
 	Microsoft.CodeAnalysis.CSharp.dll!Microsoft.CodeAnalysis.CSharp.CodeGen.CodeGenerator.EmitCondBranchCore(Microsoft.CodeAnalysis.CSharp.BoundExpression condition, ref object dest, bool sense) Line 450	C#
 	Microsoft.CodeAnalysis.CSharp.dll!Microsoft.CodeAnalysis.CSharp.CodeGen.CodeGenerator.EmitCondBranch(Microsoft.CodeAnalysis.CSharp.BoundExpression condition, ref object dest, bool sense) Line 365	C#
 	Microsoft.CodeAnalysis.CSharp.dll!Microsoft.CodeAnalysis.CSharp.CodeGen.CodeGenerator.EmitCondBranchCore(Microsoft.CodeAnalysis.CSharp.BoundExpression condition, ref object dest, bool sense) Line 450	C#
 	Microsoft.CodeAnalysis.CSharp.dll!Microsoft.CodeAnalysis.CSharp.CodeGen.CodeGenerator.EmitCondBranch(Microsoft.CodeAnalysis.CSharp.BoundExpression condition, ref object dest, bool sense) Line 365	C#
 	Microsoft.CodeAnalysis.CSharp.dll!Microsoft.CodeAnalysis.CSharp.CodeGen.CodeGenerator.EmitCondBranchCore(Microsoft.CodeAnalysis.CSharp.BoundExpression condition, ref object dest, bool sense) Line 450	C#
 	Microsoft.CodeAnalysis.CSharp.dll!Microsoft.CodeAnalysis.CSharp.CodeGen.CodeGenerator.EmitCondBranch(Microsoft.CodeAnalysis.CSharp.BoundExpression condition, ref object dest, bool sense) Line 365	C#

We are trying to emit synthesized System.Boolean ClassWithManyConstructorParameters.Equals(ClassWithManyConstructorParameters? other).

It doesn't look like EmitCondBranch or EmitCondBranchCore were modified since 2018. However, we do have a deep recursion while emitting deeply nested conditional expression. Should consider switching to an alternative emit strategy instead.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants