Stabilize const TypeId::of

This commit is contained in:
Oli Scherer 2025-07-18 13:18:56 +00:00
parent e05ab47e6c
commit 4653b7acbd
15 changed files with 14 additions and 21 deletions

View File

@ -725,7 +725,7 @@ unsafe impl Send for TypeId {}
unsafe impl Sync for TypeId {}
#[stable(feature = "rust1", since = "1.0.0")]
#[rustc_const_unstable(feature = "const_type_id", issue = "77125")]
#[rustc_const_unstable(feature = "const_cmp", issue = "143800")]
impl const PartialEq for TypeId {
#[inline]
fn eq(&self, other: &Self) -> bool {
@ -773,7 +773,7 @@ impl TypeId {
/// ```
#[must_use]
#[stable(feature = "rust1", since = "1.0.0")]
#[rustc_const_unstable(feature = "const_type_id", issue = "77125")]
#[rustc_const_stable(feature = "const_type_id", since = "CURRENT_RUSTC_VERSION")]
pub const fn of<T: ?Sized + 'static>() -> TypeId {
const { intrinsics::type_id::<T>() }
}

View File

@ -1,4 +1,3 @@
#![feature(const_type_id)]
#![feature(generic_const_exprs)]
#![feature(const_trait_impl, const_cmp)]
#![feature(core_intrinsics)]

View File

@ -1,5 +1,5 @@
error: overly complex generic constant
--> $DIR/issue-90318.rs:15:8
--> $DIR/issue-90318.rs:14:8
|
LL | If<{ TypeId::of::<T>() != TypeId::of::<()>() }>: True,
| ^^-----------------^^^^^^^^^^^^^^^^^^^^^^^^
@ -10,7 +10,7 @@ LL | If<{ TypeId::of::<T>() != TypeId::of::<()>() }>: True,
= note: this operation may be supported in the future
error: overly complex generic constant
--> $DIR/issue-90318.rs:22:8
--> $DIR/issue-90318.rs:21:8
|
LL | If<{ TypeId::of::<T>() != TypeId::of::<()>() }>: True,
| ^^-----------------^^^^^^^^^^^^^^^^^^^^^^^^

View File

@ -1,6 +1,4 @@
//@ run-pass
#![feature(const_type_id)]
#![feature(core_intrinsics)]
use std::any::TypeId;

View File

@ -1,5 +1,5 @@
//@ compile-flags: -Znext-solver
#![feature(const_type_id, const_trait_impl, const_cmp)]
#![feature(const_trait_impl, const_cmp)]
use std::any::TypeId;

View File

@ -1,4 +1,4 @@
#![feature(const_type_id, const_trait_impl, const_cmp)]
#![feature(const_trait_impl, const_cmp)]
use std::any::TypeId;

View File

@ -1,6 +1,6 @@
//@ normalize-stderr: "0x(ff)+" -> "<u128::MAX>"
#![feature(const_type_id, const_trait_impl, const_cmp)]
#![feature( const_trait_impl, const_cmp)]
use std::any::TypeId;

View File

@ -1,7 +1,7 @@
//! Test that all bytes of a TypeId must have the
//! TypeId marker provenance.
#![feature(const_type_id, const_trait_impl, const_cmp)]
#![feature( const_trait_impl, const_cmp)]
use std::any::TypeId;

View File

@ -1,4 +1,4 @@
#![feature(const_type_id, const_trait_impl, const_cmp)]
#![feature(const_trait_impl, const_cmp)]
use std::any::TypeId;

View File

@ -1,7 +1,7 @@
//! Test that we require an equal TypeId to have an integer part that properly
//! reflects the type id hash.
#![feature(const_type_id, const_trait_impl, const_cmp)]
#![feature(const_trait_impl, const_cmp)]
use std::any::TypeId;

View File

@ -1,5 +1,3 @@
#![feature(const_type_id)]
use std::alloc::Layout;
use std::any::TypeId;
use std::mem::transmute;

View File

@ -1,5 +1,5 @@
error[E0310]: the parameter type `T` may not live long enough
--> $DIR/issue-102117.rs:19:26
--> $DIR/issue-102117.rs:17:26
|
LL | type_id: TypeId::of::<T>(),
| ^^^^^^^^^^^^^^^^^
@ -13,7 +13,7 @@ LL | pub fn new<T: 'static>() -> &'static Self {
| +++++++++
error[E0310]: the parameter type `T` may not live long enough
--> $DIR/issue-102117.rs:19:26
--> $DIR/issue-102117.rs:17:26
|
LL | type_id: TypeId::of::<T>(),
| ^^^^^^^^^^^^^^^^^

View File

@ -5,7 +5,6 @@
// will be properly rejected. This test will ensure that monomorphic use of these
// would not be wrongly rejected in patterns.
#![feature(const_type_id)]
#![feature(const_type_name)]
#![feature(const_trait_impl)]
#![feature(const_cmp)]

View File

@ -5,7 +5,6 @@
// This test case should either run-pass or be rejected at compile time.
// Currently we just disallow this usage and require pattern is monomorphic.
#![feature(const_type_id)]
#![feature(const_type_name)]
use std::any::{self, TypeId};

View File

@ -1,5 +1,5 @@
error[E0158]: constant pattern cannot depend on generic parameters
--> $DIR/issue-73976-polymorphic.rs:20:37
--> $DIR/issue-73976-polymorphic.rs:19:37
|
LL | impl<T: 'static> GetTypeId<T> {
| -----------------------------
@ -12,7 +12,7 @@ LL | matches!(GetTypeId::<T>::VALUE, GetTypeId::<T>::VALUE)
| ^^^^^^^^^^^^^^^^^^^^^ `const` depends on a generic parameter
error[E0158]: constant pattern cannot depend on generic parameters
--> $DIR/issue-73976-polymorphic.rs:31:42
--> $DIR/issue-73976-polymorphic.rs:30:42
|
LL | impl<T: 'static> GetTypeNameLen<T> {
| ----------------------------------