diff options
| author | bors <bors@rust-lang.org> | 2023-07-07 15:42:29 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2023-07-07 15:42:29 +0000 |
| commit | cb80ff132a0e9aa71529b701427e4e6c243b58df (patch) | |
| tree | 5e92cefe9b90e442586342ca94732f18d133b9e0 /compiler/rustc_codegen_gcc/example/std_example.rs | |
| parent | fd68a6ded951bd7b852ab8107007f7145e3ad6ec (diff) | |
| parent | 7aa5f39d3b55eb746d9d64244ed5343874807ac4 (diff) | |
| download | rust-cb80ff132a0e9aa71529b701427e4e6c243b58df.tar.gz rust-cb80ff132a0e9aa71529b701427e4e6c243b58df.zip | |
Auto merge of #113245 - lukas-code:unsizing-sanity-check, r=the8472
sanity check field offsets in unsizeable structs
As promised in https://github.com/rust-lang/rust/pull/112062#issuecomment-1567494994, this PR extends the layout sanity checks to ensure that structs fields don't move around when unsizing and prevent issues like https://github.com/rust-lang/rust/issues/112048 in the future. Like most other layout sanity checks, this only runs on compilers with debug assertions enabled.
Here is how it looks when it fails:
```text
error: internal compiler error: compiler/rustc_ty_utils/src/layout.rs:533:21: unsizing GcNode<std::boxed::Box<i32>> changed field order!
Layout { size: Size(32 bytes), align: AbiAndPrefAlign { abi: Align(8 bytes), pref: Align(8 bytes) }, abi: Aggregate { sized: true }, fields: Arbitrary { offsets: [Size(0 bytes), Size(8 bytes), Size(24 bytes)], memory_index: [0, 1, 2] }, largest_niche: Some(Niche { offset: Size(24 bytes), value: Pointer(AddressSpace(0)), valid_range: 1..=18446744073709551615 }), variants: Single { index: 0 } }
Layout { size: Size(24 bytes), align: AbiAndPrefAlign { abi: Align(8 bytes), pref: Align(8 bytes) }, abi: Aggregate { sized: false }, fields: Arbitrary { offsets: [Size(16 bytes), Size(0 bytes), Size(24 bytes)], memory_index: [1, 0, 2] }, largest_niche: None, variants: Single { index: 0 } }
```
r? `@the8472`
Diffstat (limited to 'compiler/rustc_codegen_gcc/example/std_example.rs')
0 files changed, 0 insertions, 0 deletions
