make unaligned_reference a hard error
This commit is contained in:
parent
f361413cbf
commit
dfc4a7b2d0
27 changed files with 170 additions and 686 deletions
|
@ -1187,51 +1187,6 @@ declare_lint! {
|
|||
"lints that have been renamed or removed"
|
||||
}
|
||||
|
||||
declare_lint! {
|
||||
/// The `unaligned_references` lint detects unaligned references to fields
|
||||
/// of [packed] structs.
|
||||
///
|
||||
/// [packed]: https://doc.rust-lang.org/reference/type-layout.html#the-alignment-modifiers
|
||||
///
|
||||
/// ### Example
|
||||
///
|
||||
/// ```rust,compile_fail
|
||||
/// #[repr(packed)]
|
||||
/// pub struct Foo {
|
||||
/// field1: u64,
|
||||
/// field2: u8,
|
||||
/// }
|
||||
///
|
||||
/// fn main() {
|
||||
/// unsafe {
|
||||
/// let foo = Foo { field1: 0, field2: 0 };
|
||||
/// let _ = &foo.field1;
|
||||
/// println!("{}", foo.field1); // An implicit `&` is added here, triggering the lint.
|
||||
/// }
|
||||
/// }
|
||||
/// ```
|
||||
///
|
||||
/// {{produces}}
|
||||
///
|
||||
/// ### Explanation
|
||||
///
|
||||
/// Creating a reference to an insufficiently aligned packed field is [undefined behavior] and
|
||||
/// should be disallowed. Using an `unsafe` block does not change anything about this. Instead,
|
||||
/// the code should do a copy of the data in the packed field or use raw pointers and unaligned
|
||||
/// accesses. See [issue #82523] for more information.
|
||||
///
|
||||
/// [undefined behavior]: https://doc.rust-lang.org/reference/behavior-considered-undefined.html
|
||||
/// [issue #82523]: https://github.com/rust-lang/rust/issues/82523
|
||||
pub UNALIGNED_REFERENCES,
|
||||
Deny,
|
||||
"detects unaligned references to fields of packed structs",
|
||||
@future_incompatible = FutureIncompatibleInfo {
|
||||
reference: "issue #82523 <https://github.com/rust-lang/rust/issues/82523>",
|
||||
reason: FutureIncompatibilityReason::FutureReleaseErrorReportNow,
|
||||
};
|
||||
report_in_external_macro
|
||||
}
|
||||
|
||||
declare_lint! {
|
||||
/// The `const_item_mutation` lint detects attempts to mutate a `const`
|
||||
/// item.
|
||||
|
@ -3308,7 +3263,6 @@ declare_lint_pass! {
|
|||
PUB_USE_OF_PRIVATE_EXTERN_CRATE,
|
||||
INVALID_TYPE_PARAM_DEFAULT,
|
||||
RENAMED_AND_REMOVED_LINTS,
|
||||
UNALIGNED_REFERENCES,
|
||||
CONST_ITEM_MUTATION,
|
||||
PATTERNS_IN_FNS_WITHOUT_BODY,
|
||||
MISSING_FRAGMENT_SPECIFIER,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue