rust icon indicating copy to clipboard operation
rust copied to clipboard

Actually abort in -Zpanic-abort-tests

Open tmandry opened this issue 1 year ago • 27 comments

When a test fails in panic=abort, it can be useful to have a debugger or other tooling hook into the abort() call for debugging. Doing this some other way would require it to hard code details of Rust's panic machinery.

There's no reason we couldn't have done this in the first place; using a single exit code for "success" or "failed" was just simpler. Now we are aware of the special exit codes for posix and windows platforms, logging a special error if an unrecognized code is used on those platforms, and falling back to just "failure" on other platforms.

This continues to account for #[should_panic] inside the test process itself, so there's no risk of misinterpreting a random call to abort() as an expected panic. Any exit code besides TR_OK is logged as a test failure.

As an added benefit, this would allow us to support panic=immediate_abort (but not #[should_panic]), without noise about unexpected exit codes when a test fails.

tmandry avatar Jan 25 '24 00:01 tmandry

r? @Mark-Simulacrum

(rustbot has picked a reviewer for you, use r? to override)

rustbot avatar Jan 25 '24 00:01 rustbot

Testing windows support..

@bors try

tmandry avatar Jan 25 '24 00:01 tmandry

r? libs

tmandry avatar Jan 25 '24 00:01 tmandry

:hourglass: Trying commit bb332f3e25047d0afbb3f4bb21fb9b07134edd5e with merge 11f3f41d92249726a484f4e9b039bfdd4373de49...

bors avatar Jan 25 '24 00:01 bors

The job x86_64-msvc failed! Check out the build log: (web) (plain)

Click to see the possible cause of the failure (guessed by this bot)
Updating files:  99% (44755/45207)
Updating files:  99% (44815/45207)
Updating files: 100% (45207/45207)
Updating files: 100% (45207/45207), done.
branch 'try' set up to track 'origin/try'.
Switched to a new branch 'try'
[command]"C:\Program Files\Git\bin\git.exe" log -1 --format='%H'
'11f3f41d92249726a484f4e9b039bfdd4373de49'
##[group]Run src/ci/scripts/setup-environment.sh
src/ci/scripts/setup-environment.sh
---
file:.git/config remote.origin.url=https://github.com/rust-lang-ci/rust
file:.git/config remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
file:.git/config gc.auto=0
file:.git/config http.https://github.com/.extraheader=AUTHORIZATION: basic ***
file:.git/config branch.try.remote=origin
file:.git/config branch.try.merge=refs/heads/try
file:.git/config submodule.library/backtrace.url=https://github.com/rust-lang/backtrace-rs.git
file:.git/config submodule.library/stdarch.active=true
file:.git/config submodule.library/stdarch.url=https://github.com/rust-lang/stdarch.git
file:.git/config submodule.src/doc/book.active=true
---
19 failures:
20     it_fails


The actual run.stdout differed from the expected run.stdout.
Actual run.stdout saved to C:\a\rust\rust\build\x86_64-pc-windows-msvc\test\ui\test-attrs\test-panic-abort-nocapture\test-panic-abort-nocapture.run.stdout
error: 1 errors occurred comparing run output.
status: exit code: 101
status: exit code: 101
command: PATH="C:\a\rust\rust\build\x86_64-pc-windows-msvc\stage2\lib\rustlib\x86_64-pc-windows-msvc\lib;C:\Program Files (x86)\Windows Kits\10\bin\x64;C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64;C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Tools\MSVC\14.29.30133\bin\HostX64\x64;C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Tools\MSVC\14.29.30133\bin\HostX64\x64;C:\a\rust\rust\build\x86_64-pc-windows-msvc\stage0-bootstrap-tools\x86_64-pc-windows-msvc\release\deps;C:\a\rust\rust\build\x86_64-pc-windows-msvc\stage0\bin;C:\Program Files\PowerShell\7;C:\a\rust\rust\ninja;C:\a\rust\rust\msys2\mingw64\bin;C:\hostedtoolcache\windows\Python\3.12.1\x64\Scripts;C:\hostedtoolcache\windows\Python\3.12.1\x64;C:\msys64\usr\bin;C:\a\rust\rust\sccache;C:\Program Files\MongoDB\Server\5.0\bin;C:\aliyun-cli;C:\vcpkg;C:\cf-cli;C:\Program Files (x86)\NSIS;C:\tools\zstd;C:\Program Files\Mercurial;C:\hostedtoolcache\windows\stack\2.13.1\x64;C:\cabal\bin;C:\ghcup\bin;C:\mingw64\bin;C:\Program Files\dotnet;C:\Program Files\MySQL\MySQL Server 5.7\bin;C:\Program Files\R\R-4.3.2\bin\x64;C:\SeleniumWebDrivers\GeckoDriver;C:\SeleniumWebDrivers\EdgeDriver;C:\SeleniumWebDrivers\ChromeDriver;C:\Program Files (x86)\sbt\bin;C:\Program Files (x86)\GitHub CLI;C:\Program Files\Git\bin;C:\Program Files (x86)\pipx_bin;C:\npm\prefix;C:\hostedtoolcache\windows\go\1.20.13\x64\bin;C:\hostedtoolcache\windows\Python\3.7.9\x64\Scripts;C:\hostedtoolcache\windows\Python\3.7.9\x64;C:\hostedtoolcache\windows\Ruby\2.5.9\x64\bin;C:\Program Files\OpenSSL\bin;C:\tools\kotlinc\bin;C:\hostedtoolcache\windows\Java_Temurin-Hotspot_jdk\8.0.392-8\x64\bin;C:\Program Files\ImageMagick-7.1.1-Q16-HDRI;C:\Program Files\Microsoft SDKs\Azure\CLI2\wbin;C:\ProgramData\kind;C:\Program Files\Eclipse Foundation\jdk-8.0.302.8-hotspot\bin;C:\ProgramData\Chocolatey\bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0;C:\Windows\System32\OpenSSH;C:\Program Files\PowerShell\7;C:\Program Files\Microsoft\Web Platform Installer;C:\Program Files\Microsoft SQL Server\130\Tools\Binn;C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\170\Tools\Binn;C:\Program Files (x86)\Windows Kits\10\Windows Performance Toolkit;C:\Program Files (x86)\Microsoft SQL Server\110\DTS\Binn;C:\Program Files (x86)\Microsoft SQL Server\120\DTS\Binn;C:\Program Files (x86)\Microsoft SQL Server\130\DTS\Binn;C:\Program Files (x86)\Microsoft SQL Server\140\DTS\Binn;C:\Program Files (x86)\Microsoft SQL Server\150\DTS\Binn;C:\Program Files (x86)\Microsoft SQL Server\160\DTS\Binn;C:\Strawberry\c\bin;C:\Strawberry\perl\site\bin;C:\Strawberry\perl\bin;C:\ProgramData\chocolatey\lib\pulumi\tools\Pulumi\bin;C:\Program Files\TortoiseSVN\bin;C:\Program Files\CMake\bin;C:\ProgramData\chocolatey\lib\maven\apache-maven-3.8.7\bin;C:\Program Files\Microsoft Service Fabric\bin\Fabric\Fabric.Code;C:\Program Files\Microsoft SDKs\Service Fabric\Tools\ServiceFabricLocalClusterManager;C:\Program Files\nodejs;C:\Program Files\Git\cmd;C:\Program Files\Git\mingw64\bin;C:\Program Files\Git\usr\bin;C:\Program Files\GitHub CLI;C:\tools\php;C:\Program Files (x86)\sbt\bin;C:\Program Files\Amazon\AWSCLIV2;C:\Program Files\Amazon\SessionManagerPlugin\bin;C:\Program Files\Amazon\AWSSAMCLI\bin;C:\Program Files (x86)\Google\Cloud SDK\google-cloud-sdk\bin;C:\Program Files (x86)\Microsoft BizTalk Server;C:\Program Files\LLVM\bin;C:\Users\runneradmin\.dotnet\tools;C:\Users\runneradmin\.cargo\bin;C:\Users\runneradmin\AppData\Local\Microsoft\WindowsApps" "C:\\a\\rust\\rust\\build\\x86_64-pc-windows-msvc\\test\\ui\\test-attrs\\test-panic-abort-nocapture\\a.exe" "--test-threads=1" "--nocapture"

running 4 tests
test it_fails ... about to fail
FAILED
---
27 failures:
28     it_exits


The actual run.stdout differed from the expected run.stdout.
Actual run.stdout saved to C:\a\rust\rust\build\x86_64-pc-windows-msvc\test\ui\test-attrs\test-panic-abort\test-panic-abort.run.stdout
error: 1 errors occurred comparing run output.
status: exit code: 101
status: exit code: 101
command: PATH="C:\a\rust\rust\build\x86_64-pc-windows-msvc\stage2\lib\rustlib\x86_64-pc-windows-msvc\lib;C:\Program Files (x86)\Windows Kits\10\bin\x64;C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64;C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Tools\MSVC\14.29.30133\bin\HostX64\x64;C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Tools\MSVC\14.29.30133\bin\HostX64\x64;C:\a\rust\rust\build\x86_64-pc-windows-msvc\stage0-bootstrap-tools\x86_64-pc-windows-msvc\release\deps;C:\a\rust\rust\build\x86_64-pc-windows-msvc\stage0\bin;C:\Program Files\PowerShell\7;C:\a\rust\rust\ninja;C:\a\rust\rust\msys2\mingw64\bin;C:\hostedtoolcache\windows\Python\3.12.1\x64\Scripts;C:\hostedtoolcache\windows\Python\3.12.1\x64;C:\msys64\usr\bin;C:\a\rust\rust\sccache;C:\Program Files\MongoDB\Server\5.0\bin;C:\aliyun-cli;C:\vcpkg;C:\cf-cli;C:\Program Files (x86)\NSIS;C:\tools\zstd;C:\Program Files\Mercurial;C:\hostedtoolcache\windows\stack\2.13.1\x64;C:\cabal\bin;C:\ghcup\bin;C:\mingw64\bin;C:\Program Files\dotnet;C:\Program Files\MySQL\MySQL Server 5.7\bin;C:\Program Files\R\R-4.3.2\bin\x64;C:\SeleniumWebDrivers\GeckoDriver;C:\SeleniumWebDrivers\EdgeDriver;C:\SeleniumWebDrivers\ChromeDriver;C:\Program Files (x86)\sbt\bin;C:\Program Files (x86)\GitHub CLI;C:\Program Files\Git\bin;C:\Program Files (x86)\pipx_bin;C:\npm\prefix;C:\hostedtoolcache\windows\go\1.20.13\x64\bin;C:\hostedtoolcache\windows\Python\3.7.9\x64\Scripts;C:\hostedtoolcache\windows\Python\3.7.9\x64;C:\hostedtoolcache\windows\Ruby\2.5.9\x64\bin;C:\Program Files\OpenSSL\bin;C:\tools\kotlinc\bin;C:\hostedtoolcache\windows\Java_Temurin-Hotspot_jdk\8.0.392-8\x64\bin;C:\Program Files\ImageMagick-7.1.1-Q16-HDRI;C:\Program Files\Microsoft SDKs\Azure\CLI2\wbin;C:\ProgramData\kind;C:\Program Files\Eclipse Foundation\jdk-8.0.302.8-hotspot\bin;C:\ProgramData\Chocolatey\bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0;C:\Windows\System32\OpenSSH;C:\Program Files\PowerShell\7;C:\Program Files\Microsoft\Web Platform Installer;C:\Program Files\Microsoft SQL Server\130\Tools\Binn;C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\170\Tools\Binn;C:\Program Files (x86)\Windows Kits\10\Windows Performance Toolkit;C:\Program Files (x86)\Microsoft SQL Server\110\DTS\Binn;C:\Program Files (x86)\Microsoft SQL Server\120\DTS\Binn;C:\Program Files (x86)\Microsoft SQL Server\130\DTS\Binn;C:\Program Files (x86)\Microsoft SQL Server\140\DTS\Binn;C:\Program Files (x86)\Microsoft SQL Server\150\DTS\Binn;C:\Program Files (x86)\Microsoft SQL Server\160\DTS\Binn;C:\Strawberry\c\bin;C:\Strawberry\perl\site\bin;C:\Strawberry\perl\bin;C:\ProgramData\chocolatey\lib\pulumi\tools\Pulumi\bin;C:\Program Files\TortoiseSVN\bin;C:\Program Files\CMake\bin;C:\ProgramData\chocolatey\lib\maven\apache-maven-3.8.7\bin;C:\Program Files\Microsoft Service Fabric\bin\Fabric\Fabric.Code;C:\Program Files\Microsoft SDKs\Service Fabric\Tools\ServiceFabricLocalClusterManager;C:\Program Files\nodejs;C:\Program Files\Git\cmd;C:\Program Files\Git\mingw64\bin;C:\Program Files\Git\usr\bin;C:\Program Files\GitHub CLI;C:\tools\php;C:\Program Files (x86)\sbt\bin;C:\Program Files\Amazon\AWSCLIV2;C:\Program Files\Amazon\SessionManagerPlugin\bin;C:\Program Files\Amazon\AWSSAMCLI\bin;C:\Program Files (x86)\Google\Cloud SDK\google-cloud-sdk\bin;C:\Program Files (x86)\Microsoft BizTalk Server;C:\Program Files\LLVM\bin;C:\Users\runneradmin\.dotnet\tools;C:\Users\runneradmin\.cargo\bin;C:\Users\runneradmin\AppData\Local\Microsoft\WindowsApps" "C:\\a\\rust\\rust\\build\\x86_64-pc-windows-msvc\\test\\ui\\test-attrs\\test-panic-abort\\a.exe" "--test-threads=1"

running 6 tests
test benchmark ... ok
test it_exits ... FAILED
---

test result: FAILED. 15841 passed; 2 failed; 201 ignored; 0 measured; 2 filtered out; finished in 355.21s

Build completed unsuccessfully in 0:39:49
Some tests failed in compiletest suite=ui mode=ui host=x86_64-pc-windows-msvc target=x86_64-pc-windows-msvc
make: *** [Makefile:73: ci-msvc-ps1] Error 1
  network time: Thu, 25 Jan 2024 01:18:30 GMT
##[error]Process completed with exit code 2.
Post job cleanup.
[command]"C:\Program Files\Git\bin\git.exe" version

rust-log-analyzer avatar Jan 25 '24 01:01 rust-log-analyzer

:broken_heart: Test failed - checks-actions

bors avatar Jan 25 '24 01:01 bors

@bors try

tmandry avatar Jan 26 '24 01:01 tmandry

:hourglass: Trying commit 961040464f2b0a49929572f0a77d41fa9a776458 with merge 765d6e6ebd889c8e1783ca96400086e9a96b2bc1...

bors avatar Jan 26 '24 01:01 bors

:sunny: Try build successful - checks-actions Build commit: 765d6e6ebd889c8e1783ca96400086e9a96b2bc1 (765d6e6ebd889c8e1783ca96400086e9a96b2bc1)

bors avatar Jan 26 '24 02:01 bors

@rustbot ready

tmandry avatar Jan 27 '24 00:01 tmandry

These commits modify the Cargo.lock file. Unintentional changes to Cargo.lock can be introduced when switching branches and rebasing PRs.

If this was unintentional then you should revert the changes before this PR is merged. Otherwise, you can ignore this comment.

rustbot avatar Jan 31 '24 02:01 rustbot

@bors r+

cuviper avatar Jan 31 '24 02:01 cuviper

:pushpin: Commit f622e832d41171578b6987d0b25b3a84d6d1c81c has been approved by cuviper

It is now in the queue for this repository.

bors avatar Jan 31 '24 02:01 bors

:hourglass: Testing commit f622e832d41171578b6987d0b25b3a84d6d1c81c with merge 19ad5962e74a6df8842e1e9c45f69261b50d12b4...

bors avatar Jan 31 '24 05:01 bors

The job arm-android failed! Check out the build log: (web) (plain)

Click to see the possible cause of the failure (guessed by this bot)
19 failures:
20     it_fails


The actual run.stdout differed from the expected run.stdout.
Actual run.stdout saved to /checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/test-attrs/test-panic-abort-nocapture/test-panic-abort-nocapture.run.stdout
error: 1 errors occurred comparing run output.
status: exit status: 101
status: exit status: 101
command: RUST_BACKTRACE="0" RUST_TEST_THREADS="8" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage0-tools-bin/remote-test-client" "run" "0" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/test-attrs/test-panic-abort-nocapture/a" "--test-threads=1" "--nocapture"
uploaded "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/test-attrs/test-panic-abort-nocapture/a", waiting for result

running 4 tests
test it_fails ... about to fail

rust-log-analyzer avatar Jan 31 '24 05:01 rust-log-analyzer

:broken_heart: Test failed - checks-actions

bors avatar Jan 31 '24 05:01 bors

@rustbot author

cuviper avatar Feb 01 '24 00:02 cuviper

Oof, Android libc actually segfaults the process when abort() is called. https://android.googlesource.com/platform/bionic/+/5f32207/libc/unistd/abort.c?pli=1#82

I guess then there are two options:

  1. Treat SIGSEGV as a normal failure on Android
  2. Continue printing "child process exited with signal 11" and disable the test on Android

I guess 1 is the least bad...

tmandry avatar Feb 02 '24 00:02 tmandry

@rustbot ready

tmandry avatar Feb 02 '24 00:02 tmandry

Oof, Android libc actually segfaults the process when abort() is called. https://android.googlesource.com/platform/bionic/+/5f32207/libc/unistd/abort.c?pli=1#82

That is an ancient version of bionic - the current version raises the signal, and if that doesn't work, eventually calls exit.

The change removing that intentional segfault is more than 10 years old, so that shouldn't be showing up in the test suite.

maurer avatar Feb 02 '24 00:02 maurer

Okay, let me investigate more...

@rustbot author

tmandry avatar Feb 02 '24 00:02 tmandry

It looks like we are we are in fact using a ten-year old android image. Ignoring these test failures or working around this is appropriate until we fix that.

maurer avatar Feb 02 '24 00:02 maurer

/* temporary, for bug hunting */

Engineers are so optimistic...

cuviper avatar Feb 02 '24 00:02 cuviper

Okay, disabling the tests until #120567 is fixed rather than silently eating SIGSEGV, since that will give a better experience on modern Android.

@rustbot ready

tmandry avatar Feb 02 '24 00:02 tmandry

@bors r+

cuviper avatar Feb 02 '24 01:02 cuviper

:pushpin: Commit 48f664b5027f5912edbbfc240f90ed439be73280 has been approved by cuviper

It is now in the queue for this repository.

bors avatar Feb 02 '24 01:02 bors

:evergreen_tree: The tree is currently closed for pull requests below priority 100. This pull request will be tested once the tree is reopened.

bors avatar Feb 02 '24 01:02 bors

I wonder of this failed here: https://github.com/rust-lang/rust/pull/120623#issuecomment-1926093319 @bors rollup=iffy (feel free to remove again ^)

matthiaskrgr avatar Feb 05 '24 05:02 matthiaskrgr

panic=immediate_abort

I don't want to be a pedant, but there is no such thing unfortunately. The dead code elimination that panic_immediate_abort is supposed to induce requires re-optimizing the standard library (currently we require full recompilation but if we had mir-only rlibs I think it wouldn't), not just linking against a different panic runtime. I've thought about ways to make panic=immediate_abort work but so far all I've come up with is half measures or requires mir-only std. I'd be happy to discuss or work on improving this with anyone.

saethlin avatar Feb 05 '24 16:02 saethlin

:hourglass: Testing commit 48f664b5027f5912edbbfc240f90ed439be73280 with merge 4a5b00b079a8fb13019e922627ae2bb7a6faba3b...

bors avatar Feb 05 '24 23:02 bors