Closed
Description
const fn foo<T>() {
const { foo::<&T>() }
}
const X: () = foo::<i32>();
The above code causes the compiler to hang, apparently in an infinite loop. I expected it to report an error due to a recursion limit or a timeout.
Note that removing the const block causes the compiler to correctly report an error.
Code without the const block
const fn foo<T>() {
foo::<&T>()
}
const X: () = foo::<i32>();
This code results in the following error:
Compiling playground v0.0.1 (/playground)
warning: function cannot return without recursing
--> src/lib.rs:1:1
|
1 | const fn foo<T>() {
| ^^^^^^^^^^^^^^^^^ cannot return without recursing
2 | foo::<&T>()
| ----------- recursive call site
|
= help: a `loop` may express intention better if this is on purpose
= note: `#[warn(unconditional_recursion)]` on by default
error[E0080]: evaluation of constant value failed
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^ reached the configured maximum number of stack frames
|
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<&i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `foo::<i32>`
--> src/lib.rs:2:5
|
2 | foo::<&T>()
| ^^^^^^^^^^^
note: inside `X`
--> src/lib.rs:5:15
|
5 | const X: () = foo::<i32>();
| ^^^^^^^^^^^^
For more information about this error, try `rustc --explain E0080`.
warning: `playground` (lib) generated 1 warning
error: could not compile `playground` (lib) due to 1 previous error; 1 warning emitted
Changing the infinite recursion into an infinite loop correctly causes a timeout.
Code with an infinite loop instead of an infinite recursion
const fn foo() {
const { loop {} }
}
const X: () = foo();
This code results in the following error:
Compiling playground v0.0.1 (/playground)
warning: unreachable expression
--> src/lib.rs:2:5
|
2 | const { loop {} }
| ^^^^^^^^-------^^
| | |
| | any code following this expression is unreachable
| unreachable expression
|
= note: `#[warn(unreachable_code)]` on by default
error: constant evaluation is taking a long time
--> src/lib.rs:2:13
|
2 | const { loop {} }
| ^^^^^^^
|
= note: this lint makes sure the compiler doesn't get stuck due to infinite loops in const eval.
If your compilation actually takes a long time, you can safely allow the lint.
help: the constant being evaluated
--> src/lib.rs:2:5
|
2 | const { loop {} }
| ^^^^^^^^^^^^^^^^^
= note: `#[deny(long_running_const_eval)]` on by default
note: erroneous constant encountered
--> src/lib.rs:2:5
|
2 | const { loop {} }
| ^^^^^^^^^^^^^^^^^
warning: function `foo` is never used
--> src/lib.rs:1:10
|
1 | const fn foo() {
| ^^^
|
= note: `#[warn(dead_code)]` on by default
warning: constant `X` is never used
--> src/lib.rs:5:7
|
5 | const X: () = foo();
| ^
warning: `playground` (lib) generated 3 warnings
error: could not compile `playground` (lib) due to 1 previous error; 3 warnings emitted
See also #125713
Meta
rustc --version --verbose
:
rustc 1.80.0-nightly (da159eb33 2024-05-28)
binary: rustc
commit-hash: da159eb331b27df528185c616b394bb0e1d2a4bd
commit-date: 2024-05-28
host: aarch64-apple-darwin
release: 1.80.0-nightly
LLVM version: 18.1.6```
Metadata
Metadata
Assignees
Labels
Area: Constant evaluation, covers all const contexts (static, const fn, ...)Category: This is a bug.Inline constants (aka: const blocks, const expressions, anonymous constants)Issue: The compiler crashes (SIGSEGV, SIGABRT, etc). Use I-ICE instead when the compiler panics.Issue: The compiler never terminates, due to infinite loops, deadlock, livelock, etc.Medium priorityRelevant to the compiler team, which will review and decide on the PR/issue.