From c8ae2819c5e8eeaa9a1f6435148f8d05fb5f8c56 Mon Sep 17 00:00:00 2001 From: Dylan MacKenzie Date: Mon, 4 Nov 2019 13:09:02 -0800 Subject: [PATCH] Add tests for loop constructs in consts These errors are suboptimal, but they will be fixed by the new `check_consts` pass. --- src/test/ui/consts/const-loop.rs | 58 +++++++++++++++++++++++++++ src/test/ui/consts/const-loop.stderr | 60 ++++++++++++++++++++++++++++ 2 files changed, 118 insertions(+) create mode 100644 src/test/ui/consts/const-loop.rs create mode 100644 src/test/ui/consts/const-loop.stderr diff --git a/src/test/ui/consts/const-loop.rs b/src/test/ui/consts/const-loop.rs new file mode 100644 index 0000000000000..954f269d30e59 --- /dev/null +++ b/src/test/ui/consts/const-loop.rs @@ -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() {} diff --git a/src/test/ui/consts/const-loop.stderr b/src/test/ui/consts/const-loop.stderr new file mode 100644 index 0000000000000..e6e4e2f5bb808 --- /dev/null +++ b/src/test/ui/consts/const-loop.stderr @@ -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`.