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

Test failure: JIT/Directed/tailcall/mutual_recursion/mutual_recursion.cmd #106601

Closed
v-wenyuxu opened this issue Aug 19, 2024 · 14 comments
Closed
Assignees
Labels
area-ILTools-coreclr blocking-clean-ci-optional Blocking optional rolling runs disabled-test The test is disabled in source code against the issue os-linux Linux OS (any supported distro)

Comments

@v-wenyuxu
Copy link

Failed in: runtime-coreclr ilasm 20240817.1

Failed tests:

coreclr linux arm Checked ilasmroundtrip @ (Debian.12.Arm32.Open)[email protected]/dotnet-buildtools/prereqs:debian-12-helix-arm32v7
    - JIT/Directed/tailcall/mutual_recursion/mutual_recursion.cmd
coreclr osx x64 Checked ilasmroundtrip @ OSX.1200.Amd64.Open
    - JIT/Directed/tailcall/mutual_recursion/mutual_recursion.cmd
coreclr linux arm64 Checked ilasmroundtrip @ (Ubuntu.2004.Arm64.Open)[email protected]/dotnet-buildtools/prereqs:ubuntu-20.04-helix-arm64v8
    - JIT/Directed/tailcall/mutual_recursion/mutual_recursion.cmd
coreclr osx arm64 Checked ilasmroundtrip @ OSX.1200.ARM64.Open
    - JIT/Directed/tailcall/mutual_recursion/mutual_recursion.cmd
coreclr windows x86 Checked ilasmroundtrip @ Windows.10.Amd64.Open
    - JIT/Directed/tailcall/mutual_recursion/mutual_recursion.cmd
coreclr windows x64 Checked ilasmroundtrip @ Windows.10.Amd64.Open
    - JIT/Directed/tailcall/mutual_recursion/mutual_recursion.cmd
coreclr linux x64 Checked ilasmroundtrip @ Ubuntu.2204.Amd64.Open
    - JIT/Directed/tailcall/mutual_recursion/mutual_recursion.cmd
coreclr windows arm64 Checked ilasmroundtrip @ Windows.11.Arm64.Open
    - JIT/Directed/tailcall/mutual_recursion/mutual_recursion.cmd

Error message:

 IL-RT/mutual_recursion.il(2418) : warning : Duplicate param name 'self@' in method '.ctor'
IL-RT/mutual_recursion.il(2935) : warning : Duplicate param name 'self@' in method '.ctor'
IL-RT/mutual_recursion.il(3399) : warning : Duplicate param name 'self@' in method '.ctor'
IL-RT/mutual_recursion.il(3863) : warning : Duplicate param name 'self@' in method '.ctor'
IL-RT/mutual_recursion.il(4327) : warning : Duplicate param name 'self@' in method '.ctor'
Unhandled exception. System.Exception: Incorrect method passed
   at [email protected](String methodName, Boolean worksOnlyOnNetCore5, Int32 iterationCount, FSharpFunc`2 cb)
   at Mutual_recursion.Driver.Start()
   at Mutual_recursion.main(String[] argv)
waitpid() returned successfully (wstatus 00000000) WEXITSTATUS 0 WTERMSIG 0
/root/helix/work/workitem/e/JIT/Directed/Directed_3/../tailcall/mutual_recursion/mutual_recursion.sh: line 453:  5935 Aborted                 (core dumped) $LAUNCHER $ExePath "${CLRTestExecutionArguments[@]}"

Return code:      1
Raw output file:      /root/helix/work/workitem/uploads/tailcall/mutual_recursion/output.txt
Raw output:
BEGIN EXECUTION

.NET IL Assembler.  Version 9.0.0-ci
Copyright (c) Microsoft Corporation.  All rights reserved.
Assembling 'IL-RT/mutual_recursion.il'  to EXE --> 'mutual_recursion.dll'
Source file is UNICODE

Assembled method Mutual_recursion�Point2D::CompareTo
Assembled method Mutual_recursion�Point2D::CompareTo
Assembled method Mutual_recursion�Point2D::CompareTo
Assembled method Mutual_recursion�Point2D::GetHashCode
Assembled method Mutual_recursion�Point2D::GetHashCode
Assembled method Mutual_recursion�Point2D::Equals
Assembled method Mutual_recursion�Point2D::Equals
Assembled method Mutual_recursion�Point2D::.ctor
Assembled method Mutual_recursion�Point2D::get_X
Assembled method Mutual_recursion�Point2D::get_Y
Assembled method Mutual_recursion�Point2D::Equals
Assembled method Mutual_recursion�Point2D::Equals
Assembled method Mutual_recursion�callee@30::.ctor
Assembled method Mutual_recursion�callee@30::Invoke
Assembled method Mutual_recursion�callee@30::.cctor
Assembled method Mutual_recursion�secondCallee@44::.ctor
Assembled method Mutual_recursion�secondCallee@44::Invoke
Assembled method Mutual_recursion�secondCallee@44::.cctor
Assembled method Mutual_recursion�thirdCallee@66::.ctor
Assembled method Mutual_recursion�thirdCallee@66::Invoke
Assembled method Mutual_recursion�thirdCallee@66::.cctor
Assembled method Mutual_recursion�thirdCallee@66D::.ctor
Assembled method Mutual_recursion�thirdCallee@66D::Invoke
Assembled method Mutual_recursion�fourthMethodFirstCallee@101::.ctor
Assembled method Mutual_recursion�fourthMethodFirstCallee@101::Invoke
Assembled method Mutual_recursion�fourthMethodSecondCallee@117::.ctor
Assembled method Mutual_recursion�fourthMethodSecondCallee@117::Invoke
Assembled method Mutual_recursion�fifthMethodFirstCallee@147::.ctor
Assembled method Mutual_recursion�fifthMethodFirstCallee@147::Invoke
Assembled method Mutual_recursion�fifthMethodFirstCallee@147D::.ctor
Assembled method Mutual_recursion�fifthMethodFirstCallee@147D::Invoke
Assembled method Mutual_recursion�fifthMethodSecondCallee@165::.ctor
Assembled method Mutual_recursion�fifthMethodSecondCallee@165::Invoke
Assembled method Mutual_recursion�fifthMethodSecondCallee@165D::.ctor
Assembled method Mutual_recursion�fifthMethodSecondCallee@165D::Invoke
Assembled method Mutual_recursion�sixthMethodFirstCallee@198::.ctor
Assembled method Mutual_recursion�sixthMethodFirstCallee@198::Invoke
Assembled method Mutual_recursion�sixthMethodFirstCallee@198D::.ctor
Assembled method Mutual_recursion�sixthMethodFirstCallee@198D::Invoke
Assembled method Mutual_recursion�sixthMethodSecondCallee@216::.ctor
Assembled method Mutual_recursion�sixthMethodSecondCallee@216::Invoke
Assembled method Mutual_recursion�seventhMethodFirstCallee@247::.ctor
Assembled method Mutual_recursion�seventhMethodFirstCallee@247::Invoke
Assembled 

Stack trace:

   at Xunit.Assert.True(Nullable`1 condition, String userMessage) in /_/src/Microsoft.DotNet.XUnitAssert/src/BooleanAsserts.cs:line 146
   at TestLibrary.OutOfProcessTest.RunOutOfProcessTest(String assemblyPath, String testPathPrefix)
   at Program.<<Main>$>g__TestExecutor241|0_242(StreamWriter tempLogSw, StreamWriter statsCsvSw, <>c__DisplayClass0_0& A_2)
@v-wenyuxu v-wenyuxu added arch-arm32 os-linux Linux OS (any supported distro) blocking-clean-ci-optional Blocking optional rolling runs labels Aug 19, 2024
@dotnet-issue-labeler dotnet-issue-labeler bot added the needs-area-label An area label is needed to ensure this gets routed to the appropriate area owners label Aug 19, 2024
@dotnet-policy-service dotnet-policy-service bot added the untriaged New issue has not been triaged by the area owner label Aug 19, 2024
@jakobbotsch jakobbotsch added area-ILTools-coreclr and removed needs-area-label An area label is needed to ensure this gets routed to the appropriate area owners untriaged New issue has not been triaged by the area owner labels Aug 19, 2024
Copy link
Contributor

Tagging subscribers to this area: @JulieLeeMSFT
See info in area-owners.md if you want to be subscribed.

@jkotas
Copy link
Member

jkotas commented Aug 19, 2024

This test started to have issues on arm32 without IL ilasm roundtripping as well: #106603 .

@v-wenyuxu
Copy link
Author

Failed in: runtime-coreclr ilasm 20240824.1

Failed tests:

coreclr linux arm Checked ilasmroundtrip @ (Debian.12.Arm32.Open)[email protected]/dotnet-buildtools/prereqs:debian-12-helix-arm32v7
    - JIT/Directed/tailcall/mutual_recursion/mutual_recursion.cmd
coreclr linux arm64 Checked ilasmroundtrip @ (Ubuntu.2004.Arm64.Open)[email protected]/dotnet-buildtools/prereqs:ubuntu-20.04-helix-arm64v8
    - JIT/Directed/tailcall/mutual_recursion/mutual_recursion.cmd
coreclr osx x64 Checked ilasmroundtrip @ OSX.1200.Amd64.Open
    - JIT/Directed/tailcall/mutual_recursion/mutual_recursion.cmd
coreclr windows x64 Checked ilasmroundtrip @ Windows.10.Amd64.Open
    - JIT/Directed/tailcall/mutual_recursion/mutual_recursion.cmd
coreclr windows x86 Checked ilasmroundtrip @ Windows.10.Amd64.Open
    - JIT/Directed/tailcall/mutual_recursion/mutual_recursion.cmd
coreclr linux x64 Checked ilasmroundtrip @ Ubuntu.2204.Amd64.Open
    - JIT/Directed/tailcall/mutual_recursion/mutual_recursion.cmd
coreclr windows arm64 Checked ilasmroundtrip @ Windows.11.Arm64.Open
    - JIT/Directed/tailcall/mutual_recursion/mutual_recursion.cmd
coreclr osx arm64 Checked ilasmroundtrip @ OSX.1200.ARM64.Open
    - JIT/Directed/tailcall/mutual_recursion/mutual_recursion.cmd

Error message:

 IL-RT/mutual_recursion.il(2418) : warning : Duplicate param name 'self@' in method '.ctor'
IL-RT/mutual_recursion.il(2935) : warning : Duplicate param name 'self@' in method '.ctor'
IL-RT/mutual_recursion.il(3399) : warning : Duplicate param name 'self@' in method '.ctor'
IL-RT/mutual_recursion.il(3863) : warning : Duplicate param name 'self@' in method '.ctor'
IL-RT/mutual_recursion.il(4327) : warning : Duplicate param name 'self@' in method '.ctor'
Unhandled exception. System.Exception: Incorrect method passed
   at [email protected](String methodName, Boolean worksOnlyOnNetCore5, Int32 iterationCount, FSharpFunc`2 cb)
   at Mutual_recursion.Driver.Start()
   at Mutual_recursion.main(String[] argv)
waitpid() returned successfully (wstatus 00000000) WEXITSTATUS 0 WTERMSIG 0
/root/helix/work/workitem/e/JIT/Directed/Directed_3/../tailcall/mutual_recursion/mutual_recursion.sh: line 454:  5935 Aborted                 (core dumped) $LAUNCHER $ExePath "${CLRTestExecutionArguments[@]}"

Return code:      1
Raw output file:      /root/helix/work/workitem/uploads/tailcall/mutual_recursion/output.txt
Raw output:
BEGIN EXECUTION

.NET IL Assembler.  Version 10.0.0-ci
Copyright (c) Microsoft Corporation.  All rights reserved.
Assembling 'IL-RT/mutual_recursion.il'  to EXE --> 'mutual_recursion.dll'
Source file is UNICODE

Assembled method Mutual_recursion�Point2D::CompareTo
Assembled method Mutual_recursion�Point2D::CompareTo
Assembled method Mutual_recursion�Point2D::CompareTo
Assembled method Mutual_recursion�Point2D::GetHashCode
Assembled method Mutual_recursion�Point2D::GetHashCode
Assembled method Mutual_recursion�Point2D::Equals
Assembled method Mutual_recursion�Point2D::Equals
Assembled method Mutual_recursion�Point2D::.ctor
Assembled method Mutual_recursion�Point2D::get_X
Assembled method Mutual_recursion�Point2D::get_Y
Assembled method Mutual_recursion�Point2D::Equals
Assembled method Mutual_recursion�Point2D::Equals
Assembled method Mutual_recursion�callee@30::.ctor
Assembled method Mutual_recursion�callee@30::Invoke
Assembled method Mutual_recursion�callee@30::.cctor
Assembled method Mutual_recursion�secondCallee@44::.ctor
Assembled method Mutual_recursion�secondCallee@44::Invoke
Assembled method Mutual_recursion�secondCallee@44::.cctor
Assembled method Mutual_recursion�thirdCallee@66::.ctor
Assembled method Mutual_recursion�thirdCallee@66::Invoke
Assembled method Mutual_recursion�thirdCallee@66::.cctor
Assembled method Mutual_recursion�thirdCallee@66D::.ctor
Assembled method Mutual_recursion�thirdCallee@66D::Invoke
Assembled method Mutual_recursion�fourthMethodFirstCallee@101::.ctor
Assembled method Mutual_recursion�fourthMethodFirstCallee@101::Invoke
Assembled method Mutual_recursion�fourthMethodSecondCallee@117::.ctor
Assembled method Mutual_recursion�fourthMethodSecondCallee@117::Invoke
Assembled method Mutual_recursion�fifthMethodFirstCallee@147::.ctor
Assembled method Mutual_recursion�fifthMethodFirstCallee@147::Invoke
Assembled method Mutual_recursion�fifthMethodFirstCallee@147D::.ctor
Assembled method Mutual_recursion�fifthMethodFirstCallee@147D::Invoke
Assembled method Mutual_recursion�fifthMethodSecondCallee@165::.ctor
Assembled method Mutual_recursion�fifthMethodSecondCallee@165::Invoke
Assembled method Mutual_recursion�fifthMethodSecondCallee@165D::.ctor
Assembled method Mutual_recursion�fifthMethodSecondCallee@165D::Invoke
Assembled method Mutual_recursion�sixthMethodFirstCallee@198::.ctor
Assembled method Mutual_recursion�sixthMethodFirstCallee@198::Invoke
Assembled method Mutual_recursion�sixthMethodFirstCallee@198D::.ctor
Assembled method Mutual_recursion�sixthMethodFirstCallee@198D::Invoke
Assembled method Mutual_recursion�sixthMethodSecondCallee@216::.ctor
Assembled method Mutual_recursion�sixthMethodSecondCallee@216::Invoke
Assembled method Mutual_recursion�seventhMethodFirstCallee@247::.ctor
Assembled method Mutual_recursion�seventhMethodFirstCallee@247::Invoke
Assembled

Stack trace:

   at Xunit.Assert.True(Nullable`1 condition, String userMessage) in /_/src/Microsoft.DotNet.XUnitAssert/src/BooleanAsserts.cs:line 146
   at TestLibrary.OutOfProcessTest.RunOutOfProcessTest(String assemblyPath, String testPathPrefix)
   at Program.<<Main>$>g__TestExecutor241|0_242(StreamWriter tempLogSw, StreamWriter statsCsvSw, <>c__DisplayClass0_0& A_2)

@jakobbotsch
Copy link
Member

This is an F# test and the IL codegen for it changed significantly with preview 7 fsc, so that explains why we suddenly saw both test failures.

@v-wenyuxu
Copy link
Author

Failed in: runtime-coreclr ilasm 20240831.1

Failed tests:

coreclr linux arm Checked ilasmroundtrip @ (Debian.12.Arm32.Open)[email protected]/dotnet-buildtools/prereqs:debian-12-helix-arm32v7
    - JIT/Directed/tailcall/mutual_recursion/mutual_recursion.cmd

Error message:

 IL-RT/mutual_recursion.il(2418) : warning : Duplicate param name 'self@' in method '.ctor'
IL-RT/mutual_recursion.il(2935) : warning : Duplicate param name 'self@' in method '.ctor'
IL-RT/mutual_recursion.il(3399) : warning : Duplicate param name 'self@' in method '.ctor'
IL-RT/mutual_recursion.il(3863) : warning : Duplicate param name 'self@' in method '.ctor'
IL-RT/mutual_recursion.il(4327) : warning : Duplicate param name 'self@' in method '.ctor'
Unhandled exception. System.Exception: Incorrect method passed
   at [email protected](String methodName, Boolean worksOnlyOnNetCore5, Int32 iterationCount, FSharpFunc`2 cb)
   at Mutual_recursion.Driver.Start()
   at Mutual_recursion.main(String[] argv)
waitpid() returned successfully (wstatus 00000000) WEXITSTATUS 0 WTERMSIG 0
/root/helix/work/workitem/e/JIT/Directed/Directed_3/../tailcall/mutual_recursion/mutual_recursion.sh: line 460:  5936 Aborted                 (core dumped) $LAUNCHER $ExePath "${CLRTestExecutionArguments[@]}"

Return code:      1
Raw output file:      /root/helix/work/workitem/uploads/tailcall/mutual_recursion/output.txt
Raw output:
BEGIN EXECUTION

.NET IL Assembler.  Version 10.0.0-ci
Copyright (c) Microsoft Corporation.  All rights reserved.
Assembling 'IL-RT/mutual_recursion.il'  to EXE --> 'mutual_recursion.dll'
Source file is UNICODE

Assembled method Mutual_recursion�Point2D::CompareTo
Assembled method Mutual_recursion�Point2D::CompareTo
Assembled method Mutual_recursion�Point2D::CompareTo
Assembled method Mutual_recursion�Point2D::GetHashCode
Assembled method Mutual_recursion�Point2D::GetHashCode
Assembled method Mutual_recursion�Point2D::Equals
Assembled method Mutual_recursion�Point2D::Equals
Assembled method Mutual_recursion�Point2D::.ctor
Assembled method Mutual_recursion�Point2D::get_X
Assembled method Mutual_recursion�Point2D::get_Y
Assembled method Mutual_recursion�Point2D::Equals
Assembled method Mutual_recursion�Point2D::Equals
Assembled method Mutual_recursion�callee@30::.ctor
Assembled method Mutual_recursion�callee@30::Invoke
Assembled method Mutual_recursion�callee@30::.cctor
Assembled method Mutual_recursion�secondCallee@44::.ctor
Assembled method Mutual_recursion�secondCallee@44::Invoke
Assembled method Mutual_recursion�secondCallee@44::.cctor
Assembled method Mutual_recursion�thirdCallee@66::.ctor
Assembled method Mutual_recursion�thirdCallee@66::Invoke
Assembled method Mutual_recursion�thirdCallee@66::.cctor
Assembled method Mutual_recursion�thirdCallee@66D::.ctor
Assembled method Mutual_recursion�thirdCallee@66D::Invoke
Assembled method Mutual_recursion�fourthMethodFirstCallee@101::.ctor
Assembled method Mutual_recursion�fourthMethodFirstCallee@101::Invoke
Assembled method Mutual_recursion�fourthMethodSecondCallee@117::.ctor
Assembled method Mutual_recursion�fourthMethodSecondCallee@117::Invoke
Assembled method Mutual_recursion�fifthMethodFirstCallee@147::.ctor
Assembled method Mutual_recursion�fifthMethodFirstCallee@147::Invoke
Assembled method Mutual_recursion�fifthMethodFirstCallee@147D::.ctor
Assembled method Mutual_recursion�fifthMethodFirstCallee@147D::Invoke
Assembled method Mutual_recursion�fifthMethodSecondCallee@165::.ctor
Assembled method Mutual_recursion�fifthMethodSecondCallee@165::Invoke
Assembled method Mutual_recursion�fifthMethodSecondCallee@165D::.ctor
Assembled method Mutual_recursion�fifthMethodSecondCallee@165D::Invoke
Assembled method Mutual_recursion�sixthMethodFirstCallee@198::.ctor
Assembled method Mutual_recursion�sixthMethodFirstCallee@198::Invoke
Assembled method Mutual_recursion�sixthMethodFirstCallee@198D::.ctor
Assembled method Mutual_recursion�sixthMethodFirstCallee@198D::Invoke
Assembled method Mutual_recursion�sixthMethodSecondCallee@216::.ctor
Assembled method Mutual_recursion�sixthMethodSecondCallee@216::Invoke
Assembled method Mutual_recursion�seventhMethodFirstCallee@247::.ctor
Assembled method Mutual_recursion�seventhMethodFirstCallee@247::Invoke
Assembled

Stack trace:

   at Xunit.Assert.True(Nullable`1 condition, String userMessage) in /_/src/Microsoft.DotNet.XUnitAssert/src/BooleanAsserts.cs:line 146
   at TestLibrary.OutOfProcessTest.RunOutOfProcessTest(String assemblyPath, String testPathPrefix)
   at Program.<<Main>$>g__TestExecutor241|0_242(StreamWriter tempLogSw, StreamWriter statsCsvSw, <>c__DisplayClass0_0& A_2)

@BruceForstall BruceForstall self-assigned this Sep 5, 2024
BruceForstall added a commit to BruceForstall/runtime that referenced this issue Sep 5, 2024
@JulieLeeMSFT JulieLeeMSFT added the disabled-test The test is disabled in source code against the issue label Sep 5, 2024
@v-wenyuxu
Copy link
Author

Failed in: runtime-coreclr ilasm 20240907.1

Failed tests:

coreclr linux arm Checked ilasmroundtrip @ (Debian.12.Arm32.Open)[email protected]/dotnet-buildtools/prereqs:debian-12-helix-arm32v7
    - JIT/Directed/tailcall/mutual_recursion/mutual_recursion.cmd
coreclr linux arm64 Checked ilasmroundtrip @ (Ubuntu.2004.Arm64.Open)[email protected]/dotnet-buildtools/prereqs:ubuntu-20.04-helix-arm64v8
    - JIT/Directed/tailcall/mutual_recursion/mutual_recursion.cmd
coreclr osx x64 Checked ilasmroundtrip @ OSX.1200.Amd64.Open
    - JIT/Directed/tailcall/mutual_recursion/mutual_recursion.cmd
coreclr windows x86 Checked ilasmroundtrip @ Windows.10.Amd64.Open
    - JIT/Directed/tailcall/mutual_recursion/mutual_recursion.cmd
coreclr windows x64 Checked ilasmroundtrip @ Windows.10.Amd64.Open
    - JIT/Directed/tailcall/mutual_recursion/mutual_recursion.cmd
coreclr linux x64 Checked ilasmroundtrip @ Ubuntu.2204.Amd64.Open
    - JIT/Directed/tailcall/mutual_recursion/mutual_recursion.cmd
coreclr windows arm64 Checked ilasmroundtrip @ Windows.11.Arm64.Open
    - JIT/Directed/tailcall/mutual_recursion/mutual_recursion.cmd
coreclr osx arm64 Checked ilasmroundtrip @ OSX.1200.ARM64.Open
    - JIT/Directed/tailcall/mutual_recursion/mutual_recursion.cmd

Error message:

 IL-RT/mutual_recursion.il(2418) : warning : Duplicate param name 'self@' in method '.ctor'
IL-RT/mutual_recursion.il(2935) : warning : Duplicate param name 'self@' in method '.ctor'
IL-RT/mutual_recursion.il(3399) : warning : Duplicate param name 'self@' in method '.ctor'
IL-RT/mutual_recursion.il(3863) : warning : Duplicate param name 'self@' in method '.ctor'
IL-RT/mutual_recursion.il(4327) : warning : Duplicate param name 'self@' in method '.ctor'
Unhandled exception. System.Exception: Incorrect method passed
   at [email protected](String methodName, Boolean worksOnlyOnNetCore5, Int32 iterationCount, FSharpFunc`2 cb)
   at Mutual_recursion.Driver.Start()
   at Mutual_recursion.main(String[] argv)
waitpid() returned successfully (wstatus 00000000) WEXITSTATUS 0 WTERMSIG 0
/root/helix/work/workitem/e/JIT/Directed/Directed_3/../tailcall/mutual_recursion/mutual_recursion.sh: line 461:  5933 Aborted                 (core dumped) $LAUNCHER $ExePath "${CLRTestExecutionArguments[@]}"

Return code:      1
Raw output file:      /root/helix/work/workitem/uploads/tailcall/mutual_recursion/output.txt
Raw output:
BEGIN EXECUTION

.NET IL Assembler.  Version 10.0.0-ci
Copyright (c) Microsoft Corporation.  All rights reserved.
Assembling 'IL-RT/mutual_recursion.il'  to EXE --> 'mutual_recursion.dll'
Source file is UNICODE

Assembled method Mutual_recursion�Point2D::CompareTo
Assembled method Mutual_recursion�Point2D::CompareTo
Assembled method Mutual_recursion�Point2D::CompareTo
Assembled method Mutual_recursion�Point2D::GetHashCode
Assembled method Mutual_recursion�Point2D::GetHashCode
Assembled method Mutual_recursion�Point2D::Equals
Assembled method Mutual_recursion�Point2D::Equals
Assembled method Mutual_recursion�Point2D::.ctor
Assembled method Mutual_recursion�Point2D::get_X
Assembled method Mutual_recursion�Point2D::get_Y
Assembled method Mutual_recursion�Point2D::Equals
Assembled method Mutual_recursion�Point2D::Equals
Assembled method Mutual_recursion�callee@30::.ctor
Assembled method Mutual_recursion�callee@30::Invoke
Assembled method Mutual_recursion�callee@30::.cctor
Assembled method Mutual_recursion�secondCallee@44::.ctor
Assembled method Mutual_recursion�secondCallee@44::Invoke
Assembled method Mutual_recursion�secondCallee@44::.cctor
Assembled method Mutual_recursion�thirdCallee@66::.ctor
Assembled method Mutual_recursion�thirdCallee@66::Invoke
Assembled method Mutual_recursion�thirdCallee@66::.cctor
Assembled method Mutual_recursion�thirdCallee@66D::.ctor
Assembled method Mutual_recursion�thirdCallee@66D::Invoke
Assembled method Mutual_recursion�fourthMethodFirstCallee@101::.ctor
Assembled method Mutual_recursion�fourthMethodFirstCallee@101::Invoke
Assembled method Mutual_recursion�fourthMethodSecondCallee@117::.ctor
Assembled method Mutual_recursion�fourthMethodSecondCallee@117::Invoke
Assembled method Mutual_recursion�fifthMethodFirstCallee@147::.ctor
Assembled method Mutual_recursion�fifthMethodFirstCallee@147::Invoke
Assembled method Mutual_recursion�fifthMethodFirstCallee@147D::.ctor
Assembled method Mutual_recursion�fifthMethodFirstCallee@147D::Invoke
Assembled method Mutual_recursion�fifthMethodSecondCallee@165::.ctor
Assembled method Mutual_recursion�fifthMethodSecondCallee@165::Invoke
Assembled method Mutual_recursion�fifthMethodSecondCallee@165D::.ctor
Assembled method Mutual_recursion�fifthMethodSecondCallee@165D::Invoke
Assembled method Mutual_recursion�sixthMethodFirstCallee@198::.ctor
Assembled method Mutual_recursion�sixthMethodFirstCallee@198::Invoke
Assembled method Mutual_recursion�sixthMethodFirstCallee@198D::.ctor
Assembled method Mutual_recursion�sixthMethodFirstCallee@198D::Invoke
Assembled method Mutual_recursion�sixthMethodSecondCallee@216::.ctor
Assembled method Mutual_recursion�sixthMethodSecondCallee@216::Invoke
Assembled method Mutual_recursion�seventhMethodFirstCallee@247::.ctor
Assembled method Mutual_recursion�seventhMethodFirstCallee@247::Invoke
Assembled

Stack trace:

   at Xunit.Assert.True(Nullable`1 condition, String userMessage) in /_/src/Microsoft.DotNet.XUnitAssert/src/BooleanAsserts.cs:line 146
   at TestLibrary.OutOfProcessTest.RunOutOfProcessTest(String assemblyPath, String testPathPrefix)
   at Program.<<Main>$>g__TestExecutor241|0_242(StreamWriter tempLogSw, StreamWriter statsCsvSw, <>c__DisplayClass0_0& A_2)

@BruceForstall
Copy link
Member

F# issue: dotnet/fsharp#17607

@BruceForstall
Copy link
Member

@KevinRansom This is the mutual_recursion test issue for our ildasm/ilasm round-trip test. The test fails with an exception:

Unhandled exception. System.Exception: Incorrect method passed
   at [email protected](String methodName, Boolean worksOnlyOnNetCore5, Int32 iterationCount, FSharpFunc`2 cb)
   at Mutual_recursion.Driver.Start()
   at Mutual_recursion.main(String[] argv)

The test emits warnings now; I don't know if those are new, or related to the failure:

IL-RT/mutual_recursion.il(2418) : warning : Duplicate param name 'self@' in method '.ctor'
IL-RT/mutual_recursion.il(2935) : warning : Duplicate param name 'self@' in method '.ctor'
IL-RT/mutual_recursion.il(3399) : warning : Duplicate param name 'self@' in method '.ctor'
IL-RT/mutual_recursion.il(3863) : warning : Duplicate param name 'self@' in method '.ctor'
IL-RT/mutual_recursion.il(4327) : warning : Duplicate param name 'self@' in method '.ctor'

These are generated by ilasm when trying to assemble the IL created by ildasm. For example, here's a signature:

.method assembly specialname rtspecialname
            instance void  .ctor(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2<int32,int32> seventhMethodSecondCallee,
                                 class Mutual_recursion/seventhMethodFirstCallee@247 self@,
                                 int32 iterationCount,
                                 int32 firstArg,
                                 int32 secondArg,
                                 int32 thirdArg,
                                 int32 fourthArg,
                                 class Mutual_recursion/seventhMethodFirstCallee@247D self@,
                                 int32 fifthArg,
                                 int32 sixthArg,
                                 int32 seventhArg,
                                 int32 eighthArg,
                                 int32 ninthArg) cil managed

To repro this:

cd c:\gh\runtime\artifacts\tests\coreclr\windows.x64.Checked\JIT\Directed\tailcall\mutual_recursion
del /f mutual_recursion.il
c:\gh\runtime\artifacts\tests\coreclr\windows.x64.Checked\Tests\Core_Root\ildasm.exe -unicode -out=mutual_recursion.il mutual_recursion.dll
c:\gh\runtime\artifacts\tests\coreclr\windows.x64.Checked\Tests\Core_Root\ilasm.exe  -output=mutual_recursion_rt.dll  mutual_recursion.il
c:\gh\runtime\artifacts\tests\coreclr\windows.x64.Checked\Tests\Core_Root\corerun.exe mutual_recursion_rt.dll

Do you expect dotnet/fsharp#17613 (or whatever PR results from that investigation) will fix this issue?

@vzarytovskii
Copy link
Member

We have reverted codegen (switched to previous one) for the release.

@BruceForstall
Copy link
Member

We have reverted codegen (switched to previous one) for the release.

@vzarytovskii I'm not sure how we pick up the F# compiler that is used to build the dotnet/runtime tests (or how to plug in a new/different/fixed F# compiler). Could you verify that the reverted F# codegen fixes this test? (which requires building the F# compiler then doing ildasm/ilasm/corerun.exe)

@vzarytovskii
Copy link
Member

I will try to get to in this week

@KevinRansom
Copy link
Member

@BruceForstall

I believe the issue is the same as issue 17613 it is my current work item

You should be able to switch back to the old codegen by adding <RealSig>false</RealSig> to the project file.

Let me know if this works for you.

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <!-- Needed for JitOptimizationSensitive -->
    <RequiresProcessIsolation>true</RequiresProcessIsolation>
 
    <!-- Not even printf is AOT compatible in F# -->
    <NativeAotIncompatible>true</NativeAotIncompatible>
 
    <!-- Test is slow enough to time out under GC stress -->
    <GCStressIncompatible>true</GCStressIncompatible>
    <RealSig>false</RealSig>
  </PropertyGroup>
  <PropertyGroup>
    <Optimize>True</Optimize>
    <JitOptimizationSensitive>True</JitOptimizationSensitive>
    <TargetFramework>$(NetCoreAppToolCurrent)</TargetFramework>
  </PropertyGroup>
  <ItemGroup>
    <Compile Include="mutual_recursion.fs" />
  </ItemGroup>
</Project>

@BruceForstall
Copy link
Member

@KevinRansom Adding <RealSig>false</RealSig> to the project file fixes the ildasm/ilasm round-trip test case failure.

fyi, the ildasm generated .il file is 1,120,634 bytes beforehand, but only 369,314 with <RealSig>false</RealSig>.

BruceForstall added a commit to BruceForstall/runtime that referenced this issue Sep 11, 2024
An F# compiler change caused significant generated IL change and
an ildasm/ilasm round-trip test failure. Adding
`<RealSig>false</RealSig>` reverts to the previous F# codegen
and fixes the problem.

Tracking: dotnet#106601
BruceForstall added a commit that referenced this issue Sep 12, 2024
An F# compiler change caused significant generated IL change and
an ildasm/ilasm round-trip test failure. Adding
`<RealSig>false</RealSig>` reverts to the previous F# codegen
and fixes the problem.

Tracking: #106601
@BruceForstall
Copy link
Member

Fixed (worked around) by #107692

jtschuster pushed a commit to jtschuster/runtime that referenced this issue Sep 17, 2024
An F# compiler change caused significant generated IL change and
an ildasm/ilasm round-trip test failure. Adding
`<RealSig>false</RealSig>` reverts to the previous F# codegen
and fixes the problem.

Tracking: dotnet#106601
sirntar pushed a commit to sirntar/runtime that referenced this issue Sep 30, 2024
An F# compiler change caused significant generated IL change and
an ildasm/ilasm round-trip test failure. Adding
`<RealSig>false</RealSig>` reverts to the previous F# codegen
and fixes the problem.

Tracking: dotnet#106601
@github-actions github-actions bot locked and limited conversation to collaborators Oct 13, 2024
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
area-ILTools-coreclr blocking-clean-ci-optional Blocking optional rolling runs disabled-test The test is disabled in source code against the issue os-linux Linux OS (any supported distro)
Projects
None yet
Development

No branches or pull requests

7 participants