forked from rust-lang/rust
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
This test relies on the fact that restrictions on expressions in `const fn` do not apply when computing array lengths. It is more difficult to statically analyze than the simple `loop{}` mentioned in rust-lang#50637. This test should be updated to ignore the warning after rust-lang#49980 is resolved.
- Loading branch information
1 parent
10f2171
commit d36302d
Showing
2 changed files
with
66 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
// Copyright 2018 The Rust Project Developers. See the COPYRIGHT | ||
// file at the top-level directory of this distribution and at | ||
// http://rust-lang.org/COPYRIGHT. | ||
// | ||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or | ||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license | ||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your | ||
// option. This file may not be copied, modified, or distributed | ||
// except according to those terms. | ||
|
||
#![feature(const_let)] | ||
|
||
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 | ||
//~| ERROR could not evaluate repeat length | ||
let mut n = 113383; // #20 in A006884 | ||
while n != 0 { //~ ERROR constant contains unimplemented expression type | ||
n = if n % 2 == 0 { n/2 } else { 3*n + 1 }; | ||
} | ||
n | ||
}]; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
error[E0019]: constant contains unimplemented expression type | ||
--> $DIR/infinite_loop.rs:20:9 | ||
| | ||
LL | / while n != 0 { //~ ERROR constant contains unimplemented expression type | ||
LL | | n = if n % 2 == 0 { n/2 } else { 3*n + 1 }; | ||
LL | | } | ||
| |_________^ | ||
|
||
warning: Constant evaluating a complex constant, this might take some time | ||
--> $DIR/infinite_loop.rs:16:18 | ||
| | ||
LL | let _ = [(); { | ||
| __________________^ | ||
LL | | //~^ WARNING Constant evaluating a complex constant, this might take some time | ||
LL | | //~| ERROR could not evaluate repeat length | ||
LL | | let mut n = 113383; // #20 in A006884 | ||
... | | ||
LL | | n | ||
LL | | }]; | ||
| |_____^ | ||
|
||
error[E0080]: could not evaluate repeat length | ||
--> $DIR/infinite_loop.rs:16:18 | ||
| | ||
LL | let _ = [(); { | ||
| __________________^ | ||
LL | | //~^ WARNING Constant evaluating a complex constant, this might take some time | ||
LL | | //~| ERROR could not evaluate repeat length | ||
LL | | let mut n = 113383; // #20 in A006884 | ||
LL | | while n != 0 { //~ ERROR constant contains unimplemented expression type | ||
LL | | n = if n % 2 == 0 { n/2 } else { 3*n + 1 }; | ||
| | ---------- program will never terminate | ||
LL | | } | ||
LL | | n | ||
LL | | }]; | ||
| |_____^ | ||
|
||
error: aborting due to 2 previous errors | ||
|
||
Some errors occurred: E0019, E0080. | ||
For more information about an error, try `rustc --explain E0019`. |