Add test cases

This commit is contained in:
Kirill Podoprigora 2024-11-13 22:35:39 +02:00
parent a00df61387
commit 7347beed88
2 changed files with 124 additions and 0 deletions

View File

@ -0,0 +1,46 @@
//@edition:2021
fn foo() {
const { return }
//~^ ERROR: return statement outside of function body
}
fn labelled_block_break() {
'a: { const { break 'a } }
//~^ ERROR: `break` outside of a loop or labeled block
//~| ERROR: use of unreachable label
}
fn loop_break() {
loop {
const { break }
//~^ ERROR: `break` outside of a loop or labeled block
}
}
fn continue_to_labelled_block() {
'a: { const { continue 'a } }
//~^ ERROR: `continue` outside of a loop
//~| ERROR: use of unreachable label
}
fn loop_continue() {
loop {
const { continue }
//~^ ERROR: `continue` outside of a loop
}
}
async fn await_across_const_block() {
const { async {}.await }
//~^ ERROR: `await` is only allowed inside `async` functions and blocks
}
fn reference_to_non_constant_in_const_block() {
let x = 1;
const { &x };
//~^ ERROR: attempt to use a non-constant value in a constant
}
fn main() {}

View File

@ -0,0 +1,78 @@
error[E0767]: use of unreachable label `'a`
--> $DIR/cross_const_control_flow.rs:9:25
|
LL | 'a: { const { break 'a } }
| -- ^^ unreachable label `'a`
| |
| unreachable label defined here
|
= note: labels are unreachable through functions, closures, async blocks and modules
error[E0767]: use of unreachable label `'a`
--> $DIR/cross_const_control_flow.rs:22:28
|
LL | 'a: { const { continue 'a } }
| -- ^^ unreachable label `'a`
| |
| unreachable label defined here
|
= note: labels are unreachable through functions, closures, async blocks and modules
error[E0435]: attempt to use a non-constant value in a constant
--> $DIR/cross_const_control_flow.rs:41:14
|
LL | const { &x };
| ^ non-constant value
|
help: consider using `const` instead of `let`
|
LL | const x: /* Type */ = 1;
| ~~~~~ ++++++++++++
error[E0728]: `await` is only allowed inside `async` functions and blocks
--> $DIR/cross_const_control_flow.rs:35:22
|
LL | const { async {}.await }
| -----------^^^^^--
| | |
| | only allowed inside `async` functions and blocks
| this is not `async`
error[E0268]: `break` outside of a loop or labeled block
--> $DIR/cross_const_control_flow.rs:9:19
|
LL | 'a: { const { break 'a } }
| ^^^^^^^^ cannot `break` outside of a loop or labeled block
error[E0268]: `break` outside of a loop or labeled block
--> $DIR/cross_const_control_flow.rs:16:17
|
LL | const { break }
| ^^^^^ cannot `break` outside of a loop or labeled block
error[E0268]: `continue` outside of a loop
--> $DIR/cross_const_control_flow.rs:22:19
|
LL | 'a: { const { continue 'a } }
| ^^^^^^^^^^^ cannot `continue` outside of a loop
error[E0268]: `continue` outside of a loop
--> $DIR/cross_const_control_flow.rs:29:17
|
LL | const { continue }
| ^^^^^^^^ cannot `continue` outside of a loop
error[E0572]: return statement outside of function body
--> $DIR/cross_const_control_flow.rs:4:13
|
LL | / fn foo() {
LL | | const { return }
| | --^^^^^^-- the return is part of this body...
LL | |
LL | | }
| |_- ...not the enclosing function body
error: aborting due to 9 previous errors
Some errors have detailed explanations: E0268, E0435, E0572, E0728, E0767.
For more information about an error, try `rustc --explain E0268`.