]> git.lizzy.rs Git - rust.git/commitdiff
Add tests for loop constructs in consts
authorDylan MacKenzie <ecstaticmorse@gmail.com>
Mon, 4 Nov 2019 21:09:02 +0000 (13:09 -0800)
committerDylan MacKenzie <ecstaticmorse@gmail.com>
Mon, 4 Nov 2019 22:19:51 +0000 (14:19 -0800)
These errors are suboptimal, but they will be fixed by the new
`check_consts` pass.

src/test/ui/consts/const-loop.rs [new file with mode: 0644]
src/test/ui/consts/const-loop.stderr [new file with mode: 0644]

diff --git a/src/test/ui/consts/const-loop.rs b/src/test/ui/consts/const-loop.rs
new file mode 100644 (file)
index 0000000..954f269
--- /dev/null
@@ -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 (file)
index 0000000..e6e4e2f
--- /dev/null
@@ -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`.