}),
ty::FnPtr(_) => {
let mut ptr = scalar_unit(Pointer);
- ptr.valid_range = WrappingRange { start: 1, end: ptr.valid_range.end };
+ ptr.valid_range = ptr.valid_range.with_start(1);
tcx.intern_layout(Layout::scalar(self, ptr))
}
ty::Ref(_, pointee, _) | ty::RawPtr(ty::TypeAndMut { ty: pointee, .. }) => {
let mut data_ptr = scalar_unit(Pointer);
if !ty.is_unsafe_ptr() {
- data_ptr.valid_range =
- WrappingRange { start: 1, end: data_ptr.valid_range.end };
+ data_ptr.valid_range = data_ptr.valid_range.with_start(1);
}
let pointee = tcx.normalize_erasing_regions(param_env, pointee);
ty::Slice(_) | ty::Str => scalar_unit(Int(dl.ptr_sized_integer(), false)),
ty::Dynamic(..) => {
let mut vtable = scalar_unit(Pointer);
- vtable.valid_range =
- WrappingRange { start: 1, end: vtable.valid_range.end };
+ vtable.valid_range = vtable.valid_range.with_start(1);
vtable
}
_ => return Err(LayoutError::Unknown(unsized_part)),
pub fn contains_zero(&self) -> bool {
!(self.start <= self.end && self.start != 0)
}
+
+ /// Returns new `WrappingRange` with replaced `start`
+ pub fn with_start(&self, start: u128) -> Self {
+ Self { start, end: self.end }
+ }
+
+ /// Returns new `WrappingRange` with replaced `end`
+ pub fn with_end(&self, end: u128) -> Self {
+ Self { start: self.start, end }
+ }
}
impl fmt::Debug for WrappingRange {
return None;
}
- Some((start, Scalar { value, valid_range: WrappingRange { start: v.start, end } }))
+ Some((start, Scalar { value, valid_range: v.with_end(end) }))
}
}