trybuild icon indicating copy to clipboard operation
trybuild copied to clipboard

Some ICEs manifest as if the crate compiled successfully

Open dtolnay opened this issue 3 years ago • 2 comments

For example the following ICE in nightly-2020-06-04 (https://github.com/rust-lang/rust/issues/97698):

// tests/compiletest.rs

#[test]
fn ui() {
    let t = trybuild::TestCases::new();
    t.compile_fail("tests/ui/break-rust.rs");
}
// tests/ui/break-rust.rs

trait AmbiguousIfImpl<A> {
    fn method() {}
}

struct One;
struct Two;

impl<T> AmbiguousIfImpl<One> for T {}
impl<T> AmbiguousIfImpl<Two> for T {}

struct Struct;

fn main() {
    <Struct as AmbiguousIfImpl<_>>::method();
}
$ cargo test

running 1 test

test tests/ui/break-rust.rs ... error
Expected test case to fail to compile, but it succeeded.

test ui ... FAILED

failures:

---- ui stdout ----
thread 'ui' panicked at '1 of 1 tests failed', github.com-1ecc6299db9ec823/trybuild-1.0.61/src/run.rs:100:13
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.38s

error: test failed, to rerun pass '--test compiletest'

Meanwhile the crate definitely fails to build and rustc exits with nonzero code.

thread 'rustc' panicked at 'range end index 2 out of range for slice of length 1', library/core/src/slice/index.rs:73:5
stack backtrace:
  …
error: internal compiler error: unexpected panic

note: the compiler unexpectedly panicked. this is a bug.

note: we would appreciate a bug report: https://github.com/rust-lang/rust/issues/new?labels=C-bug%2C+I-ICE%2C+T-compiler&template=ice.md

note: rustc 1.63.0-nightly (a6b8c6954 2022-06-03) running on x86_64-unknown-linux-gnu

query stack during panic:
#0 [typeck] type-checking `main`
#1 [typeck_item_bodies] type-checking all item bodies
#2 [analysis] running analysis passes on this crate
end of query stack

dtolnay avatar Jun 04 '22 06:06 dtolnay

Oddly not every ICE hits this. For example changing tests/ui/break-rust.rs to:

fn main() {
    break rust;
}
$ cargo test

running 1 test

test tests/ui/break-rust.rs ... wip

NOTE: writing the following output to `wip/break-rust.stderr`.
Move this file to `tests/ui/break-rust.stderr` to accept it as correct.
┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
error[E0425]: cannot find value `rust` in this scope
 --> tests/ui/break-rust.rs:2:11
  |
2 |     break rust;
  |           ^^^^ not found in this scope

error[E0268]: `break` outside of a loop
 --> tests/ui/break-rust.rs:2:5
  |
2 |     break rust;
  |     ^^^^^^^^^^ cannot `break` outside of a loop

error: internal compiler error: It looks like you're trying to break rust; would you like some ICE?

note: the compiler expectedly panicked. this is a feature.

note: we would appreciate a joke overview: https://github.com/rust-lang/rust/issues/43162#issuecomment-320764675

note: rustc 1.63.0-nightly (a6b8c6954 2022-06-03) running on x86_64-unknown-linux-gnu
┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈

test ui ... FAILED

failures:

---- ui stdout ----
thread 'ui' panicked at 'successfully created new stderr files for 1 test cases', github.com-1ecc6299db9ec823/trybuild-1.0.61/src/run.rs:103:13
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.31s

error: test failed, to rerun pass '--test compiletest'

dtolnay avatar Jun 04 '22 06:06 dtolnay

Maybe the same root cause as #229.

dtolnay avatar Nov 18 '23 18:11 dtolnay