From 8700b45b67b2cc138718a17fdb606db0944d03aa Mon Sep 17 00:00:00 2001 From: Eric Holk Date: Fri, 11 Feb 2022 18:04:44 -0800 Subject: [PATCH] Stabilize const_impl_trait as well --- .../src/transform/check_consts/check.rs | 1 - .../src/transform/check_consts/ops.rs | 21 ------------------- compiler/rustc_feature/src/accepted.rs | 2 ++ compiler/rustc_feature/src/active.rs | 2 -- library/core/src/lib.rs | 2 +- .../min_const_fn/min_const_fn_impl_trait.rs | 10 --------- .../min_const_fn_impl_trait.stderr | 21 ------------------- .../ui/type-alias-impl-trait/issue-53096.rs | 2 +- .../issue-53678-generator-and-const-fn.rs | 2 +- 9 files changed, 5 insertions(+), 58 deletions(-) delete mode 100644 src/test/ui/consts/min_const_fn/min_const_fn_impl_trait.rs delete mode 100644 src/test/ui/consts/min_const_fn/min_const_fn_impl_trait.stderr diff --git a/compiler/rustc_const_eval/src/transform/check_consts/check.rs b/compiler/rustc_const_eval/src/transform/check_consts/check.rs index 3b255de6314..7dc279cc840 100644 --- a/compiler/rustc_const_eval/src/transform/check_consts/check.rs +++ b/compiler/rustc_const_eval/src/transform/check_consts/check.rs @@ -356,7 +356,6 @@ impl<'mir, 'tcx> Checker<'mir, 'tcx> { match *ty.kind() { ty::Ref(_, _, hir::Mutability::Mut) => self.check_op(ops::ty::MutRef(kind)), - ty::Opaque(..) => self.check_op(ops::ty::ImplTrait), _ => {} } } diff --git a/compiler/rustc_const_eval/src/transform/check_consts/ops.rs b/compiler/rustc_const_eval/src/transform/check_consts/ops.rs index 0f5bcabeb84..ba248a3b6cb 100644 --- a/compiler/rustc_const_eval/src/transform/check_consts/ops.rs +++ b/compiler/rustc_const_eval/src/transform/check_consts/ops.rs @@ -795,25 +795,4 @@ pub mod ty { ) } } - - #[derive(Debug)] - pub struct ImplTrait; - impl<'tcx> NonConstOp<'tcx> for ImplTrait { - fn status_in_item(&self, _: &ConstCx<'_, '_>) -> Status { - Status::Unstable(sym::const_impl_trait) - } - - fn build_error( - &self, - ccx: &ConstCx<'_, 'tcx>, - span: Span, - ) -> DiagnosticBuilder<'tcx, ErrorGuaranteed> { - feature_err( - &ccx.tcx.sess.parse_sess, - sym::const_impl_trait, - span, - &format!("`impl Trait` is not allowed in {}s", ccx.const_kind()), - ) - } - } } diff --git a/compiler/rustc_feature/src/accepted.rs b/compiler/rustc_feature/src/accepted.rs index b649a548750..3fa11a6cd63 100644 --- a/compiler/rustc_feature/src/accepted.rs +++ b/compiler/rustc_feature/src/accepted.rs @@ -100,6 +100,8 @@ declare_features! ( (accepted, const_generics_defaults, "1.59.0", Some(44580), None), /// Allows the use of `if` and `match` in constants. (accepted, const_if_match, "1.46.0", Some(49146), None), + /// Allows argument and return position `impl Trait` in a `const fn`. + (accepted, const_impl_trait, "1.60.0", Some(77463), None), /// Allows indexing into constant arrays. (accepted, const_indexing, "1.26.0", Some(29947), None), /// Allows let bindings, assignments and destructuring in `const` functions and constants. diff --git a/compiler/rustc_feature/src/active.rs b/compiler/rustc_feature/src/active.rs index e48039148d9..a69d28b184a 100644 --- a/compiler/rustc_feature/src/active.rs +++ b/compiler/rustc_feature/src/active.rs @@ -340,8 +340,6 @@ declare_features! ( (active, const_fn_floating_point_arithmetic, "1.48.0", Some(57241), None), /// Allows `for _ in _` loops in const contexts. (active, const_for, "1.56.0", Some(87575), None), - /// Allows argument and return position `impl Trait` in a `const fn`. - (active, const_impl_trait, "1.48.0", Some(77463), None), /// Allows using `&mut` in constant functions. (active, const_mut_refs, "1.41.0", Some(57349), None), /// Be more precise when looking for live drops in a const context. diff --git a/library/core/src/lib.rs b/library/core/src/lib.rs index d337592d5f0..f436afbee44 100644 --- a/library/core/src/lib.rs +++ b/library/core/src/lib.rs @@ -160,7 +160,7 @@ #![feature(const_fn_floating_point_arithmetic)] #![cfg_attr(bootstrap, feature(const_fn_fn_ptr_basics))] #![cfg_attr(bootstrap, feature(const_fn_trait_bound))] -#![feature(const_impl_trait)] +#![cfg_attr(bootstrap, feature(const_impl_trait))] #![feature(const_mut_refs)] #![feature(const_precise_live_drops)] #![feature(const_refs_to_cell)] diff --git a/src/test/ui/consts/min_const_fn/min_const_fn_impl_trait.rs b/src/test/ui/consts/min_const_fn/min_const_fn_impl_trait.rs deleted file mode 100644 index e062c9f0aa3..00000000000 --- a/src/test/ui/consts/min_const_fn/min_const_fn_impl_trait.rs +++ /dev/null @@ -1,10 +0,0 @@ -// gate-test-const_impl_trait - -struct AlanTuring(T); -const fn no_rpit2() -> AlanTuring { //~ `impl Trait` - AlanTuring(0) -} - -const fn no_rpit() -> impl std::fmt::Debug {} //~ `impl Trait` - -fn main() {} diff --git a/src/test/ui/consts/min_const_fn/min_const_fn_impl_trait.stderr b/src/test/ui/consts/min_const_fn/min_const_fn_impl_trait.stderr deleted file mode 100644 index 01c797cd96b..00000000000 --- a/src/test/ui/consts/min_const_fn/min_const_fn_impl_trait.stderr +++ /dev/null @@ -1,21 +0,0 @@ -error[E0658]: `impl Trait` is not allowed in constant functions - --> $DIR/min_const_fn_impl_trait.rs:4:24 - | -LL | const fn no_rpit2() -> AlanTuring { - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - | - = note: see issue #77463 for more information - = help: add `#![feature(const_impl_trait)]` to the crate attributes to enable - -error[E0658]: `impl Trait` is not allowed in constant functions - --> $DIR/min_const_fn_impl_trait.rs:8:23 - | -LL | const fn no_rpit() -> impl std::fmt::Debug {} - | ^^^^^^^^^^^^^^^^^^^^ - | - = note: see issue #77463 for more information - = help: add `#![feature(const_impl_trait)]` to the crate attributes to enable - -error: aborting due to 2 previous errors - -For more information about this error, try `rustc --explain E0658`. diff --git a/src/test/ui/type-alias-impl-trait/issue-53096.rs b/src/test/ui/type-alias-impl-trait/issue-53096.rs index 757c3e8e59c..007dcf3bcb6 100644 --- a/src/test/ui/type-alias-impl-trait/issue-53096.rs +++ b/src/test/ui/type-alias-impl-trait/issue-53096.rs @@ -1,4 +1,4 @@ -#![feature(const_impl_trait, rustc_attrs)] +#![feature(rustc_attrs)] #![feature(type_alias_impl_trait)] type Foo = impl Fn() -> usize; diff --git a/src/test/ui/type-alias-impl-trait/issue-53678-generator-and-const-fn.rs b/src/test/ui/type-alias-impl-trait/issue-53678-generator-and-const-fn.rs index 176118200e5..a3f126d56cf 100644 --- a/src/test/ui/type-alias-impl-trait/issue-53678-generator-and-const-fn.rs +++ b/src/test/ui/type-alias-impl-trait/issue-53678-generator-and-const-fn.rs @@ -1,4 +1,4 @@ -#![feature(const_impl_trait, generators, generator_trait, rustc_attrs)] +#![feature(generators, generator_trait, rustc_attrs)] #![feature(type_alias_impl_trait)] use std::ops::Generator;