@@ -667,14 +667,17 @@ extern "rust-intrinsic" {
667667 ///
668668 /// The stabilized version of this intrinsic is
669669 /// [`std::mem::size_of`](../../std/mem/fn.size_of.html).
670+ #[ rustc_const_stable( feature = "const_size_of" , since = "1.40.0" ) ]
670671 pub fn size_of < T > ( ) -> usize ;
671672
672673 /// Moves a value to an uninitialized memory location.
673674 ///
674675 /// Drop glue is not run on the destination.
675676 pub fn move_val_init < T > ( dst : * mut T , src : T ) ;
676677
678+ #[ rustc_const_stable( feature = "const_min_align_of" , since = "1.40.0" ) ]
677679 pub fn min_align_of < T > ( ) -> usize ;
680+ #[ rustc_const_unstable( feature = "const_pref_align_of" , issue = "0" ) ]
678681 pub fn pref_align_of < T > ( ) -> usize ;
679682
680683 /// The size of the referenced value in bytes.
@@ -685,18 +688,21 @@ extern "rust-intrinsic" {
685688 pub fn min_align_of_val < T : ?Sized > ( _: & T ) -> usize ;
686689
687690 /// Gets a static string slice containing the name of a type.
691+ #[ rustc_const_unstable( feature = "const_type_name" , issue = "0" ) ]
688692 pub fn type_name < T : ?Sized > ( ) -> & ' static str ;
689693
690694 /// Gets an identifier which is globally unique to the specified type. This
691695 /// function will return the same value for a type regardless of whichever
692696 /// crate it is invoked in.
697+ #[ rustc_const_unstable( feature = "const_type_id" , issue = "0" ) ]
693698 pub fn type_id < T : ?Sized + ' static > ( ) -> u64 ;
694699
695700 /// A guard for unsafe functions that cannot ever be executed if `T` is uninhabited:
696701 /// This will statically either panic, or do nothing.
697702 pub fn panic_if_uninhabited < T > ( ) ;
698703
699704 /// Gets a reference to a static `Location` indicating where it was called.
705+ #[ rustc_const_unstable( feature = "const_caller_location" , issue = "47809" ) ]
700706 pub fn caller_location ( ) -> & ' static crate :: panic:: Location < ' static > ;
701707
702708 /// Creates a value initialized to zero.
@@ -951,6 +957,7 @@ extern "rust-intrinsic" {
951957 ///
952958 /// The stabilized version of this intrinsic is
953959 /// [`std::mem::needs_drop`](../../std/mem/fn.needs_drop.html).
960+ #[ rustc_const_stable( feature = "const_needs_drop" , since = "1.40.0" ) ]
954961 pub fn needs_drop < T > ( ) -> bool ;
955962
956963 /// Calculates the offset from a pointer.
@@ -1150,6 +1157,7 @@ extern "rust-intrinsic" {
11501157
11511158
11521159 /// Returns the number of bits set in an integer type `T`
1160+ #[ rustc_const_stable( feature = "const_ctpop" , since = "1.40.0" ) ]
11531161 pub fn ctpop < T > ( x : T ) -> T ;
11541162
11551163 /// Returns the number of leading unset bits (zeroes) in an integer type `T`.
@@ -1177,6 +1185,7 @@ extern "rust-intrinsic" {
11771185 /// let num_leading = ctlz(x);
11781186 /// assert_eq!(num_leading, 16);
11791187 /// ```
1188+ #[ rustc_const_stable( feature = "const_ctlz" , since = "1.40.0" ) ]
11801189 pub fn ctlz < T > ( x : T ) -> T ;
11811190
11821191 /// Like `ctlz`, but extra-unsafe as it returns `undef` when
@@ -1193,6 +1202,7 @@ extern "rust-intrinsic" {
11931202 /// let num_leading = unsafe { ctlz_nonzero(x) };
11941203 /// assert_eq!(num_leading, 3);
11951204 /// ```
1205+ #[ rustc_const_unstable( feature = "constctlz" , issue = "0" ) ]
11961206 pub fn ctlz_nonzero < T > ( x : T ) -> T ;
11971207
11981208 /// Returns the number of trailing unset bits (zeroes) in an integer type `T`.
@@ -1220,6 +1230,7 @@ extern "rust-intrinsic" {
12201230 /// let num_trailing = cttz(x);
12211231 /// assert_eq!(num_trailing, 16);
12221232 /// ```
1233+ #[ rustc_const_stable( feature = "const_cttz" , since = "1.40.0" ) ]
12231234 pub fn cttz < T > ( x : T ) -> T ;
12241235
12251236 /// Like `cttz`, but extra-unsafe as it returns `undef` when
@@ -1236,30 +1247,36 @@ extern "rust-intrinsic" {
12361247 /// let num_trailing = unsafe { cttz_nonzero(x) };
12371248 /// assert_eq!(num_trailing, 3);
12381249 /// ```
1250+ #[ rustc_const_unstable( feature = "const_cttz" , issue = "0" ) ]
12391251 pub fn cttz_nonzero < T > ( x : T ) -> T ;
12401252
12411253 /// Reverses the bytes in an integer type `T`.
1254+ #[ rustc_const_stable( feature = "const_bswap" , since = "1.40.0" ) ]
12421255 pub fn bswap < T > ( x : T ) -> T ;
12431256
12441257 /// Reverses the bits in an integer type `T`.
1258+ #[ rustc_const_stable( feature = "const_bitreverse" , since = "1.40.0" ) ]
12451259 pub fn bitreverse < T > ( x : T ) -> T ;
12461260
12471261 /// Performs checked integer addition.
12481262 /// The stabilized versions of this intrinsic are available on the integer
12491263 /// primitives via the `overflowing_add` method. For example,
12501264 /// [`std::u32::overflowing_add`](../../std/primitive.u32.html#method.overflowing_add)
1265+ #[ rustc_const_stable( feature = "const_int_overflow" , since = "1.40.0" ) ]
12511266 pub fn add_with_overflow < T > ( x : T , y : T ) -> ( T , bool ) ;
12521267
12531268 /// Performs checked integer subtraction
12541269 /// The stabilized versions of this intrinsic are available on the integer
12551270 /// primitives via the `overflowing_sub` method. For example,
12561271 /// [`std::u32::overflowing_sub`](../../std/primitive.u32.html#method.overflowing_sub)
1272+ #[ rustc_const_stable( feature = "const_int_overflow" , since = "1.40.0" ) ]
12571273 pub fn sub_with_overflow < T > ( x : T , y : T ) -> ( T , bool ) ;
12581274
12591275 /// Performs checked integer multiplication
12601276 /// The stabilized versions of this intrinsic are available on the integer
12611277 /// primitives via the `overflowing_mul` method. For example,
12621278 /// [`std::u32::overflowing_mul`](../../std/primitive.u32.html#method.overflowing_mul)
1279+ #[ rustc_const_stable( feature = "const_int_overflow" , since = "1.40.0" ) ]
12631280 pub fn mul_with_overflow < T > ( x : T , y : T ) -> ( T , bool ) ;
12641281
12651282 /// Performs an exact division, resulting in undefined behavior where
@@ -1275,9 +1292,11 @@ extern "rust-intrinsic" {
12751292
12761293 /// Performs an unchecked left shift, resulting in undefined behavior when
12771294 /// y < 0 or y >= N, where N is the width of T in bits.
1295+ #[ rustc_const_stable( feature = "const_int_unchecked" , since = "1.40.0" ) ]
12781296 pub fn unchecked_shl < T > ( x : T , y : T ) -> T ;
12791297 /// Performs an unchecked right shift, resulting in undefined behavior when
12801298 /// y < 0 or y >= N, where N is the width of T in bits.
1299+ #[ rustc_const_stable( feature = "const_int_unchecked" , since = "1.40.0" ) ]
12811300 pub fn unchecked_shr < T > ( x : T , y : T ) -> T ;
12821301
12831302 /// Returns the result of an unchecked addition, resulting in
@@ -1296,39 +1315,46 @@ extern "rust-intrinsic" {
12961315 /// The stabilized versions of this intrinsic are available on the integer
12971316 /// primitives via the `rotate_left` method. For example,
12981317 /// [`std::u32::rotate_left`](../../std/primitive.u32.html#method.rotate_left)
1318+ #[ rustc_const_stable( feature = "const_int_rotate" , since = "1.40.0" ) ]
12991319 pub fn rotate_left < T > ( x : T , y : T ) -> T ;
13001320
13011321 /// Performs rotate right.
13021322 /// The stabilized versions of this intrinsic are available on the integer
13031323 /// primitives via the `rotate_right` method. For example,
1304- /// [`std::u32::rotate_right`](../../std/primitive.u32.html#method.rotate_right)
1324+ /// [`std::u32::rotate_right`](../../std/primitive.u32.html#method.rotate_right
1325+ #[ rustc_const_stable( feature = "const_int_rotate" , since = "1.40.0" ) ]
13051326 pub fn rotate_right < T > ( x : T , y : T ) -> T ;
13061327
13071328 /// Returns (a + b) mod 2<sup>N</sup>, where N is the width of T in bits.
13081329 /// The stabilized versions of this intrinsic are available on the integer
13091330 /// primitives via the `wrapping_add` method. For example,
13101331 /// [`std::u32::wrapping_add`](../../std/primitive.u32.html#method.wrapping_add)
1332+ #[ rustc_const_stable( feature = "const_int_wrapping" , since = "1.40.0" ) ]
13111333 pub fn wrapping_add < T > ( a : T , b : T ) -> T ;
13121334 /// Returns (a - b) mod 2<sup>N</sup>, where N is the width of T in bits.
13131335 /// The stabilized versions of this intrinsic are available on the integer
13141336 /// primitives via the `wrapping_sub` method. For example,
13151337 /// [`std::u32::wrapping_sub`](../../std/primitive.u32.html#method.wrapping_sub)
1338+ #[ rustc_const_stable( feature = "const_int_wrapping" , since = "1.40.0" ) ]
13161339 pub fn wrapping_sub < T > ( a : T , b : T ) -> T ;
13171340 /// Returns (a * b) mod 2<sup>N</sup>, where N is the width of T in bits.
13181341 /// The stabilized versions of this intrinsic are available on the integer
13191342 /// primitives via the `wrapping_mul` method. For example,
13201343 /// [`std::u32::wrapping_mul`](../../std/primitive.u32.html#method.wrapping_mul)
1344+ #[ rustc_const_stable( feature = "const_int_wrapping" , since = "1.40.0" ) ]
13211345 pub fn wrapping_mul < T > ( a : T , b : T ) -> T ;
13221346
13231347 /// Computes `a + b`, while saturating at numeric bounds.
13241348 /// The stabilized versions of this intrinsic are available on the integer
13251349 /// primitives via the `saturating_add` method. For example,
13261350 /// [`std::u32::saturating_add`](../../std/primitive.u32.html#method.saturating_add)
1351+ #[ rustc_const_stable( feature = "const_int_saturating" , since = "1.40.0" ) ]
13271352 pub fn saturating_add < T > ( a : T , b : T ) -> T ;
13281353 /// Computes `a - b`, while saturating at numeric bounds.
13291354 /// The stabilized versions of this intrinsic are available on the integer
13301355 /// primitives via the `saturating_sub` method. For example,
13311356 /// [`std::u32::saturating_sub`](../../std/primitive.u32.html#method.saturating_sub)
1357+ #[ rustc_const_stable( feature = "const_int_saturating" , since = "1.40.0" ) ]
13321358 pub fn saturating_sub < T > ( a : T , b : T ) -> T ;
13331359
13341360 /// Returns the value of the discriminant for the variant in 'v',
@@ -1350,6 +1376,7 @@ extern "rust-intrinsic" {
13501376 pub fn nontemporal_store < T > ( ptr : * mut T , val : T ) ;
13511377
13521378 /// See documentation of `<*const T>::offset_from` for details.
1379+ #[ rustc_const_unstable( feature = "const_ptr_offset_from" , issue = "0" ) ]
13531380 pub fn ptr_offset_from < T > ( ptr : * const T , base : * const T ) -> isize ;
13541381
13551382 /// Internal hook used by Miri to implement unwinding.
0 commit comments