Rust errors / Everything else
Rust compiler error · checked with rustc 1.99.0
Rust error E0320: overflow while adding drop-check rules for `A<T>`
What it meansRecursion limit reached while creating drop-check rules.
What rustc prints
error[E0320]: overflow while adding drop-check rules for `A<T>` --> main.rs:7:5 | 7 | A::<T>::B; // error: overflow while adding drop-check rules for A<T> | ^^^^^^^^^ | = note: overflowed on `A<(((((((((((((_, _), _), _), _), _), _), _), _), _), _), _), _), _)>` = note: the full name for the type has been written to 'C:\Users\Matthew\AppData\Local\Temp\rerr-g8dunho1\out.long-type-16158353343489364406.txt' = note: consider using `--verbose` to print the full type name to the console
Real output of rustc 1.99.0 compiling the official example below (2021 edition). Your names and line numbers will differ; the first line is the part to match.
The compiler team's explanation
Recursion limit reached while creating drop-check rules.
Example of erroneous code:
enum A<T> {
B,
C(T, Box<A<(T, T)>>)
}
fn foo<T>() {
A::<T>::B; // error: overflow while adding drop-check rules for A<T>
}
The Rust compiler must be able to reason about how a type is Dropped, and by extension the types of its fields, to be able to generate the glue to properly drop a value. The code example above shows a type where this inference is impossible because it is recursive. Note that this is *not* the same as E0072, where a type has an infinite size; the type here has a finite size but any attempt to Drop it would recurse infinitely. For more information, read the Drop docs.
It is not possible to define a type with recursive drop-check rules. All such recursion must be removed.
From rustc --explain E0320 (1.99.0), part of the Rust project, MIT or Apache-2.0. Official page.
Related errors
- E0072recursive type has infinite size
- E0061this function takes N arguments but M were supplied
- E0412cannot find type in this scope
- E0515cannot return reference to local variable
- E0728await is only allowed inside async functions and blocks
- E0268`break` outside of a loop or labeled block
- E0317`if` may be missing an `else` clause
- E0370enum discriminant overflowed
- E0436functional record update syntax requires a struct
Up next
Often hit nextE0072: recursive type has infinite sizeA related error from the same family.Read it next →Did this answer your question?