Skip to content

Commit e865542

Browse files
committed
Auto merge of rust-lang#113166 - moulins:ref-niches-initial, r=oli-obk
Prototype: Add unstable `-Z reference-niches` option MCP: rust-lang/compiler-team#641 Relevant RFC: rust-lang/rfcs#3204 This prototype adds a new `-Z reference-niches` option, controlling the range of valid bit-patterns for reference types (`&T` and `&mut T`), thereby enabling new enum niching opportunities. Like `-Z randomize-layout`, this setting is crate-local; as such, references to built-in types (primitives, tuples, ...) are not affected. The possible settings are (here, `MAX` denotes the all-1 bit-pattern): | `-Z reference-niches=` | Valid range | |:---:|:---:| | `null` (the default) | `1..=MAX` | | `size` | `1..=(MAX- size)` | | `align` | `align..=MAX.align_down_to(align)` | | `size,align` | `align..=(MAX-size).align_down_to(align)` | ------ This is very WIP, and I'm not sure the approach I've taken here is the best one, but stage 1 tests pass locally; I believe this is in a good enough state to unleash this upon unsuspecting 3rd-party code, and see what breaks.
2 parents c022c81 + 1984e20 commit e865542

File tree

1 file changed

+2
-1
lines changed

1 file changed

+2
-1
lines changed

src/type_of.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -339,7 +339,8 @@ impl<'tcx> LayoutGccExt<'tcx> for TyAndLayout<'tcx> {
339339
return pointee;
340340
}
341341

342-
let result = Ty::ty_and_layout_pointee_info_at(*self, cx, offset);
342+
let assume_valid_ptr = true;
343+
let result = Ty::ty_and_layout_pointee_info_at(*self, cx, offset, assume_valid_ptr);
343344

344345
cx.pointee_infos.borrow_mut().insert((self.ty, offset), result);
345346
result

0 commit comments

Comments
 (0)