diff --git a/compiler/rustc_mir_transform/src/coverage/query.rs b/compiler/rustc_mir_transform/src/coverage/query.rs index e65a5fdd5e7f1..df151f8cca35e 100644 --- a/compiler/rustc_mir_transform/src/coverage/query.rs +++ b/compiler/rustc_mir_transform/src/coverage/query.rs @@ -63,7 +63,8 @@ fn coverage_attr_on(tcx: TyCtxt<'_>, def_id: LocalDefId) -> bool { Some([item]) if item.has_name(sym::on) => return true, Some(_) | None => { // Other possibilities should have been rejected by `rustc_parse::validate_attr`. - tcx.dcx().span_bug(attr.span, "unexpected value of coverage attribute"); + // Use `span_delayed_bug` to avoid an ICE in failing builds (#127880). + tcx.dcx().span_delayed_bug(attr.span, "unexpected value of coverage attribute"); } } } diff --git a/tests/crashes/127880.rs b/tests/crashes/127880.rs deleted file mode 100644 index 6c625eac6914a..0000000000000 --- a/tests/crashes/127880.rs +++ /dev/null @@ -1,5 +0,0 @@ -//@ known-bug: #127880 -//@ compile-flags: -Cinstrument-coverage - -#[coverage] -fn main() {} diff --git a/tests/run-make/coverage-attr-ice/127880.rs b/tests/run-make/coverage-attr-ice/127880.rs new file mode 100644 index 0000000000000..9a14f5a4b6110 --- /dev/null +++ b/tests/run-make/coverage-attr-ice/127880.rs @@ -0,0 +1,2 @@ +#[coverage] +fn main() {} diff --git a/tests/run-make/coverage-attr-ice/rmake.rs b/tests/run-make/coverage-attr-ice/rmake.rs new file mode 100644 index 0000000000000..d396cf97a4760 --- /dev/null +++ b/tests/run-make/coverage-attr-ice/rmake.rs @@ -0,0 +1,19 @@ +use run_make_support::rustc; + +// Illegal `#[coverage(..)]` attributes should not cause an ICE in non-check +// builds with `-Cinstrument-coverage`. +// Regression test for . +// +// This currently can't be a UI test, because there's no way to force a +// non-check build of a UI test that would also fail a check build. + +fn main() { + rustc() + .edition("2021") + .arg("-Cinstrument-coverage") + .input("127880.rs") + .run_fail() + // The build should fail cleanly, but not ICE. + .assert_exit_code(1) + .assert_stderr_contains("error: malformed `coverage` attribute input"); +}