mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-21 22:34:05 +00:00
Deny calls to non-#[const_trait]
methods in MIR constck
This commit is contained in:
parent
54761cb3e8
commit
f2f67232a5
@ -616,14 +616,16 @@ impl<'tcx> Visitor<'tcx> for Checker<'_, 'tcx> {
|
||||
|
||||
let mut is_trait = false;
|
||||
// Attempting to call a trait method?
|
||||
if tcx.trait_of_item(callee).is_some() {
|
||||
if let Some(trait_did) = tcx.trait_of_item(callee) {
|
||||
trace!("attempting to call a trait method");
|
||||
|
||||
let trait_is_const = tcx.is_const_trait(trait_did);
|
||||
// trait method calls are only permitted when `effects` is enabled.
|
||||
// we don't error, since that is handled by typeck. We try to resolve
|
||||
// the trait into the concrete method, and uses that for const stability
|
||||
// checks.
|
||||
// typeck ensures the conditions for calling a const trait method are met,
|
||||
// so we only error if the trait isn't const. We try to resolve the trait
|
||||
// into the concrete method, and uses that for const stability checks.
|
||||
// FIXME(effects) we might consider moving const stability checks to typeck as well.
|
||||
if tcx.features().effects() {
|
||||
if tcx.features().effects() && trait_is_const {
|
||||
// This skips the check below that ensures we only call `const fn`.
|
||||
is_trait = true;
|
||||
|
||||
@ -638,17 +640,24 @@ impl<'tcx> Visitor<'tcx> for Checker<'_, 'tcx> {
|
||||
callee = def;
|
||||
}
|
||||
} else {
|
||||
// if the trait is const but the user has not enabled the feature(s),
|
||||
// suggest them.
|
||||
let feature = if trait_is_const {
|
||||
Some(if tcx.features().const_trait_impl() {
|
||||
sym::effects
|
||||
} else {
|
||||
sym::const_trait_impl
|
||||
})
|
||||
} else {
|
||||
None
|
||||
};
|
||||
self.check_op(ops::FnCallNonConst {
|
||||
caller,
|
||||
callee,
|
||||
args: fn_args,
|
||||
span: *fn_span,
|
||||
call_source,
|
||||
feature: Some(if tcx.features().const_trait_impl() {
|
||||
sym::effects
|
||||
} else {
|
||||
sym::const_trait_impl
|
||||
}),
|
||||
feature,
|
||||
});
|
||||
// If we allowed this, we're in miri-unleashed mode, so we might
|
||||
// as well skip the remaining checks.
|
||||
|
@ -27,11 +27,13 @@ LL + #[derive(ConstParamTy)]
|
||||
LL | struct Foo(u8);
|
||||
|
|
||||
|
||||
error[E0284]: type annotations needed: cannot normalize `foo<N>::{constant#0}`
|
||||
--> $DIR/unify-op-with-fn-call.rs:20:25
|
||||
error[E0015]: cannot call non-const operator in constants
|
||||
--> $DIR/unify-op-with-fn-call.rs:20:39
|
||||
|
|
||||
LL | fn foo<const N: Foo>(a: Evaluatable<{ N + N }>) {
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^ cannot normalize `foo<N>::{constant#0}`
|
||||
| ^^^^^
|
||||
|
|
||||
= note: calls in constants are limited to constant functions, tuple structs and tuple variants
|
||||
|
||||
error[E0741]: `Foo` must implement `ConstParamTy` to be used as the type of a const generic parameter
|
||||
--> $DIR/unify-op-with-fn-call.rs:20:17
|
||||
@ -63,11 +65,21 @@ error[E0284]: type annotations needed: cannot normalize `foo2<N>::{constant#0}`
|
||||
LL | fn foo2<const N: usize>(a: Evaluatable2<{ N + N }>) {
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^ cannot normalize `foo2<N>::{constant#0}`
|
||||
|
||||
error[E0284]: type annotations needed: cannot normalize `foo<N>::{constant#0}`
|
||||
--> $DIR/unify-op-with-fn-call.rs:21:11
|
||||
error[E0015]: cannot call non-const fn `<Foo as Add>::add` in constants
|
||||
--> $DIR/unify-op-with-fn-call.rs:21:13
|
||||
|
|
||||
LL | bar::<{ std::ops::Add::add(N, N) }>();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ cannot normalize `foo<N>::{constant#0}`
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: calls in constants are limited to constant functions, tuple structs and tuple variants
|
||||
|
||||
error[E0015]: cannot call non-const fn `<usize as Add>::add` in constants
|
||||
--> $DIR/unify-op-with-fn-call.rs:30:14
|
||||
|
|
||||
LL | bar2::<{ std::ops::Add::add(N, N) }>();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: calls in constants are limited to constant functions, tuple structs and tuple variants
|
||||
|
||||
error[E0284]: type annotations needed: cannot normalize `foo2<N>::{constant#0}`
|
||||
--> $DIR/unify-op-with-fn-call.rs:30:12
|
||||
@ -75,7 +87,7 @@ error[E0284]: type annotations needed: cannot normalize `foo2<N>::{constant#0}`
|
||||
LL | bar2::<{ std::ops::Add::add(N, N) }>();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ cannot normalize `foo2<N>::{constant#0}`
|
||||
|
||||
error: aborting due to 9 previous errors
|
||||
error: aborting due to 10 previous errors
|
||||
|
||||
Some errors have detailed explanations: E0284, E0741.
|
||||
For more information about an error, try `rustc --explain E0284`.
|
||||
Some errors have detailed explanations: E0015, E0284, E0741.
|
||||
For more information about an error, try `rustc --explain E0015`.
|
||||
|
@ -6,10 +6,6 @@ LL | (||1usize)()
|
||||
|
|
||||
= note: closures need an RFC before allowed to be called in constants
|
||||
= note: calls in constants are limited to constant functions, tuple structs and tuple variants
|
||||
help: add `#![feature(const_trait_impl)]` to the crate attributes to enable
|
||||
|
|
||||
LL + #![feature(const_trait_impl)]
|
||||
|
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
|
||||
|
@ -29,10 +29,6 @@ LL | If<{ TypeId::of::<T>() != TypeId::of::<()>() }>: True,
|
||||
note: impl defined here, but it is not `const`
|
||||
--> $SRC_DIR/core/src/any.rs:LL:COL
|
||||
= note: calls in constants are limited to constant functions, tuple structs and tuple variants
|
||||
help: add `#![feature(const_trait_impl)]` to the crate attributes to enable
|
||||
|
|
||||
LL + #![feature(const_trait_impl)]
|
||||
|
|
||||
|
||||
error[E0015]: cannot call non-const operator in constants
|
||||
--> $DIR/issue-90318.rs:22:10
|
||||
@ -43,10 +39,6 @@ LL | If<{ TypeId::of::<T>() != TypeId::of::<()>() }>: True,
|
||||
note: impl defined here, but it is not `const`
|
||||
--> $SRC_DIR/core/src/any.rs:LL:COL
|
||||
= note: calls in constants are limited to constant functions, tuple structs and tuple variants
|
||||
help: add `#![feature(const_trait_impl)]` to the crate attributes to enable
|
||||
|
|
||||
LL + #![feature(const_trait_impl)]
|
||||
|
|
||||
|
||||
error: aborting due to 4 previous errors
|
||||
|
||||
|
@ -1,8 +1,8 @@
|
||||
//@ aux-build:closure-in-foreign-crate.rs
|
||||
// FIXME(effects) aux-build:closure-in-foreign-crate.rs
|
||||
//@ build-pass
|
||||
|
||||
extern crate closure_in_foreign_crate;
|
||||
// FIXME(effects) extern crate closure_in_foreign_crate;
|
||||
|
||||
const _: () = closure_in_foreign_crate::test();
|
||||
// FIXME(effects) const _: () = closure_in_foreign_crate::test();
|
||||
|
||||
fn main() {}
|
||||
|
@ -22,10 +22,6 @@ LL | for i in 0..x {
|
||||
note: impl defined here, but it is not `const`
|
||||
--> $SRC_DIR/core/src/iter/traits/collect.rs:LL:COL
|
||||
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants
|
||||
help: add `#![feature(const_trait_impl)]` to the crate attributes to enable
|
||||
|
|
||||
LL + #![feature(const_trait_impl)]
|
||||
|
|
||||
|
||||
error[E0015]: cannot call non-const fn `<std::ops::Range<usize> as Iterator>::next` in constant functions
|
||||
--> $DIR/const-fn-error.rs:5:14
|
||||
@ -34,10 +30,6 @@ LL | for i in 0..x {
|
||||
| ^^^^
|
||||
|
|
||||
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants
|
||||
help: add `#![feature(const_trait_impl)]` to the crate attributes to enable
|
||||
|
|
||||
LL + #![feature(const_trait_impl)]
|
||||
|
|
||||
|
||||
error: aborting due to 3 previous errors
|
||||
|
||||
|
@ -17,10 +17,6 @@ LL | for _ in 0..5 {}
|
||||
note: impl defined here, but it is not `const`
|
||||
--> $SRC_DIR/core/src/iter/traits/collect.rs:LL:COL
|
||||
= note: calls in constants are limited to constant functions, tuple structs and tuple variants
|
||||
help: add `#![feature(const_trait_impl)]` to the crate attributes to enable
|
||||
|
|
||||
LL + #![feature(const_trait_impl)]
|
||||
|
|
||||
|
||||
error[E0015]: cannot call non-const fn `<std::ops::Range<i32> as Iterator>::next` in constants
|
||||
--> $DIR/const-for-feature-gate.rs:4:14
|
||||
@ -29,10 +25,6 @@ LL | for _ in 0..5 {}
|
||||
| ^^^^
|
||||
|
|
||||
= note: calls in constants are limited to constant functions, tuple structs and tuple variants
|
||||
help: add `#![feature(const_trait_impl)]` to the crate attributes to enable
|
||||
|
|
||||
LL + #![feature(const_trait_impl)]
|
||||
|
|
||||
|
||||
error: aborting due to 3 previous errors
|
||||
|
||||
|
@ -7,10 +7,6 @@ LL | for _ in 0..5 {}
|
||||
note: impl defined here, but it is not `const`
|
||||
--> $SRC_DIR/core/src/iter/traits/collect.rs:LL:COL
|
||||
= note: calls in constants are limited to constant functions, tuple structs and tuple variants
|
||||
help: add `#![feature(const_trait_impl)]` to the crate attributes to enable
|
||||
|
|
||||
LL + #![feature(const_trait_impl)]
|
||||
|
|
||||
|
||||
error[E0015]: cannot call non-const fn `<std::ops::Range<i32> as Iterator>::next` in constants
|
||||
--> $DIR/const-for.rs:4:14
|
||||
@ -19,10 +15,6 @@ LL | for _ in 0..5 {}
|
||||
| ^^^^
|
||||
|
|
||||
= note: calls in constants are limited to constant functions, tuple structs and tuple variants
|
||||
help: add `#![feature(const_trait_impl)]` to the crate attributes to enable
|
||||
|
|
||||
LL + #![feature(const_trait_impl)]
|
||||
|
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
|
@ -17,10 +17,6 @@ LL | Some(())?;
|
||||
note: impl defined here, but it is not `const`
|
||||
--> $SRC_DIR/core/src/option.rs:LL:COL
|
||||
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants
|
||||
help: add `#![feature(const_trait_impl)]` to the crate attributes to enable
|
||||
|
|
||||
LL + #![feature(const_trait_impl)]
|
||||
|
|
||||
|
||||
error[E0015]: `?` cannot convert from residual of `Option<()>` in constant functions
|
||||
--> $DIR/const-try-feature-gate.rs:4:5
|
||||
@ -31,10 +27,6 @@ LL | Some(())?;
|
||||
note: impl defined here, but it is not `const`
|
||||
--> $SRC_DIR/core/src/option.rs:LL:COL
|
||||
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants
|
||||
help: add `#![feature(const_trait_impl)]` to the crate attributes to enable
|
||||
|
|
||||
LL + #![feature(const_trait_impl)]
|
||||
|
|
||||
|
||||
error: aborting due to 3 previous errors
|
||||
|
||||
|
@ -34,6 +34,8 @@ impl const Try for TryMe {
|
||||
|
||||
const fn t() -> TryMe {
|
||||
TryMe?;
|
||||
//~^ ERROR `?` cannot determine the branch of `TryMe` in constant functions
|
||||
//~| ERROR `?` cannot convert from residual of `TryMe` in constant functions
|
||||
TryMe
|
||||
}
|
||||
|
||||
|
@ -16,5 +16,22 @@ LL | impl const Try for TryMe {
|
||||
= note: marking a trait with `#[const_trait]` ensures all default method bodies are `const`
|
||||
= note: adding a non-const method body in the future would be a breaking change
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
error[E0015]: `?` cannot determine the branch of `TryMe` in constant functions
|
||||
--> $DIR/const-try.rs:36:5
|
||||
|
|
||||
LL | TryMe?;
|
||||
| ^^^^^^
|
||||
|
|
||||
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants
|
||||
|
||||
error[E0015]: `?` cannot convert from residual of `TryMe` in constant functions
|
||||
--> $DIR/const-try.rs:36:5
|
||||
|
|
||||
LL | TryMe?;
|
||||
| ^^^^^^
|
||||
|
|
||||
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants
|
||||
|
||||
error: aborting due to 4 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0015`.
|
||||
|
@ -1,4 +1,3 @@
|
||||
//@ check-pass
|
||||
//@ compile-flags: -Znext-solver
|
||||
#![feature(const_type_id, const_trait_impl, effects)]
|
||||
#![allow(incomplete_features)]
|
||||
@ -7,11 +6,13 @@ use std::any::TypeId;
|
||||
|
||||
fn main() {
|
||||
const {
|
||||
// FIXME(effects) this isn't supposed to pass (right now) but it did.
|
||||
// revisit binops typeck please.
|
||||
assert!(TypeId::of::<u8>() == TypeId::of::<u8>());
|
||||
//~^ ERROR cannot call non-const operator in constants
|
||||
assert!(TypeId::of::<()>() != TypeId::of::<u8>());
|
||||
//~^ ERROR cannot call non-const operator in constants
|
||||
let _a = TypeId::of::<u8>() < TypeId::of::<u16>();
|
||||
//~^ ERROR cannot call non-const operator in constants
|
||||
// can't assert `_a` because it is not deterministic
|
||||
// FIXME(effects) make it pass
|
||||
}
|
||||
}
|
||||
|
34
tests/ui/consts/const_cmp_type_id.stderr
Normal file
34
tests/ui/consts/const_cmp_type_id.stderr
Normal file
@ -0,0 +1,34 @@
|
||||
error[E0015]: cannot call non-const operator in constants
|
||||
--> $DIR/const_cmp_type_id.rs:9:17
|
||||
|
|
||||
LL | assert!(TypeId::of::<u8>() == TypeId::of::<u8>());
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
note: impl defined here, but it is not `const`
|
||||
--> $SRC_DIR/core/src/any.rs:LL:COL
|
||||
= note: calls in constants are limited to constant functions, tuple structs and tuple variants
|
||||
|
||||
error[E0015]: cannot call non-const operator in constants
|
||||
--> $DIR/const_cmp_type_id.rs:11:17
|
||||
|
|
||||
LL | assert!(TypeId::of::<()>() != TypeId::of::<u8>());
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
note: impl defined here, but it is not `const`
|
||||
--> $SRC_DIR/core/src/any.rs:LL:COL
|
||||
= note: calls in constants are limited to constant functions, tuple structs and tuple variants
|
||||
|
||||
error[E0015]: cannot call non-const operator in constants
|
||||
--> $DIR/const_cmp_type_id.rs:13:18
|
||||
|
|
||||
LL | let _a = TypeId::of::<u8>() < TypeId::of::<u16>();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
note: impl defined here, but it is not `const`
|
||||
--> $SRC_DIR/core/src/any.rs:LL:COL
|
||||
= note: calls in constants are limited to constant functions, tuple structs and tuple variants
|
||||
= note: this error originates in the derive macro `PartialOrd` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error: aborting due to 3 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0015`.
|
@ -35,10 +35,6 @@ LL | for i in 0..4 {
|
||||
note: impl defined here, but it is not `const`
|
||||
--> $SRC_DIR/core/src/iter/traits/collect.rs:LL:COL
|
||||
= note: calls in constants are limited to constant functions, tuple structs and tuple variants
|
||||
help: add `#![feature(const_trait_impl)]` to the crate attributes to enable
|
||||
|
|
||||
LL + #![feature(const_trait_impl)]
|
||||
|
|
||||
|
||||
error[E0015]: cannot call non-const fn `<std::ops::Range<i32> as Iterator>::next` in constants
|
||||
--> $DIR/loop.rs:53:14
|
||||
@ -47,10 +43,6 @@ LL | for i in 0..4 {
|
||||
| ^^^^
|
||||
|
|
||||
= note: calls in constants are limited to constant functions, tuple structs and tuple variants
|
||||
help: add `#![feature(const_trait_impl)]` to the crate attributes to enable
|
||||
|
|
||||
LL + #![feature(const_trait_impl)]
|
||||
|
|
||||
|
||||
error[E0015]: cannot convert `std::ops::Range<i32>` into an iterator in constants
|
||||
--> $DIR/loop.rs:59:14
|
||||
@ -61,10 +53,6 @@ LL | for i in 0..4 {
|
||||
note: impl defined here, but it is not `const`
|
||||
--> $SRC_DIR/core/src/iter/traits/collect.rs:LL:COL
|
||||
= note: calls in constants are limited to constant functions, tuple structs and tuple variants
|
||||
help: add `#![feature(const_trait_impl)]` to the crate attributes to enable
|
||||
|
|
||||
LL + #![feature(const_trait_impl)]
|
||||
|
|
||||
|
||||
error[E0015]: cannot call non-const fn `<std::ops::Range<i32> as Iterator>::next` in constants
|
||||
--> $DIR/loop.rs:59:14
|
||||
@ -73,10 +61,6 @@ LL | for i in 0..4 {
|
||||
| ^^^^
|
||||
|
|
||||
= note: calls in constants are limited to constant functions, tuple structs and tuple variants
|
||||
help: add `#![feature(const_trait_impl)]` to the crate attributes to enable
|
||||
|
|
||||
LL + #![feature(const_trait_impl)]
|
||||
|
|
||||
|
||||
error: aborting due to 6 previous errors
|
||||
|
||||
|
@ -17,10 +17,6 @@ LL | x?;
|
||||
note: impl defined here, but it is not `const`
|
||||
--> $SRC_DIR/core/src/option.rs:LL:COL
|
||||
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants
|
||||
help: add `#![feature(const_trait_impl)]` to the crate attributes to enable
|
||||
|
|
||||
LL + #![feature(const_trait_impl)]
|
||||
|
|
||||
|
||||
error[E0015]: `?` cannot convert from residual of `Option<i32>` in constant functions
|
||||
--> $DIR/try.rs:6:5
|
||||
@ -31,10 +27,6 @@ LL | x?;
|
||||
note: impl defined here, but it is not `const`
|
||||
--> $SRC_DIR/core/src/option.rs:LL:COL
|
||||
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants
|
||||
help: add `#![feature(const_trait_impl)]` to the crate attributes to enable
|
||||
|
|
||||
LL + #![feature(const_trait_impl)]
|
||||
|
|
||||
|
||||
error: aborting due to 3 previous errors
|
||||
|
||||
|
@ -183,10 +183,6 @@ LL | assert!(test_one == (1, 1, 1));
|
||||
| ^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: calls in constants are limited to constant functions, tuple structs and tuple variants
|
||||
help: add `#![feature(effects)]` to the crate attributes to enable
|
||||
|
|
||||
LL + #![feature(effects)]
|
||||
|
|
||||
|
||||
error[E0015]: cannot call non-const operator in constants
|
||||
--> $DIR/fn_trait_refs.rs:73:17
|
||||
@ -195,10 +191,6 @@ LL | assert!(test_two == (2, 2));
|
||||
| ^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: calls in constants are limited to constant functions, tuple structs and tuple variants
|
||||
help: add `#![feature(effects)]` to the crate attributes to enable
|
||||
|
|
||||
LL + #![feature(effects)]
|
||||
|
|
||||
|
||||
error[E0015]: cannot call non-const closure in constant functions
|
||||
--> $DIR/fn_trait_refs.rs:15:5
|
||||
@ -211,10 +203,6 @@ help: consider further restricting this bound
|
||||
|
|
||||
LL | T: ~const Fn<()> + ~const Destruct + ~const Fn(),
|
||||
| +++++++++++++
|
||||
help: add `#![feature(effects)]` to the crate attributes to enable
|
||||
|
|
||||
LL + #![feature(effects)]
|
||||
|
|
||||
|
||||
error[E0493]: destructor of `T` cannot be evaluated at compile-time
|
||||
--> $DIR/fn_trait_refs.rs:11:23
|
||||
@ -236,10 +224,6 @@ help: consider further restricting this bound
|
||||
|
|
||||
LL | T: ~const FnMut<()> + ~const Destruct + ~const FnMut(),
|
||||
| ++++++++++++++++
|
||||
help: add `#![feature(effects)]` to the crate attributes to enable
|
||||
|
|
||||
LL + #![feature(effects)]
|
||||
|
|
||||
|
||||
error[E0493]: destructor of `T` cannot be evaluated at compile-time
|
||||
--> $DIR/fn_trait_refs.rs:18:27
|
||||
@ -261,10 +245,6 @@ help: consider further restricting this bound
|
||||
|
|
||||
LL | T: ~const FnOnce<()> + ~const FnOnce(),
|
||||
| +++++++++++++++++
|
||||
help: add `#![feature(effects)]` to the crate attributes to enable
|
||||
|
|
||||
LL + #![feature(effects)]
|
||||
|
|
||||
|
||||
error[E0493]: destructor of `T` cannot be evaluated at compile-time
|
||||
--> $DIR/fn_trait_refs.rs:32:21
|
||||
|
@ -6,10 +6,6 @@ LL | const { (|| {})() } => {}
|
||||
|
|
||||
= note: closures need an RFC before allowed to be called in constants
|
||||
= note: calls in constants are limited to constant functions, tuple structs and tuple variants
|
||||
help: add `#![feature(const_trait_impl)]` to the crate attributes to enable
|
||||
|
|
||||
LL + #![feature(const_trait_impl)]
|
||||
|
|
||||
|
||||
error: could not evaluate constant pattern
|
||||
--> $DIR/invalid-inline-const-in-match-arm.rs:5:9
|
||||
|
@ -6,10 +6,6 @@ LL | || -> u8 { 5 }()
|
||||
|
|
||||
= note: closures need an RFC before allowed to be called in constants
|
||||
= note: calls in constants are limited to constant functions, tuple structs and tuple variants
|
||||
help: add `#![feature(const_trait_impl)]` to the crate attributes to enable
|
||||
|
|
||||
LL + #![feature(const_trait_impl)]
|
||||
|
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
|
||||
|
@ -6,10 +6,6 @@ LL | const fn foo() { (||{})() }
|
||||
|
|
||||
= note: closures need an RFC before allowed to be called in constant functions
|
||||
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants
|
||||
help: add `#![feature(const_trait_impl)]` to the crate attributes to enable
|
||||
|
|
||||
LL + #![feature(const_trait_impl)]
|
||||
|
|
||||
|
||||
error: function pointer calls are not allowed in constant functions
|
||||
--> $DIR/issue-56164.rs:5:5
|
||||
|
@ -6,10 +6,6 @@ LL | a: [(); (|| { 0 })()]
|
||||
|
|
||||
= note: closures need an RFC before allowed to be called in constants
|
||||
= note: calls in constants are limited to constant functions, tuple structs and tuple variants
|
||||
help: add `#![feature(const_trait_impl)]` to the crate attributes to enable
|
||||
|
|
||||
LL + #![feature(const_trait_impl)]
|
||||
|
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
|
||||
|
@ -7,10 +7,6 @@ LL | GetTypeId::<T>::VALUE == GetTypeId::<usize>::VALUE
|
||||
note: impl defined here, but it is not `const`
|
||||
--> $SRC_DIR/core/src/any.rs:LL:COL
|
||||
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants
|
||||
help: add `#![feature(effects)]` to the crate attributes to enable
|
||||
|
|
||||
LL + #![feature(effects)]
|
||||
|
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
|
||||
|
@ -3,9 +3,6 @@
|
||||
#![allow(dead_code)]
|
||||
|
||||
const fn f(a: &u8, b: &u8) -> bool {
|
||||
//~^ HELP: add `#![feature(const_trait_impl)]`
|
||||
//~| HELP: add `#![feature(const_trait_impl)]`
|
||||
//~| HELP: add `#![feature(const_trait_impl)]`
|
||||
a == b
|
||||
//~^ ERROR: cannot call non-const operator in constant functions [E0015]
|
||||
//~| HELP: consider dereferencing here
|
||||
|
@ -1,5 +1,5 @@
|
||||
error[E0015]: cannot call non-const operator in constant functions
|
||||
--> $DIR/issue-90870.rs:9:5
|
||||
--> $DIR/issue-90870.rs:6:5
|
||||
|
|
||||
LL | a == b
|
||||
| ^^^^^^
|
||||
@ -9,13 +9,9 @@ help: consider dereferencing here
|
||||
|
|
||||
LL | *a == *b
|
||||
| + +
|
||||
help: add `#![feature(const_trait_impl)]` to the crate attributes to enable
|
||||
|
|
||||
LL + #![feature(const_trait_impl)]
|
||||
|
|
||||
|
||||
error[E0015]: cannot call non-const operator in constant functions
|
||||
--> $DIR/issue-90870.rs:15:5
|
||||
--> $DIR/issue-90870.rs:12:5
|
||||
|
|
||||
LL | a == b
|
||||
| ^^^^^^
|
||||
@ -25,13 +21,9 @@ help: consider dereferencing here
|
||||
|
|
||||
LL | ****a == ****b
|
||||
| ++++ ++++
|
||||
help: add `#![feature(const_trait_impl)]` to the crate attributes to enable
|
||||
|
|
||||
LL + #![feature(const_trait_impl)]
|
||||
|
|
||||
|
||||
error[E0015]: cannot call non-const operator in constant functions
|
||||
--> $DIR/issue-90870.rs:22:12
|
||||
--> $DIR/issue-90870.rs:19:12
|
||||
|
|
||||
LL | if l == r {
|
||||
| ^^^^^^
|
||||
@ -41,10 +33,6 @@ help: consider dereferencing here
|
||||
|
|
||||
LL | if *l == *r {
|
||||
| + +
|
||||
help: add `#![feature(const_trait_impl)]` to the crate attributes to enable
|
||||
|
|
||||
LL + #![feature(const_trait_impl)]
|
||||
|
|
||||
|
||||
error: aborting due to 3 previous errors
|
||||
|
||||
|
@ -7,10 +7,6 @@ LL | self.bar[0] = baz.len();
|
||||
note: impl defined here, but it is not `const`
|
||||
--> $SRC_DIR/alloc/src/vec/mod.rs:LL:COL
|
||||
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants
|
||||
help: add `#![feature(effects)]` to the crate attributes to enable
|
||||
|
|
||||
LL + #![feature(effects)]
|
||||
|
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
|
||||
|
@ -13,10 +13,6 @@ LL | Err(())?;
|
||||
note: impl defined here, but it is not `const`
|
||||
--> $SRC_DIR/core/src/result.rs:LL:COL
|
||||
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants
|
||||
help: add `#![feature(effects)]` to the crate attributes to enable
|
||||
|
|
||||
LL + #![feature(effects)]
|
||||
|
|
||||
|
||||
error[E0015]: `?` cannot convert from residual of `Result<bool, ()>` in constant functions
|
||||
--> $DIR/try-operator.rs:10:9
|
||||
@ -27,10 +23,6 @@ LL | Err(())?;
|
||||
note: impl defined here, but it is not `const`
|
||||
--> $SRC_DIR/core/src/result.rs:LL:COL
|
||||
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants
|
||||
help: add `#![feature(effects)]` to the crate attributes to enable
|
||||
|
|
||||
LL + #![feature(effects)]
|
||||
|
|
||||
|
||||
error[E0015]: `?` cannot determine the branch of `Option<()>` in constant functions
|
||||
--> $DIR/try-operator.rs:18:9
|
||||
@ -41,10 +33,6 @@ LL | None?;
|
||||
note: impl defined here, but it is not `const`
|
||||
--> $SRC_DIR/core/src/option.rs:LL:COL
|
||||
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants
|
||||
help: add `#![feature(effects)]` to the crate attributes to enable
|
||||
|
|
||||
LL + #![feature(effects)]
|
||||
|
|
||||
|
||||
error[E0015]: `?` cannot convert from residual of `Option<()>` in constant functions
|
||||
--> $DIR/try-operator.rs:18:9
|
||||
@ -55,10 +43,6 @@ LL | None?;
|
||||
note: impl defined here, but it is not `const`
|
||||
--> $SRC_DIR/core/src/option.rs:LL:COL
|
||||
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants
|
||||
help: add `#![feature(effects)]` to the crate attributes to enable
|
||||
|
|
||||
LL + #![feature(effects)]
|
||||
|
|
||||
|
||||
error: aborting due to 5 previous errors
|
||||
|
||||
|
@ -23,10 +23,6 @@ help: consider further restricting this bound
|
||||
|
|
||||
LL | const fn unwrap_or_else<F: ~const FnOnce() -> T + ~const FnOnce()>(self, f: F) -> T {
|
||||
| +++++++++++++++++
|
||||
help: add `#![feature(effects)]` to the crate attributes to enable
|
||||
|
|
||||
LL + #![feature(effects)]
|
||||
|
|
||||
|
||||
error[E0493]: destructor of `F` cannot be evaluated at compile-time
|
||||
--> $DIR/unstable-const-fn-in-libcore.rs:19:60
|
||||
|
@ -37,10 +37,6 @@ help: consider further restricting this bound
|
||||
|
|
||||
LL | const fn with_positive<F: for<'a> ~const Fn(&'a Alias<'a>) + ~const Destruct + ~const Fn(&foo::Alias<'_>)>(fun: F) {
|
||||
| ++++++++++++++++++++++++++++
|
||||
help: add `#![feature(effects)]` to the crate attributes to enable
|
||||
|
|
||||
LL + #![feature(effects)]
|
||||
|
|
||||
|
||||
error[E0493]: destructor of `F` cannot be evaluated at compile-time
|
||||
--> $DIR/normalize-tait-in-const.rs:26:79
|
||||
|
@ -17,10 +17,6 @@ LL | impl Deref for A {
|
||||
| ^^^^^^^^^^^^^^^^
|
||||
= note: calls in statics are limited to constant functions, tuple structs and tuple variants
|
||||
= note: consider wrapping this expression in `std::sync::LazyLock::new(|| ...)`
|
||||
help: add `#![feature(const_trait_impl)]` to the crate attributes to enable
|
||||
|
|
||||
LL + #![feature(const_trait_impl)]
|
||||
|
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
|
||||
|
@ -50,10 +50,6 @@ LL | [(); { for _ in 0usize.. {}; 0}];
|
||||
note: impl defined here, but it is not `const`
|
||||
--> $SRC_DIR/core/src/iter/traits/collect.rs:LL:COL
|
||||
= note: calls in constants are limited to constant functions, tuple structs and tuple variants
|
||||
help: add `#![feature(const_trait_impl)]` to the crate attributes to enable
|
||||
|
|
||||
LL + #![feature(const_trait_impl)]
|
||||
|
|
||||
|
||||
error[E0015]: cannot call non-const fn `<RangeFrom<usize> as Iterator>::next` in constants
|
||||
--> $DIR/issue-52443.rs:9:21
|
||||
@ -62,10 +58,6 @@ LL | [(); { for _ in 0usize.. {}; 0}];
|
||||
| ^^^^^^^^
|
||||
|
|
||||
= note: calls in constants are limited to constant functions, tuple structs and tuple variants
|
||||
help: add `#![feature(const_trait_impl)]` to the crate attributes to enable
|
||||
|
|
||||
LL + #![feature(const_trait_impl)]
|
||||
|
|
||||
|
||||
error: aborting due to 5 previous errors; 1 warning emitted
|
||||
|
||||
|
@ -353,10 +353,6 @@ LL | static bar: &[i32] = &(&[1,2,3] as &[i32][0..1]);
|
||||
|
|
||||
= note: calls in statics are limited to constant functions, tuple structs and tuple variants
|
||||
= note: consider wrapping this expression in `std::sync::LazyLock::new(|| ...)`
|
||||
help: add `#![feature(const_trait_impl)]` to the crate attributes to enable
|
||||
|
|
||||
LL + #![feature(const_trait_impl)]
|
||||
|
|
||||
|
||||
error: aborting due to 40 previous errors
|
||||
|
||||
|
@ -5,10 +5,6 @@ LL | let array: [usize; Dim3::dim()]
|
||||
| ^^^^^^^^^^^
|
||||
|
|
||||
= note: calls in constants are limited to constant functions, tuple structs and tuple variants
|
||||
help: add `#![feature(const_trait_impl)]` to the crate attributes to enable
|
||||
|
|
||||
LL + #![feature(const_trait_impl)]
|
||||
|
|
||||
|
||||
error[E0015]: cannot call non-const fn `<Dim3 as Dim>::dim` in constants
|
||||
--> $DIR/issue-39559-2.rs:16:15
|
||||
@ -17,10 +13,6 @@ LL | = [0; Dim3::dim()];
|
||||
| ^^^^^^^^^^^
|
||||
|
|
||||
= note: calls in constants are limited to constant functions, tuple structs and tuple variants
|
||||
help: add `#![feature(const_trait_impl)]` to the crate attributes to enable
|
||||
|
|
||||
LL + #![feature(const_trait_impl)]
|
||||
|
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
|
@ -5,10 +5,6 @@ LL | self.0
|
||||
| ^^^^^^
|
||||
|
|
||||
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants
|
||||
help: add `#![feature(const_trait_impl)]` to the crate attributes to enable
|
||||
|
|
||||
LL + #![feature(const_trait_impl)]
|
||||
|
|
||||
|
||||
error[E0493]: destructor of `R` cannot be evaluated at compile-time
|
||||
--> $DIR/arbitrary-self-from-method-substs-ice.rs:10:43
|
||||
|
@ -37,10 +37,6 @@ LL | field2: SafeEnum::Variant4("str".to_string()),
|
||||
|
|
||||
= note: calls in statics are limited to constant functions, tuple structs and tuple variants
|
||||
= note: consider wrapping this expression in `std::sync::LazyLock::new(|| ...)`
|
||||
help: add `#![feature(const_trait_impl)]` to the crate attributes to enable
|
||||
|
|
||||
LL + #![feature(const_trait_impl)]
|
||||
|
|
||||
|
||||
error[E0010]: allocations are not allowed in statics
|
||||
--> $DIR/check-values-constraints.rs:96:5
|
||||
|
@ -23,10 +23,6 @@ LL | const ADD_INT: Int = Int(1i32) + Int(2i32);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: calls in constants are limited to constant functions, tuple structs and tuple variants
|
||||
help: add `#![feature(effects)]` to the crate attributes to enable
|
||||
|
|
||||
LL + #![feature(effects)]
|
||||
|
|
||||
|
||||
error[E0015]: cannot call non-const fn `<i32 as Plus>::plus` in constant functions
|
||||
--> $DIR/call-const-trait-method-pass.rs:11:20
|
||||
@ -47,10 +43,6 @@ LL | !self.eq(other)
|
||||
| ^^^^^^^^^
|
||||
|
|
||||
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants
|
||||
help: add `#![feature(effects)]` to the crate attributes to enable
|
||||
|
|
||||
LL + #![feature(effects)]
|
||||
|
|
||||
|
||||
error[E0015]: cannot call non-const fn `<i32 as Plus>::plus` in constant functions
|
||||
--> $DIR/call-const-trait-method-pass.rs:36:7
|
||||
|
@ -19,10 +19,6 @@ LL | PartialEq::eq(self, other)
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants
|
||||
help: add `#![feature(effects)]` to the crate attributes to enable
|
||||
|
|
||||
LL + #![feature(effects)]
|
||||
|
|
||||
|
||||
error: aborting due to 3 previous errors
|
||||
|
||||
|
@ -44,5 +44,26 @@ LL | const fn equals_self_wrapper<T: ~const PartialEq>(t: &T) -> bool {
|
||||
|
|
||||
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
|
||||
|
||||
error: aborting due to 5 previous errors; 1 warning emitted
|
||||
error[E0015]: cannot call non-const operator in constant functions
|
||||
--> $DIR/call-generic-method-chain.rs:21:5
|
||||
|
|
||||
LL | *t == *t
|
||||
| ^^^^^^^^
|
||||
|
|
||||
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants
|
||||
help: consider further restricting this bound
|
||||
|
|
||||
LL | const fn equals_self<T: ~const PartialEq + ~const std::cmp::PartialEq>(t: &T) -> bool {
|
||||
| ++++++++++++++++++++++++++++
|
||||
|
||||
error[E0015]: cannot call non-const fn `<S as PartialEq>::eq` in constant functions
|
||||
--> $DIR/call-generic-method-chain.rs:16:15
|
||||
|
|
||||
LL | !self.eq(other)
|
||||
| ^^^^^^^^^
|
||||
|
|
||||
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants
|
||||
|
||||
error: aborting due to 7 previous errors; 1 warning emitted
|
||||
|
||||
For more information about this error, try `rustc --explain E0015`.
|
||||
|
@ -44,5 +44,38 @@ LL | const fn equals_self2<T: A + ~const PartialEq>(t: &T) -> bool {
|
||||
|
|
||||
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
|
||||
|
||||
error: aborting due to 5 previous errors; 1 warning emitted
|
||||
error[E0015]: cannot call non-const operator in constant functions
|
||||
--> $DIR/call-generic-method-dup-bound.rs:21:5
|
||||
|
|
||||
LL | *t == *t
|
||||
| ^^^^^^^^
|
||||
|
|
||||
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants
|
||||
help: consider further restricting this bound
|
||||
|
|
||||
LL | const fn equals_self<T: PartialEq + ~const PartialEq + ~const std::cmp::PartialEq>(t: &T) -> bool {
|
||||
| ++++++++++++++++++++++++++++
|
||||
|
||||
error[E0015]: cannot call non-const fn `<S as PartialEq>::eq` in constant functions
|
||||
--> $DIR/call-generic-method-dup-bound.rs:14:15
|
||||
|
|
||||
LL | !self.eq(other)
|
||||
| ^^^^^^^^^
|
||||
|
|
||||
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants
|
||||
|
||||
error[E0015]: cannot call non-const operator in constant functions
|
||||
--> $DIR/call-generic-method-dup-bound.rs:28:5
|
||||
|
|
||||
LL | *t == *t
|
||||
| ^^^^^^^^
|
||||
|
|
||||
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants
|
||||
help: consider further restricting this bound
|
||||
|
|
||||
LL | const fn equals_self2<T: A + ~const PartialEq + ~const std::cmp::PartialEq>(t: &T) -> bool {
|
||||
| ++++++++++++++++++++++++++++
|
||||
|
||||
error: aborting due to 8 previous errors; 1 warning emitted
|
||||
|
||||
For more information about this error, try `rustc --explain E0015`.
|
||||
|
@ -1,12 +1,10 @@
|
||||
//@ check-pass
|
||||
//@ compile-flags: -Znext-solver
|
||||
#![allow(incomplete_features)]
|
||||
#![feature(const_trait_impl, effects)]
|
||||
|
||||
pub const fn equals_self<T: PartialEq>(t: &T) -> bool {
|
||||
*t == *t
|
||||
// FIXME(effects) ~^ ERROR mismatched types
|
||||
// FIXME(effects): diagnostic
|
||||
//~^ ERROR cannot call non-const operator in constant functions
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
|
15
tests/ui/traits/const-traits/call-generic-method-fail.stderr
Normal file
15
tests/ui/traits/const-traits/call-generic-method-fail.stderr
Normal file
@ -0,0 +1,15 @@
|
||||
error[E0015]: cannot call non-const operator in constant functions
|
||||
--> $DIR/call-generic-method-fail.rs:6:5
|
||||
|
|
||||
LL | *t == *t
|
||||
| ^^^^^^^^
|
||||
|
|
||||
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants
|
||||
help: consider further restricting this bound
|
||||
|
|
||||
LL | pub const fn equals_self<T: PartialEq + ~const std::cmp::PartialEq>(t: &T) -> bool {
|
||||
| ++++++++++++++++++++++++++++
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
|
||||
For more information about this error, try `rustc --explain E0015`.
|
@ -30,5 +30,26 @@ LL | const fn equals_self<T: ~const PartialEq>(t: &T) -> bool {
|
||||
|
|
||||
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
|
||||
|
||||
error: aborting due to 3 previous errors; 1 warning emitted
|
||||
error[E0015]: cannot call non-const operator in constant functions
|
||||
--> $DIR/call-generic-method-pass.rs:21:5
|
||||
|
|
||||
LL | *t == *t
|
||||
| ^^^^^^^^
|
||||
|
|
||||
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants
|
||||
help: consider further restricting this bound
|
||||
|
|
||||
LL | const fn equals_self<T: ~const PartialEq + ~const std::cmp::PartialEq>(t: &T) -> bool {
|
||||
| ++++++++++++++++++++++++++++
|
||||
|
||||
error[E0015]: cannot call non-const fn `<S as PartialEq>::eq` in constant functions
|
||||
--> $DIR/call-generic-method-pass.rs:16:15
|
||||
|
|
||||
LL | !self.eq(other)
|
||||
| ^^^^^^^^^
|
||||
|
|
||||
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants
|
||||
|
||||
error: aborting due to 5 previous errors; 1 warning emitted
|
||||
|
||||
For more information about this error, try `rustc --explain E0015`.
|
||||
|
@ -1,10 +1,11 @@
|
||||
//@ check-pass
|
||||
// FIXME(effects) check-pass
|
||||
//@ compile-flags: -Znext-solver
|
||||
#![feature(const_closures, const_trait_impl, effects)]
|
||||
#![allow(incomplete_features)]
|
||||
|
||||
pub const _: () = {
|
||||
assert!((const || true)());
|
||||
//~^ ERROR cannot call non-const closure in constants
|
||||
};
|
||||
|
||||
fn main() {}
|
||||
|
12
tests/ui/traits/const-traits/call.stderr
Normal file
12
tests/ui/traits/const-traits/call.stderr
Normal file
@ -0,0 +1,12 @@
|
||||
error[E0015]: cannot call non-const closure in constants
|
||||
--> $DIR/call.rs:7:13
|
||||
|
|
||||
LL | assert!((const || true)());
|
||||
| ^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: closures need an RFC before allowed to be called in constants
|
||||
= note: calls in constants are limited to constant functions, tuple structs and tuple variants
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
|
||||
For more information about this error, try `rustc --explain E0015`.
|
@ -23,10 +23,6 @@ help: consider further restricting this bound
|
||||
|
|
||||
LL | const fn need_const_closure<T: ~const FnOnce(()) -> i32 + ~const FnOnce(())>(x: T) -> i32 {
|
||||
| +++++++++++++++++++
|
||||
help: add `#![feature(effects)]` to the crate attributes to enable
|
||||
|
|
||||
LL + #![feature(effects)]
|
||||
|
|
||||
|
||||
error: aborting due to 3 previous errors
|
||||
|
||||
|
@ -23,10 +23,6 @@ help: consider further restricting this bound
|
||||
|
|
||||
LL | const fn need_const_closure<T: ~const FnOnce(()) -> i32 + ~const FnOnce(())>(x: T) -> i32 {
|
||||
| +++++++++++++++++++
|
||||
help: add `#![feature(effects)]` to the crate attributes to enable
|
||||
|
|
||||
LL + #![feature(effects)]
|
||||
|
|
||||
|
||||
error: aborting due to 3 previous errors
|
||||
|
||||
|
@ -65,10 +65,6 @@ help: consider further restricting this bound
|
||||
|
|
||||
LL | const fn answer<F: ~const Fn() -> u8 + ~const Fn()>(f: &F) -> u8 {
|
||||
| +++++++++++++
|
||||
help: add `#![feature(effects)]` to the crate attributes to enable
|
||||
|
|
||||
LL + #![feature(effects)]
|
||||
|
|
||||
|
||||
error[E0015]: cannot call non-const closure in constant functions
|
||||
--> $DIR/const-closures.rs:24:11
|
||||
@ -81,10 +77,6 @@ help: consider further restricting this bound
|
||||
|
|
||||
LL | const fn answer<F: ~const Fn() -> u8 + ~const Fn()>(f: &F) -> u8 {
|
||||
| +++++++++++++
|
||||
help: add `#![feature(effects)]` to the crate attributes to enable
|
||||
|
|
||||
LL + #![feature(effects)]
|
||||
|
|
||||
|
||||
error[E0015]: cannot call non-const closure in constant functions
|
||||
--> $DIR/const-closures.rs:12:5
|
||||
@ -97,10 +89,6 @@ help: consider further restricting this bound
|
||||
|
|
||||
LL | F: ~const FnOnce() -> u8 + ~const Fn(),
|
||||
| +++++++++++++
|
||||
help: add `#![feature(effects)]` to the crate attributes to enable
|
||||
|
|
||||
LL + #![feature(effects)]
|
||||
|
|
||||
|
||||
error: aborting due to 11 previous errors
|
||||
|
||||
|
@ -22,5 +22,17 @@ LL | #[derive_const(Default)]
|
||||
= note: adding a non-const method body in the future would be a breaking change
|
||||
= note: this error originates in the derive macro `Default` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error: aborting due to 2 previous errors; 1 warning emitted
|
||||
error[E0015]: cannot call non-const fn `<A as Default>::default` in constant functions
|
||||
--> $DIR/derive-const-non-const-type.rs:11:14
|
||||
|
|
||||
LL | #[derive_const(Default)]
|
||||
| ------- in this derive macro expansion
|
||||
LL | pub struct S(A);
|
||||
| ^
|
||||
|
|
||||
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants
|
||||
= note: this error originates in the derive macro `Default` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error: aborting due to 3 previous errors; 1 warning emitted
|
||||
|
||||
For more information about this error, try `rustc --explain E0015`.
|
||||
|
@ -62,29 +62,67 @@ LL | #[derive_const(Default, PartialEq)]
|
||||
= note: adding a non-const method body in the future would be a breaking change
|
||||
= note: this error originates in the derive macro `PartialEq` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error[E0080]: evaluation of constant value failed
|
||||
--> $DIR/derive-const-use.rs:16:14
|
||||
error[E0015]: cannot call non-const fn `<S as Default>::default` in constants
|
||||
--> $DIR/derive-const-use.rs:18:35
|
||||
|
|
||||
LL | #[derive_const(Default, PartialEq)]
|
||||
| ------- in this derive macro expansion
|
||||
LL | pub struct S((), A);
|
||||
| ^^ calling non-const function `<() as Default>::default`
|
||||
LL | const _: () = assert!(S((), A) == S::default());
|
||||
| ^^^^^^^^^^^^
|
||||
|
|
||||
note: inside `<S as Default>::default`
|
||||
= note: calls in constants are limited to constant functions, tuple structs and tuple variants
|
||||
|
||||
error[E0015]: cannot call non-const operator in constants
|
||||
--> $DIR/derive-const-use.rs:18:23
|
||||
|
|
||||
LL | const _: () = assert!(S((), A) == S::default());
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: calls in constants are limited to constant functions, tuple structs and tuple variants
|
||||
|
||||
error[E0015]: cannot call non-const fn `<() as Default>::default` in constant functions
|
||||
--> $DIR/derive-const-use.rs:16:14
|
||||
|
|
||||
LL | #[derive_const(Default, PartialEq)]
|
||||
| ------- in this derive macro expansion
|
||||
LL | pub struct S((), A);
|
||||
| ^^
|
||||
note: inside `_`
|
||||
--> $DIR/derive-const-use.rs:18:35
|
||||
|
|
||||
LL | const _: () = assert!(S((), A) == S::default());
|
||||
| ^^^^^^^^^^^^
|
||||
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants
|
||||
= note: this error originates in the derive macro `Default` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error: aborting due to 8 previous errors; 1 warning emitted
|
||||
error[E0015]: cannot call non-const fn `<A as Default>::default` in constant functions
|
||||
--> $DIR/derive-const-use.rs:16:18
|
||||
|
|
||||
LL | #[derive_const(Default, PartialEq)]
|
||||
| ------- in this derive macro expansion
|
||||
LL | pub struct S((), A);
|
||||
| ^
|
||||
|
|
||||
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants
|
||||
= note: this error originates in the derive macro `Default` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
Some errors have detailed explanations: E0080, E0635.
|
||||
For more information about an error, try `rustc --explain E0080`.
|
||||
error[E0015]: cannot call non-const operator in constant functions
|
||||
--> $DIR/derive-const-use.rs:16:14
|
||||
|
|
||||
LL | #[derive_const(Default, PartialEq)]
|
||||
| --------- in this derive macro expansion
|
||||
LL | pub struct S((), A);
|
||||
| ^^
|
||||
|
|
||||
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants
|
||||
= note: this error originates in the derive macro `PartialEq` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error[E0015]: cannot call non-const operator in constant functions
|
||||
--> $DIR/derive-const-use.rs:16:18
|
||||
|
|
||||
LL | #[derive_const(Default, PartialEq)]
|
||||
| --------- in this derive macro expansion
|
||||
LL | pub struct S((), A);
|
||||
| ^
|
||||
|
|
||||
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants
|
||||
= note: this error originates in the derive macro `PartialEq` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error: aborting due to 13 previous errors; 1 warning emitted
|
||||
|
||||
Some errors have detailed explanations: E0015, E0635.
|
||||
For more information about an error, try `rustc --explain E0015`.
|
||||
|
@ -30,5 +30,25 @@ LL | #[derive_const(PartialEq)]
|
||||
|
|
||||
= note: this error originates in the derive macro `PartialEq` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error: aborting due to 3 previous errors; 1 warning emitted
|
||||
error[E0015]: cannot call non-const operator in constant functions
|
||||
--> $DIR/derive-const-with-params.rs:8:23
|
||||
|
|
||||
LL | #[derive_const(PartialEq)]
|
||||
| --------- in this derive macro expansion
|
||||
LL | pub struct Reverse<T>(T);
|
||||
| ^
|
||||
|
|
||||
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants
|
||||
= note: this error originates in the derive macro `PartialEq` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error[E0015]: cannot call non-const operator in constant functions
|
||||
--> $DIR/derive-const-with-params.rs:11:5
|
||||
|
|
||||
LL | a == b
|
||||
| ^^^^^^
|
||||
|
|
||||
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants
|
||||
|
||||
error: aborting due to 5 previous errors; 1 warning emitted
|
||||
|
||||
For more information about this error, try `rustc --explain E0015`.
|
||||
|
@ -1,5 +1,3 @@
|
||||
//@ check-pass
|
||||
// FIXME(effects) this shouldn't pass
|
||||
//@ compile-flags: -Znext-solver
|
||||
#![feature(const_closures, const_trait_impl, effects)]
|
||||
#![allow(incomplete_features)]
|
||||
@ -14,5 +12,6 @@ impl Foo for () {
|
||||
|
||||
fn main() {
|
||||
(const || { (()).foo() })();
|
||||
// FIXME(effects) ~^ ERROR: cannot call non-const fn
|
||||
//~^ ERROR: cannot call non-const fn `<() as Foo>::foo` in constant functions
|
||||
// FIXME(effects) this should probably say constant closures
|
||||
}
|
||||
|
@ -0,0 +1,11 @@
|
||||
error[E0015]: cannot call non-const fn `<() as Foo>::foo` in constant functions
|
||||
--> $DIR/const_closure-const_trait_impl-ice-113381.rs:14:22
|
||||
|
|
||||
LL | (const || { (()).foo() })();
|
||||
| ^^^^^
|
||||
|
|
||||
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
|
||||
For more information about this error, try `rustc --explain E0015`.
|
@ -10,6 +10,7 @@ const fn test() -> impl ~const Fn() {
|
||||
[first, remainder @ ..] => {
|
||||
assert_eq!(first, &b'f');
|
||||
//~^ ERROR cannot call non-const fn
|
||||
//~| ERROR cannot call non-const operator
|
||||
}
|
||||
[] => panic!(),
|
||||
}
|
||||
|
@ -36,6 +36,15 @@ LL | const fn test() -> impl ~const Fn() {
|
||||
|
|
||||
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
|
||||
|
||||
error[E0015]: cannot call non-const operator in constant functions
|
||||
--> $DIR/ice-112822-expected-type-for-param.rs:11:17
|
||||
|
|
||||
LL | assert_eq!(first, &b'f');
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants
|
||||
= note: this error originates in the macro `assert_eq` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error[E0015]: cannot call non-const fn `core::panicking::assert_failed::<&u8, &u8>` in constant functions
|
||||
--> $DIR/ice-112822-expected-type-for-param.rs:11:17
|
||||
|
|
||||
@ -45,7 +54,7 @@ LL | assert_eq!(first, &b'f');
|
||||
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants
|
||||
= note: this error originates in the macro `assert_eq` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error: aborting due to 5 previous errors; 1 warning emitted
|
||||
error: aborting due to 6 previous errors; 1 warning emitted
|
||||
|
||||
Some errors have detailed explanations: E0015, E0658.
|
||||
For more information about an error, try `rustc --explain E0015`.
|
||||
|
@ -14,10 +14,6 @@ LL | arg + arg
|
||||
| ^^^^^^^^^
|
||||
|
|
||||
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants
|
||||
help: add `#![feature(effects)]` to the crate attributes to enable
|
||||
|
|
||||
LL + #![feature(effects)]
|
||||
|
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
|
@ -12,6 +12,8 @@ pub trait MyTrait {
|
||||
impl const MyTrait for () {
|
||||
fn method(&self) -> Option<()> {
|
||||
Some(())?; //~ ERROR `?` is not allowed in a `const fn`
|
||||
//~^ ERROR `?` cannot determine the branch of `Option<()>` in constant functions
|
||||
//~| ERROR `?` cannot convert from residual of `Option<()>` in constant functions
|
||||
None
|
||||
}
|
||||
}
|
||||
|
@ -17,6 +17,27 @@ LL | Some(())?;
|
||||
= help: add `#![feature(const_try)]` to the crate attributes to enable
|
||||
= note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
|
||||
|
||||
error: aborting due to 1 previous error; 1 warning emitted
|
||||
error[E0015]: `?` cannot determine the branch of `Option<()>` in constant functions
|
||||
--> $DIR/hir-const-check.rs:14:9
|
||||
|
|
||||
LL | Some(())?;
|
||||
| ^^^^^^^^^
|
||||
|
|
||||
note: impl defined here, but it is not `const`
|
||||
--> $SRC_DIR/core/src/option.rs:LL:COL
|
||||
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants
|
||||
|
||||
For more information about this error, try `rustc --explain E0658`.
|
||||
error[E0015]: `?` cannot convert from residual of `Option<()>` in constant functions
|
||||
--> $DIR/hir-const-check.rs:14:9
|
||||
|
|
||||
LL | Some(())?;
|
||||
| ^^^^^^^^^
|
||||
|
|
||||
note: impl defined here, but it is not `const`
|
||||
--> $SRC_DIR/core/src/option.rs:LL:COL
|
||||
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants
|
||||
|
||||
error: aborting due to 3 previous errors; 1 warning emitted
|
||||
|
||||
Some errors have detailed explanations: E0015, E0658.
|
||||
For more information about an error, try `rustc --explain E0015`.
|
||||
|
@ -18,6 +18,8 @@ impl const Try for TryMe {
|
||||
|
||||
const fn t() -> TryMe {
|
||||
TryMe?;
|
||||
//~^ ERROR `?` cannot determine the branch of `TryMe` in constant functions
|
||||
//~| ERROR `?` cannot convert from residual of `TryMe` in constant functions
|
||||
TryMe
|
||||
}
|
||||
|
||||
|
@ -38,6 +38,23 @@ LL | impl const Try for TryMe {
|
||||
= help: implement the missing item: `fn from_output(_: <Self as Try>::Output) -> Self { todo!() }`
|
||||
= help: implement the missing item: `fn branch(self) -> ControlFlow<<Self as Try>::Residual, <Self as Try>::Output> { todo!() }`
|
||||
|
||||
error: aborting due to 5 previous errors
|
||||
error[E0015]: `?` cannot determine the branch of `TryMe` in constant functions
|
||||
--> $DIR/ice-126148-failed-to-normalize.rs:20:5
|
||||
|
|
||||
LL | TryMe?;
|
||||
| ^^^^^^
|
||||
|
|
||||
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants
|
||||
|
||||
For more information about this error, try `rustc --explain E0046`.
|
||||
error[E0015]: `?` cannot convert from residual of `TryMe` in constant functions
|
||||
--> $DIR/ice-126148-failed-to-normalize.rs:20:5
|
||||
|
|
||||
LL | TryMe?;
|
||||
| ^^^^^^
|
||||
|
|
||||
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants
|
||||
|
||||
error: aborting due to 7 previous errors
|
||||
|
||||
Some errors have detailed explanations: E0015, E0046.
|
||||
For more information about an error, try `rustc --explain E0015`.
|
||||
|
@ -25,6 +25,7 @@ impl Trait for () {
|
||||
|
||||
const fn foo() {
|
||||
().foo();
|
||||
//~^ ERROR cannot call non-const fn `<() as Trait>::foo` in constant functions
|
||||
}
|
||||
|
||||
const UWU: () = foo();
|
||||
|
@ -16,6 +16,15 @@ LL | fn foo(self);
|
||||
LL | fn foo<T>(self) {
|
||||
| ^ found 1 type parameter
|
||||
|
||||
error: aborting due to 1 previous error; 1 warning emitted
|
||||
error[E0015]: cannot call non-const fn `<() as Trait>::foo` in constant functions
|
||||
--> $DIR/inline-incorrect-early-bound-in-ctfe.rs:27:8
|
||||
|
|
||||
LL | ().foo();
|
||||
| ^^^^^
|
||||
|
|
||||
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants
|
||||
|
||||
For more information about this error, try `rustc --explain E0049`.
|
||||
error: aborting due to 2 previous errors; 1 warning emitted
|
||||
|
||||
Some errors have detailed explanations: E0015, E0049.
|
||||
For more information about an error, try `rustc --explain E0015`.
|
||||
|
@ -6,10 +6,6 @@ LL | n => n(),
|
||||
|
|
||||
= note: closures need an RFC before allowed to be called in constants
|
||||
= note: calls in constants are limited to constant functions, tuple structs and tuple variants
|
||||
help: add `#![feature(effects)]` to the crate attributes to enable
|
||||
|
|
||||
LL + #![feature(effects)]
|
||||
|
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
|
||||
|
@ -5,10 +5,6 @@ LL | T::assoc()
|
||||
| ^^^^^^^^^^
|
||||
|
|
||||
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants
|
||||
help: add `#![feature(effects)]` to the crate attributes to enable
|
||||
|
|
||||
LL + #![feature(effects)]
|
||||
|
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
|
||||
|
@ -6,10 +6,6 @@ LL | "a" => (), //FIXME [gated]~ ERROR can't compare `str` with `str` in
|
||||
|
|
||||
= note: `str` cannot be compared in compile-time, and therefore cannot be used in `match`es
|
||||
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants
|
||||
help: add `#![feature(effects)]` to the crate attributes to enable
|
||||
|
|
||||
LL + #![feature(effects)]
|
||||
|
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
|
||||
|
@ -6,10 +6,6 @@ LL | "a" => (), //FIXME [gated]~ ERROR can't compare `str` with `str` in
|
||||
|
|
||||
= note: `str` cannot be compared in compile-time, and therefore cannot be used in `match`es
|
||||
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants
|
||||
help: add `#![feature(const_trait_impl)]` to the crate attributes to enable
|
||||
|
|
||||
LL + #![feature(const_trait_impl)]
|
||||
|
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
|
||||
|
@ -5,10 +5,6 @@ LL | (const || { (()).foo() })();
|
||||
| ^^^^^
|
||||
|
|
||||
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants
|
||||
help: add `#![feature(effects)]` to the crate attributes to enable
|
||||
|
|
||||
LL + #![feature(effects)]
|
||||
|
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
|
||||
|
@ -19,10 +19,6 @@ LL | B::from(self)
|
||||
| ^^^^^^^^^^^^^
|
||||
|
|
||||
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants
|
||||
help: add `#![feature(effects)]` to the crate attributes to enable
|
||||
|
|
||||
LL + #![feature(effects)]
|
||||
|
|
||||
|
||||
error: aborting due to 3 previous errors
|
||||
|
||||
|
@ -11,10 +11,6 @@ LL | Default::default()
|
||||
| ^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants
|
||||
help: add `#![feature(effects)]` to the crate attributes to enable
|
||||
|
|
||||
LL + #![feature(effects)]
|
||||
|
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
|
@ -5,10 +5,6 @@ LL | Default::default()
|
||||
| ^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants
|
||||
help: add `#![feature(const_trait_impl)]` to the crate attributes to enable
|
||||
|
|
||||
LL + #![feature(const_trait_impl)]
|
||||
|
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
|
||||
|
@ -32,5 +32,14 @@ LL | trait Bar: ~const Foo {}
|
||||
|
|
||||
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
|
||||
|
||||
error: aborting due to 4 previous errors
|
||||
error[E0015]: cannot call non-const fn `<T as Foo>::a` in constant functions
|
||||
--> $DIR/super-traits-fail-2.rs:21:7
|
||||
|
|
||||
LL | x.a();
|
||||
| ^^^
|
||||
|
|
||||
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants
|
||||
|
||||
error: aborting due to 5 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0015`.
|
||||
|
@ -36,5 +36,14 @@ LL | trait Bar: ~const Foo {}
|
||||
|
|
||||
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
|
||||
|
||||
error: aborting due to 5 previous errors
|
||||
error[E0015]: cannot call non-const fn `<T as Foo>::a` in constant functions
|
||||
--> $DIR/super-traits-fail-2.rs:21:7
|
||||
|
|
||||
LL | x.a();
|
||||
| ^^^
|
||||
|
|
||||
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants
|
||||
|
||||
error: aborting due to 6 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0015`.
|
||||
|
@ -20,6 +20,7 @@ trait Bar: ~const Foo {}
|
||||
const fn foo<T: Bar>(x: &T) {
|
||||
x.a();
|
||||
//[yy,yn]~^ ERROR the trait bound `T: ~const Foo`
|
||||
//[nn,ny]~^^ ERROR cannot call non-const fn `<T as Foo>::a` in constant functions
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
|
@ -46,5 +46,14 @@ LL | const fn foo<T: ~const Bar>(x: &T) {
|
||||
|
|
||||
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
|
||||
|
||||
error: aborting due to 6 previous errors
|
||||
error[E0015]: cannot call non-const fn `<T as Foo>::a` in constant functions
|
||||
--> $DIR/super-traits-fail-3.rs:25:7
|
||||
|
|
||||
LL | x.a();
|
||||
| ^^^
|
||||
|
|
||||
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants
|
||||
|
||||
error: aborting due to 7 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0015`.
|
||||
|
@ -36,5 +36,14 @@ LL | trait Bar: ~const Foo {}
|
||||
|
|
||||
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
|
||||
|
||||
error: aborting due to 5 previous errors
|
||||
error[E0015]: cannot call non-const fn `<T as Foo>::a` in constant functions
|
||||
--> $DIR/super-traits-fail-3.rs:25:7
|
||||
|
|
||||
LL | x.a();
|
||||
| ^^^
|
||||
|
|
||||
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants
|
||||
|
||||
error: aborting due to 6 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0015`.
|
||||
|
@ -24,6 +24,7 @@ const fn foo<T: ~const Bar>(x: &T) {
|
||||
//[yn,nn]~| ERROR: `~const` can only be applied to `#[const_trait]`
|
||||
x.a();
|
||||
//[yn]~^ ERROR: the trait bound `T: ~const Foo` is not satisfied
|
||||
//[nn,ny]~^^ ERROR: cannot call non-const fn `<T as Foo>::a` in constant functions
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
|
@ -16,5 +16,22 @@ LL | impl const FromResidual for T {
|
||||
= note: marking a trait with `#[const_trait]` ensures all default method bodies are `const`
|
||||
= note: adding a non-const method body in the future would be a breaking change
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
error[E0015]: `?` cannot determine the branch of `T` in constant functions
|
||||
--> $DIR/trait-default-body-stability.rs:45:9
|
||||
|
|
||||
LL | T?
|
||||
| ^^
|
||||
|
|
||||
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants
|
||||
|
||||
error[E0015]: `?` cannot convert from residual of `T` in constant functions
|
||||
--> $DIR/trait-default-body-stability.rs:45:9
|
||||
|
|
||||
LL | T?
|
||||
| ^^
|
||||
|
|
||||
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants
|
||||
|
||||
error: aborting due to 4 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0015`.
|
||||
|
@ -675,10 +675,6 @@ LL | const _: _ = (1..10).filter(|x| x % 2 == 0).map(|x| x * x);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: calls in constants are limited to constant functions, tuple structs and tuple variants
|
||||
help: add `#![feature(const_trait_impl)]` to the crate attributes to enable
|
||||
|
|
||||
LL + #![feature(const_trait_impl)]
|
||||
|
|
||||
|
||||
error[E0015]: cannot call non-const fn `<Filter<std::ops::Range<i32>, {closure@$DIR/typeck_type_placeholder_item.rs:230:29: 230:32}> as Iterator>::map::<i32, {closure@$DIR/typeck_type_placeholder_item.rs:230:49: 230:52}>` in constants
|
||||
--> $DIR/typeck_type_placeholder_item.rs:230:45
|
||||
@ -687,10 +683,6 @@ LL | const _: _ = (1..10).filter(|x| x % 2 == 0).map(|x| x * x);
|
||||
| ^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: calls in constants are limited to constant functions, tuple structs and tuple variants
|
||||
help: add `#![feature(const_trait_impl)]` to the crate attributes to enable
|
||||
|
|
||||
LL + #![feature(const_trait_impl)]
|
||||
|
|
||||
|
||||
error: aborting due to 74 previous errors
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user