1
Fork 0

Auto merge of #77083 - KodrAus:revert/const-type-id, r=RalfJung

revert const_type_id stabilization

This reverts #72488, which is currently on beta and scheduled to stabilize in `1.47.0`, based on https://github.com/rust-lang/rust/pull/75923#issuecomment-696676511

It turns out we might not be quite ready to stabilize `TypeId` in const contexts before having a chance to rework its internals. Since `TypeId` is a bit of an oddity we want to be careful about how those internals are currently being relied on while making changes. That will be easier to do without having to also consider compile-time contexts.

r? `@eddyb`
This commit is contained in:
bors 2020-09-24 00:43:09 +00:00
commit 7b240a1262
7 changed files with 10 additions and 6 deletions

View file

@ -435,7 +435,7 @@ impl TypeId {
/// assert_eq!(is_string(&"cookie monster".to_string()), true); /// assert_eq!(is_string(&"cookie monster".to_string()), true);
/// ``` /// ```
#[stable(feature = "rust1", since = "1.0.0")] #[stable(feature = "rust1", since = "1.0.0")]
#[rustc_const_stable(feature = "const_type_id", since = "1.46.0")] #[rustc_const_unstable(feature = "const_type_id", issue = "77125")]
pub const fn of<T: ?Sized + 'static>() -> TypeId { pub const fn of<T: ?Sized + 'static>() -> TypeId {
TypeId { t: intrinsics::type_id::<T>() } TypeId { t: intrinsics::type_id::<T>() }
} }

View file

@ -807,7 +807,7 @@ extern "rust-intrinsic" {
/// crate it is invoked in. /// crate it is invoked in.
/// ///
/// The stabilized version of this intrinsic is [`crate::any::TypeId::of`]. /// The stabilized version of this intrinsic is [`crate::any::TypeId::of`].
#[rustc_const_stable(feature = "const_type_id", since = "1.46.0")] #[rustc_const_unstable(feature = "const_type_id", issue = "77125")]
pub fn type_id<T: ?Sized + 'static>() -> u64; pub fn type_id<T: ?Sized + 'static>() -> u64;
/// A guard for unsafe functions that cannot ever be executed if `T` is uninhabited: /// A guard for unsafe functions that cannot ever be executed if `T` is uninhabited:

View file

@ -92,6 +92,7 @@
#![feature(const_slice_ptr_len)] #![feature(const_slice_ptr_len)]
#![feature(const_size_of_val)] #![feature(const_size_of_val)]
#![feature(const_align_of_val)] #![feature(const_align_of_val)]
#![feature(const_type_id)]
#![feature(const_type_name)] #![feature(const_type_name)]
#![feature(const_likely)] #![feature(const_likely)]
#![feature(const_unreachable_unchecked)] #![feature(const_unreachable_unchecked)]

View file

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

View file

@ -5,6 +5,7 @@
// will be properly rejected. This test will ensure that monomorphic use of these // will be properly rejected. This test will ensure that monomorphic use of these
// would not be wrongly rejected in patterns. // would not be wrongly rejected in patterns.
#![feature(const_type_id)]
#![feature(const_type_name)] #![feature(const_type_name)]
use std::any::{self, TypeId}; use std::any::{self, TypeId};

View file

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

View file

@ -1,23 +1,23 @@
error: constant pattern depends on a generic parameter error: constant pattern depends on a generic parameter
--> $DIR/issue-73976-polymorphic.rs:19:37 --> $DIR/issue-73976-polymorphic.rs:20:37
| |
LL | matches!(GetTypeId::<T>::VALUE, GetTypeId::<T>::VALUE) LL | matches!(GetTypeId::<T>::VALUE, GetTypeId::<T>::VALUE)
| ^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^
error: constant pattern depends on a generic parameter error: constant pattern depends on a generic parameter
--> $DIR/issue-73976-polymorphic.rs:31:42 --> $DIR/issue-73976-polymorphic.rs:32:42
| |
LL | matches!(GetTypeNameLen::<T>::VALUE, GetTypeNameLen::<T>::VALUE) LL | matches!(GetTypeNameLen::<T>::VALUE, GetTypeNameLen::<T>::VALUE)
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^
error: constant pattern depends on a generic parameter error: constant pattern depends on a generic parameter
--> $DIR/issue-73976-polymorphic.rs:19:37 --> $DIR/issue-73976-polymorphic.rs:20:37
| |
LL | matches!(GetTypeId::<T>::VALUE, GetTypeId::<T>::VALUE) LL | matches!(GetTypeId::<T>::VALUE, GetTypeId::<T>::VALUE)
| ^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^
error: constant pattern depends on a generic parameter error: constant pattern depends on a generic parameter
--> $DIR/issue-73976-polymorphic.rs:31:42 --> $DIR/issue-73976-polymorphic.rs:32:42
| |
LL | matches!(GetTypeNameLen::<T>::VALUE, GetTypeNameLen::<T>::VALUE) LL | matches!(GetTypeNameLen::<T>::VALUE, GetTypeNameLen::<T>::VALUE)
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^