Skip to content

Some ICEs manifest as if the crate compiled successfully #173

Open
@dtolnay

Description

@dtolnay

For example the following ICE in nightly-2020-06-04 (rust-lang/rust#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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions