Skip to content

JIT ABI stress test: Assertions on Arm32 #68837

@steveharter

Description

@steveharter

Description

Changes made in #67917 are now causing test failures, although the issues are in the JIT not by that PR. The test failures started when that PR added support for DynamicMethod.Invoke() (which the JIT tests use) to use IL Emit to generate the code to perform the invoke (instead of native code).

Two asserts in 4 tests:

  • /JIT/Stress/ABI/tailcalls_d/
  • /JIT/Stress/ABI/tailcalls_do
  • /JIT/Stress/ABI/pinvokes_d/
  • /JIT/Stress/ABI/pinvokes_do

Reproduction Steps

Run the JIT Stress tests on Ubuntu ubuntu-18.04 arm32.

Expected behavior

No Asserts.

Actual behavior

Asserts:

Console log: 'JIT.Stress' from job 5ba38640-db46-4bf7-bdb9-98a085490bf7 (ubuntu.1804.armarch.open) using docker image mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-18.04-helix-arm32v7-bfcd90a-20200121150440 on ddvsotx2l132

<LINES REMOVED HERE>

  Starting:    JIT.Stress.XUnitWrapper (parallel test collections = on, max threads = 4)
    JIT/Stress/ABI/tailcalls_d/tailcalls_d.sh [FAIL]
      
      Assert failure(PID 85 [0x00000055], Thread: 85 [0x0055]): Assertion failed '!"NYI: odd sized struct in fgMorphMultiregStructArg"' in 'DynamicClass:InvokeStub_ABIStress_TailCallee2449(System.Object,System.Object,int):System.Object' during 'Morph - Global' (IL size 35; hash 0x87abd571; FullOpts)
      
          File: /__w/1/s/src/coreclr/jit/morph.cpp Line: 3919
          Image: /root/helix/work/correlation/corerun
      
      /root/helix/work/workitem/e/JIT/Stress/ABI/tailcalls_d/tailcalls_d.sh: line 401:    85 Aborted                 (core dumped) $LAUNCHER $ExePath "${CLRTestExecutionArguments[@]}"
      
      Return code:      1
      Raw output file:      /root/helix/work/workitem/uploads/Reports/JIT.Stress/ABI/tailcalls_d/tailcalls_d.output.txt
      Raw output:
      BEGIN EXECUTION
      /root/helix/work/correlation/corerun -p System.Reflection.Metadata.MetadataUpdater.IsSupported=false tailcalls_d.dll '--tailcalls' '--num-calls' '1000' '--no-ctrlc-summary'
      Stressing tailcalls
      OSVersion: Unix 4.9.140.0
      OSArchitecture: Arm64
      ProcessArchitecture: Arm
      Selecting armhf ABI.
      50 callers done (49 successful tailcalls tested)
      100 callers done (100 successful tailcalls tested)
      150 callers done (150 successful tailcalls tested)
      [createdump] Gathering state for process 85 corerun
      [createdump] Crashing thread 00000055 signal 00000006
      [createdump] Writing minidump with heap to file /home/helixbot/dotnetbuild/dumps/coredump.85.dmp
      [createdump] Written 84791296 bytes (20701 pages) to core file
      [createdump] Dump successfully written
      Expected: 100
      Actual: 134
      END EXECUTION - FAILED
      Test Harness Exitcode is : 1
      To run the test:
      > set CORE_ROOT=/root/helix/work/correlation
      > /root/helix/work/workitem/e/JIT/Stress/ABI/tailcalls_d/tailcalls_d.sh
      Expected: True
      Actual:   False
      Stack Trace:
           at JIT_Stress._ABI_tailcalls_d_tailcalls_d_._ABI_tailcalls_d_tailcalls_d_sh()
      Output:
        
        Assert failure(PID 85 [0x00000055], Thread: 85 [0x0055]): Assertion failed '!"NYI: odd sized struct in fgMorphMultiregStructArg"' in 'DynamicClass:InvokeStub_ABIStress_TailCallee2449(System.Object,System.Object,int):System.Object' during 'Morph - Global' (IL size 35; hash 0x87abd571; FullOpts)
        
            File: /__w/1/s/src/coreclr/jit/morph.cpp Line: 3919
            Image: /root/helix/work/correlation/corerun
        
        /root/helix/work/workitem/e/JIT/Stress/ABI/tailcalls_d/tailcalls_d.sh: line 401:    85 Aborted                 (core dumped) $LAUNCHER $ExePath "${CLRTestExecutionArguments[@]}"
        
        Return code:      1
        Raw output file:      /root/helix/work/workitem/uploads/Reports/JIT.Stress/ABI/tailcalls_d/tailcalls_d.output.txt
        Raw output:
        BEGIN EXECUTION
        /root/helix/work/correlation/corerun -p System.Reflection.Metadata.MetadataUpdater.IsSupported=false tailcalls_d.dll '--tailcalls' '--num-calls' '1000' '--no-ctrlc-summary'
        Stressing tailcalls
        OSVersion: Unix 4.9.140.0
        OSArchitecture: Arm64
        ProcessArchitecture: Arm
        Selecting armhf ABI.
        50 callers done (49 successful tailcalls tested)
        100 callers done (100 successful tailcalls tested)
        150 callers done (150 successful tailcalls tested)
        [createdump] Gathering state for process 85 corerun
        [createdump] Crashing thread 00000055 signal 00000006
        [createdump] Writing minidump with heap to file /home/helixbot/dotnetbuild/dumps/coredump.85.dmp
        [createdump] Written 84791296 bytes (20701 pages) to core file
        [createdump] Dump successfully written
        Expected: 100
        Actual: 134
        END EXECUTION - FAILED
        Test Harness Exitcode is : 1
        To run the test:
        > set CORE_ROOT=/root/helix/work/correlation
        > /root/helix/work/workitem/e/JIT/Stress/ABI/tailcalls_d/tailcalls_d.sh
      
      Assert failure(PID 82 [0x00000052], Thread: 82 [0x0052]): Assertion failed '!"NYI: odd sized struct in fgMorphMultiregStructArg"' in 'DynamicClass:InvokeStub_ABIStress_TailCallee2449(System.Object,System.Object,int):System.Object' during 'Morph - Global' (IL size 35; hash 0x87abd571; FullOpts)
      
          File: /__w/1/s/src/coreclr/jit/morph.cpp Line: 3919
          Image: /root/helix/work/correlation/corerun
      
      /root/helix/work/workitem/e/JIT/Stress/ABI/tailcalls_do/tailcalls_do.sh: line 401:    82 Aborted                 (core dumped) $LAUNCHER $ExePath "${CLRTestExecutionArguments[@]}"
      
      Return code:      1
      Raw output file:      /root/helix/work/workitem/uploads/Reports/JIT.Stress/ABI/tailcalls_do/tailcalls_do.output.txt
      Raw output:
      BEGIN EXECUTION
      /root/helix/work/correlation/corerun -p System.Reflection.Metadata.MetadataUpdater.IsSupported=false tailcalls_do.dll '--tailcalls' '--num-calls' '1000' '--no-ctrlc-summary'
      Stressing tailcalls
      OSVersion: Unix 4.9.140.0
      OSArchitecture: Arm64
      ProcessArchitecture: Arm
      Selecting armhf ABI.
      50 callers done (47 successful tailcalls tested)
      100 callers done (100 successful tailcalls tested)
      150 callers done (150 successful tailcalls tested)
      [createdump] Gathering state for process 82 corerun
      [createdump] Crashing thread 00000052 signal 00000006
      [createdump] Writing minidump with heap to file /home/helixbot/dotnetbuild/dumps/coredump.82.dmp
      [createdump] Written 83685376 bytes (20431 pages) to core file
      [createdump] Dump successfully written
      Expected: 100
      Actual: 134
      END EXECUTION - FAILED
      Test Harness Exitcode is : 1
      To run the test:
      > set CORE_ROOT=/root/helix/work/correlation
      > /root/helix/work/workitem/e/JIT/Stress/ABI/tailcalls_do/tailcalls_do.sh
      Expected: True
      Actual:   False
      Stack Trace:
    JIT/Stress/ABI/tailcalls_do/tailcalls_do.sh [FAIL]
           at JIT_Stress._ABI_tailcalls_do_tailcalls_do_._ABI_tailcalls_do_tailcalls_do_sh()
      Output:
        
        Assert failure(PID 82 [0x00000052], Thread: 82 [0x0052]): Assertion failed '!"NYI: odd sized struct in fgMorphMultiregStructArg"' in 'DynamicClass:InvokeStub_ABIStress_TailCallee2449(System.Object,System.Object,int):System.Object' during 'Morph - Global' (IL size 35; hash 0x87abd571; FullOpts)
        
            File: /__w/1/s/src/coreclr/jit/morph.cpp Line: 3919
            Image: /root/helix/work/correlation/corerun
        
        /root/helix/work/workitem/e/JIT/Stress/ABI/tailcalls_do/tailcalls_do.sh: line 401:    82 Aborted                 (core dumped) $LAUNCHER $ExePath "${CLRTestExecutionArguments[@]}"
        
        Return code:      1
        Raw output file:      /root/helix/work/workitem/uploads/Reports/JIT.Stress/ABI/tailcalls_do/tailcalls_do.output.txt
        Raw output:
        BEGIN EXECUTION
        /root/helix/work/correlation/corerun -p System.Reflection.Metadata.MetadataUpdater.IsSupported=false tailcalls_do.dll '--tailcalls' '--num-calls' '1000' '--no-ctrlc-summary'
        Stressing tailcalls
        OSVersion: Unix 4.9.140.0
        OSArchitecture: Arm64
        ProcessArchitecture: Arm
        Selecting armhf ABI.
        50 callers done (47 successful tailcalls tested)
        100 callers done (100 successful tailcalls tested)
        150 callers done (150 successful tailcalls tested)
        [createdump] Gathering state for process 82 corerun
        [createdump] Crashing thread 00000052 signal 00000006
        [createdump] Writing minidump with heap to file /home/helixbot/dotnetbuild/dumps/coredump.82.dmp
        [createdump] Written 83685376 bytes (20431 pages) to core file
        [createdump] Dump successfully written
        Expected: 100
        Actual: 134
        END EXECUTION - FAILED
        Test Harness Exitcode is : 1
        To run the test:
        > set CORE_ROOT=/root/helix/work/correlation
        > /root/helix/work/workitem/e/JIT/Stress/ABI/tailcalls_do/tailcalls_do.sh
    JIT/Stress/ABI/pinvokes_d/pinvokes_d.sh [FAIL]
      
      Assert failure(PID 80 [0x00000050], Thread: 80 [0x0050]): Assertion failed 'remainingSize == 4' in 'DynamicClass:InvokeStub_ABIStress_PInvokee727(System.Object,System.Object,int):System.Object' during 'Generate code' (IL size 146; hash 0x4b02a15f; FullOpts)
      
          File: /__w/1/s/src/coreclr/jit/codegenarmarch.cpp Line: 1127
          Image: /root/helix/work/correlation/corerun
      
      /root/helix/work/workitem/e/JIT/Stress/ABI/pinvokes_d/pinvokes_d.sh: line 401:    80 Aborted                 (core dumped) $LAUNCHER $ExePath "${CLRTestExecutionArguments[@]}"
      
      Return code:      1
      Raw output file:      /root/helix/work/workitem/uploads/Reports/JIT.Stress/ABI/pinvokes_d/pinvokes_d.output.txt
      Raw output:
      BEGIN EXECUTION
      /root/helix/work/correlation/corerun -p System.Reflection.Metadata.MetadataUpdater.IsSupported=false pinvokes_d.dll '--pinvokes' '--num-calls' '1000' '--no-ctrlc-summary'
      Stressing pinvokes
      OSVersion: Unix 4.9.140.0
      OSArchitecture: Arm64
      ProcessArchitecture: Arm
      Selecting armhf ABI.
      50 callers done
      100 callers done
      150 callers done
      200 callers done
      250 callers done
      300 callers done
      350 callers done
      400 callers done
      450 callers done
      [createdump] Gathering state for process 80 corerun
      [createdump] Crashing thread 00000050 signal 00000006
      [createdump] Writing minidump with heap to file /home/helixbot/dotnetbuild/dumps/coredump.80.dmp
      [createdump] Written 81850368 bytes (19983 pages) to core file
      [createdump] Dump successfully written
      Expected: 100
      Actual: 134
      END EXECUTION - FAILED
      Test Harness Exitcode is : 1
      To run the test:
      > set CORE_ROOT=/root/helix/work/correlation
      > /root/helix/work/workitem/e/JIT/Stress/ABI/pinvokes_d/pinvokes_d.sh
      Expected: True
      Actual:   False
      Stack Trace:
           at JIT_Stress._ABI_pinvokes_d_pinvokes_d_._ABI_pinvokes_d_pinvokes_d_sh()
      Output:
        
        Assert failure(PID 80 [0x00000050], Thread: 80 [0x0050]): Assertion failed 'remainingSize == 4' in 'DynamicClass:InvokeStub_ABIStress_PInvokee727(System.Object,System.Object,int):System.Object' during 'Generate code' (IL size 146; hash 0x4b02a15f; FullOpts)
        
            File: /__w/1/s/src/coreclr/jit/codegenarmarch.cpp Line: 1127
            Image: /root/helix/work/correlation/corerun
        
        /root/helix/work/workitem/e/JIT/Stress/ABI/pinvokes_d/pinvokes_d.sh: line 401:    80 Aborted                 (core dumped) $LAUNCHER $ExePath "${CLRTestExecutionArguments[@]}"
        
        Return code:      1
        Raw output file:      /root/helix/work/workitem/uploads/Reports/JIT.Stress/ABI/pinvokes_d/pinvokes_d.output.txt
        Raw output:
        BEGIN EXECUTION
        /root/helix/work/correlation/corerun -p System.Reflection.Metadata.MetadataUpdater.IsSupported=false pinvokes_d.dll '--pinvokes' '--num-calls' '1000' '--no-ctrlc-summary'
        Stressing pinvokes
        OSVersion: Unix 4.9.140.0
        OSArchitecture: Arm64
        ProcessArchitecture: Arm
        Selecting armhf ABI.
        50 callers done
        100 callers done
        150 callers done
        200 callers done
        250 callers done
        300 callers done
        350 callers done
        400 callers done
        450 callers done
        [createdump] Gathering state for process 80 corerun
        [createdump] Crashing thread 00000050 signal 00000006
        [createdump] Writing minidump with heap to file /home/helixbot/dotnetbuild/dumps/coredump.80.dmp
        [createdump] Written 81850368 bytes (19983 pages) to core file
        [createdump] Dump successfully written
        Expected: 100
        Actual: 134
        END EXECUTION - FAILED
        Test Harness Exitcode is : 1
        To run the test:
        > set CORE_ROOT=/root/helix/work/correlation
        > /root/helix/work/workitem/e/JIT/Stress/ABI/pinvokes_d/pinvokes_d.sh
    JIT/Stress/ABI/pinvokes_do/pinvokes_do.sh [FAIL]
      
      Assert failure(PID 121 [0x00000079], Thread: 121 [0x0079]): Assertion failed 'remainingSize == 4' in 'DynamicClass:InvokeStub_ABIStress_PInvokee727(System.Object,System.Object,int):System.Object' during 'Generate code' (IL size 146; hash 0x4b02a15f; FullOpts)
      
          File: /__w/1/s/src/coreclr/jit/codegenarmarch.cpp Line: 1127
          Image: /root/helix/work/correlation/corerun
      
      /root/helix/work/workitem/e/JIT/Stress/ABI/pinvokes_do/pinvokes_do.sh: line 401:   121 Aborted                 (core dumped) $LAUNCHER $ExePath "${CLRTestExecutionArguments[@]}"
      
      Return code:      1
      Raw output file:      /root/helix/work/workitem/uploads/Reports/JIT.Stress/ABI/pinvokes_do/pinvokes_do.output.txt
      Raw output:
      BEGIN EXECUTION
      /root/helix/work/correlation/corerun -p System.Reflection.Metadata.MetadataUpdater.IsSupported=false pinvokes_do.dll '--pinvokes' '--num-calls' '1000' '--no-ctrlc-summary'
      Stressing pinvokes
      OSVersion: Unix 4.9.140.0
      OSArchitecture: Arm64
      ProcessArchitecture: Arm
      Selecting armhf ABI.
      50 callers done
      100 callers done
      150 callers done
      200 callers done
      250 callers done
      300 callers done
      350 callers done
      400 callers done
      450 callers done
      [createdump] Gathering state for process 121 corerun
      [createdump] Crashing thread 00000079 signal 00000006
      [createdump] Writing minidump with heap to file /home/helixbot/dotnetbuild/dumps/coredump.121.dmp
      [createdump] Written 80670720 bytes (19695 pages) to core file
      [createdump] Dump successfully written
      Expected: 100
      Actual: 134
      END EXECUTION - FAILED
      Test Harness Exitcode is : 1
      To run the test:
      > set CORE_ROOT=/root/helix/work/correlation
      > /root/helix/work/workitem/e/JIT/Stress/ABI/pinvokes_do/pinvokes_do.sh
      Expected: True
      Actual:   False
      Stack Trace:
           at JIT_Stress._ABI_pinvokes_do_pinvokes_do_._ABI_pinvokes_do_pinvokes_do_sh()
      Output:
        
        Assert failure(PID 121 [0x00000079], Thread: 121 [0x0079]): Assertion failed 'remainingSize == 4' in 'DynamicClass:InvokeStub_ABIStress_PInvokee727(System.Object,System.Object,int):System.Object' during 'Generate code' (IL size 146; hash 0x4b02a15f; FullOpts)
        
            File: /__w/1/s/src/coreclr/jit/codegenarmarch.cpp Line: 1127
            Image: /root/helix/work/correlation/corerun
        
        /root/helix/work/workitem/e/JIT/Stress/ABI/pinvokes_do/pinvokes_do.sh: line 401:   121 Aborted                 (core dumped) $LAUNCHER $ExePath "${CLRTestExecutionArguments[@]}"
        
        Return code:      1
        Raw output file:      /root/helix/work/workitem/uploads/Reports/JIT.Stress/ABI/pinvokes_do/pinvokes_do.output.txt
        Raw output:
        BEGIN EXECUTION
        /root/helix/work/correlation/corerun -p System.Reflection.Metadata.MetadataUpdater.IsSupported=false pinvokes_do.dll '--pinvokes' '--num-calls' '1000' '--no-ctrlc-summary'
        Stressing pinvokes
        OSVersion: Unix 4.9.140.0
        OSArchitecture: Arm64
        ProcessArchitecture: Arm
        Selecting armhf ABI.
        50 callers done
        100 callers done
        150 callers done
        200 callers done
        250 callers done
        300 callers done
        350 callers done
        400 callers done
        450 callers done
        [createdump] Gathering state for process 121 corerun
        [createdump] Crashing thread 00000079 signal 00000006
        [createdump] Writing minidump with heap to file /home/helixbot/dotnetbuild/dumps/coredump.121.dmp
        [createdump] Written 80670720 bytes (19695 pages) to core file
        [createdump] Dump successfully written
        Expected: 100
        Actual: 134
        END EXECUTION - FAILED
        Test Harness Exitcode is : 1
        To run the test:
        > set CORE_ROOT=/root/helix/work/correlation
        > /root/helix/work/workitem/e/JIT/Stress/ABI/pinvokes_do/pinvokes_do.sh
  Finished:    JIT.Stress.XUnitWrapper
=== TEST EXECUTION SUMMARY ===
   JIT.Stress.XUnitWrapper  Total: 5, Errors: 0, Failed: 4, Skipped: 0, Time: 37.803s

Regression?

No response

Known Workarounds

No response

Configuration

docker image mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-18.04-helix-arm32v7-bfcd90a-20200121150440 on ddvsotx2l132

Other information

No response

Metadata

Metadata

Assignees

Labels

arch-arm32area-CodeGen-coreclrCLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMIbugdisabled-testThe test is disabled in source code against the issueos-linuxLinux OS (any supported distro)

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions