loop_match: fix 'no terminator on block'

This commit is contained in:
Folkert de Vries
2025-07-07 13:55:40 +02:00
parent c720f49c46
commit 6d58a88c3c
3 changed files with 34 additions and 1 deletions

View File

@@ -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 });
}

View File

@@ -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!(),
}
}
}
}

View File

@@ -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`.