1
Fork 0

move 'trait bounds on const fn' to separate feature gate

This commit is contained in:
Ralf Jung 2021-04-18 18:36:41 +02:00
parent 6765010495
commit fdad6ab3a3
14 changed files with 44 additions and 31 deletions

View file

@ -576,6 +576,9 @@ declare_features! (
/// Allows using and casting function pointers in a `const fn`. /// Allows using and casting function pointers in a `const fn`.
(active, const_fn_fn_ptr_basics, "1.48.0", Some(57563), None), (active, const_fn_fn_ptr_basics, "1.48.0", Some(57563), None),
/// Allows trait bounds in `const fn`.
(active, const_fn_trait_bound, "1.53.0", Some(57563), None),
/// Allows to use the `#[cmse_nonsecure_entry]` attribute. /// Allows to use the `#[cmse_nonsecure_entry]` attribute.
(active, cmse_nonsecure_entry, "1.48.0", Some(75835), None), (active, cmse_nonsecure_entry, "1.48.0", Some(75835), None),

View file

@ -642,12 +642,17 @@ pub mod ty {
} }
fn status_in_item(&self, ccx: &ConstCx<'_, '_>) -> Status { 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_trait_bound)
}
} }
fn build_error(&self, ccx: &ConstCx<'_, 'tcx>, span: Span) -> DiagnosticBuilder<'tcx> { fn build_error(&self, ccx: &ConstCx<'_, 'tcx>, span: Span) -> DiagnosticBuilder<'tcx> {
mcf_build_error( feature_err(
ccx, &ccx.tcx.sess.parse_sess,
sym::const_fn_trait_bound,
span, span,
"trait bounds other than `Sized` on const fn parameters are unstable", "trait bounds other than `Sized` on const fn parameters are unstable",
) )

View file

@ -382,6 +382,7 @@ symbols! {
const_fn, const_fn,
const_fn_floating_point_arithmetic, const_fn_floating_point_arithmetic,
const_fn_fn_ptr_basics, const_fn_fn_ptr_basics,
const_fn_trait_bound,
const_fn_transmute, const_fn_transmute,
const_fn_union, const_fn_union,
const_generic_defaults, const_generic_defaults,

View file

@ -90,6 +90,7 @@
#![feature(coerce_unsized)] #![feature(coerce_unsized)]
#![feature(const_btree_new)] #![feature(const_btree_new)]
#![feature(const_fn)] #![feature(const_fn)]
#![cfg_attr(not(bootstrap), feature(const_fn_trait_bound))]
#![feature(cow_is_borrowed)] #![feature(cow_is_borrowed)]
#![feature(const_cow_is_borrowed)] #![feature(const_cow_is_borrowed)]
#![feature(destructuring_assignment)] #![feature(destructuring_assignment)]

View file

@ -86,6 +86,7 @@
#![feature(const_impl_trait)] #![feature(const_impl_trait)]
#![feature(const_fn_floating_point_arithmetic)] #![feature(const_fn_floating_point_arithmetic)]
#![feature(const_fn_fn_ptr_basics)] #![feature(const_fn_fn_ptr_basics)]
#![cfg_attr(not(bootstrap), feature(const_fn_trait_bound))]
#![feature(const_option)] #![feature(const_option)]
#![feature(const_precise_live_drops)] #![feature(const_precise_live_drops)]
#![feature(const_ptr_offset)] #![feature(const_ptr_offset)]

View file

@ -1,7 +1,7 @@
// issue-49296: Unsafe shenigans in constants can result in missing errors // issue-49296: Unsafe shenigans in constants can result in missing errors
#![feature(const_fn)]
#![feature(const_fn_union)] #![feature(const_fn_union)]
#![feature(const_fn_trait_bound)]
const unsafe fn transmute<T: Copy, U: Copy>(t: T) -> U { const unsafe fn transmute<T: Copy, U: Copy>(t: T) -> U {
#[repr(C)] #[repr(C)]

View file

@ -3,7 +3,8 @@
// A very basic test of const fn functionality. // A very basic test of const fn functionality.
#![feature(const_fn, const_indexing)] #![feature(const_indexing)]
#![feature(const_fn_trait_bound)]
const fn add(x: u32, y: u32) -> u32 { const fn add(x: u32, y: u32) -> u32 {
x + y x + y

View file

@ -130,23 +130,23 @@ LL | const fn get_mut_sq(&mut self) -> &mut T { &mut self.0 }
= note: see issue #57349 <https://github.com/rust-lang/rust/issues/57349> for more information = note: see issue #57349 <https://github.com/rust-lang/rust/issues/57349> for more information
= help: add `#![feature(const_mut_refs)]` to the crate attributes to enable = help: add `#![feature(const_mut_refs)]` to the crate attributes to enable
error[E0723]: trait bounds other than `Sized` on const fn parameters are unstable error[E0658]: trait bounds other than `Sized` on const fn parameters are unstable
--> $DIR/min_const_fn.rs:84:16 --> $DIR/min_const_fn.rs:84:16
| |
LL | const fn foo11<T: std::fmt::Display>(t: T) -> T { t } LL | const fn foo11<T: std::fmt::Display>(t: T) -> T { t }
| ^ | ^
| |
= note: see issue #57563 <https://github.com/rust-lang/rust/issues/57563> for more information = note: see issue #57563 <https://github.com/rust-lang/rust/issues/57563> for more information
= help: add `#![feature(const_fn)]` to the crate attributes to enable = help: add `#![feature(const_fn_trait_bound)]` to the crate attributes to enable
error[E0723]: trait bounds other than `Sized` on const fn parameters are unstable error[E0658]: trait bounds other than `Sized` on const fn parameters are unstable
--> $DIR/min_const_fn.rs:86:18 --> $DIR/min_const_fn.rs:86:18
| |
LL | const fn foo11_2<T: Send>(t: T) -> T { t } LL | const fn foo11_2<T: Send>(t: T) -> T { t }
| ^ | ^
| |
= note: see issue #57563 <https://github.com/rust-lang/rust/issues/57563> for more information = note: see issue #57563 <https://github.com/rust-lang/rust/issues/57563> for more information
= help: add `#![feature(const_fn)]` to the crate attributes to enable = help: add `#![feature(const_fn_trait_bound)]` to the crate attributes to enable
error[E0013]: constant functions cannot refer to statics error[E0013]: constant functions cannot refer to statics
--> $DIR/min_const_fn.rs:90:27 --> $DIR/min_const_fn.rs:90:27
@ -209,41 +209,41 @@ LL | const fn inc(x: &mut i32) { *x += 1 }
= note: see issue #57349 <https://github.com/rust-lang/rust/issues/57349> for more information = note: see issue #57349 <https://github.com/rust-lang/rust/issues/57349> for more information
= help: add `#![feature(const_mut_refs)]` to the crate attributes to enable = help: add `#![feature(const_mut_refs)]` to the crate attributes to enable
error[E0723]: trait bounds other than `Sized` on const fn parameters are unstable error[E0658]: trait bounds other than `Sized` on const fn parameters are unstable
--> $DIR/min_const_fn.rs:110:6 --> $DIR/min_const_fn.rs:110:6
| |
LL | impl<T: std::fmt::Debug> Foo<T> { LL | impl<T: std::fmt::Debug> Foo<T> {
| ^ | ^
| |
= note: see issue #57563 <https://github.com/rust-lang/rust/issues/57563> for more information = note: see issue #57563 <https://github.com/rust-lang/rust/issues/57563> for more information
= help: add `#![feature(const_fn)]` to the crate attributes to enable = help: add `#![feature(const_fn_trait_bound)]` to the crate attributes to enable
error[E0723]: trait bounds other than `Sized` on const fn parameters are unstable error[E0658]: trait bounds other than `Sized` on const fn parameters are unstable
--> $DIR/min_const_fn.rs:115:6 --> $DIR/min_const_fn.rs:115:6
| |
LL | impl<T: std::fmt::Debug + Sized> Foo<T> { LL | impl<T: std::fmt::Debug + Sized> Foo<T> {
| ^ | ^
| |
= note: see issue #57563 <https://github.com/rust-lang/rust/issues/57563> for more information = note: see issue #57563 <https://github.com/rust-lang/rust/issues/57563> for more information
= help: add `#![feature(const_fn)]` to the crate attributes to enable = help: add `#![feature(const_fn_trait_bound)]` to the crate attributes to enable
error[E0723]: trait bounds other than `Sized` on const fn parameters are unstable error[E0658]: trait bounds other than `Sized` on const fn parameters are unstable
--> $DIR/min_const_fn.rs:120:6 --> $DIR/min_const_fn.rs:120:6
| |
LL | impl<T: Sync + Sized> Foo<T> { LL | impl<T: Sync + Sized> Foo<T> {
| ^ | ^
| |
= note: see issue #57563 <https://github.com/rust-lang/rust/issues/57563> for more information = note: see issue #57563 <https://github.com/rust-lang/rust/issues/57563> for more information
= help: add `#![feature(const_fn)]` to the crate attributes to enable = help: add `#![feature(const_fn_trait_bound)]` to the crate attributes to enable
error[E0723]: trait bounds other than `Sized` on const fn parameters are unstable error[E0658]: trait bounds other than `Sized` on const fn parameters are unstable
--> $DIR/min_const_fn.rs:126:34 --> $DIR/min_const_fn.rs:126:34
| |
LL | const fn no_apit2(_x: AlanTuring<impl std::fmt::Debug>) {} LL | const fn no_apit2(_x: AlanTuring<impl std::fmt::Debug>) {}
| ^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^
| |
= note: see issue #57563 <https://github.com/rust-lang/rust/issues/57563> for more information = note: see issue #57563 <https://github.com/rust-lang/rust/issues/57563> for more information
= help: add `#![feature(const_fn)]` to the crate attributes to enable = help: add `#![feature(const_fn_trait_bound)]` to the crate attributes to enable
error[E0493]: destructors cannot be evaluated at compile-time error[E0493]: destructors cannot be evaluated at compile-time
--> $DIR/min_const_fn.rs:126:19 --> $DIR/min_const_fn.rs:126:19
@ -253,14 +253,14 @@ LL | const fn no_apit2(_x: AlanTuring<impl std::fmt::Debug>) {}
| | | |
| constant functions cannot evaluate destructors | constant functions cannot evaluate destructors
error[E0723]: trait bounds other than `Sized` on const fn parameters are unstable error[E0658]: trait bounds other than `Sized` on const fn parameters are unstable
--> $DIR/min_const_fn.rs:129:22 --> $DIR/min_const_fn.rs:129:22
| |
LL | const fn no_apit(_x: impl std::fmt::Debug) {} LL | const fn no_apit(_x: impl std::fmt::Debug) {}
| ^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^
| |
= note: see issue #57563 <https://github.com/rust-lang/rust/issues/57563> for more information = note: see issue #57563 <https://github.com/rust-lang/rust/issues/57563> for more information
= help: add `#![feature(const_fn)]` to the crate attributes to enable = help: add `#![feature(const_fn_trait_bound)]` to the crate attributes to enable
error[E0493]: destructors cannot be evaluated at compile-time error[E0493]: destructors cannot be evaluated at compile-time
--> $DIR/min_const_fn.rs:129:18 --> $DIR/min_const_fn.rs:129:18
@ -270,23 +270,23 @@ LL | const fn no_apit(_x: impl std::fmt::Debug) {}
| | | |
| constant functions cannot evaluate destructors | constant functions cannot evaluate destructors
error[E0723]: trait bounds other than `Sized` on const fn parameters are unstable error[E0658]: trait bounds other than `Sized` on const fn parameters are unstable
--> $DIR/min_const_fn.rs:132:23 --> $DIR/min_const_fn.rs:132:23
| |
LL | const fn no_dyn_trait(_x: &dyn std::fmt::Debug) {} LL | const fn no_dyn_trait(_x: &dyn std::fmt::Debug) {}
| ^^ | ^^
| |
= note: see issue #57563 <https://github.com/rust-lang/rust/issues/57563> for more information = note: see issue #57563 <https://github.com/rust-lang/rust/issues/57563> for more information
= help: add `#![feature(const_fn)]` to the crate attributes to enable = help: add `#![feature(const_fn_trait_bound)]` to the crate attributes to enable
error[E0723]: trait bounds other than `Sized` on const fn parameters are unstable error[E0658]: trait bounds other than `Sized` on const fn parameters are unstable
--> $DIR/min_const_fn.rs:134:32 --> $DIR/min_const_fn.rs:134:32
| |
LL | const fn no_dyn_trait_ret() -> &'static dyn std::fmt::Debug { &() } LL | const fn no_dyn_trait_ret() -> &'static dyn std::fmt::Debug { &() }
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
= note: see issue #57563 <https://github.com/rust-lang/rust/issues/57563> for more information = note: see issue #57563 <https://github.com/rust-lang/rust/issues/57563> for more information
= help: add `#![feature(const_fn)]` to the crate attributes to enable = help: add `#![feature(const_fn_trait_bound)]` to the crate attributes to enable
error[E0723]: unsizing casts to types besides slices are not allowed in const fn error[E0723]: unsizing casts to types besides slices are not allowed in const fn
--> $DIR/min_const_fn.rs:134:63 --> $DIR/min_const_fn.rs:134:63

View file

@ -1,11 +1,11 @@
error[E0723]: trait bounds other than `Sized` on const fn parameters are unstable error[E0658]: trait bounds other than `Sized` on const fn parameters are unstable
--> $DIR/min_const_fn_dyn.rs:9:5 --> $DIR/min_const_fn_dyn.rs:9:5
| |
LL | x.0.field; LL | x.0.field;
| ^^^^^^^^^ | ^^^^^^^^^
| |
= note: see issue #57563 <https://github.com/rust-lang/rust/issues/57563> for more information = note: see issue #57563 <https://github.com/rust-lang/rust/issues/57563> for more information
= help: add `#![feature(const_fn)]` to the crate attributes to enable = help: add `#![feature(const_fn_trait_bound)]` to the crate attributes to enable
error[E0723]: unsizing casts to types besides slices are not allowed in const fn error[E0723]: unsizing casts to types besides slices are not allowed in const fn
--> $DIR/min_const_fn_dyn.rs:12:66 --> $DIR/min_const_fn_dyn.rs:12:66
@ -18,4 +18,5 @@ LL | const fn no_inner_dyn_trait_ret() -> Hide { Hide(HasDyn { field: &0 }) }
error: aborting due to 2 previous errors error: aborting due to 2 previous errors
For more information about this error, try `rustc --explain E0723`. Some errors have detailed explanations: E0658, E0723.
For more information about an error, try `rustc --explain E0658`.

View file

@ -6,7 +6,7 @@
#![stable(feature = "core", since = "1.6.0")] #![stable(feature = "core", since = "1.6.0")]
#![feature(rustc_const_unstable)] #![feature(rustc_const_unstable)]
#![feature(staged_api)] #![feature(staged_api)]
#![feature(const_fn)] #![feature(const_fn_trait_bound)]
enum Opt<T> { enum Opt<T> {
Some(T), Some(T),

View file

@ -2,8 +2,8 @@
// check-pass // check-pass
#![feature(const_fn)]
#![feature(const_trait_impl)] #![feature(const_trait_impl)]
#![feature(const_fn_trait_bound)]
#![allow(incomplete_features)] #![allow(incomplete_features)]
struct S; struct S;

View file

@ -1,8 +1,8 @@
// check-pass // check-pass
#![feature(const_fn)]
#![feature(const_trait_impl)] #![feature(const_trait_impl)]
#![feature(const_trait_bound_opt_out)] #![feature(const_trait_bound_opt_out)]
#![feature(const_fn_trait_bound)]
#![allow(incomplete_features)] #![allow(incomplete_features)]
struct S; struct S;

View file

@ -2,8 +2,8 @@
// check-pass // check-pass
#![feature(const_fn)]
#![feature(const_trait_impl)] #![feature(const_trait_impl)]
#![feature(const_fn_trait_bound)]
#![allow(incomplete_features)] #![allow(incomplete_features)]
struct S; struct S;

View file

@ -2,7 +2,7 @@
#![allow(incomplete_features)] #![allow(incomplete_features)]
#![feature(const_trait_impl)] #![feature(const_trait_impl)]
#![feature(const_fn)] #![feature(const_fn_trait_bound)]
use std::marker::PhantomData; use std::marker::PhantomData;