Skip to content

Commit 1e8ff95

Browse files
committed
dedup static alignment logic
1 parent 6f0825e commit 1e8ff95

File tree

1 file changed

+8
-7
lines changed
  • compiler/rustc_const_eval/src/interpret

1 file changed

+8
-7
lines changed

compiler/rustc_const_eval/src/interpret/util.rs

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use rustc_hir::def_id::LocalDefId;
22
use rustc_middle::mir;
3-
use rustc_middle::mir::interpret::{AllocInit, Allocation, InterpResult, Pointer};
3+
use rustc_middle::mir::interpret::{AllocInit, Allocation, GlobalAlloc, InterpResult, Pointer};
44
use rustc_middle::ty::layout::TyAndLayout;
55
use rustc_middle::ty::{TyCtxt, TypeVisitable, TypeVisitableExt};
66
use tracing::debug;
@@ -38,13 +38,14 @@ pub(crate) fn create_static_alloc<'tcx>(
3838
static_def_id: LocalDefId,
3939
layout: TyAndLayout<'tcx>,
4040
) -> InterpResult<'tcx, MPlaceTy<'tcx>> {
41-
// Take over-alignment from attributes into account.
42-
let align = match ecx.tcx.codegen_fn_attrs(static_def_id).alignment {
43-
Some(align_from_attribute) => Ord::max(align_from_attribute, layout.align.abi),
44-
None => layout.align.abi,
45-
};
41+
// Inherit size and align from the `GlobalAlloc::Static` so we can avoid duplicating
42+
// the alignment attribute logic.
43+
let (size, align) =
44+
GlobalAlloc::Static(static_def_id.into()).size_and_align(*ecx.tcx, ecx.typing_env);
45+
assert_eq!(size, layout.size);
46+
assert!(align >= layout.align.abi);
4647

47-
let alloc = Allocation::try_new(layout.size, align, AllocInit::Uninit, ())?;
48+
let alloc = Allocation::try_new(size, align, AllocInit::Uninit, ())?;
4849
let alloc_id = ecx.tcx.reserve_and_set_static_alloc(static_def_id.into());
4950
assert_eq!(ecx.machine.static_root_ids, None);
5051
ecx.machine.static_root_ids = Some((alloc_id, static_def_id));

0 commit comments

Comments
 (0)