Skip to content

Commit cc27b04

Browse files
committed
Replace NullOp::SizeOf and NullOp::AlignOf by lang items.
1 parent 0eae3a2 commit cc27b04

File tree

4 files changed

+25
-13
lines changed

4 files changed

+25
-13
lines changed

example/example.rs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -72,10 +72,6 @@ pub fn debug_tuple() -> DebugTuple {
7272
DebugTuple(())
7373
}
7474

75-
pub fn size_of<T>() -> usize {
76-
intrinsics::size_of::<T>()
77-
}
78-
7975
pub fn use_size_of() -> usize {
8076
size_of::<u64>()
8177
}

example/mini_core.rs

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
extern_types,
77
decl_macro,
88
rustc_attrs,
9+
rustc_private,
910
transparent_unions,
1011
auto_traits,
1112
freeze_impls,
@@ -594,7 +595,7 @@ impl<T: ?Sized + Unsize<U>, U: ?Sized> CoerceUnsized<Box<U>> for Box<T> {}
594595
impl<T> Box<T> {
595596
pub fn new(val: T) -> Box<T> {
596597
unsafe {
597-
let size = intrinsics::size_of::<T>();
598+
let size = size_of::<T>();
598599
let ptr = libc::malloc(size);
599600
intrinsics::copy(&val as *const T as *const u8, ptr, size);
600601
Box(Unique { pointer: NonNull(ptr as *const T), _marker: PhantomData }, Global)
@@ -646,11 +647,11 @@ pub mod intrinsics {
646647
#[rustc_intrinsic]
647648
pub fn abort() -> !;
648649
#[rustc_intrinsic]
649-
pub fn size_of<T>() -> usize;
650+
pub const fn size_of<T>() -> usize;
650651
#[rustc_intrinsic]
651652
pub unsafe fn size_of_val<T: ?::Sized>(val: *const T) -> usize;
652653
#[rustc_intrinsic]
653-
pub fn align_of<T>() -> usize;
654+
pub const fn align_of<T>() -> usize;
654655
#[rustc_intrinsic]
655656
pub unsafe fn align_of_val<T: ?::Sized>(val: *const T) -> usize;
656657
#[rustc_intrinsic]
@@ -715,6 +716,23 @@ impl<T> Index<usize> for [T] {
715716
}
716717
}
717718

719+
pub const fn size_of<T>() -> usize {
720+
<T as SizedTypeProperties>::SIZE
721+
}
722+
723+
pub const fn align_of<T>() -> usize {
724+
<T as SizedTypeProperties>::ALIGN
725+
}
726+
727+
trait SizedTypeProperties: Sized {
728+
#[lang = "mem_size_const"]
729+
const SIZE: usize = intrinsics::size_of::<Self>();
730+
731+
#[lang = "mem_align_const"]
732+
const ALIGN: usize = intrinsics::align_of::<Self>();
733+
}
734+
impl<T> SizedTypeProperties for T {}
735+
718736
extern "C" {
719737
type VaListImpl;
720738
}

example/mini_core_hello_world.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -109,10 +109,10 @@ fn start<T: Termination + 'static>(
109109
puts(*argv as *const i8);
110110
}
111111
unsafe {
112-
puts(*((argv as usize + intrinsics::size_of::<*const u8>()) as *const *const i8));
112+
puts(*((argv as usize + size_of::<*const u8>()) as *const *const i8));
113113
}
114114
unsafe {
115-
puts(*((argv as usize + 2 * intrinsics::size_of::<*const u8>()) as *const *const i8));
115+
puts(*((argv as usize + 2 * size_of::<*const u8>()) as *const *const i8));
116116
}
117117
}
118118

@@ -213,8 +213,8 @@ fn main() {
213213
assert_eq!(intrinsics::size_of_val(a) as u8, 16);
214214
assert_eq!(intrinsics::size_of_val(&0u32) as u8, 4);
215215

216-
assert_eq!(intrinsics::align_of::<u16>() as u8, 2);
217-
assert_eq!(intrinsics::align_of_val(&a) as u8, intrinsics::align_of::<&str>() as u8);
216+
assert_eq!(align_of::<u16>() as u8, 2);
217+
assert_eq!(intrinsics::align_of_val(&a) as u8, align_of::<&str>() as u8);
218218

219219
let u8_needs_drop = const { intrinsics::needs_drop::<u8>() };
220220
assert!(!u8_needs_drop);

src/base.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -833,8 +833,6 @@ fn codegen_stmt<'tcx>(fx: &mut FunctionCx<'_, '_, 'tcx>, cur_block: Block, stmt:
833833
assert!(lval.layout().ty.is_sized(fx.tcx, fx.typing_env()));
834834
let layout = fx.layout_of(fx.monomorphize(ty));
835835
let val = match null_op {
836-
NullOp::SizeOf => layout.size.bytes(),
837-
NullOp::AlignOf => layout.align.bytes(),
838836
NullOp::OffsetOf(fields) => fx
839837
.tcx
840838
.offset_of_subfield(

0 commit comments

Comments
 (0)