Skip to content

Commit cd5a50d

Browse files
committed
Fix mini_core tests
1 parent 02608ff commit cd5a50d

File tree

2 files changed

+26
-8
lines changed

2 files changed

+26
-8
lines changed

example/mini_core.rs

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -603,7 +603,7 @@ impl<T: ?Sized + Unsize<U>, U: ?Sized, A: Allocator> CoerceUnsized<Box<U, A>> fo
603603
impl<T> Box<T> {
604604
pub fn new(val: T) -> Box<T> {
605605
unsafe {
606-
let size = intrinsics::size_of::<T>();
606+
let size = size_of::<T>();
607607
let ptr = libc::malloc(size);
608608
intrinsics::copy(&val as *const T as *const u8, ptr, size);
609609
Box(Unique { pointer: NonNull(ptr as *const T), _marker: PhantomData }, Global)
@@ -657,11 +657,11 @@ pub mod intrinsics {
657657
#[rustc_intrinsic]
658658
pub fn abort() -> !;
659659
#[rustc_intrinsic]
660-
pub fn size_of<T>() -> usize;
660+
pub const fn size_of<T>() -> usize;
661661
#[rustc_intrinsic]
662662
pub unsafe fn size_of_val<T: ?::Sized>(val: *const T) -> usize;
663663
#[rustc_intrinsic]
664-
pub fn align_of<T>() -> usize;
664+
pub const fn align_of<T>() -> usize;
665665
#[rustc_intrinsic]
666666
pub unsafe fn align_of_val<T: ?::Sized>(val: *const T) -> usize;
667667
#[rustc_intrinsic]
@@ -699,6 +699,24 @@ pub mod libc {
699699
}
700700
}
701701

702+
pub const fn size_of<T>() -> usize {
703+
<T as SizedTypeProperties>::SIZE
704+
}
705+
706+
pub const fn align_of<T>() -> usize {
707+
<T as SizedTypeProperties>::ALIGN
708+
}
709+
710+
trait SizedTypeProperties: Sized {
711+
#[lang = "mem_size_const"]
712+
const SIZE: usize = intrinsics::size_of::<Self>();
713+
714+
#[lang = "mem_align_const"]
715+
const ALIGN: usize = intrinsics::align_of::<Self>();
716+
}
717+
718+
impl<T> SizedTypeProperties for T {}
719+
702720
#[lang = "index"]
703721
pub trait Index<Idx: ?Sized> {
704722
type Output: ?Sized;

example/mini_core_hello_world.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -90,8 +90,8 @@ fn start<T: Termination + 'static>(
9090
) -> isize {
9191
if argc == 3 {
9292
unsafe { puts(*argv); }
93-
unsafe { puts(*((argv as usize + intrinsics::size_of::<*const u8>()) as *const *const u8)); }
94-
unsafe { puts(*((argv as usize + 2 * intrinsics::size_of::<*const u8>()) as *const *const u8)); }
93+
unsafe { puts(*((argv as usize + size_of::<*const u8>()) as *const *const u8)); }
94+
unsafe { puts(*((argv as usize + 2 * size_of::<*const u8>()) as *const *const u8)); }
9595
}
9696

9797
main().report();
@@ -154,7 +154,7 @@ fn main() {
154154
let slice = &[0, 1] as &[i32];
155155
let slice_ptr = slice as *const [i32] as *const i32;
156156

157-
let align = intrinsics::align_of::<*const i32>();
157+
let align = align_of::<*const i32>();
158158
assert_eq!(slice_ptr as usize % align, 0);
159159

160160
//return;
@@ -195,8 +195,8 @@ fn main() {
195195
assert_eq!(intrinsics::size_of_val(a) as u8, 8);
196196
assert_eq!(intrinsics::size_of_val(&0u32) as u8, 4);
197197

198-
assert_eq!(intrinsics::align_of::<u16>() as u8, 2);
199-
assert_eq!(intrinsics::align_of_val(&a) as u8, intrinsics::align_of::<&str>() as u8);
198+
assert_eq!(align_of::<u16>() as u8, 2);
199+
assert_eq!(intrinsics::align_of_val(&a) as u8, align_of::<&str>() as u8);
200200

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

0 commit comments

Comments
 (0)