diff options
| author | Dylan MacKenzie <ecstaticmorse@gmail.com> | 2020-10-02 12:02:41 -0700 |
|---|---|---|
| committer | Dylan MacKenzie <ecstaticmorse@gmail.com> | 2020-10-05 19:56:50 -0700 |
| commit | e1d76818b2b505e88bcd0c965da945e7e2e4329e (patch) | |
| tree | a64db42a2dabd5d889f71e0a4ccc03bc24740add | |
| parent | a1dfd2490a6cb456b92e469fa550dc217e20ad6d (diff) | |
| download | rust-e1d76818b2b505e88bcd0c965da945e7e2e4329e.tar.gz rust-e1d76818b2b505e88bcd0c965da945e7e2e4329e.zip | |
Add `#![feature(const_fn_impl)]`
| -rw-r--r-- | compiler/rustc_feature/src/active.rs | 3 | ||||
| -rw-r--r-- | compiler/rustc_mir/src/transform/check_consts/ops.rs | 13 | ||||
| -rw-r--r-- | compiler/rustc_span/src/symbol.rs | 1 |
3 files changed, 15 insertions, 2 deletions
diff --git a/compiler/rustc_feature/src/active.rs b/compiler/rustc_feature/src/active.rs index cd018ae1204..19da310b3b2 100644 --- a/compiler/rustc_feature/src/active.rs +++ b/compiler/rustc_feature/src/active.rs @@ -596,6 +596,9 @@ declare_features! ( /// Allows rustc to inject a default alloc_error_handler (active, default_alloc_error_handler, "1.48.0", Some(66741), None), + /// Allows argument and return position `impl Trait` in a `const fn`. + (active, const_fn_impl_trait, "1.48.0", Some(77463), None), + // ------------------------------------------------------------------------- // feature-group-end: actual feature gates // ------------------------------------------------------------------------- diff --git a/compiler/rustc_mir/src/transform/check_consts/ops.rs b/compiler/rustc_mir/src/transform/check_consts/ops.rs index 9a1b77e994d..91008f00930 100644 --- a/compiler/rustc_mir/src/transform/check_consts/ops.rs +++ b/compiler/rustc_mir/src/transform/check_consts/ops.rs @@ -559,11 +559,20 @@ pub mod ty { pub struct ImplTrait; impl NonConstOp for ImplTrait { fn status_in_item(&self, ccx: &ConstCx<'_, '_>) -> Status { - mcf_status_in_item(ccx) + if ccx.const_kind() != hir::ConstContext::ConstFn { + Status::Allowed + } else { + Status::Unstable(sym::const_fn_impl_trait) + } } fn build_error(&self, ccx: &ConstCx<'_, 'tcx>, span: Span) -> DiagnosticBuilder<'tcx> { - mcf_build_error(ccx, span, "`impl Trait` in const fn is unstable") + feature_err( + &ccx.tcx.sess.parse_sess, + sym::const_fn_impl_trait, + span, + &format!("`impl Trait` is not allowed in {}s", ccx.const_kind()), + ) } } diff --git a/compiler/rustc_span/src/symbol.rs b/compiler/rustc_span/src/symbol.rs index 6309b00f5f5..123f1f76765 100644 --- a/compiler/rustc_span/src/symbol.rs +++ b/compiler/rustc_span/src/symbol.rs @@ -355,6 +355,7 @@ symbols! { const_fn, const_fn_floating_point_arithmetic, const_fn_fn_ptr_basics, + const_fn_impl_trait, const_fn_transmute, const_fn_union, const_generics, |
