Skip to content

Commit

Permalink
Update const-eval tests
Browse files Browse the repository at this point in the history
  • Loading branch information
ecstatic-morse committed Mar 18, 2020
1 parent e15c486 commit 044dc6e
Show file tree
Hide file tree
Showing 7 changed files with 46 additions and 70 deletions.
1 change: 0 additions & 1 deletion src/test/ui/consts/const-eval/infinite_loop.rs
Expand Up @@ -2,7 +2,6 @@ fn main() {
// Tests the Collatz conjecture with an incorrect base case (0 instead of 1).
// The value of `n` will loop indefinitely (4 - 2 - 1 - 4).
let _ = [(); {
//~^ WARNING Constant evaluating a complex constant, this might take some time
let mut n = 113383; // #20 in https://oeis.org/A006884
while n != 0 {
//~^ ERROR `while` is not allowed in a `const`
Expand Down
21 changes: 4 additions & 17 deletions src/test/ui/consts/const-eval/infinite_loop.stderr
@@ -1,5 +1,5 @@
error[E0658]: `while` is not allowed in a `const`
--> $DIR/infinite_loop.rs:7:9
--> $DIR/infinite_loop.rs:6:9
|
LL | / while n != 0 {
LL | |
Expand All @@ -14,32 +14,19 @@ LL | | }
= help: add `#![feature(const_if_match)]` to the crate attributes to enable

error[E0658]: `if` is not allowed in a `const`
--> $DIR/infinite_loop.rs:9:17
--> $DIR/infinite_loop.rs:8:17
|
LL | n = if n % 2 == 0 { n/2 } else { 3*n + 1 };
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: see issue #49146 <https://github.com/rust-lang/rust/issues/49146> for more information
= help: add `#![feature(const_if_match)]` to the crate attributes to enable

warning: Constant evaluating a complex constant, this might take some time
--> $DIR/infinite_loop.rs:4:18
|
LL | let _ = [(); {
| __________________^
LL | |
LL | | let mut n = 113383; // #20 in https://oeis.org/A006884
LL | | while n != 0 {
... |
LL | | n
LL | | }];
| |_____^

error[E0080]: evaluation of constant value failed
--> $DIR/infinite_loop.rs:9:20
--> $DIR/infinite_loop.rs:8:20
|
LL | n = if n % 2 == 0 { n/2 } else { 3*n + 1 };
| ^^^^^^^^^^ duplicate interpreter state observed here, const evaluation will never terminate
| ^^^^^^^^^^ exceeded interpreter time limit

error: aborting due to 3 previous errors

Expand Down
1 change: 0 additions & 1 deletion src/test/ui/consts/const-eval/issue-52475.rs
@@ -1,6 +1,5 @@
fn main() {
let _ = [(); {
//~^ WARNING Constant evaluating a complex constant, this might take some time
let mut x = &0;
let mut n = 0;
while n < 5 {
Expand Down
19 changes: 3 additions & 16 deletions src/test/ui/consts/const-eval/issue-52475.stderr
@@ -1,5 +1,5 @@
error[E0658]: `while` is not allowed in a `const`
--> $DIR/issue-52475.rs:6:9
--> $DIR/issue-52475.rs:5:9
|
LL | / while n < 5 {
LL | |
Expand All @@ -12,24 +12,11 @@ LL | | }
= help: add `#![feature(const_loop)]` to the crate attributes to enable
= help: add `#![feature(const_if_match)]` to the crate attributes to enable

warning: Constant evaluating a complex constant, this might take some time
--> $DIR/issue-52475.rs:2:18
|
LL | let _ = [(); {
| __________________^
LL | |
LL | | let mut x = &0;
LL | | let mut n = 0;
... |
LL | | 0
LL | | }];
| |_____^

error[E0080]: evaluation of constant value failed
--> $DIR/issue-52475.rs:8:17
--> $DIR/issue-52475.rs:7:17
|
LL | n = (n + 1) % 5;
| ^^^^^^^^^^^ duplicate interpreter state observed here, const evaluation will never terminate
| ^^^^^^^^^^^ exceeded interpreter time limit

error: aborting due to 2 previous errors

Expand Down
22 changes: 14 additions & 8 deletions src/test/ui/consts/const_limit/const_eval_limit_not_reached.rs
@@ -1,15 +1,21 @@
// check-pass

#![feature(const_eval_limit)]
#![const_eval_limit="1000"]
#![feature(const_loop, const_if_match)]

const CONSTANT: usize = limit();
// This needs to be higher than the number of loop iterations since each pass through the loop may
// hit more than one terminator.
#![const_eval_limit="4000"]

fn main() {
assert_eq!(CONSTANT, 1764);
}
const X: usize = {
let mut x = 0;
while x != 1000 {
x += 1;
}

const fn limit() -> usize {
let x = 42;
x
};

x * 42
fn main() {
assert_eq!(X, 1000);
}
27 changes: 12 additions & 15 deletions src/test/ui/consts/const_limit/const_eval_limit_reached.rs
@@ -1,21 +1,18 @@
// ignore-tidy-linelength
// only-x86_64
// check-pass
// NOTE: We always compile this test with -Copt-level=0 because higher opt-levels
// optimize away the const function
// compile-flags:-Copt-level=0
#![feature(const_eval_limit)]
#![const_eval_limit="2"]
#![feature(const_loop, const_if_match)]

const CONSTANT: usize = limit();
//~^ WARNING Constant evaluating a complex constant, this might take some time
#![const_eval_limit="500"]

fn main() {
assert_eq!(CONSTANT, 1764);
}
const X: usize = {
let mut x = 0;
while x != 1000 {
//~^ ERROR any use of this value will cause an error
x += 1;
}

const fn limit() -> usize { //~ WARNING Constant evaluating a complex constant, this might take some time
let x = 42;
x
};

x * 42
fn main() {
assert_eq!(X, 1000);
}
25 changes: 13 additions & 12 deletions src/test/ui/consts/const_limit/const_eval_limit_reached.stderr
@@ -1,16 +1,17 @@
warning: Constant evaluating a complex constant, this might take some time
--> $DIR/const_eval_limit_reached.rs:17:1
error: any use of this value will cause an error
--> $DIR/const_eval_limit_reached.rs:8:11
|
LL | / const fn limit() -> usize {
LL | | let x = 42;
LL | / const X: usize = {
LL | | let mut x = 0;
LL | | while x != 1000 {
| | ^^^^^^^^^ exceeded interpreter time limit
LL | |
LL | | x * 42
LL | | }
| |_^

warning: Constant evaluating a complex constant, this might take some time
--> $DIR/const_eval_limit_reached.rs:10:1
... |
LL | | x
LL | | };
| |__-
|
LL | const CONSTANT: usize = limit();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
= note: `#[deny(const_err)]` on by default

error: aborting due to previous error

0 comments on commit 044dc6e

Please sign in to comment.