rewrite dump-ice-to-disk to rmake

This commit is contained in:
Oneirical 2024-07-09 11:40:02 -04:00
parent 54be9ad5eb
commit 0d52289b5e
5 changed files with 64 additions and 75 deletions

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -0,0 +1,64 @@
// 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
// FIXME(Oneirical): try it on Windows!
use run_make_support::{cwd, fs_wrapper, has_extension, has_prefix, rustc, shallow_find_files};
fn main() {
rustc().input("lib.rs").arg("-Ztreat-err-as-bug=1").run_fail();
let ice_text = get_text_from_ice();
let default_set = ice_text.lines().count();
let content = ice_text;
// Ensure that the ICE files don't contain `:` in their filename because
// this causes problems on Windows.
for file in shallow_find_files(cwd(), |path| {
has_prefix(path, "rustc-ice") && has_extension(path, "txt")
}) {
assert!(!file.display().to_string().contains(":"));
}
clear_ice_files();
rustc().input("lib.rs").env("RUST_BACKTRACE", "short").arg("-Ztreat-err-as-bug=1").run_fail();
let short = get_text_from_ice().lines().count();
clear_ice_files();
rustc().input("lib.rs").env("RUST_BACKTRACE", "full").arg("-Ztreat-err-as-bug=1").run_fail();
let full = get_text_from_ice().lines().count();
clear_ice_files();
// The ICE dump is explicitely disabled. Therefore, this should produce no files.
rustc().env("RUSTC_ICE", "0").input("lib.rs").arg("-Ztreat-err-as-bug=1").run_fail();
assert!(get_text_from_ice().is_empty());
// The line count should not change.
assert_eq!(short, default_set);
assert_eq!(full, default_set);
// 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 {
fs_wrapper::remove_file(file);
}
}
fn get_text_from_ice() -> String {
let ice_files = shallow_find_files(cwd(), |path| {
has_prefix(path, "rustc-ice") && has_extension(path, "txt")
});
let mut output = String::new();
for file in ice_files {
output.push_str(&fs_wrapper::read_to_string(file));
}
output
}