error[E0740]: field must implement `Copy` or be wrapped in `ManuallyDrop<...>` to be unsafe --> $DIR/unsafe-fields.rs:20:5 | LL | unsafe unsafe_noncopy_field: Vec, | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | = note: unsafe fields must not have drop side-effects, which is currently enforced via either `Copy` or `ManuallyDrop<...>` help: wrap the field type in `ManuallyDrop<...>` | LL | unsafe unsafe_noncopy_field: std::mem::ManuallyDrop>, | +++++++++++++++++++++++ + error[E0133]: use of unsafe field is unsafe and requires unsafe block --> $DIR/unsafe-fields.rs:15:30 | LL | let A::WithUnsafeField { unsafe_field, safe_field } = a; | ^^^^^^^^^^^^ use of unsafe field | = note: unsafe fields may carry library invariants error[E0133]: initializing type with an unsafe field is unsafe and requires unsafe block --> $DIR/unsafe-fields.rs:43:9 | LL | / WithUnsafeField { LL | | unsafe_field: 0, LL | | safe_field: 0, LL | | } | |_________^ initialization of struct with unsafe field | = note: unsafe fields may carry library invariants error[E0133]: use of unsafe field is unsafe and requires unsafe block --> $DIR/unsafe-fields.rs:80:9 | LL | self.unsafe_field = 2; | ^^^^^^^^^^^^^^^^^ use of unsafe field | = note: unsafe fields may carry library invariants error[E0133]: use of unsafe field is unsafe and requires unsafe block --> $DIR/unsafe-fields.rs:85:9 | LL | self.unsafe_field | ^^^^^^^^^^^^^^^^^ use of unsafe field | = note: unsafe fields may carry library invariants error[E0133]: use of unsafe field is unsafe and requires unsafe block --> $DIR/unsafe-fields.rs:90:10 | LL | &self.unsafe_field | ^^^^^^^^^^^^^^^^^ use of unsafe field | = note: unsafe fields may carry library invariants error[E0133]: use of unsafe field is unsafe and requires unsafe block --> $DIR/unsafe-fields.rs:95:32 | LL | let Self { safe_field, unsafe_field } = self; | ^^^^^^^^^^^^ use of unsafe field | = note: unsafe fields may carry library invariants error[E0133]: use of unsafe field is unsafe and requires unsafe block --> $DIR/unsafe-fields.rs:106:20 | LL | &raw const self.unsafe_field | ^^^^^^^^^^^^^^^^^ use of unsafe field | = note: unsafe fields may carry library invariants error: aborting due to 8 previous errors Some errors have detailed explanations: E0133, E0740. For more information about an error, try `rustc --explain E0133`.