about summary refs log tree commit diff
path: root/src/test/ui/consts
diff options
context:
space:
mode:
authorDylan MacKenzie <ecstaticmorse@gmail.com>2019-11-04 13:09:02 -0800
committerDylan MacKenzie <ecstaticmorse@gmail.com>2019-11-04 14:19:51 -0800
commitc8ae2819c5e8eeaa9a1f6435148f8d05fb5f8c56 (patch)
tree49009232802f229dca9cd01ef7fbdb04cbcff026 /src/test/ui/consts
parent2477e2493e67527fc282c7239e019f7ebd513a1a (diff)
downloadrust-c8ae2819c5e8eeaa9a1f6435148f8d05fb5f8c56.tar.gz
rust-c8ae2819c5e8eeaa9a1f6435148f8d05fb5f8c56.zip
Add tests for loop constructs in consts
These errors are suboptimal, but they will be fixed by the new
`check_consts` pass.
Diffstat (limited to 'src/test/ui/consts')
-rw-r--r--src/test/ui/consts/const-loop.rs58
-rw-r--r--src/test/ui/consts/const-loop.stderr60
2 files changed, 118 insertions, 0 deletions
diff --git a/src/test/ui/consts/const-loop.rs b/src/test/ui/consts/const-loop.rs
new file mode 100644
index 00000000000..954f269d30e
--- /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 00000000000..e6e4e2f5bb8
--- /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`.