Hitting the recursion limit when evaluating a type does not provide a useful error message #101747
Description
Inspired by this incredible Twitter thread
Given the following code: Playground
type Byte = Option<Option<Option<Option< Option<Option<Option<Option<
Option<Option<Option<Option< Option<Option<Option<Option<
Option<Option<Option<Option< Option<Option<Option<Option<
Option<Option<Option<Option< Option<Option<Option<Option<
Option<Option<Option<Option< Option<Option<Option<Option<
Option<Option<Option<Option< Option<Option<Option<Option<
Option<Option<Option<Option< Option<Option<Option<Option<
Option<Option<Option<Option< Option<Option<Option<Option<
Option<Option<Option<Option< Option<Option<Option<Option<
Option<Option<Option<Option< Option<Option<Option<Option<
Option<Option<Option<Option< Option<Option<Option<Option<
Option<Option<Option<Option< Option<Option<Option<Option<
Option<Option<Option<Option< Option<Option<Option<Option<
Option<Option<Option<Option< Option<Option<Option<Option<
Option<Option<Option<Option< Option<Option<Option<Option<
Option<Option<Option<Option< Option<Option<Option<Option<
Box<String>
>>>> >>>>
>>>> >>>>
>>>> >>>>
>>>> >>>>
>>>> >>>>
>>>> >>>>
>>>> >>>>
>>>> >>>>
>>>> >>>>
>>>> >>>>
>>>> >>>>
>>>> >>>>
>>>> >>>>
>>>> >>>>
>>>> >>>>
>>>> >>>>;
fn main() {
println!("{}", std::mem::size_of::<Byte>());
}
The current output is:
error: overflow representing the type `Unique<String>`
This error message doesn't really communicate the problem to anyone who isn't aware of rustc internals. It also does not communicate the (fairly simple) fix of upping the recursion limit #![recursion_limit = "256"]
.
It would be nice to provide an actual diagnostic pointing out the location of the error in the source code (reconstructing that might be complicated, I'm not sure). The current error can be particularly confusing since the type in the error message can be private to another type that's being evaluated, as is the case in this example where an inner type in Box
is printed in the error.
Rust analyzer does not show any similar warnings or errors.
Nightly prints a slightly different error message, but if anything it's even less helpful
error: queries overflow the depth limit!
rustc 1.63.0 (4b91a6ea7 2022-08-08)
binary: rustc
commit-hash: 4b91a6ea7258a947e59c6522cd5898e7c0a6a88f
commit-date: 2022-08-08
host: x86_64-pc-windows-msvc
release: 1.63.0
LLVM version: 14.0.5
rustc 1.65.0-nightly (fa6ee9375 2022-09-12)
binary: rustc
commit-hash: fa6ee9375242ae784dab1837dfc0b92f43e787ce
commit-date: 2022-09-12
host: x86_64-pc-windows-msvc
release: 1.65.0-nightly
LLVM version: 15.0.0
Activity