mirror of
https://github.com/rust-lang/rust.git
synced 2025-02-19 18:34:08 +00:00
Rollup merge of #127523 - Oneirical:treasure-test, r=jieyouxu
Migrate `dump-ice-to-disk` and `panic-abort-eh_frame` `run-make` tests to rmake Part of #121876 and the associated [Google Summer of Code project](https://blog.rust-lang.org/2024/05/01/gsoc-2024-selected-projects.html). Please try: try-job: x86_64-msvc try-job: i686-mingw
This commit is contained in:
commit
96fb3544b0
@ -10,7 +10,6 @@ run-make/cross-lang-lto/Makefile
|
||||
run-make/dep-info-doesnt-run-much/Makefile
|
||||
run-make/dep-info-spaces/Makefile
|
||||
run-make/dep-info/Makefile
|
||||
run-make/dump-ice-to-disk/Makefile
|
||||
run-make/emit-to-stdout/Makefile
|
||||
run-make/export-executable-symbols/Makefile
|
||||
run-make/extern-flag-disambiguates/Makefile
|
||||
@ -42,7 +41,6 @@ run-make/native-link-modifier-bundle/Makefile
|
||||
run-make/native-link-modifier-whole-archive/Makefile
|
||||
run-make/no-alloc-shim/Makefile
|
||||
run-make/no-builtins-attribute/Makefile
|
||||
run-make/panic-abort-eh_frame/Makefile
|
||||
run-make/pdb-buildinfo-cl-cmd/Makefile
|
||||
run-make/pgo-gen-lto/Makefile
|
||||
run-make/pgo-indirect-call-promotion/Makefile
|
||||
|
@ -1,10 +0,0 @@
|
||||
include ../tools.mk
|
||||
|
||||
# ignore-windows
|
||||
|
||||
export RUSTC := $(RUSTC_ORIGINAL)
|
||||
export LD_LIBRARY_PATH := $(HOST_RPATH_DIR)
|
||||
export TMPDIR := $(TMPDIR)
|
||||
|
||||
all:
|
||||
bash check.sh
|
@ -1,64 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
# Default nightly behavior (write ICE to current directory)
|
||||
# FIXME(estebank): these are failing on CI, but passing locally.
|
||||
# $RUSTC src/lib.rs -Z treat-err-as-bug=1 1>$TMPDIR/rust-test-default.log 2>&1
|
||||
# default=$(cat ./rustc-ice-*.txt | wc -l)
|
||||
# rm ./rustc-ice-*.txt
|
||||
|
||||
# Explicit directory set
|
||||
export RUSTC_ICE=$TMPDIR
|
||||
$RUSTC src/lib.rs -Z treat-err-as-bug=1 1>$TMPDIR/rust-test-default-set.log 2>&1
|
||||
default_set=$(cat $TMPDIR/rustc-ice-*.txt | wc -l)
|
||||
content=$(cat $TMPDIR/rustc-ice-*.txt)
|
||||
# Ensure that the ICE dump path doesn't contain `:` because they cause problems on Windows
|
||||
windows_safe=$(echo rustc-ice-*.txt | grep ':')
|
||||
if [ ! -z "$windows_safe" ]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
rm $TMPDIR/rustc-ice-*.txt
|
||||
RUST_BACKTRACE=short $RUSTC src/lib.rs -Z treat-err-as-bug=1 1>$TMPDIR/rust-test-short.log 2>&1
|
||||
short=$(cat $TMPDIR/rustc-ice-*.txt | wc -l)
|
||||
rm $TMPDIR/rustc-ice-*.txt
|
||||
RUST_BACKTRACE=full $RUSTC src/lib.rs -Z treat-err-as-bug=1 1>$TMPDIR/rust-test-full.log 2>&1
|
||||
full=$(cat $TMPDIR/rustc-ice-*.txt | wc -l)
|
||||
rm $TMPDIR/rustc-ice-*.txt
|
||||
|
||||
# Explicitly disabling ICE dump
|
||||
export RUSTC_ICE=0
|
||||
$RUSTC src/lib.rs -Z treat-err-as-bug=1 1>$TMPDIR/rust-test-disabled.log 2>&1
|
||||
should_be_empty_tmp=$(ls -l $TMPDIR/rustc-ice-*.txt 2>/dev/null | wc -l)
|
||||
should_be_empty_dot=$(ls -l ./rustc-ice-*.txt 2>/dev/null | wc -l)
|
||||
|
||||
echo "#### ICE Dump content:"
|
||||
echo $content
|
||||
echo "#### default length:"
|
||||
echo $default
|
||||
echo "#### short length:"
|
||||
echo $short
|
||||
echo "#### default_set length:"
|
||||
echo $default_set
|
||||
echo "#### full length:"
|
||||
echo $full
|
||||
echo "#### should_be_empty_dot length:"
|
||||
echo $should_be_empty_dot
|
||||
echo "#### should_be_empty_tmp length:"
|
||||
echo $should_be_empty_tmp
|
||||
|
||||
## Verify that a the ICE dump file is created in the appropriate directories, that
|
||||
## their lengths are the same regardless of other backtrace configuration options,
|
||||
## that the file is not created when asked to (RUSTC_ICE=0) and that the file
|
||||
## contains at least part of the expected content.
|
||||
if [ $short -eq $default_set ] &&
|
||||
#[ $default -eq $short ] &&
|
||||
[ $default_set -eq $full ] &&
|
||||
[[ $content == *"thread 'rustc' panicked at "* ]] &&
|
||||
[[ $content == *"stack backtrace:"* ]] &&
|
||||
#[ $default -gt 0 ] &&
|
||||
[ $should_be_empty_dot -eq 0 ] &&
|
||||
[ $should_be_empty_tmp -eq 0 ]; then
|
||||
exit 0
|
||||
else
|
||||
exit 1
|
||||
fi
|
81
tests/run-make/dump-ice-to-disk/rmake.rs
Normal file
81
tests/run-make/dump-ice-to-disk/rmake.rs
Normal file
@ -0,0 +1,81 @@
|
||||
// This test checks if internal compilation error (ICE) log files work as expected.
|
||||
// - Get the number of lines from the log files without any configuration options,
|
||||
// then check that the line count doesn't change if the backtrace gets configured to be short
|
||||
// or full.
|
||||
// - Check that disabling ICE logging results in zero files created.
|
||||
// - Check that the ICE files contain some of the expected strings.
|
||||
// See https://github.com/rust-lang/rust/pull/108714
|
||||
|
||||
use run_make_support::{cwd, has_extension, has_prefix, rfs, rustc, shallow_find_files};
|
||||
|
||||
fn main() {
|
||||
rustc().input("lib.rs").arg("-Ztreat-err-as-bug=1").run_fail();
|
||||
let default = get_text_from_ice(".").lines().count();
|
||||
clear_ice_files();
|
||||
|
||||
rustc().env("RUSTC_ICE", cwd()).input("lib.rs").arg("-Ztreat-err-as-bug=1").run_fail();
|
||||
let ice_text = get_text_from_ice(cwd());
|
||||
let default_set = ice_text.lines().count();
|
||||
let content = ice_text;
|
||||
let ice_files = shallow_find_files(cwd(), |path| {
|
||||
has_prefix(path, "rustc-ice") && has_extension(path, "txt")
|
||||
});
|
||||
assert_eq!(ice_files.len(), 1); // There should only be 1 ICE file.
|
||||
let ice_file_name =
|
||||
ice_files.first().and_then(|f| f.file_name()).and_then(|n| n.to_str()).unwrap();
|
||||
// Ensure that the ICE dump path doesn't contain `:`, because they cause problems on Windows.
|
||||
assert!(!ice_file_name.contains(":"), "{ice_file_name}");
|
||||
|
||||
clear_ice_files();
|
||||
rustc()
|
||||
.env("RUSTC_ICE", cwd())
|
||||
.input("lib.rs")
|
||||
.env("RUST_BACKTRACE", "short")
|
||||
.arg("-Ztreat-err-as-bug=1")
|
||||
.run_fail();
|
||||
let short = get_text_from_ice(cwd()).lines().count();
|
||||
clear_ice_files();
|
||||
rustc()
|
||||
.env("RUSTC_ICE", cwd())
|
||||
.input("lib.rs")
|
||||
.env("RUST_BACKTRACE", "full")
|
||||
.arg("-Ztreat-err-as-bug=1")
|
||||
.run_fail();
|
||||
let full = get_text_from_ice(cwd()).lines().count();
|
||||
clear_ice_files();
|
||||
|
||||
// The ICE dump is explicitly disabled. Therefore, this should produce no files.
|
||||
rustc().env("RUSTC_ICE", "0").input("lib.rs").arg("-Ztreat-err-as-bug=1").run_fail();
|
||||
let ice_files = shallow_find_files(cwd(), |path| {
|
||||
has_prefix(path, "rustc-ice") && has_extension(path, "txt")
|
||||
});
|
||||
assert!(ice_files.is_empty()); // There should be 0 ICE files.
|
||||
|
||||
// The line count should not change.
|
||||
assert_eq!(short, default_set);
|
||||
assert_eq!(short, default);
|
||||
assert_eq!(full, default_set);
|
||||
assert!(default > 0);
|
||||
// Some of the expected strings in an ICE file should appear.
|
||||
assert!(content.contains("thread 'rustc' panicked at"));
|
||||
assert!(content.contains("stack backtrace:"));
|
||||
}
|
||||
|
||||
fn clear_ice_files() {
|
||||
let ice_files = shallow_find_files(cwd(), |path| {
|
||||
has_prefix(path, "rustc-ice") && has_extension(path, "txt")
|
||||
});
|
||||
for file in ice_files {
|
||||
rfs::remove_file(file);
|
||||
}
|
||||
}
|
||||
|
||||
#[track_caller]
|
||||
fn get_text_from_ice(dir: impl AsRef<std::path::Path>) -> String {
|
||||
let ice_files =
|
||||
shallow_find_files(dir, |path| has_prefix(path, "rustc-ice") && has_extension(path, "txt"));
|
||||
assert_eq!(ice_files.len(), 1); // There should only be 1 ICE file.
|
||||
let ice_file = ice_files.get(0).unwrap();
|
||||
let output = rfs::read_to_string(ice_file);
|
||||
output
|
||||
}
|
@ -1,10 +0,0 @@
|
||||
# only-linux
|
||||
#
|
||||
# This test ensures that `panic=abort` code (without `C-unwind`, that is) should not have any
|
||||
# unwinding related `.eh_frame` sections emitted.
|
||||
|
||||
include ../tools.mk
|
||||
|
||||
all:
|
||||
$(RUSTC) foo.rs --crate-type=lib --emit=obj=$(TMPDIR)/foo.o -Cpanic=abort --edition 2021 -Z validate-mir
|
||||
objdump --dwarf=frames $(TMPDIR)/foo.o | $(CGREP) -v 'DW_CFA'
|
24
tests/run-make/panic-abort-eh_frame/rmake.rs
Normal file
24
tests/run-make/panic-abort-eh_frame/rmake.rs
Normal file
@ -0,0 +1,24 @@
|
||||
// An `.eh_frame` section in an object file is a symptom of an UnwindAction::Terminate
|
||||
// being inserted, useful for determining whether or not unwinding is necessary.
|
||||
// This is useless when panics would NEVER unwind due to -C panic=abort. This section should
|
||||
// therefore never appear in the emit file of a -C panic=abort compilation, and this test
|
||||
// checks that this is respected.
|
||||
// See https://github.com/rust-lang/rust/pull/112403
|
||||
|
||||
//@ only-linux
|
||||
// FIXME(Oneirical): the DW_CFA symbol appears on Windows-gnu, because uwtable
|
||||
// is forced to true on Windows targets (see #128136).
|
||||
|
||||
use run_make_support::{llvm_objdump, rustc};
|
||||
|
||||
fn main() {
|
||||
rustc()
|
||||
.input("foo.rs")
|
||||
.crate_type("lib")
|
||||
.emit("obj=foo.o")
|
||||
.panic("abort")
|
||||
.edition("2021")
|
||||
.arg("-Zvalidate-mir")
|
||||
.run();
|
||||
llvm_objdump().arg("--dwarf=frames").input("foo.o").run().assert_stdout_not_contains("DW_CFA");
|
||||
}
|
Loading…
Reference in New Issue
Block a user