forked from rust-lang/rust
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Rollup merge of rust-lang#105792 - Ezrashaw:add-e0320-long-docs, r=Gu…
…illaumeGomez docs: add long error explanation for error E0320 Continuation of rust-lang#105791 r? ``@GuillaumeGomez``
- Loading branch information
Showing
6 changed files
with
32 additions
and
1 deletion.
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
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,27 @@ | ||
Recursion limit reached while creating drop-check rules. | ||
|
||
Example of erroneous code: | ||
|
||
```compile_fail,E0320 | ||
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 [`Drop`]ped, 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](E0072.html), 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](../std/ops/trait.Drop.html). | ||
|
||
It is not possible to define a type with recursive drop-check rules. All such | ||
recursion must be removed. | ||
|
||
[`Drop`]: ../std/ops/trait.Drop.html |
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
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
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
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