@@ -93,6 +93,8 @@ pub fn forget<T>(t: T) {
93
93
#[ inline]
94
94
#[ unstable( feature = "forget_unsized" , issue = "0" ) ]
95
95
pub fn forget_unsized < T : ?Sized > ( t : T ) {
96
+ // SAFETY: the forget intrinsic could be safe, but there's no point in making it safe since
97
+ // we'll be implementing this function soon via `ManuallyDrop`
96
98
unsafe { intrinsics:: forget ( t) }
97
99
}
98
100
@@ -266,7 +268,11 @@ pub const fn size_of<T>() -> usize {
266
268
#[ inline]
267
269
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
268
270
pub fn size_of_val < T : ?Sized > ( val : & T ) -> usize {
271
+ #[ cfg( bootstrap) ]
272
+ // SAFETY: going away soon
269
273
unsafe { intrinsics:: size_of_val ( val) }
274
+ #[ cfg( not( bootstrap) ) ]
275
+ intrinsics:: size_of_val ( val)
270
276
}
271
277
272
278
/// Returns the [ABI]-required minimum alignment of a type.
@@ -310,7 +316,11 @@ pub fn min_align_of<T>() -> usize {
310
316
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
311
317
#[ rustc_deprecated( reason = "use `align_of_val` instead" , since = "1.2.0" ) ]
312
318
pub fn min_align_of_val < T : ?Sized > ( val : & T ) -> usize {
319
+ #[ cfg( bootstrap) ]
320
+ // SAFETY: going away soon
313
321
unsafe { intrinsics:: min_align_of_val ( val) }
322
+ #[ cfg( not( bootstrap) ) ]
323
+ intrinsics:: min_align_of_val ( val)
314
324
}
315
325
316
326
/// Returns the [ABI]-required minimum alignment of a type.
@@ -350,8 +360,9 @@ pub const fn align_of<T>() -> usize {
350
360
/// ```
351
361
#[ inline]
352
362
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
363
+ #[ allow( deprecated) ]
353
364
pub fn align_of_val < T : ?Sized > ( val : & T ) -> usize {
354
- unsafe { intrinsics :: min_align_of_val ( val) }
365
+ min_align_of_val ( val)
355
366
}
356
367
357
368
/// Returns `true` if dropping values of type `T` matters.
@@ -508,6 +519,8 @@ pub unsafe fn uninitialized<T>() -> T {
508
519
#[ inline]
509
520
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
510
521
pub fn swap < T > ( x : & mut T , y : & mut T ) {
522
+ // SAFETY: the raw pointers have been created from safe mutable references satisfying all the
523
+ // constraints on `ptr::swap_nonoverlapping_one`
511
524
unsafe {
512
525
ptr:: swap_nonoverlapping_one ( x, y) ;
513
526
}
@@ -822,7 +835,11 @@ impl<T> fmt::Debug for Discriminant<T> {
822
835
/// ```
823
836
#[ stable( feature = "discriminant_value" , since = "1.21.0" ) ]
824
837
pub fn discriminant < T > ( v : & T ) -> Discriminant < T > {
838
+ #[ cfg( bootstrap) ]
839
+ // SAFETY: going away soon
825
840
unsafe {
826
841
Discriminant ( intrinsics:: discriminant_value ( v) , PhantomData )
827
842
}
843
+ #[ cfg( not( bootstrap) ) ]
844
+ Discriminant ( intrinsics:: discriminant_value ( v) , PhantomData )
828
845
}
0 commit comments