bless tests, remove nonexistent E0395
This commit is contained in:
parent
a6f9826979
commit
d60ebe366b
24 changed files with 182 additions and 194 deletions
|
@ -12,16 +12,14 @@ impl True for If<true> {}
|
|||
fn consume<T: 'static>(_val: T)
|
||||
where
|
||||
If<{ TypeId::of::<T>() != TypeId::of::<()>() }>: True,
|
||||
//~^ ERROR: overly complex generic constant
|
||||
//~| ERROR: cannot call non-const operator in constants
|
||||
//~^ ERROR: can't compare
|
||||
{
|
||||
}
|
||||
|
||||
fn test<T: 'static>()
|
||||
where
|
||||
If<{ TypeId::of::<T>() != TypeId::of::<()>() }>: True,
|
||||
//~^ ERROR: overly complex generic constant
|
||||
//~| ERROR: cannot call non-const operator in constants
|
||||
//~^ ERROR: can't compare
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
@ -1,53 +1,31 @@
|
|||
error: overly complex generic constant
|
||||
--> $DIR/issue-90318.rs:14:8
|
||||
error[E0277]: can't compare `TypeId` with `_` in const contexts
|
||||
--> $DIR/issue-90318.rs:14:28
|
||||
|
|
||||
LL | If<{ TypeId::of::<T>() != TypeId::of::<()>() }>: True,
|
||||
| ^^-----------------^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
| |
|
||||
| borrowing is not supported in generic constants
|
||||
| ^^ no implementation for `TypeId == _`
|
||||
|
|
||||
= help: consider moving this anonymous constant into a `const` function
|
||||
= note: this operation may be supported in the future
|
||||
|
||||
error[E0015]: cannot call non-const operator in constants
|
||||
--> $DIR/issue-90318.rs:14:10
|
||||
= help: the trait `~const PartialEq<_>` is not implemented for `TypeId`
|
||||
note: the trait `PartialEq<_>` is implemented for `TypeId`, but that implementation is not `const`
|
||||
--> $DIR/issue-90318.rs:14:28
|
||||
|
|
||||
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
|
||||
|
|
||||
LL | #[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Debug, Hash)]
|
||||
| ^^^^^^^^^
|
||||
= note: calls in constants 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)
|
||||
| ^^
|
||||
= help: the trait `PartialEq` is implemented for `TypeId`
|
||||
|
||||
error: overly complex generic constant
|
||||
--> $DIR/issue-90318.rs:22:8
|
||||
error[E0277]: can't compare `TypeId` with `_` in const contexts
|
||||
--> $DIR/issue-90318.rs:21:28
|
||||
|
|
||||
LL | If<{ TypeId::of::<T>() != TypeId::of::<()>() }>: True,
|
||||
| ^^-----------------^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
| |
|
||||
| borrowing is not supported in generic constants
|
||||
| ^^ no implementation for `TypeId == _`
|
||||
|
|
||||
= help: consider moving this anonymous constant into a `const` function
|
||||
= note: this operation may be supported in the future
|
||||
|
||||
error[E0015]: cannot call non-const operator in constants
|
||||
--> $DIR/issue-90318.rs:22:10
|
||||
= help: the trait `~const PartialEq<_>` is not implemented for `TypeId`
|
||||
note: the trait `PartialEq<_>` is implemented for `TypeId`, but that implementation is not `const`
|
||||
--> $DIR/issue-90318.rs:21:28
|
||||
|
|
||||
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
|
||||
|
|
||||
LL | #[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Debug, Hash)]
|
||||
| ^^^^^^^^^
|
||||
= note: calls in constants 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)
|
||||
| ^^
|
||||
= help: the trait `PartialEq` is implemented for `TypeId`
|
||||
|
||||
error: aborting due to 4 previous errors
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0015`.
|
||||
For more information about this error, try `rustc --explain E0277`.
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
fn main() {}
|
||||
|
||||
// unconst and bad, will thus error in miri
|
||||
const X: bool = unsafe { &1 as *const i32 == &2 as *const i32 }; //~ ERROR cannot be reliably
|
||||
const X: bool = unsafe { &1 as *const i32 == &2 as *const i32 }; //~ ERROR can't compare
|
||||
// unconst and bad, will thus error in miri
|
||||
const X2: bool = unsafe { 42 as *const i32 == 43 as *const i32 }; //~ ERROR cannot be reliably
|
||||
const X2: bool = unsafe { 42 as *const i32 == 43 as *const i32 }; //~ ERROR can't compare
|
||||
|
|
|
@ -1,18 +1,49 @@
|
|||
error: pointers cannot be reliably compared during const eval
|
||||
--> $DIR/const_raw_ptr_ops.rs:4:26
|
||||
error[E0277]: can't compare `*const i32` with `_` in const contexts
|
||||
--> $DIR/const_raw_ptr_ops.rs:4:43
|
||||
|
|
||||
LL | const X: bool = unsafe { &1 as *const i32 == &2 as *const i32 };
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
| ^^ no implementation for `*const i32 == _`
|
||||
|
|
||||
= note: see issue #53020 <https://github.com/rust-lang/rust/issues/53020> for more information
|
||||
= help: the trait `~const PartialEq<_>` is not implemented for `*const i32`
|
||||
note: the trait `PartialEq<_>` is implemented for `*const i32`, but that implementation is not `const`
|
||||
--> $DIR/const_raw_ptr_ops.rs:4:43
|
||||
|
|
||||
LL | const X: bool = unsafe { &1 as *const i32 == &2 as *const i32 };
|
||||
| ^^
|
||||
= help: the following other types implement trait `PartialEq<Rhs>`:
|
||||
f32
|
||||
f64
|
||||
i128
|
||||
i16
|
||||
i32
|
||||
i64
|
||||
i8
|
||||
isize
|
||||
and 6 others
|
||||
|
||||
error: pointers cannot be reliably compared during const eval
|
||||
--> $DIR/const_raw_ptr_ops.rs:6:27
|
||||
error[E0277]: can't compare `*const i32` with `_` in const contexts
|
||||
--> $DIR/const_raw_ptr_ops.rs:6:44
|
||||
|
|
||||
LL | const X2: bool = unsafe { 42 as *const i32 == 43 as *const i32 };
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
| ^^ no implementation for `*const i32 == _`
|
||||
|
|
||||
= note: see issue #53020 <https://github.com/rust-lang/rust/issues/53020> for more information
|
||||
= help: the trait `~const PartialEq<_>` is not implemented for `*const i32`
|
||||
note: the trait `PartialEq<_>` is implemented for `*const i32`, but that implementation is not `const`
|
||||
--> $DIR/const_raw_ptr_ops.rs:6:44
|
||||
|
|
||||
LL | const X2: bool = unsafe { 42 as *const i32 == 43 as *const i32 };
|
||||
| ^^
|
||||
= help: the following other types implement trait `PartialEq<Rhs>`:
|
||||
f32
|
||||
f64
|
||||
i128
|
||||
i16
|
||||
i32
|
||||
i64
|
||||
i8
|
||||
isize
|
||||
and 6 others
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0277`.
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
fn id<T>(t: T) -> T { t }
|
||||
fn main() {
|
||||
const A: bool = unsafe { id::<u8> as *const () < id::<u16> as *const () };
|
||||
//~^ ERROR pointers cannot be reliably compared during const eval
|
||||
//~^ ERROR can't compare
|
||||
println!("{}", A);
|
||||
}
|
||||
|
|
|
@ -1,10 +1,20 @@
|
|||
error: pointers cannot be reliably compared during const eval
|
||||
--> $DIR/issue-25826.rs:3:30
|
||||
error[E0277]: can't compare `*const ()` with `*const ()` in const contexts
|
||||
--> $DIR/issue-25826.rs:3:52
|
||||
|
|
||||
LL | const A: bool = unsafe { id::<u8> as *const () < id::<u16> as *const () };
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
| ^ no implementation for `*const () < *const ()` and `*const () > *const ()`
|
||||
|
|
||||
= note: see issue #53020 <https://github.com/rust-lang/rust/issues/53020> for more information
|
||||
= help: the trait `~const PartialOrd` is not implemented for `*const ()`
|
||||
note: the trait `PartialOrd` is implemented for `*const ()`, but that implementation is not `const`
|
||||
--> $DIR/issue-25826.rs:3:52
|
||||
|
|
||||
LL | const A: bool = unsafe { id::<u8> as *const () < id::<u16> as *const () };
|
||||
| ^
|
||||
help: consider introducing a `where` clause, but there might be an alternative better way to express this requirement
|
||||
|
|
||||
LL | fn main() where *const (): ~const PartialOrd {
|
||||
| ++++++++++++++++++++++++++++++++++
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
For more information about this error, try `rustc --explain E0277`.
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
const fn cmp(x: fn(), y: fn()) -> bool {
|
||||
unsafe { x == y }
|
||||
//~^ ERROR pointers cannot be reliably compared
|
||||
//~^ ERROR can't compare
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
|
|
|
@ -1,10 +1,26 @@
|
|||
error: pointers cannot be reliably compared during const eval
|
||||
--> $DIR/cmp_fn_pointers.rs:2:14
|
||||
error[E0277]: can't compare `fn()` with `_` in const contexts
|
||||
--> $DIR/cmp_fn_pointers.rs:2:16
|
||||
|
|
||||
LL | unsafe { x == y }
|
||||
| ^^^^^^
|
||||
| ^^ no implementation for `fn() == _`
|
||||
|
|
||||
= note: see issue #53020 <https://github.com/rust-lang/rust/issues/53020> for more information
|
||||
= help: the trait `~const PartialEq<_>` is not implemented for `fn()`
|
||||
note: the trait `PartialEq<_>` is implemented for `fn()`, but that implementation is not `const`
|
||||
--> $DIR/cmp_fn_pointers.rs:2:16
|
||||
|
|
||||
LL | unsafe { x == y }
|
||||
| ^^
|
||||
= help: the following other types implement trait `PartialEq<Rhs>`:
|
||||
extern "C" fn() -> Ret
|
||||
extern "C" fn(A, B) -> Ret
|
||||
extern "C" fn(A, B, ...) -> Ret
|
||||
extern "C" fn(A, B, C) -> Ret
|
||||
extern "C" fn(A, B, C, ...) -> Ret
|
||||
extern "C" fn(A, B, C, D) -> Ret
|
||||
extern "C" fn(A, B, C, D, ...) -> Ret
|
||||
extern "C" fn(A, B, C, D, E) -> Ret
|
||||
and 68 others
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
For more information about this error, try `rustc --explain E0277`.
|
||||
|
|
|
@ -2,14 +2,8 @@
|
|||
#![feature(core_intrinsics)]
|
||||
#![allow(const_err)]
|
||||
|
||||
// During CTFE, we prevent pointer comparison and pointer-to-int casts.
|
||||
|
||||
static CMP: () = {
|
||||
let x = &0 as *const _;
|
||||
let _v = x == x;
|
||||
//~^ ERROR could not evaluate static initializer
|
||||
//~| "pointer arithmetic or comparison" needs an rfc before being allowed inside constants
|
||||
};
|
||||
// During CTFE, we prevent pointer-to-int casts.
|
||||
// Pointer comparisons are prevented in the trait system.
|
||||
|
||||
static PTR_INT_CAST: () = {
|
||||
let x = &0 as *const _ as usize;
|
||||
|
|
|
@ -1,17 +1,11 @@
|
|||
error[E0080]: could not evaluate static initializer
|
||||
--> $DIR/ptr_arith.rs:9:14
|
||||
|
|
||||
LL | let _v = x == x;
|
||||
| ^^^^^^ "pointer arithmetic or comparison" needs an rfc before being allowed inside constants
|
||||
|
||||
error[E0080]: could not evaluate static initializer
|
||||
--> $DIR/ptr_arith.rs:15:13
|
||||
--> $DIR/ptr_arith.rs:9:13
|
||||
|
|
||||
LL | let x = &0 as *const _ as usize;
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^ "exposing pointers" needs an rfc before being allowed inside constants
|
||||
|
||||
error[E0080]: could not evaluate static initializer
|
||||
--> $DIR/ptr_arith.rs:23:14
|
||||
--> $DIR/ptr_arith.rs:17:14
|
||||
|
|
||||
LL | let _v = x + 0;
|
||||
| ^ unable to turn pointer into raw bytes
|
||||
|
@ -19,16 +13,11 @@ LL | let _v = x + 0;
|
|||
warning: skipping const checks
|
||||
|
|
||||
help: skipping check that does not even have a feature gate
|
||||
--> $DIR/ptr_arith.rs:9:14
|
||||
|
|
||||
LL | let _v = x == x;
|
||||
| ^^^^^^
|
||||
help: skipping check that does not even have a feature gate
|
||||
--> $DIR/ptr_arith.rs:15:13
|
||||
--> $DIR/ptr_arith.rs:9:13
|
||||
|
|
||||
LL | let x = &0 as *const _ as usize;
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: aborting due to 3 previous errors; 1 warning emitted
|
||||
error: aborting due to 2 previous errors; 1 warning emitted
|
||||
|
||||
For more information about this error, try `rustc --explain E0080`.
|
||||
|
|
|
@ -1,8 +0,0 @@
|
|||
static FOO: i32 = 42;
|
||||
static BAR: i32 = 42;
|
||||
|
||||
static BAZ: bool = unsafe { (&FOO as *const i32) == (&BAR as *const i32) };
|
||||
//~^ ERROR pointers cannot be reliably compared during const eval
|
||||
|
||||
fn main() {
|
||||
}
|
|
@ -1,10 +0,0 @@
|
|||
error: pointers cannot be reliably compared during const eval
|
||||
--> $DIR/E0395.rs:4:29
|
||||
|
|
||||
LL | static BAZ: bool = unsafe { (&FOO as *const i32) == (&BAR as *const i32) };
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: see issue #53020 <https://github.com/rust-lang/rust/issues/53020> for more information
|
||||
|
||||
error: aborting due to previous error
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
error[E0277]: the trait bound `[closure@$DIR/const-eval-select-bad.rs:7:27: 7:29]: ~const FnOnce<()>` is not satisfied
|
||||
error[E0277]: the trait bound `[closure@$DIR/const-eval-select-bad.rs:7:27: 7:29]: FnOnce<()>` is not satisfied
|
||||
--> $DIR/const-eval-select-bad.rs:7:27
|
||||
|
|
||||
LL | const_eval_select((), || {}, || {});
|
||||
|
@ -19,7 +19,7 @@ note: required by a bound in `const_eval_select`
|
|||
LL | F: ~const FnOnce<ARG, Output = RET>,
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ required by this bound in `const_eval_select`
|
||||
|
||||
error[E0277]: the trait bound `{integer}: ~const FnOnce<()>` is not satisfied
|
||||
error[E0277]: the trait bound `{integer}: FnOnce<()>` is not satisfied
|
||||
--> $DIR/const-eval-select-bad.rs:9:27
|
||||
|
|
||||
LL | const_eval_select((), 42, 0xDEADBEEF);
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
pub const fn equals_self<T: PartialEq>(t: &T) -> bool {
|
||||
*t == *t
|
||||
//~^ ERROR can't compare
|
||||
//~| ERROR cannot call non-const
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
|
|
|
@ -1,28 +1,22 @@
|
|||
error[E0277]: can't compare `T` with `T` in const contexts
|
||||
--> $DIR/call-generic-method-fail.rs:4:5
|
||||
error[E0277]: can't compare `T` with `_` in const contexts
|
||||
--> $DIR/call-generic-method-fail.rs:4:8
|
||||
|
|
||||
LL | *t == *t
|
||||
| ^^^^^^^^ no implementation for `T == T`
|
||||
| ^^ no implementation for `T == _`
|
||||
|
|
||||
note: the trait `PartialEq` is implemented for `T`, but that implementation is not `const`
|
||||
--> $DIR/call-generic-method-fail.rs:4:5
|
||||
note: the trait `PartialEq<_>` is implemented for `T`, but that implementation is not `const`
|
||||
--> $DIR/call-generic-method-fail.rs:4:8
|
||||
|
|
||||
LL | *t == *t
|
||||
| ^^^^^^^^
|
||||
| ^^
|
||||
= help: the following other types implement trait `PartialEq<Rhs>`:
|
||||
<&A as PartialEq<&B>>
|
||||
<&A as PartialEq<&mut B>>
|
||||
<&mut A as PartialEq<&B>>
|
||||
<&mut A as PartialEq<&mut B>>
|
||||
<*const T as PartialEq>
|
||||
<*mut T as PartialEq>
|
||||
|
||||
error[E0015]: cannot call non-const operator in constant functions
|
||||
--> $DIR/call-generic-method-fail.rs:4: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 previous error
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
Some errors have detailed explanations: E0015, E0277.
|
||||
For more information about an error, try `rustc --explain E0015`.
|
||||
For more information about this error, try `rustc --explain E0277`.
|
||||
|
|
|
@ -23,7 +23,6 @@ impl const ConstDefaultFn for ConstImpl {
|
|||
const fn test() {
|
||||
NonConstImpl.a();
|
||||
//~^ ERROR the trait bound
|
||||
//~| ERROR cannot call non-const fn
|
||||
ConstImpl.a();
|
||||
}
|
||||
|
||||
|
|
|
@ -2,23 +2,18 @@ error[E0277]: the trait bound `NonConstImpl: ~const ConstDefaultFn` is not satis
|
|||
--> $DIR/const-default-method-bodies.rs:24:18
|
||||
|
|
||||
LL | NonConstImpl.a();
|
||||
| ^^^ the trait `~const ConstDefaultFn` is not implemented for `NonConstImpl`
|
||||
| ^ the trait `~const ConstDefaultFn` is not implemented for `NonConstImpl`
|
||||
|
|
||||
note: the trait `ConstDefaultFn` is implemented for `NonConstImpl`, but that implementation is not `const`
|
||||
--> $DIR/const-default-method-bodies.rs:24:18
|
||||
|
|
||||
LL | NonConstImpl.a();
|
||||
| ^^^
|
||||
|
||||
error[E0015]: cannot call non-const fn `<NonConstImpl as ConstDefaultFn>::a` in constant functions
|
||||
--> $DIR/const-default-method-bodies.rs:24:18
|
||||
| ^
|
||||
help: consider introducing a `where` clause, but there might be an alternative better way to express this requirement
|
||||
|
|
||||
LL | NonConstImpl.a();
|
||||
| ^^^
|
||||
|
|
||||
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants
|
||||
LL | const fn test() where NonConstImpl: ~const ConstDefaultFn {
|
||||
| +++++++++++++++++++++++++++++++++++++++++
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
error: aborting due to previous error
|
||||
|
||||
Some errors have detailed explanations: E0015, E0277.
|
||||
For more information about an error, try `rustc --explain E0015`.
|
||||
For more information about this error, try `rustc --explain E0277`.
|
||||
|
|
|
@ -1,24 +0,0 @@
|
|||
error[E0277]: the trait bound `cross_crate::NonConst: ~const cross_crate::MyTrait` is not satisfied
|
||||
--> $DIR/cross-crate.rs:15:14
|
||||
|
|
||||
LL | NonConst.func();
|
||||
| ^^^^^^ the trait `~const cross_crate::MyTrait` is not implemented for `cross_crate::NonConst`
|
||||
|
|
||||
note: the trait `cross_crate::MyTrait` is implemented for `cross_crate::NonConst`, but that implementation is not `const`
|
||||
--> $DIR/cross-crate.rs:15:14
|
||||
|
|
||||
LL | NonConst.func();
|
||||
| ^^^^^^
|
||||
|
||||
error[E0015]: cannot call non-const fn `<cross_crate::NonConst as cross_crate::MyTrait>::func` in constant functions
|
||||
--> $DIR/cross-crate.rs:15:14
|
||||
|
|
||||
LL | NonConst.func();
|
||||
| ^^^^^^
|
||||
|
|
||||
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
Some errors have detailed explanations: E0015, E0277.
|
||||
For more information about an error, try `rustc --explain E0015`.
|
|
@ -0,0 +1,19 @@
|
|||
error[E0277]: the trait bound `cross_crate::NonConst: ~const cross_crate::MyTrait` is not satisfied
|
||||
--> $DIR/cross-crate.rs:17:14
|
||||
|
|
||||
LL | NonConst.func();
|
||||
| ^^^^ the trait `~const cross_crate::MyTrait` is not implemented for `cross_crate::NonConst`
|
||||
|
|
||||
note: the trait `cross_crate::MyTrait` is implemented for `cross_crate::NonConst`, but that implementation is not `const`
|
||||
--> $DIR/cross-crate.rs:17:14
|
||||
|
|
||||
LL | NonConst.func();
|
||||
| ^^^^
|
||||
help: consider introducing a `where` clause, but there might be an alternative better way to express this requirement
|
||||
|
|
||||
LL | const fn const_context() where cross_crate::NonConst: ~const cross_crate::MyTrait {
|
||||
| ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
For more information about this error, try `rustc --explain E0277`.
|
|
@ -1,5 +1,6 @@
|
|||
// revisions: stock gated
|
||||
#![cfg_attr(gated, feature(const_trait_impl))]
|
||||
// revisions: stock gated stocknc gatednc
|
||||
// [gated] check-pass
|
||||
#![cfg_attr(any(gated, gatednc), feature(const_trait_impl))]
|
||||
|
||||
// aux-build: cross-crate.rs
|
||||
extern crate cross_crate;
|
||||
|
@ -12,10 +13,12 @@ fn non_const_context() {
|
|||
}
|
||||
|
||||
const fn const_context() {
|
||||
NonConst.func(); //~ ERROR: cannot call non-const fn
|
||||
//[gated]~^ ERROR: the trait bound
|
||||
#[cfg(any(stocknc, gatednc))]
|
||||
NonConst.func();
|
||||
//[stocknc]~^ ERROR: the trait bound
|
||||
//[gatednc]~^^ ERROR: the trait bound
|
||||
Const.func();
|
||||
//[stock]~^ ERROR: cannot call non-const fn
|
||||
//[stock]~^ ERROR: cannot call
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
|
|
|
@ -1,19 +1,11 @@
|
|||
error[E0015]: cannot call non-const fn `<cross_crate::NonConst as cross_crate::MyTrait>::func` in constant functions
|
||||
--> $DIR/cross-crate.rs:15:14
|
||||
|
|
||||
LL | NonConst.func();
|
||||
| ^^^^^^
|
||||
|
|
||||
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants
|
||||
|
||||
error[E0015]: cannot call non-const fn `<cross_crate::Const as cross_crate::MyTrait>::func` in constant functions
|
||||
--> $DIR/cross-crate.rs:17:11
|
||||
--> $DIR/cross-crate.rs:20:11
|
||||
|
|
||||
LL | Const.func();
|
||||
| ^^^^^^
|
||||
|
|
||||
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
error: aborting due to previous error
|
||||
|
||||
For more information about this error, try `rustc --explain E0015`.
|
||||
|
|
|
@ -0,0 +1,19 @@
|
|||
error[E0277]: the trait bound `cross_crate::NonConst: cross_crate::MyTrait` is not satisfied
|
||||
--> $DIR/cross-crate.rs:17:14
|
||||
|
|
||||
LL | NonConst.func();
|
||||
| ^^^^ the trait `~const cross_crate::MyTrait` is not implemented for `cross_crate::NonConst`
|
||||
|
|
||||
note: the trait `cross_crate::MyTrait` is implemented for `cross_crate::NonConst`, but that implementation is not `const`
|
||||
--> $DIR/cross-crate.rs:17:14
|
||||
|
|
||||
LL | NonConst.func();
|
||||
| ^^^^
|
||||
help: consider introducing a `where` clause, but there might be an alternative better way to express this requirement
|
||||
|
|
||||
LL | const fn const_context() where cross_crate::NonConst: ~const cross_crate::MyTrait {
|
||||
| ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
For more information about this error, try `rustc --explain E0277`.
|
|
@ -7,7 +7,6 @@ pub trait Tr {
|
|||
fn b(&self) {
|
||||
().a()
|
||||
//~^ ERROR the trait bound
|
||||
//~| ERROR cannot call
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -2,23 +2,18 @@ error[E0277]: the trait bound `(): ~const Tr` is not satisfied
|
|||
--> $DIR/default-method-body-is-const-same-trait-ck.rs:8:12
|
||||
|
|
||||
LL | ().a()
|
||||
| ^^^ the trait `~const Tr` is not implemented for `()`
|
||||
| ^ the trait `~const Tr` is not implemented for `()`
|
||||
|
|
||||
note: the trait `Tr` is implemented for `()`, but that implementation is not `const`
|
||||
--> $DIR/default-method-body-is-const-same-trait-ck.rs:8:12
|
||||
|
|
||||
LL | ().a()
|
||||
| ^^^
|
||||
|
||||
error[E0015]: cannot call non-const fn `<() as Tr>::a` in constant functions
|
||||
--> $DIR/default-method-body-is-const-same-trait-ck.rs:8:12
|
||||
| ^
|
||||
help: consider introducing a `where` clause, but there might be an alternative better way to express this requirement
|
||||
|
|
||||
LL | ().a()
|
||||
| ^^^
|
||||
|
|
||||
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants
|
||||
LL | pub trait Tr where (): ~const Tr {
|
||||
| +++++++++++++++++++
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
error: aborting due to previous error
|
||||
|
||||
Some errors have detailed explanations: E0015, E0277.
|
||||
For more information about an error, try `rustc --explain E0015`.
|
||||
For more information about this error, try `rustc --explain E0277`.
|
||||
|
|
Loading…
Add table
Reference in a new issue