1
Fork 0

Add tests for loop constructs in consts

These errors are suboptimal, but they will be fixed by the new
`check_consts` pass.
This commit is contained in:
Dylan MacKenzie 2019-11-04 13:09:02 -08:00
parent 2477e2493e
commit c8ae2819c5
2 changed files with 118 additions and 0 deletions

View file

@ -0,0 +1,58 @@
const _: i32 = {
let mut x = 0;
while x < 4 {
//~^ ERROR constant contains unimplemented expression type
//~| ERROR constant contains unimplemented expression type
x += 1;
}
while x < 8 {
x += 1;
}
x
};
const _: i32 = {
let mut x = 0;
for i in 0..4 {
//~^ ERROR constant contains unimplemented expression type
//~| ERROR constant contains unimplemented expression type
//~| ERROR references in constants may only refer to immutable values
//~| ERROR calls in constants are limited to constant functions, tuple
// structs and tuple variants
x += i;
}
for i in 0..4 {
x += i;
}
x
};
const _: i32 = {
let mut x = 0;
loop {
x += 1;
if x == 4 {
//~^ ERROR constant contains unimplemented expression type
//~| ERROR constant contains unimplemented expression type
break;
}
}
loop {
x += 1;
if x == 8 {
break;
}
}
x
};
fn main() {}

View file

@ -0,0 +1,60 @@
error[E0019]: constant contains unimplemented expression type
--> $DIR/const-loop.rs:4:11
|
LL | while x < 4 {
| ^^^^^
error[E0019]: constant contains unimplemented expression type
--> $DIR/const-loop.rs:4:5
|
LL | / while x < 4 {
LL | |
LL | |
LL | | x += 1;
LL | | }
| |_____^
error[E0015]: calls in constants are limited to constant functions, tuple structs and tuple variants
--> $DIR/const-loop.rs:20:14
|
LL | for i in 0..4 {
| ^^^^
error[E0019]: constant contains unimplemented expression type
--> $DIR/const-loop.rs:20:14
|
LL | for i in 0..4 {
| ^^^^
error[E0017]: references in constants may only refer to immutable values
--> $DIR/const-loop.rs:20:14
|
LL | for i in 0..4 {
| ^^^^ constants require immutable values
error[E0019]: constant contains unimplemented expression type
--> $DIR/const-loop.rs:20:9
|
LL | for i in 0..4 {
| ^
error[E0019]: constant contains unimplemented expression type
--> $DIR/const-loop.rs:41:12
|
LL | if x == 4 {
| ^^^^^^
error[E0019]: constant contains unimplemented expression type
--> $DIR/const-loop.rs:41:9
|
LL | / if x == 4 {
LL | |
LL | |
LL | | break;
LL | | }
| |_________^
error: aborting due to 8 previous errors
Some errors have detailed explanations: E0015, E0017, E0019.
For more information about an error, try `rustc --explain E0015`.