Skip to content

Commit 4994077

Browse files
committed
ref
1 parent 9f004e5 commit 4994077

File tree

1 file changed

+11
-23
lines changed

1 file changed

+11
-23
lines changed

compiler/rustc_ty_utils/src/alignment.rs

+11-23
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,6 @@ fn align_of_uncached<'tcx>(
9494
assert!(size.bits() <= 128);
9595
Scalar::Initialized { value, valid_range: WrappingRange::full(size) }
9696
};
97-
let scalar = |value: Primitive| scalar_unit(value).align(cx);
9897

9998
let univariant = |fields: &[TyAndLayout<'_>], repr: &ReprOptions, kind| {
10099
Ok(tcx.intern_layout(univariant_uninterned(cx, ty, fields, repr, kind)?))
@@ -110,64 +109,53 @@ fn align_of_uncached<'tcx>(
110109
ty::Float(fty) => match fty {
111110
ty::FloatTy::F32 => F32,
112111
ty::FloatTy::F64 => F64,
113-
}.align(cx),
114-
ty::FnPtr(_) => {
115-
let mut ptr = scalar_unit(Pointer(dl.instruction_address_space));
116-
ptr.valid_range_mut().start = 1;
117-
tcx.intern_layout(LayoutS::scalar(cx, ptr)).align()
118112
}
113+
.align(cx),
114+
ty::FnPtr(_) => Pointer(dl.instruction_address_space).align(cx),
119115

120116
// The never type.
121117
ty::Never => tcx.intern_layout(cx.layout_of_never_type()).align(),
122118

123119
// Potentially-wide pointers.
124120
ty::Ref(_, pointee, _) | ty::RawPtr(ty::TypeAndMut { ty: pointee, .. }) => {
125-
let mut data_ptr = scalar_unit(Pointer(AddressSpace::DATA));
126-
if !ty.is_unsafe_ptr() {
127-
data_ptr.valid_range_mut().start = 1;
128-
}
121+
let data_ptr_align = Pointer(AddressSpace::DATA).align(cx);
129122

130123
let pointee = tcx.normalize_erasing_regions(param_env, pointee);
131124
if pointee.is_sized(tcx, param_env) {
132-
return Ok(tcx.intern_layout(LayoutS::scalar(cx, data_ptr)).align());
125+
return Ok(data_ptr_align);
133126
}
134127

135128
let unsized_part = tcx.struct_tail_erasing_lifetimes(pointee, param_env);
136129

137-
let metadata = if let Some(metadata_def_id) = tcx.lang_items().metadata_type() {
130+
let metadata_align = if let Some(metadata_def_id) = tcx.lang_items().metadata_type() {
138131
let metadata_ty = tcx.normalize_erasing_regions(
139132
param_env,
140133
tcx.mk_projection(metadata_def_id, [pointee]),
141134
);
142135
let metadata_layout = cx.layout_of(metadata_ty)?;
143136
// If the metadata is a 1-zst, then the pointer is thin.
144137
if metadata_layout.is_zst() && metadata_layout.align.abi.bytes() == 1 {
145-
return Ok(tcx.intern_layout(LayoutS::scalar(cx, data_ptr)).align());
138+
return Ok(data_ptr_align);
146139
}
147140

148141
let Abi::Scalar(metadata) = metadata_layout.abi else {
149142
return Err(LayoutError::Unknown(unsized_part));
150143
};
151-
metadata
144+
metadata.align(dl)
152145
} else {
153146
match unsized_part.kind() {
154147
ty::Foreign(..) => {
155-
return Ok(tcx.intern_layout(LayoutS::scalar(cx, data_ptr)).align());
156-
}
157-
ty::Slice(_) | ty::Str => scalar_unit(Int(dl.ptr_sized_integer(), false)),
158-
ty::Dynamic(..) => {
159-
let mut vtable = scalar_unit(Pointer(AddressSpace::DATA));
160-
vtable.valid_range_mut().start = 1;
161-
vtable
148+
return Ok(data_ptr_align);
162149
}
150+
ty::Slice(_) | ty::Str => dl.ptr_sized_integer().align(cx),
151+
ty::Dynamic(..) => data_ptr_align,
163152
_ => {
164153
return Err(LayoutError::Unknown(unsized_part));
165154
}
166155
}
167156
};
168-
169157
// Effectively a (ptr, meta) tuple.
170-
tcx.intern_layout(cx.scalar_pair(data_ptr, metadata)).align()
158+
data_ptr_align.max(metadata_align).max(dl.aggregate_align)
171159
}
172160

173161
ty::Dynamic(_, _, ty::DynStar) => {

0 commit comments

Comments
 (0)