@@ -712,6 +712,11 @@ extern "rust-intrinsic" {
712712
713713    /// Aborts the execution of the process. 
714714/// 
715+ /// Note that, unlike most intrinsics, this is safe to call; 
716+ /// it does not require an `unsafe` block. 
717+ /// Therefore, implementations must not require the user to uphold 
718+ /// any safety invariants. 
719+ /// 
715720/// A more user-friendly and stable version of this operation is 
716721/// [`std::process::abort`](../../std/process/fn.abort.html). 
717722pub  fn  abort ( )  -> !; 
@@ -745,6 +750,11 @@ extern "rust-intrinsic" {
745750/// 
746751/// Any use other than with `if` statements will probably not have an effect. 
747752/// 
753+ /// Note that, unlike most intrinsics, this is safe to call; 
754+ /// it does not require an `unsafe` block. 
755+ /// Therefore, implementations must not require the user to uphold 
756+ /// any safety invariants. 
757+ /// 
748758/// This intrinsic does not have a stable counterpart. 
749759#[ rustc_const_unstable( feature = "const_likely" ,  issue = "none" ) ]  
750760    pub  fn  likely ( b :  bool )  -> bool ; 
@@ -754,6 +764,11 @@ extern "rust-intrinsic" {
754764/// 
755765/// Any use other than with `if` statements will probably not have an effect. 
756766/// 
767+ /// Note that, unlike most intrinsics, this is safe to call; 
768+ /// it does not require an `unsafe` block. 
769+ /// Therefore, implementations must not require the user to uphold 
770+ /// any safety invariants. 
771+ /// 
757772/// This intrinsic does not have a stable counterpart. 
758773#[ rustc_const_unstable( feature = "const_likely" ,  issue = "none" ) ]  
759774    pub  fn  unlikely ( b :  bool )  -> bool ; 
@@ -765,6 +780,11 @@ extern "rust-intrinsic" {
765780
766781    /// The size of a type in bytes. 
767782/// 
783+ /// Note that, unlike most intrinsics, this is safe to call; 
784+ /// it does not require an `unsafe` block. 
785+ /// Therefore, implementations must not require the user to uphold 
786+ /// any safety invariants. 
787+ /// 
768788/// More specifically, this is the offset in bytes between successive 
769789/// items of the same type, including alignment padding. 
770790/// 
@@ -774,6 +794,11 @@ extern "rust-intrinsic" {
774794
775795    /// The minimum alignment of a type. 
776796/// 
797+ /// Note that, unlike most intrinsics, this is safe to call; 
798+ /// it does not require an `unsafe` block. 
799+ /// Therefore, implementations must not require the user to uphold 
800+ /// any safety invariants. 
801+ /// 
777802/// The stabilized version of this intrinsic is [`core::mem::align_of`]. 
778803#[ rustc_const_stable( feature = "const_min_align_of" ,  since = "1.40.0" ) ]  
779804    pub  fn  min_align_of < T > ( )  -> usize ; 
@@ -796,6 +821,11 @@ extern "rust-intrinsic" {
796821
797822    /// Gets a static string slice containing the name of a type. 
798823/// 
824+ /// Note that, unlike most intrinsics, this is safe to call; 
825+ /// it does not require an `unsafe` block. 
826+ /// Therefore, implementations must not require the user to uphold 
827+ /// any safety invariants. 
828+ /// 
799829/// The stabilized version of this intrinsic is [`core::any::type_name`]. 
800830#[ rustc_const_unstable( feature = "const_type_name" ,  issue = "63084" ) ]  
801831    pub  fn  type_name < T :  ?Sized > ( )  -> & ' static  str ; 
@@ -804,6 +834,11 @@ extern "rust-intrinsic" {
804834/// function will return the same value for a type regardless of whichever 
805835/// crate it is invoked in. 
806836/// 
837+ /// Note that, unlike most intrinsics, this is safe to call; 
838+ /// it does not require an `unsafe` block. 
839+ /// Therefore, implementations must not require the user to uphold 
840+ /// any safety invariants. 
841+ /// 
807842/// The stabilized version of this intrinsic is [`core::any::TypeId::of`]. 
808843#[ rustc_const_unstable( feature = "const_type_id" ,  issue = "77125" ) ]  
809844    pub  fn  type_id < T :  ?Sized  + ' static > ( )  -> u64 ; 
@@ -829,6 +864,11 @@ extern "rust-intrinsic" {
829864
830865    /// Gets a reference to a static `Location` indicating where it was called. 
831866/// 
867+ /// Note that, unlike most intrinsics, this is safe to call; 
868+ /// it does not require an `unsafe` block. 
869+ /// Therefore, implementations must not require the user to uphold 
870+ /// any safety invariants. 
871+ /// 
832872/// Consider using [`core::panic::Location::caller`] instead. 
833873#[ rustc_const_unstable( feature = "const_caller_location" ,  issue = "76156" ) ]  
834874    pub  fn  caller_location ( )  -> & ' static  crate :: panic:: Location < ' static > ; 
@@ -837,6 +877,11 @@ extern "rust-intrinsic" {
837877/// 
838878/// This exists solely for [`mem::forget_unsized`]; normal `forget` uses 
839879/// `ManuallyDrop` instead. 
880+ /// 
881+ /// Note that, unlike most intrinsics, this is safe to call; 
882+ /// it does not require an `unsafe` block. 
883+ /// Therefore, implementations must not require the user to uphold 
884+ /// any safety invariants. 
840885#[ rustc_const_unstable( feature = "const_intrinsic_forget" ,  issue = "none" ) ]  
841886    pub  fn  forget < T :  ?Sized > ( _:  T ) ; 
842887
@@ -1090,6 +1135,11 @@ extern "rust-intrinsic" {
10901135/// If the actual type neither requires drop glue nor implements 
10911136/// `Copy`, then the return value of this function is unspecified. 
10921137/// 
1138+ /// Note that, unlike most intrinsics, this is safe to call; 
1139+ /// it does not require an `unsafe` block. 
1140+ /// Therefore, implementations must not require the user to uphold 
1141+ /// any safety invariants. 
1142+ /// 
10931143/// The stabilized version of this intrinsic is [`mem::needs_drop`](crate::mem::needs_drop). 
10941144#[ rustc_const_stable( feature = "const_needs_drop" ,  since = "1.40.0" ) ]  
10951145    pub  fn  needs_drop < T > ( )  -> bool ; 
@@ -1310,21 +1360,41 @@ extern "rust-intrinsic" {
13101360
13111361    /// Returns the minimum of two `f32` values. 
13121362/// 
1363+ /// Note that, unlike most intrinsics, this is safe to call; 
1364+ /// it does not require an `unsafe` block. 
1365+ /// Therefore, implementations must not require the user to uphold 
1366+ /// any safety invariants. 
1367+ /// 
13131368/// The stabilized version of this intrinsic is 
13141369/// [`f32::min`] 
13151370pub  fn  minnumf32 ( x :  f32 ,  y :  f32 )  -> f32 ; 
13161371    /// Returns the minimum of two `f64` values. 
13171372/// 
1373+ /// Note that, unlike most intrinsics, this is safe to call; 
1374+ /// it does not require an `unsafe` block. 
1375+ /// Therefore, implementations must not require the user to uphold 
1376+ /// any safety invariants. 
1377+ /// 
13181378/// The stabilized version of this intrinsic is 
13191379/// [`f64::min`] 
13201380pub  fn  minnumf64 ( x :  f64 ,  y :  f64 )  -> f64 ; 
13211381    /// Returns the maximum of two `f32` values. 
13221382/// 
1383+ /// Note that, unlike most intrinsics, this is safe to call; 
1384+ /// it does not require an `unsafe` block. 
1385+ /// Therefore, implementations must not require the user to uphold 
1386+ /// any safety invariants. 
1387+ /// 
13231388/// The stabilized version of this intrinsic is 
13241389/// [`f32::max`] 
13251390pub  fn  maxnumf32 ( x :  f32 ,  y :  f32 )  -> f32 ; 
13261391    /// Returns the maximum of two `f64` values. 
13271392/// 
1393+ /// Note that, unlike most intrinsics, this is safe to call; 
1394+ /// it does not require an `unsafe` block. 
1395+ /// Therefore, implementations must not require the user to uphold 
1396+ /// any safety invariants. 
1397+ /// 
13281398/// The stabilized version of this intrinsic is 
13291399/// [`f64::max`] 
13301400pub  fn  maxnumf64 ( x :  f64 ,  y :  f64 )  -> f64 ; 
@@ -1438,6 +1508,11 @@ extern "rust-intrinsic" {
14381508
14391509    /// Returns the number of bits set in an integer type `T` 
14401510/// 
1511+ /// Note that, unlike most intrinsics, this is safe to call; 
1512+ /// it does not require an `unsafe` block. 
1513+ /// Therefore, implementations must not require the user to uphold 
1514+ /// any safety invariants. 
1515+ /// 
14411516/// The stabilized versions of this intrinsic are available on the integer 
14421517/// primitives via the `count_ones` method. For example, 
14431518/// [`u32::count_ones`] 
@@ -1446,6 +1521,11 @@ extern "rust-intrinsic" {
14461521
14471522    /// Returns the number of leading unset bits (zeroes) in an integer type `T`. 
14481523/// 
1524+ /// Note that, unlike most intrinsics, this is safe to call; 
1525+ /// it does not require an `unsafe` block. 
1526+ /// Therefore, implementations must not require the user to uphold 
1527+ /// any safety invariants. 
1528+ /// 
14491529/// The stabilized versions of this intrinsic are available on the integer 
14501530/// primitives via the `leading_zeros` method. For example, 
14511531/// [`u32::leading_zeros`] 
@@ -1497,6 +1577,11 @@ extern "rust-intrinsic" {
14971577
14981578    /// Returns the number of trailing unset bits (zeroes) in an integer type `T`. 
14991579/// 
1580+ /// Note that, unlike most intrinsics, this is safe to call; 
1581+ /// it does not require an `unsafe` block. 
1582+ /// Therefore, implementations must not require the user to uphold 
1583+ /// any safety invariants. 
1584+ /// 
15001585/// The stabilized versions of this intrinsic are available on the integer 
15011586/// primitives via the `trailing_zeros` method. For example, 
15021587/// [`u32::trailing_zeros`] 
@@ -1548,6 +1633,11 @@ extern "rust-intrinsic" {
15481633
15491634    /// Reverses the bytes in an integer type `T`. 
15501635/// 
1636+ /// Note that, unlike most intrinsics, this is safe to call; 
1637+ /// it does not require an `unsafe` block. 
1638+ /// Therefore, implementations must not require the user to uphold 
1639+ /// any safety invariants. 
1640+ /// 
15511641/// The stabilized versions of this intrinsic are available on the integer 
15521642/// primitives via the `swap_bytes` method. For example, 
15531643/// [`u32::swap_bytes`] 
@@ -1556,6 +1646,11 @@ extern "rust-intrinsic" {
15561646
15571647    /// Reverses the bits in an integer type `T`. 
15581648/// 
1649+ /// Note that, unlike most intrinsics, this is safe to call; 
1650+ /// it does not require an `unsafe` block. 
1651+ /// Therefore, implementations must not require the user to uphold 
1652+ /// any safety invariants. 
1653+ /// 
15591654/// The stabilized versions of this intrinsic are available on the integer 
15601655/// primitives via the `reverse_bits` method. For example, 
15611656/// [`u32::reverse_bits`] 
@@ -1564,6 +1659,11 @@ extern "rust-intrinsic" {
15641659
15651660    /// Performs checked integer addition. 
15661661/// 
1662+ /// Note that, unlike most intrinsics, this is safe to call; 
1663+ /// it does not require an `unsafe` block. 
1664+ /// Therefore, implementations must not require the user to uphold 
1665+ /// any safety invariants. 
1666+ /// 
15671667/// The stabilized versions of this intrinsic are available on the integer 
15681668/// primitives via the `overflowing_add` method. For example, 
15691669/// [`u32::overflowing_add`] 
@@ -1572,6 +1672,11 @@ extern "rust-intrinsic" {
15721672
15731673    /// Performs checked integer subtraction 
15741674/// 
1675+ /// Note that, unlike most intrinsics, this is safe to call; 
1676+ /// it does not require an `unsafe` block. 
1677+ /// Therefore, implementations must not require the user to uphold 
1678+ /// any safety invariants. 
1679+ /// 
15751680/// The stabilized versions of this intrinsic are available on the integer 
15761681/// primitives via the `overflowing_sub` method. For example, 
15771682/// [`u32::overflowing_sub`] 
@@ -1580,6 +1685,11 @@ extern "rust-intrinsic" {
15801685
15811686    /// Performs checked integer multiplication 
15821687/// 
1688+ /// Note that, unlike most intrinsics, this is safe to call; 
1689+ /// it does not require an `unsafe` block. 
1690+ /// Therefore, implementations must not require the user to uphold 
1691+ /// any safety invariants. 
1692+ /// 
15831693/// The stabilized versions of this intrinsic are available on the integer 
15841694/// primitives via the `overflowing_mul` method. For example, 
15851695/// [`u32::overflowing_mul`] 
@@ -1649,6 +1759,11 @@ extern "rust-intrinsic" {
16491759
16501760    /// Performs rotate left. 
16511761/// 
1762+ /// Note that, unlike most intrinsics, this is safe to call; 
1763+ /// it does not require an `unsafe` block. 
1764+ /// Therefore, implementations must not require the user to uphold 
1765+ /// any safety invariants. 
1766+ /// 
16521767/// The stabilized versions of this intrinsic are available on the integer 
16531768/// primitives via the `rotate_left` method. For example, 
16541769/// [`u32::rotate_left`] 
@@ -1657,6 +1772,11 @@ extern "rust-intrinsic" {
16571772
16581773    /// Performs rotate right. 
16591774/// 
1775+ /// Note that, unlike most intrinsics, this is safe to call; 
1776+ /// it does not require an `unsafe` block. 
1777+ /// Therefore, implementations must not require the user to uphold 
1778+ /// any safety invariants. 
1779+ /// 
16601780/// The stabilized versions of this intrinsic are available on the integer 
16611781/// primitives via the `rotate_right` method. For example, 
16621782/// [`u32::rotate_right`] 
@@ -1665,20 +1785,35 @@ extern "rust-intrinsic" {
16651785
16661786    /// Returns (a + b) mod 2<sup>N</sup>, where N is the width of T in bits. 
16671787/// 
1788+ /// Note that, unlike most intrinsics, this is safe to call; 
1789+ /// it does not require an `unsafe` block. 
1790+ /// Therefore, implementations must not require the user to uphold 
1791+ /// any safety invariants. 
1792+ /// 
16681793/// The stabilized versions of this intrinsic are available on the integer 
16691794/// primitives via the `wrapping_add` method. For example, 
16701795/// [`u32::wrapping_add`] 
16711796#[ rustc_const_stable( feature = "const_int_wrapping" ,  since = "1.40.0" ) ]  
16721797    pub  fn  wrapping_add < T :  Copy > ( a :  T ,  b :  T )  -> T ; 
16731798    /// Returns (a - b) mod 2<sup>N</sup>, where N is the width of T in bits. 
16741799/// 
1800+ /// Note that, unlike most intrinsics, this is safe to call; 
1801+ /// it does not require an `unsafe` block. 
1802+ /// Therefore, implementations must not require the user to uphold 
1803+ /// any safety invariants. 
1804+ /// 
16751805/// The stabilized versions of this intrinsic are available on the integer 
16761806/// primitives via the `wrapping_sub` method. For example, 
16771807/// [`u32::wrapping_sub`] 
16781808#[ rustc_const_stable( feature = "const_int_wrapping" ,  since = "1.40.0" ) ]  
16791809    pub  fn  wrapping_sub < T :  Copy > ( a :  T ,  b :  T )  -> T ; 
16801810    /// Returns (a * b) mod 2<sup>N</sup>, where N is the width of T in bits. 
16811811/// 
1812+ /// Note that, unlike most intrinsics, this is safe to call; 
1813+ /// it does not require an `unsafe` block. 
1814+ /// Therefore, implementations must not require the user to uphold 
1815+ /// any safety invariants. 
1816+ /// 
16821817/// The stabilized versions of this intrinsic are available on the integer 
16831818/// primitives via the `wrapping_mul` method. For example, 
16841819/// [`u32::wrapping_mul`] 
@@ -1687,13 +1822,23 @@ extern "rust-intrinsic" {
16871822
16881823    /// Computes `a + b`, saturating at numeric bounds. 
16891824/// 
1825+ /// Note that, unlike most intrinsics, this is safe to call; 
1826+ /// it does not require an `unsafe` block. 
1827+ /// Therefore, implementations must not require the user to uphold 
1828+ /// any safety invariants. 
1829+ /// 
16901830/// The stabilized versions of this intrinsic are available on the integer 
16911831/// primitives via the `saturating_add` method. For example, 
16921832/// [`u32::saturating_add`] 
16931833#[ rustc_const_stable( feature = "const_int_saturating" ,  since = "1.40.0" ) ]  
16941834    pub  fn  saturating_add < T :  Copy > ( a :  T ,  b :  T )  -> T ; 
16951835    /// Computes `a - b`, saturating at numeric bounds. 
16961836/// 
1837+ /// Note that, unlike most intrinsics, this is safe to call; 
1838+ /// it does not require an `unsafe` block. 
1839+ /// Therefore, implementations must not require the user to uphold 
1840+ /// any safety invariants. 
1841+ /// 
16971842/// The stabilized versions of this intrinsic are available on the integer 
16981843/// primitives via the `saturating_sub` method. For example, 
16991844/// [`u32::saturating_sub`] 
@@ -1703,13 +1848,23 @@ extern "rust-intrinsic" {
17031848    /// Returns the value of the discriminant for the variant in 'v'; 
17041849/// if `T` has no discriminant, returns `0`. 
17051850/// 
1851+ /// Note that, unlike most intrinsics, this is safe to call; 
1852+ /// it does not require an `unsafe` block. 
1853+ /// Therefore, implementations must not require the user to uphold 
1854+ /// any safety invariants. 
1855+ /// 
17061856/// The stabilized version of this intrinsic is [`core::mem::discriminant`]. 
17071857#[ rustc_const_unstable( feature = "const_discriminant" ,  issue = "69821" ) ]  
17081858    pub  fn  discriminant_value < T > ( v :  & T )  -> <T  as  DiscriminantKind >:: Discriminant ; 
17091859
17101860    /// Returns the number of variants of the type `T` cast to a `usize`; 
17111861/// if `T` has no variants, returns `0`. Uninhabited variants will be counted. 
17121862/// 
1863+ /// Note that, unlike most intrinsics, this is safe to call; 
1864+ /// it does not require an `unsafe` block. 
1865+ /// Therefore, implementations must not require the user to uphold 
1866+ /// any safety invariants. 
1867+ /// 
17131868/// The to-be-stabilized version of this intrinsic is [`mem::variant_count`]. 
17141869#[ rustc_const_unstable( feature = "variant_count" ,  issue = "73662" ) ]  
17151870    pub  fn  variant_count < T > ( )  -> usize ; 
@@ -1732,10 +1887,20 @@ extern "rust-intrinsic" {
17321887    pub  fn  ptr_offset_from < T > ( ptr :  * const  T ,  base :  * const  T )  -> isize ; 
17331888
17341889    /// See documentation of `<*const T>::guaranteed_eq` for details. 
1890+ /// 
1891+ /// Note that, unlike most intrinsics, this is safe to call; 
1892+ /// it does not require an `unsafe` block. 
1893+ /// Therefore, implementations must not require the user to uphold 
1894+ /// any safety invariants. 
17351895#[ rustc_const_unstable( feature = "const_raw_ptr_comparison" ,  issue = "53020" ) ]  
17361896    pub  fn  ptr_guaranteed_eq < T > ( ptr :  * const  T ,  other :  * const  T )  -> bool ; 
17371897
17381898    /// See documentation of `<*const T>::guaranteed_ne` for details. 
1899+ /// 
1900+ /// Note that, unlike most intrinsics, this is safe to call; 
1901+ /// it does not require an `unsafe` block. 
1902+ /// Therefore, implementations must not require the user to uphold 
1903+ /// any safety invariants. 
17391904#[ rustc_const_unstable( feature = "const_raw_ptr_comparison" ,  issue = "53020" ) ]  
17401905    pub  fn  ptr_guaranteed_ne < T > ( ptr :  * const  T ,  other :  * const  T )  -> bool ; 
17411906
0 commit comments