Rust errors / Types and traits
Rust compiler error · checked with rustc 1.99.0
Rust error E0569: requires an `unsafe impl` declaration due to `#[may_dangle]` attribute
What it meansIf an impl has a generic parameter with the #[may_dangle] attribute, then that impl must be declared as an unsafe impl.
What rustc prints
error[E0569]: requires an `unsafe impl` declaration due to `#[may_dangle]` attribute --> main.rs:4:1 | 4 | impl<#[may_dangle] X> Drop for Foo<X> { | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | = note: the trait `Drop` enforces invariants that the compiler can't check. Review the trait documentation and make sure this implementation upholds those invariants before adding the `unsafe` keyword help: add `unsafe` to this trait implementation | 4 | unsafe impl<#[may_dangle] X> Drop for Foo<X> { | ++++++
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
If an impl has a generic parameter with the #[may_dangle] attribute, then that impl must be declared as an unsafe impl.
Erroneous code example:
#![feature(dropck_eyepatch)]
struct Foo<X>(X);
impl<#[may_dangle] X> Drop for Foo<X> {
fn drop(&mut self) { }
}
In this example, we are asserting that the destructor for Foo will not access any data of type X, and require this assertion to be true for overall safety in our program. The compiler does not currently attempt to verify this assertion; therefore we must tag this impl as unsafe.
From rustc --explain E0569 (1.99.0), part of the Rust project, MIT or Apache-2.0. Official page.
Related errors
- E0308mismatched types
- E0277the trait bound is not satisfied
- E0599no method named X found in the current scope
- E0433failed to resolve
- E0562`impl Trait` is not allowed in the type of variable bindings
- E0567auto traits cannot have generic parameters
- E0573expected type, found variant `Dragon::Born`
- E0574expected struct, variant or union type, found module `mordor`
Up next
Often hit nextE0308: mismatched typesA related error from the same family.Read it next →Did this answer your question?