Deny calls to non-#[const_trait] methods in MIR constck

This commit is contained in:
Deadbeef 2024-10-26 11:35:16 +08:00
parent 54761cb3e8
commit f2f67232a5
75 changed files with 440 additions and 326 deletions

View file

@ -616,14 +616,16 @@ impl<'tcx> Visitor<'tcx> for Checker<'_, 'tcx> {
let mut is_trait = false; let mut is_trait = false;
// Attempting to call a trait method? // 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"); 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. // trait method calls are only permitted when `effects` is enabled.
// we don't error, since that is handled by typeck. We try to resolve // typeck ensures the conditions for calling a const trait method are met,
// the trait into the concrete method, and uses that for const stability // so we only error if the trait isn't const. We try to resolve the trait
// checks. // into the concrete method, and uses that for const stability checks.
// FIXME(effects) we might consider moving const stability checks to typeck as well. // 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`. // This skips the check below that ensures we only call `const fn`.
is_trait = true; is_trait = true;
@ -638,17 +640,24 @@ impl<'tcx> Visitor<'tcx> for Checker<'_, 'tcx> {
callee = def; callee = def;
} }
} else { } 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 { self.check_op(ops::FnCallNonConst {
caller, caller,
callee, callee,
args: fn_args, args: fn_args,
span: *fn_span, span: *fn_span,
call_source, call_source,
feature: Some(if tcx.features().const_trait_impl() { feature,
sym::effects
} else {
sym::const_trait_impl
}),
}); });
// If we allowed this, we're in miri-unleashed mode, so we might // If we allowed this, we're in miri-unleashed mode, so we might
// as well skip the remaining checks. // as well skip the remaining checks.

View file

@ -27,11 +27,13 @@ LL + #[derive(ConstParamTy)]
LL | struct Foo(u8); LL | struct Foo(u8);
| |
error[E0284]: type annotations needed: cannot normalize `foo<N>::{constant#0}` error[E0015]: cannot call non-const operator in constants
--> $DIR/unify-op-with-fn-call.rs:20:25 --> $DIR/unify-op-with-fn-call.rs:20:39
| |
LL | fn foo<const N: Foo>(a: Evaluatable<{ N + N }>) { 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 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 --> $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 }>) { LL | fn foo2<const N: usize>(a: Evaluatable2<{ N + N }>) {
| ^^^^^^^^^^^^^^^^^^^^^^^ cannot normalize `foo2<N>::{constant#0}` | ^^^^^^^^^^^^^^^^^^^^^^^ cannot normalize `foo2<N>::{constant#0}`
error[E0284]: type annotations needed: cannot normalize `foo<N>::{constant#0}` error[E0015]: cannot call non-const fn `<Foo as Add>::add` in constants
--> $DIR/unify-op-with-fn-call.rs:21:11 --> $DIR/unify-op-with-fn-call.rs:21:13
| |
LL | bar::<{ std::ops::Add::add(N, N) }>(); 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}` error[E0284]: type annotations needed: cannot normalize `foo2<N>::{constant#0}`
--> $DIR/unify-op-with-fn-call.rs:30:12 --> $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) }>(); LL | bar2::<{ std::ops::Add::add(N, N) }>();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ cannot normalize `foo2<N>::{constant#0}` | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 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. Some errors have detailed explanations: E0015, E0284, E0741.
For more information about an error, try `rustc --explain E0284`. For more information about an error, try `rustc --explain E0015`.

View file

@ -6,10 +6,6 @@ LL | (||1usize)()
| |
= note: closures need an RFC before allowed to be called in constants = 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 = 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 error: aborting due to 1 previous error

View file

@ -29,10 +29,6 @@ LL | If<{ TypeId::of::<T>() != TypeId::of::<()>() }>: True,
note: impl defined here, but it is not `const` note: impl defined here, but it is not `const`
--> $SRC_DIR/core/src/any.rs:LL:COL --> $SRC_DIR/core/src/any.rs:LL:COL
= note: calls in constants are limited to constant functions, tuple structs and tuple variants = 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 error[E0015]: cannot call non-const operator in constants
--> $DIR/issue-90318.rs:22:10 --> $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` note: impl defined here, but it is not `const`
--> $SRC_DIR/core/src/any.rs:LL:COL --> $SRC_DIR/core/src/any.rs:LL:COL
= note: calls in constants are limited to constant functions, tuple structs and tuple variants = 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 error: aborting due to 4 previous errors

View file

@ -1,8 +1,8 @@
//@ aux-build:closure-in-foreign-crate.rs // FIXME(effects) aux-build:closure-in-foreign-crate.rs
//@ build-pass //@ 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() {} fn main() {}

View file

@ -22,10 +22,6 @@ LL | for i in 0..x {
note: impl defined here, but it is not `const` note: impl defined here, but it is not `const`
--> $SRC_DIR/core/src/iter/traits/collect.rs:LL:COL --> $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 = 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 error[E0015]: cannot call non-const fn `<std::ops::Range<usize> as Iterator>::next` in constant functions
--> $DIR/const-fn-error.rs:5:14 --> $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 = 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 error: aborting due to 3 previous errors

View file

@ -17,10 +17,6 @@ LL | for _ in 0..5 {}
note: impl defined here, but it is not `const` note: impl defined here, but it is not `const`
--> $SRC_DIR/core/src/iter/traits/collect.rs:LL:COL --> $SRC_DIR/core/src/iter/traits/collect.rs:LL:COL
= note: calls in constants are limited to constant functions, tuple structs and tuple variants = 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 error[E0015]: cannot call non-const fn `<std::ops::Range<i32> as Iterator>::next` in constants
--> $DIR/const-for-feature-gate.rs:4:14 --> $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 = 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 error: aborting due to 3 previous errors

View file

@ -7,10 +7,6 @@ LL | for _ in 0..5 {}
note: impl defined here, but it is not `const` note: impl defined here, but it is not `const`
--> $SRC_DIR/core/src/iter/traits/collect.rs:LL:COL --> $SRC_DIR/core/src/iter/traits/collect.rs:LL:COL
= note: calls in constants are limited to constant functions, tuple structs and tuple variants = 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 error[E0015]: cannot call non-const fn `<std::ops::Range<i32> as Iterator>::next` in constants
--> $DIR/const-for.rs:4:14 --> $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 = 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 error: aborting due to 2 previous errors

View file

@ -17,10 +17,6 @@ LL | Some(())?;
note: impl defined here, but it is not `const` note: impl defined here, but it is not `const`
--> $SRC_DIR/core/src/option.rs:LL:COL --> $SRC_DIR/core/src/option.rs:LL:COL
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants = 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 error[E0015]: `?` cannot convert from residual of `Option<()>` in constant functions
--> $DIR/const-try-feature-gate.rs:4:5 --> $DIR/const-try-feature-gate.rs:4:5
@ -31,10 +27,6 @@ LL | Some(())?;
note: impl defined here, but it is not `const` note: impl defined here, but it is not `const`
--> $SRC_DIR/core/src/option.rs:LL:COL --> $SRC_DIR/core/src/option.rs:LL:COL
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants = 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 error: aborting due to 3 previous errors

View file

@ -34,6 +34,8 @@ impl const Try for TryMe {
const fn t() -> TryMe { const fn t() -> TryMe {
TryMe?; TryMe?;
//~^ ERROR `?` cannot determine the branch of `TryMe` in constant functions
//~| ERROR `?` cannot convert from residual of `TryMe` in constant functions
TryMe TryMe
} }

View file

@ -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: 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 = 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`.

View file

@ -1,4 +1,3 @@
//@ check-pass
//@ compile-flags: -Znext-solver //@ compile-flags: -Znext-solver
#![feature(const_type_id, const_trait_impl, effects)] #![feature(const_type_id, const_trait_impl, effects)]
#![allow(incomplete_features)] #![allow(incomplete_features)]
@ -7,11 +6,13 @@ use std::any::TypeId;
fn main() { fn main() {
const { 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>()); assert!(TypeId::of::<u8>() == TypeId::of::<u8>());
//~^ ERROR cannot call non-const operator in constants
assert!(TypeId::of::<()>() != TypeId::of::<u8>()); assert!(TypeId::of::<()>() != TypeId::of::<u8>());
//~^ ERROR cannot call non-const operator in constants
let _a = TypeId::of::<u8>() < TypeId::of::<u16>(); 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 // can't assert `_a` because it is not deterministic
// FIXME(effects) make it pass
} }
} }

View 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`.

View file

@ -35,10 +35,6 @@ LL | for i in 0..4 {
note: impl defined here, but it is not `const` note: impl defined here, but it is not `const`
--> $SRC_DIR/core/src/iter/traits/collect.rs:LL:COL --> $SRC_DIR/core/src/iter/traits/collect.rs:LL:COL
= note: calls in constants are limited to constant functions, tuple structs and tuple variants = 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 error[E0015]: cannot call non-const fn `<std::ops::Range<i32> as Iterator>::next` in constants
--> $DIR/loop.rs:53:14 --> $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 = 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 error[E0015]: cannot convert `std::ops::Range<i32>` into an iterator in constants
--> $DIR/loop.rs:59:14 --> $DIR/loop.rs:59:14
@ -61,10 +53,6 @@ LL | for i in 0..4 {
note: impl defined here, but it is not `const` note: impl defined here, but it is not `const`
--> $SRC_DIR/core/src/iter/traits/collect.rs:LL:COL --> $SRC_DIR/core/src/iter/traits/collect.rs:LL:COL
= note: calls in constants are limited to constant functions, tuple structs and tuple variants = 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 error[E0015]: cannot call non-const fn `<std::ops::Range<i32> as Iterator>::next` in constants
--> $DIR/loop.rs:59:14 --> $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 = 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 error: aborting due to 6 previous errors

View file

@ -17,10 +17,6 @@ LL | x?;
note: impl defined here, but it is not `const` note: impl defined here, but it is not `const`
--> $SRC_DIR/core/src/option.rs:LL:COL --> $SRC_DIR/core/src/option.rs:LL:COL
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants = 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 error[E0015]: `?` cannot convert from residual of `Option<i32>` in constant functions
--> $DIR/try.rs:6:5 --> $DIR/try.rs:6:5
@ -31,10 +27,6 @@ LL | x?;
note: impl defined here, but it is not `const` note: impl defined here, but it is not `const`
--> $SRC_DIR/core/src/option.rs:LL:COL --> $SRC_DIR/core/src/option.rs:LL:COL
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants = 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 error: aborting due to 3 previous errors

View file

@ -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 = 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 error[E0015]: cannot call non-const operator in constants
--> $DIR/fn_trait_refs.rs:73:17 --> $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 = 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 error[E0015]: cannot call non-const closure in constant functions
--> $DIR/fn_trait_refs.rs:15:5 --> $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(), 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 error[E0493]: destructor of `T` cannot be evaluated at compile-time
--> $DIR/fn_trait_refs.rs:11:23 --> $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(), 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 error[E0493]: destructor of `T` cannot be evaluated at compile-time
--> $DIR/fn_trait_refs.rs:18:27 --> $DIR/fn_trait_refs.rs:18:27
@ -261,10 +245,6 @@ help: consider further restricting this bound
| |
LL | T: ~const FnOnce<()> + ~const FnOnce(), 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 error[E0493]: destructor of `T` cannot be evaluated at compile-time
--> $DIR/fn_trait_refs.rs:32:21 --> $DIR/fn_trait_refs.rs:32:21

View file

@ -6,10 +6,6 @@ LL | const { (|| {})() } => {}
| |
= note: closures need an RFC before allowed to be called in constants = 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 = 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 error: could not evaluate constant pattern
--> $DIR/invalid-inline-const-in-match-arm.rs:5:9 --> $DIR/invalid-inline-const-in-match-arm.rs:5:9

View file

@ -6,10 +6,6 @@ LL | || -> u8 { 5 }()
| |
= note: closures need an RFC before allowed to be called in constants = 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 = 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 error: aborting due to 1 previous error

View file

@ -6,10 +6,6 @@ LL | const fn foo() { (||{})() }
| |
= note: closures need an RFC before allowed to be called in constant functions = 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 = 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 error: function pointer calls are not allowed in constant functions
--> $DIR/issue-56164.rs:5:5 --> $DIR/issue-56164.rs:5:5

View file

@ -6,10 +6,6 @@ LL | a: [(); (|| { 0 })()]
| |
= note: closures need an RFC before allowed to be called in constants = 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 = 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 error: aborting due to 1 previous error

View file

@ -7,10 +7,6 @@ LL | GetTypeId::<T>::VALUE == GetTypeId::<usize>::VALUE
note: impl defined here, but it is not `const` note: impl defined here, but it is not `const`
--> $SRC_DIR/core/src/any.rs:LL:COL --> $SRC_DIR/core/src/any.rs:LL:COL
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants = 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 error: aborting due to 1 previous error

View file

@ -3,9 +3,6 @@
#![allow(dead_code)] #![allow(dead_code)]
const fn f(a: &u8, b: &u8) -> bool { 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 a == b
//~^ ERROR: cannot call non-const operator in constant functions [E0015] //~^ ERROR: cannot call non-const operator in constant functions [E0015]
//~| HELP: consider dereferencing here //~| HELP: consider dereferencing here

View file

@ -1,5 +1,5 @@
error[E0015]: cannot call non-const operator in constant functions 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 LL | a == b
| ^^^^^^ | ^^^^^^
@ -9,13 +9,9 @@ help: consider dereferencing here
| |
LL | *a == *b 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 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 LL | a == b
| ^^^^^^ | ^^^^^^
@ -25,13 +21,9 @@ help: consider dereferencing here
| |
LL | ****a == ****b 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 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 { LL | if l == r {
| ^^^^^^ | ^^^^^^
@ -41,10 +33,6 @@ help: consider dereferencing here
| |
LL | if *l == *r { 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 error: aborting due to 3 previous errors

View file

@ -7,10 +7,6 @@ LL | self.bar[0] = baz.len();
note: impl defined here, but it is not `const` note: impl defined here, but it is not `const`
--> $SRC_DIR/alloc/src/vec/mod.rs:LL:COL --> $SRC_DIR/alloc/src/vec/mod.rs:LL:COL
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants = 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 error: aborting due to 1 previous error

View file

@ -13,10 +13,6 @@ LL | Err(())?;
note: impl defined here, but it is not `const` note: impl defined here, but it is not `const`
--> $SRC_DIR/core/src/result.rs:LL:COL --> $SRC_DIR/core/src/result.rs:LL:COL
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants = 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 error[E0015]: `?` cannot convert from residual of `Result<bool, ()>` in constant functions
--> $DIR/try-operator.rs:10:9 --> $DIR/try-operator.rs:10:9
@ -27,10 +23,6 @@ LL | Err(())?;
note: impl defined here, but it is not `const` note: impl defined here, but it is not `const`
--> $SRC_DIR/core/src/result.rs:LL:COL --> $SRC_DIR/core/src/result.rs:LL:COL
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants = 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 error[E0015]: `?` cannot determine the branch of `Option<()>` in constant functions
--> $DIR/try-operator.rs:18:9 --> $DIR/try-operator.rs:18:9
@ -41,10 +33,6 @@ LL | None?;
note: impl defined here, but it is not `const` note: impl defined here, but it is not `const`
--> $SRC_DIR/core/src/option.rs:LL:COL --> $SRC_DIR/core/src/option.rs:LL:COL
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants = 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 error[E0015]: `?` cannot convert from residual of `Option<()>` in constant functions
--> $DIR/try-operator.rs:18:9 --> $DIR/try-operator.rs:18:9
@ -55,10 +43,6 @@ LL | None?;
note: impl defined here, but it is not `const` note: impl defined here, but it is not `const`
--> $SRC_DIR/core/src/option.rs:LL:COL --> $SRC_DIR/core/src/option.rs:LL:COL
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants = 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 error: aborting due to 5 previous errors

View file

@ -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 { 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 error[E0493]: destructor of `F` cannot be evaluated at compile-time
--> $DIR/unstable-const-fn-in-libcore.rs:19:60 --> $DIR/unstable-const-fn-in-libcore.rs:19:60

View file

@ -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) { 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 error[E0493]: destructor of `F` cannot be evaluated at compile-time
--> $DIR/normalize-tait-in-const.rs:26:79 --> $DIR/normalize-tait-in-const.rs:26:79

View file

@ -17,10 +17,6 @@ LL | impl Deref for A {
| ^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^
= note: calls in statics are limited to constant functions, tuple structs and tuple variants = note: calls in statics are limited to constant functions, tuple structs and tuple variants
= note: consider wrapping this expression in `std::sync::LazyLock::new(|| ...)` = 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 error: aborting due to 1 previous error

View file

@ -50,10 +50,6 @@ LL | [(); { for _ in 0usize.. {}; 0}];
note: impl defined here, but it is not `const` note: impl defined here, but it is not `const`
--> $SRC_DIR/core/src/iter/traits/collect.rs:LL:COL --> $SRC_DIR/core/src/iter/traits/collect.rs:LL:COL
= note: calls in constants are limited to constant functions, tuple structs and tuple variants = 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 error[E0015]: cannot call non-const fn `<RangeFrom<usize> as Iterator>::next` in constants
--> $DIR/issue-52443.rs:9:21 --> $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 = 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 error: aborting due to 5 previous errors; 1 warning emitted

View file

@ -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: calls in statics are limited to constant functions, tuple structs and tuple variants
= note: consider wrapping this expression in `std::sync::LazyLock::new(|| ...)` = 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 error: aborting due to 40 previous errors

View file

@ -5,10 +5,6 @@ LL | let array: [usize; Dim3::dim()]
| ^^^^^^^^^^^ | ^^^^^^^^^^^
| |
= note: calls in constants are limited to constant functions, tuple structs and tuple variants = 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 error[E0015]: cannot call non-const fn `<Dim3 as Dim>::dim` in constants
--> $DIR/issue-39559-2.rs:16:15 --> $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 = 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 error: aborting due to 2 previous errors

View file

@ -5,10 +5,6 @@ LL | self.0
| ^^^^^^ | ^^^^^^
| |
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants = 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 error[E0493]: destructor of `R` cannot be evaluated at compile-time
--> $DIR/arbitrary-self-from-method-substs-ice.rs:10:43 --> $DIR/arbitrary-self-from-method-substs-ice.rs:10:43

View file

@ -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: calls in statics are limited to constant functions, tuple structs and tuple variants
= note: consider wrapping this expression in `std::sync::LazyLock::new(|| ...)` = 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 error[E0010]: allocations are not allowed in statics
--> $DIR/check-values-constraints.rs:96:5 --> $DIR/check-values-constraints.rs:96:5

View file

@ -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 = 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 error[E0015]: cannot call non-const fn `<i32 as Plus>::plus` in constant functions
--> $DIR/call-const-trait-method-pass.rs:11:20 --> $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 = 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 error[E0015]: cannot call non-const fn `<i32 as Plus>::plus` in constant functions
--> $DIR/call-const-trait-method-pass.rs:36:7 --> $DIR/call-const-trait-method-pass.rs:36:7

View file

@ -19,10 +19,6 @@ LL | PartialEq::eq(self, other)
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants = 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 error: aborting due to 3 previous errors

View file

@ -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` = 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`.

View file

@ -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` = 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`.

View file

@ -1,12 +1,10 @@
//@ check-pass
//@ compile-flags: -Znext-solver //@ compile-flags: -Znext-solver
#![allow(incomplete_features)] #![allow(incomplete_features)]
#![feature(const_trait_impl, effects)] #![feature(const_trait_impl, effects)]
pub const fn equals_self<T: PartialEq>(t: &T) -> bool { pub const fn equals_self<T: PartialEq>(t: &T) -> bool {
*t == *t *t == *t
// FIXME(effects) ~^ ERROR mismatched types //~^ ERROR cannot call non-const operator in constant functions
// FIXME(effects): diagnostic
} }
fn main() {} fn main() {}

View 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`.

View file

@ -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` = 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`.

View file

@ -1,10 +1,11 @@
//@ check-pass // FIXME(effects) check-pass
//@ compile-flags: -Znext-solver //@ compile-flags: -Znext-solver
#![feature(const_closures, const_trait_impl, effects)] #![feature(const_closures, const_trait_impl, effects)]
#![allow(incomplete_features)] #![allow(incomplete_features)]
pub const _: () = { pub const _: () = {
assert!((const || true)()); assert!((const || true)());
//~^ ERROR cannot call non-const closure in constants
}; };
fn main() {} fn main() {}

View 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`.

View file

@ -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 { 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 error: aborting due to 3 previous errors

View file

@ -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 { 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 error: aborting due to 3 previous errors

View file

@ -65,10 +65,6 @@ help: consider further restricting this bound
| |
LL | const fn answer<F: ~const Fn() -> u8 + ~const Fn()>(f: &F) -> u8 { 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 error[E0015]: cannot call non-const closure in constant functions
--> $DIR/const-closures.rs:24:11 --> $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 { 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 error[E0015]: cannot call non-const closure in constant functions
--> $DIR/const-closures.rs:12:5 --> $DIR/const-closures.rs:12:5
@ -97,10 +89,6 @@ help: consider further restricting this bound
| |
LL | F: ~const FnOnce() -> u8 + ~const Fn(), 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 error: aborting due to 11 previous errors

View file

@ -22,5 +22,17 @@ LL | #[derive_const(Default)]
= note: adding a non-const method body in the future would be a breaking change = 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) = 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`.

View file

@ -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: 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) = 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 error[E0015]: cannot call non-const fn `<S as Default>::default` in constants
--> $DIR/derive-const-use.rs:16:14 --> $DIR/derive-const-use.rs:18:35
| |
LL | #[derive_const(Default, PartialEq)] LL | const _: () = assert!(S((), A) == S::default());
| ------- in this derive macro expansion | ^^^^^^^^^^^^
LL | pub struct S((), A);
| ^^ calling non-const function `<() as Default>::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 --> $DIR/derive-const-use.rs:16:14
| |
LL | #[derive_const(Default, PartialEq)] LL | #[derive_const(Default, PartialEq)]
| ------- in this derive macro expansion | ------- in this derive macro expansion
LL | pub struct S((), A); 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) = 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. error[E0015]: cannot call non-const operator in constant functions
For more information about an error, try `rustc --explain E0080`. --> $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`.

View file

@ -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) = 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`.

View file

@ -1,5 +1,3 @@
//@ check-pass
// FIXME(effects) this shouldn't pass
//@ compile-flags: -Znext-solver //@ compile-flags: -Znext-solver
#![feature(const_closures, const_trait_impl, effects)] #![feature(const_closures, const_trait_impl, effects)]
#![allow(incomplete_features)] #![allow(incomplete_features)]
@ -14,5 +12,6 @@ impl Foo for () {
fn main() { fn main() {
(const || { (()).foo() })(); (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
} }

View file

@ -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`.

View file

@ -10,6 +10,7 @@ const fn test() -> impl ~const Fn() {
[first, remainder @ ..] => { [first, remainder @ ..] => {
assert_eq!(first, &b'f'); assert_eq!(first, &b'f');
//~^ ERROR cannot call non-const fn //~^ ERROR cannot call non-const fn
//~| ERROR cannot call non-const operator
} }
[] => panic!(), [] => panic!(),
} }

View file

@ -36,6 +36,15 @@ LL | const fn test() -> impl ~const Fn() {
| |
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no` = 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 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 --> $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: 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) = 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. Some errors have detailed explanations: E0015, E0658.
For more information about an error, try `rustc --explain E0015`. For more information about an error, try `rustc --explain E0015`.

View file

@ -14,10 +14,6 @@ LL | arg + arg
| ^^^^^^^^^ | ^^^^^^^^^
| |
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants = 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 error: aborting due to 2 previous errors

View file

@ -12,6 +12,8 @@ pub trait MyTrait {
impl const MyTrait for () { impl const MyTrait for () {
fn method(&self) -> Option<()> { fn method(&self) -> Option<()> {
Some(())?; //~ ERROR `?` is not allowed in a `const fn` 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 None
} }
} }

View file

@ -17,6 +17,27 @@ LL | Some(())?;
= help: add `#![feature(const_try)]` to the crate attributes to enable = 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 = 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`.

View file

@ -18,6 +18,8 @@ impl const Try for TryMe {
const fn t() -> TryMe { const fn t() -> TryMe {
TryMe?; TryMe?;
//~^ ERROR `?` cannot determine the branch of `TryMe` in constant functions
//~| ERROR `?` cannot convert from residual of `TryMe` in constant functions
TryMe TryMe
} }

View file

@ -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 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!() }` = 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`.

View file

@ -25,6 +25,7 @@ impl Trait for () {
const fn foo() { const fn foo() {
().foo(); ().foo();
//~^ ERROR cannot call non-const fn `<() as Trait>::foo` in constant functions
} }
const UWU: () = foo(); const UWU: () = foo();

View file

@ -16,6 +16,15 @@ LL | fn foo(self);
LL | fn foo<T>(self) { LL | fn foo<T>(self) {
| ^ found 1 type parameter | ^ 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`.

View file

@ -6,10 +6,6 @@ LL | n => n(),
| |
= note: closures need an RFC before allowed to be called in constants = 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 = 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 error: aborting due to 1 previous error

View file

@ -5,10 +5,6 @@ LL | T::assoc()
| ^^^^^^^^^^ | ^^^^^^^^^^
| |
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants = 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 error: aborting due to 1 previous error

View file

@ -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: `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 = 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 error: aborting due to 1 previous error

View file

@ -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: `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 = 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 error: aborting due to 1 previous error

View file

@ -5,10 +5,6 @@ LL | (const || { (()).foo() })();
| ^^^^^ | ^^^^^
| |
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants = 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 error: aborting due to 1 previous error

View file

@ -19,10 +19,6 @@ LL | B::from(self)
| ^^^^^^^^^^^^^ | ^^^^^^^^^^^^^
| |
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants = 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 error: aborting due to 3 previous errors

View file

@ -11,10 +11,6 @@ LL | Default::default()
| ^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^
| |
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants = 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 error: aborting due to 2 previous errors

View file

@ -5,10 +5,6 @@ LL | Default::default()
| ^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^
| |
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants = 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 error: aborting due to 1 previous error

View file

@ -32,5 +32,14 @@ LL | trait Bar: ~const Foo {}
| |
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no` = 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`.

View file

@ -36,5 +36,14 @@ LL | trait Bar: ~const Foo {}
| |
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no` = 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`.

View file

@ -20,6 +20,7 @@ trait Bar: ~const Foo {}
const fn foo<T: Bar>(x: &T) { const fn foo<T: Bar>(x: &T) {
x.a(); x.a();
//[yy,yn]~^ ERROR the trait bound `T: ~const Foo` //[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() {} fn main() {}

View file

@ -46,5 +46,14 @@ LL | const fn foo<T: ~const Bar>(x: &T) {
| |
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no` = 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`.

View file

@ -36,5 +36,14 @@ LL | trait Bar: ~const Foo {}
| |
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no` = 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`.

View file

@ -24,6 +24,7 @@ const fn foo<T: ~const Bar>(x: &T) {
//[yn,nn]~| ERROR: `~const` can only be applied to `#[const_trait]` //[yn,nn]~| ERROR: `~const` can only be applied to `#[const_trait]`
x.a(); x.a();
//[yn]~^ ERROR: the trait bound `T: ~const Foo` is not satisfied //[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() {} fn main() {}

View file

@ -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: 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 = 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`.

View file

@ -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 = 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 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 --> $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 = 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 error: aborting due to 74 previous errors