From 3a2c2472156f62723f290973b8fda3d73e07fe7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Kr=C3=BCger?= Date: Fri, 8 Nov 2024 21:32:40 +0100 Subject: [PATCH 1/3] add some debug-assertion crash tests --- tests/crashes/116979.rs | 14 ++++++++++++++ tests/crashes/117808.rs | 27 +++++++++++++++++++++++++++ tests/crashes/117877.rs | 13 +++++++++++++ tests/crashes/118778.rs | 24 ++++++++++++++++++++++++ tests/crashes/118784.rs | 19 +++++++++++++++++++ tests/crashes/120175.rs | 11 +++++++++++ tests/crashes/121176.rs | 9 +++++++++ tests/crashes/123861.rs | 5 +++++ tests/crashes/123862.rs | 14 ++++++++++++++ tests/crashes/130395.rs | 10 ++++++++++ tests/crashes/132055.rs | 13 +++++++++++++ 11 files changed, 159 insertions(+) create mode 100644 tests/crashes/116979.rs create mode 100644 tests/crashes/117808.rs create mode 100644 tests/crashes/117877.rs create mode 100644 tests/crashes/118778.rs create mode 100644 tests/crashes/118784.rs create mode 100644 tests/crashes/120175.rs create mode 100644 tests/crashes/121176.rs create mode 100644 tests/crashes/123861.rs create mode 100644 tests/crashes/123862.rs create mode 100644 tests/crashes/130395.rs create mode 100644 tests/crashes/132055.rs diff --git a/tests/crashes/116979.rs b/tests/crashes/116979.rs new file mode 100644 index 0000000000000..28bbc972ea340 --- /dev/null +++ b/tests/crashes/116979.rs @@ -0,0 +1,14 @@ +//@ known-bug: #116979 +//@ compile-flags: -Csymbol-mangling-version=v0 +//@ needs-rustc-debug-assertions + +#![feature(dyn_star)] +#![allow(incomplete_features)] + +use std::fmt::Display; + +pub fn require_dyn_star_display(_: dyn* Display) {} + +fn main() { + require_dyn_star_display(1usize); +} diff --git a/tests/crashes/117808.rs b/tests/crashes/117808.rs new file mode 100644 index 0000000000000..2c727986dd07f --- /dev/null +++ b/tests/crashes/117808.rs @@ -0,0 +1,27 @@ +//@ known-bug: #117808 +//@ edition:2021 +//@ needs-rustc-debug-assertions + +use std::future::Future; + +fn hrc AsyncClosure<'a, (), R>>(f: F) -> F { + f +} + +fn main() { + hrc(|x| async {}); +} + +trait AsyncClosure<'a, I, R> +where + I: 'a, +{ +} + +impl<'a, I, R, Fut, F> AsyncClosure<'a, I, R> for F +where + I: 'a, + F: Fn(&'a I) -> Fut, + Fut: Future + Send + 'a, +{ +} diff --git a/tests/crashes/117877.rs b/tests/crashes/117877.rs new file mode 100644 index 0000000000000..b1effc0cbcb1a --- /dev/null +++ b/tests/crashes/117877.rs @@ -0,0 +1,13 @@ +//@ known-bug: #117877 +//@ edition:2021 +//@ needs-rustc-debug-assertions +//@ only-x86_64 +#![feature(asm_const)] + +use std::arch::asm; + +async unsafe fn foo<'a>() { + asm!("/* {0} */", const N); +} + +fn main() {} diff --git a/tests/crashes/118778.rs b/tests/crashes/118778.rs new file mode 100644 index 0000000000000..9914e76022d76 --- /dev/null +++ b/tests/crashes/118778.rs @@ -0,0 +1,24 @@ +//@ known-bug: #118778 +//@ edition:2021 +//@ needs-rustc-debug-assertions + +#![feature(generic_const_exprs)] +#![allow(incomplete_features)] + +trait Owner { + type T; +} + +impl Owner for () { + type T = U32<{ N + 1 }> + where + U32<{ N + 1 }>:; +} + +struct U32; + +fn take1(_: impl Owner = U32<1>>) {} + +fn main() { + take1(()); +} diff --git a/tests/crashes/118784.rs b/tests/crashes/118784.rs new file mode 100644 index 0000000000000..7bf943c8177c1 --- /dev/null +++ b/tests/crashes/118784.rs @@ -0,0 +1,19 @@ +//@ known-bug: #118784 +//@ needs-rustc-debug-assertions + +use std::collections::HashMap; + +macro_rules! all_sync_send { + ($ctor:expr, $($iter:expr),+) => ({ + $( + let mut x = $ctor; + is_sync(x.$iter()); + let mut y = $ctor; + is_send(y.$iter()); + )+ + }) +} + +fn main() { + all_sync_send!(HashMap, HashMap); +} diff --git a/tests/crashes/120175.rs b/tests/crashes/120175.rs new file mode 100644 index 0000000000000..c6e7203ff9882 --- /dev/null +++ b/tests/crashes/120175.rs @@ -0,0 +1,11 @@ +//@ known-bug: #120175 +//@ needs-rustc-debug-assertions + +#![feature(extern_types)] + +#[link(name = "bar", import_name_type = "decorated", kind = "raw-dylib")] +extern "C" { + pub type CrossCrate; +} + +fn main() {} diff --git a/tests/crashes/121176.rs b/tests/crashes/121176.rs new file mode 100644 index 0000000000000..4d82e51de8f80 --- /dev/null +++ b/tests/crashes/121176.rs @@ -0,0 +1,9 @@ +//@ known-bug: #121176 +//@ needs-rustc-debug-assertions +use std::fmt::Debug; + +static STATIC_1: dyn Debug + Sync = *(); + +fn main() { + println!("{:?}", &STATIC_1); +} diff --git a/tests/crashes/123861.rs b/tests/crashes/123861.rs new file mode 100644 index 0000000000000..60245960af0d6 --- /dev/null +++ b/tests/crashes/123861.rs @@ -0,0 +1,5 @@ +//@ known-bug: #123861 +//@ needs-rustc-debug-assertions + +struct _; +fn mainIterator<_ = _> {} diff --git a/tests/crashes/123862.rs b/tests/crashes/123862.rs new file mode 100644 index 0000000000000..075e0e6fc8fc8 --- /dev/null +++ b/tests/crashes/123862.rs @@ -0,0 +1,14 @@ +//@ known-bug: #123862 +//@ needs-rustc-debug-assertions + +macro_rules! pos { + () => { + (file![$($pos,)* pos!()], line!()) + }; +} + +fn outer() { + inner_inlined(main_pos, pos!()); +} + +fn inner_inlined() {} diff --git a/tests/crashes/130395.rs b/tests/crashes/130395.rs new file mode 100644 index 0000000000000..c1d189c79badb --- /dev/null +++ b/tests/crashes/130395.rs @@ -0,0 +1,10 @@ +//@ known-bug: #130395 +//@ needs-rustc-debug-assertions + +enum U { + B(isize, usize), +} + +fn main() { + let x = T::A(U::C); +} diff --git a/tests/crashes/132055.rs b/tests/crashes/132055.rs new file mode 100644 index 0000000000000..bf786a301b42d --- /dev/null +++ b/tests/crashes/132055.rs @@ -0,0 +1,13 @@ +//@ known-bug: #132055 +//@ needs-rustc-debug-assertions +//@ compile-flags: -Zmir-opt-level=5 -Zvalidate-mir + +#![feature(non_lifetime_binders)] + +trait Trait { + type Assoc<'a> = i32; +} + +fn produce() -> impl for Trait<(), Assoc = impl Trait> { + 16 +} From 1e5ff65b2b6090b3931f60377939e14dd74e5ae2 Mon Sep 17 00:00:00 2001 From: Jieyou Xu Date: Sun, 17 Nov 2024 20:42:35 +0800 Subject: [PATCH 2/3] [DO NOT MERGE] do not download-rustc and verbose crashes --- src/ci/docker/host-x86_64/x86_64-gnu/Dockerfile | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/ci/docker/host-x86_64/x86_64-gnu/Dockerfile b/src/ci/docker/host-x86_64/x86_64-gnu/Dockerfile index 83c2aa8cfb3b7..2ba4a02266bb5 100644 --- a/src/ci/docker/host-x86_64/x86_64-gnu/Dockerfile +++ b/src/ci/docker/host-x86_64/x86_64-gnu/Dockerfile @@ -24,10 +24,14 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ COPY scripts/sccache.sh /scripts/ RUN sh /scripts/sccache.sh +ENV COMPILETEST_VERBOSE_CRASHES 1 ENV RUST_CONFIGURE_ARGS \ - --build=x86_64-unknown-linux-gnu \ - --enable-sanitizers \ - --enable-profiler \ - --enable-compiler-docs \ - --set llvm.libzstd=true -ENV SCRIPT python3 ../x.py --stage 2 test + --build=x86_64-unknown-linux-gnu \ + --enable-sanitizers \ + --enable-profiler \ + --enable-compiler-docs \ + --set llvm.libzstd=true \ + # HACK(jieyouxu): do not download-rustc! + --set rust.download-rustc=false +# HACK(jieyouxu): faster feedback +ENV SCRIPT python3 ../x.py --stage 1 test tests/crashes From 642db0d2565f00f5fd17e8e5b984d6ef1d70d9e2 Mon Sep 17 00:00:00 2001 From: Jieyou Xu Date: Sun, 17 Nov 2024 20:43:14 +0800 Subject: [PATCH 3/3] [DO NOT MERGE] only verbose if rustc fails to crash --- src/tools/compiletest/src/runtest/crashes.rs | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/tools/compiletest/src/runtest/crashes.rs b/src/tools/compiletest/src/runtest/crashes.rs index 885ed3b08faca..f5d8c1d2c1dc0 100644 --- a/src/tools/compiletest/src/runtest/crashes.rs +++ b/src/tools/compiletest/src/runtest/crashes.rs @@ -5,15 +5,16 @@ impl TestCx<'_> { let pm = self.pass_mode(); let proc_res = self.compile_test(WillExecute::No, self.should_emit_metadata(pm)); - if std::env::var("COMPILETEST_VERBOSE_CRASHES").is_ok() { - eprintln!("{}", proc_res.status); - eprintln!("{}", proc_res.stdout); - eprintln!("{}", proc_res.stderr); - eprintln!("{}", proc_res.cmdline); - } - // if a test does not crash, consider it an error if proc_res.status.success() || matches!(proc_res.status.code(), Some(1 | 0)) { + // HACK(jieyouxu): flip it so it verbose if the test *fails* to crash. + if std::env::var("COMPILETEST_VERBOSE_CRASHES").is_ok() { + eprintln!("{}", proc_res.status); + eprintln!("{}", proc_res.stdout); + eprintln!("{}", proc_res.stderr); + eprintln!("{}", proc_res.cmdline); + } + self.fatal(&format!( "crashtest no longer crashes/triggers ICE, horray! Please give it a meaningful \ name, add a doc-comment to the start of the test explaining why it exists and \