diff options
| author | Folkert de Vries <folkert@folkertdev.nl> | 2025-07-07 13:55:40 +0200 |
|---|---|---|
| committer | Folkert de Vries <folkert@folkertdev.nl> | 2025-07-07 13:55:40 +0200 |
| commit | 6d58a88c3ca2eefc24654700db522bfed668e1cb (patch) | |
| tree | f49a33a8a91056a33061bb9fb16f836f11133fef | |
| parent | c720f49c46ec3e70bbc2bbb3e0dd1fe7fc0a47f2 (diff) | |
| download | rust-6d58a88c3ca2eefc24654700db522bfed668e1cb.tar.gz rust-6d58a88c3ca2eefc24654700db522bfed668e1cb.zip | |
`loop_match`: fix 'no terminator on block'
| -rw-r--r-- | compiler/rustc_mir_build/src/builder/scope.rs | 4 | ||||
| -rw-r--r-- | tests/ui/loop-match/panic-in-const.rs | 22 | ||||
| -rw-r--r-- | tests/ui/loop-match/panic-in-const.stderr | 9 |
3 files changed, 34 insertions, 1 deletions
diff --git a/compiler/rustc_mir_build/src/builder/scope.rs b/compiler/rustc_mir_build/src/builder/scope.rs index 405d47c7c79..5a5456aedc2 100644 --- a/compiler/rustc_mir_build/src/builder/scope.rs +++ b/compiler/rustc_mir_build/src/builder/scope.rs @@ -936,7 +936,9 @@ impl<'a, 'tcx> Builder<'a, 'tcx> { valtree } - Err(ErrorHandled::Reported(..)) => return self.cfg.start_new_block().unit(), + Err(ErrorHandled::Reported(..)) => { + return block.unit(); + } Err(ErrorHandled::TooGeneric(_)) => { self.tcx.dcx().emit_fatal(ConstContinueBadConst { span: constant.span }); } diff --git a/tests/ui/loop-match/panic-in-const.rs b/tests/ui/loop-match/panic-in-const.rs new file mode 100644 index 00000000000..2ae67445496 --- /dev/null +++ b/tests/ui/loop-match/panic-in-const.rs @@ -0,0 +1,22 @@ +#![allow(incomplete_features)] +#![feature(loop_match)] +#![crate_type = "lib"] + +const CONST_THAT_PANICS: u8 = panic!("diverge!"); +//~^ ERROR: evaluation panicked: diverge! + +fn test(mut state: u8) { + #[loop_match] + loop { + state = 'blk: { + match state { + 0 => { + #[const_continue] + break 'blk CONST_THAT_PANICS; + } + + _ => unreachable!(), + } + } + } +} diff --git a/tests/ui/loop-match/panic-in-const.stderr b/tests/ui/loop-match/panic-in-const.stderr new file mode 100644 index 00000000000..b6ed3177883 --- /dev/null +++ b/tests/ui/loop-match/panic-in-const.stderr @@ -0,0 +1,9 @@ +error[E0080]: evaluation panicked: diverge! + --> $DIR/panic-in-const.rs:5:31 + | +LL | const CONST_THAT_PANICS: u8 = panic!("diverge!"); + | ^^^^^^^^^^^^^^^^^^ evaluation of `CONST_THAT_PANICS` failed here + +error: aborting due to 1 previous error + +For more information about this error, try `rustc --explain E0080`. |
