--- /dev/null
+// 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
+ }];
+}
--- /dev/null
+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`.