Skip to content

Commit

Permalink
Auto merge of #125360 - RalfJung:packed-field-reorder, r=fmease
Browse files Browse the repository at this point in the history
don't inhibit random field reordering on repr(packed(1))

`inhibit_struct_field_reordering_opt` being false means we exclude this type from random field shuffling. However, `packed(1)` types can still be shuffled! The logic was added in rust-lang/rust#48528 since it's pointless to reorder fields in packed(1) types (there's no padding that could be saved) -- but that shouldn't inhibit `-Zrandomize-layout` (which did not exist at the time).

We could add an optimization elsewhere to not bother sorting the fields for `repr(packed)` types, but I don't think that's worth the effort.

This *does* change the behavior in that we may now reorder fields of `packed(1)` structs (e.g. if there are niches, we'll try to move them to the start/end, according to `NicheBias`).  We were always allowed to do that but so far we didn't. Quoting the [reference](https://doc.rust-lang.org/reference/type-layout.html):

> On their own, align and packed do not provide guarantees about the order of fields in the layout of a struct or the layout of an enum variant, although they may be combined with representations (such as C) which do provide such guarantees.
  • Loading branch information
bors committed May 29, 2024
2 parents f44d647 + 1d4e378 commit 92a70e2
Show file tree
Hide file tree
Showing 2 changed files with 2 additions and 2 deletions.
2 changes: 1 addition & 1 deletion tests/fail/reading_half_a_pointer.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#![allow(dead_code)]

// We use packed structs to get around alignment restrictions
#[repr(packed)]
#[repr(C, packed)]
struct Data {
pad: u8,
ptr: &'static i32,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ pub struct Aligned {
_pad: [u8; 11],
packed: Packed,
}
#[repr(packed)]
#[repr(C, packed)]
#[derive(Default, Copy, Clone)]
pub struct Packed {
_pad: [u8; 5],
Expand Down

0 comments on commit 92a70e2

Please sign in to comment.