summaryrefslogtreecommitdiffstats
path: root/tests/ui/rfc-2632-const-trait-impl
diff options
context:
space:
mode:
Diffstat (limited to 'tests/ui/rfc-2632-const-trait-impl')
-rw-r--r--tests/ui/rfc-2632-const-trait-impl/call-generic-method-nonconst.stderr15
-rw-r--r--tests/ui/rfc-2632-const-trait-impl/const-closure-trait-method-fail.stderr15
-rw-r--r--tests/ui/rfc-2632-const-trait-impl/const-drop-fail-2.precise.stderr50
-rw-r--r--tests/ui/rfc-2632-const-trait-impl/const-drop-fail-2.rs46
-rw-r--r--tests/ui/rfc-2632-const-trait-impl/const-drop-fail-2.stock.stderr50
-rw-r--r--tests/ui/rfc-2632-const-trait-impl/const-drop-fail.precise.stderr119
-rw-r--r--tests/ui/rfc-2632-const-trait-impl/const-drop-fail.rs29
-rw-r--r--tests/ui/rfc-2632-const-trait-impl/const-drop-fail.stock.stderr119
-rw-r--r--tests/ui/rfc-2632-const-trait-impl/const_derives/derive-const-non-const-type.rs1
-rw-r--r--tests/ui/rfc-2632-const-trait-impl/const_derives/derive-const-non-const-type.stderr27
-rw-r--r--tests/ui/rfc-2632-const-trait-impl/default-method-body-is-const-body-checking.stderr13
-rw-r--r--tests/ui/rfc-2632-const-trait-impl/function-pointer-does-not-require-const.rs13
-rw-r--r--tests/ui/rfc-2632-const-trait-impl/gate.rs8
-rw-r--r--tests/ui/rfc-2632-const-trait-impl/gate.stderr15
-rw-r--r--tests/ui/rfc-2632-const-trait-impl/nested-closure.rs2
15 files changed, 295 insertions, 227 deletions
diff --git a/tests/ui/rfc-2632-const-trait-impl/call-generic-method-nonconst.stderr b/tests/ui/rfc-2632-const-trait-impl/call-generic-method-nonconst.stderr
index 706f52343..a28d6ce05 100644
--- a/tests/ui/rfc-2632-const-trait-impl/call-generic-method-nonconst.stderr
+++ b/tests/ui/rfc-2632-const-trait-impl/call-generic-method-nonconst.stderr
@@ -1,21 +1,14 @@
error[E0277]: the trait bound `S: ~const Foo` is not satisfied
- --> $DIR/call-generic-method-nonconst.rs:23:34
+ --> $DIR/call-generic-method-nonconst.rs:23:22
|
LL | pub const EQ: bool = equals_self(&S);
- | ----------- ^^ the trait `~const Foo` is not implemented for `S`
- | |
- | required by a bound introduced by this call
+ | ^^^^^^^^^^^^^^^ the trait `~const Foo` is not implemented for `S`
|
note: the trait `Foo` is implemented for `S`, but that implementation is not `const`
- --> $DIR/call-generic-method-nonconst.rs:23:34
+ --> $DIR/call-generic-method-nonconst.rs:23:22
|
LL | pub const EQ: bool = equals_self(&S);
- | ^^
-note: required by a bound in `equals_self`
- --> $DIR/call-generic-method-nonconst.rs:16:25
- |
-LL | const fn equals_self<T: ~const Foo>(t: &T) -> bool {
- | ^^^^^^^^^^ required by this bound in `equals_self`
+ | ^^^^^^^^^^^^^^^
error: aborting due to previous error
diff --git a/tests/ui/rfc-2632-const-trait-impl/const-closure-trait-method-fail.stderr b/tests/ui/rfc-2632-const-trait-impl/const-closure-trait-method-fail.stderr
index 4470e287c..ffc24ec6e 100644
--- a/tests/ui/rfc-2632-const-trait-impl/const-closure-trait-method-fail.stderr
+++ b/tests/ui/rfc-2632-const-trait-impl/const-closure-trait-method-fail.stderr
@@ -1,22 +1,15 @@
error[E0277]: the trait bound `(): ~const Tr` is not satisfied in `fn(()) -> i32 {<() as Tr>::a}`
- --> $DIR/const-closure-trait-method-fail.rs:16:42
+ --> $DIR/const-closure-trait-method-fail.rs:16:23
|
LL | const _: () = assert!(need_const_closure(Tr::a) == 42);
- | ------------------ ^^^^^ within `fn(()) -> i32 {<() as Tr>::a}`, the trait `~const Tr` is not implemented for `()`
- | |
- | required by a bound introduced by this call
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^ within `fn(()) -> i32 {<() as Tr>::a}`, the trait `~const Tr` is not implemented for `()`
|
note: the trait `Tr` is implemented for `()`, but that implementation is not `const`
- --> $DIR/const-closure-trait-method-fail.rs:16:42
+ --> $DIR/const-closure-trait-method-fail.rs:16:23
|
LL | const _: () = assert!(need_const_closure(Tr::a) == 42);
- | ^^^^^
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^
= note: required because it appears within the type `fn(()) -> i32 {<() as Tr>::a}`
-note: required by a bound in `need_const_closure`
- --> $DIR/const-closure-trait-method-fail.rs:12:32
- |
-LL | const fn need_const_closure<T: ~const FnOnce(()) -> i32>(x: T) -> i32 {
- | ^^^^^^^^^^^^^^^^^^^^^^^^ required by this bound in `need_const_closure`
error: aborting due to previous error
diff --git a/tests/ui/rfc-2632-const-trait-impl/const-drop-fail-2.precise.stderr b/tests/ui/rfc-2632-const-trait-impl/const-drop-fail-2.precise.stderr
new file mode 100644
index 000000000..bcdc80f82
--- /dev/null
+++ b/tests/ui/rfc-2632-const-trait-impl/const-drop-fail-2.precise.stderr
@@ -0,0 +1,50 @@
+error[E0277]: the trait bound `NonTrivialDrop: ~const A` is not satisfied
+ --> $DIR/const-drop-fail-2.rs:31:23
+ |
+LL | const _: () = check::<ConstDropImplWithBounds<NonTrivialDrop>>(
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `~const A` is not implemented for `NonTrivialDrop`
+ |
+note: the trait `A` is implemented for `NonTrivialDrop`, but that implementation is not `const`
+ --> $DIR/const-drop-fail-2.rs:31:23
+ |
+LL | const _: () = check::<ConstDropImplWithBounds<NonTrivialDrop>>(
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+note: required by a bound in `ConstDropImplWithBounds`
+ --> $DIR/const-drop-fail-2.rs:21:35
+ |
+LL | struct ConstDropImplWithBounds<T: ~const A>(PhantomData<T>);
+ | ^^^^^^^^ required by this bound in `ConstDropImplWithBounds`
+
+error[E0277]: the trait bound `NonTrivialDrop: ~const A` is not satisfied
+ --> $DIR/const-drop-fail-2.rs:33:5
+ |
+LL | ConstDropImplWithBounds(PhantomData)
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `~const A` is not implemented for `NonTrivialDrop`
+ |
+note: the trait `A` is implemented for `NonTrivialDrop`, but that implementation is not `const`
+ --> $DIR/const-drop-fail-2.rs:33:5
+ |
+LL | ConstDropImplWithBounds(PhantomData)
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+note: required by a bound in `ConstDropImplWithBounds`
+ --> $DIR/const-drop-fail-2.rs:21:35
+ |
+LL | struct ConstDropImplWithBounds<T: ~const A>(PhantomData<T>);
+ | ^^^^^^^^ required by this bound in `ConstDropImplWithBounds`
+
+error[E0367]: `Drop` impl requires `T: ~const A` but the struct it is implemented for does not
+ --> $DIR/const-drop-fail-2.rs:39:9
+ |
+LL | impl<T: ~const A> const Drop for ConstDropImplWithNonConstBounds<T> {
+ | ^^^^^^^^
+ |
+note: the implementor must specify the same requirement
+ --> $DIR/const-drop-fail-2.rs:37:1
+ |
+LL | struct ConstDropImplWithNonConstBounds<T: A>(PhantomData<T>);
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error: aborting due to 3 previous errors
+
+Some errors have detailed explanations: E0277, E0367.
+For more information about an error, try `rustc --explain E0277`.
diff --git a/tests/ui/rfc-2632-const-trait-impl/const-drop-fail-2.rs b/tests/ui/rfc-2632-const-trait-impl/const-drop-fail-2.rs
new file mode 100644
index 000000000..6a252c5d3
--- /dev/null
+++ b/tests/ui/rfc-2632-const-trait-impl/const-drop-fail-2.rs
@@ -0,0 +1,46 @@
+// revisions: stock precise
+#![feature(const_trait_impl)]
+#![feature(const_mut_refs)]
+#![cfg_attr(precise, feature(const_precise_live_drops))]
+
+use std::marker::{Destruct, PhantomData};
+
+struct NonTrivialDrop;
+
+impl Drop for NonTrivialDrop {
+ fn drop(&mut self) {
+ println!("Non trivial drop");
+ }
+}
+
+#[const_trait]
+trait A { fn a() { } }
+
+impl A for NonTrivialDrop {}
+
+struct ConstDropImplWithBounds<T: ~const A>(PhantomData<T>);
+
+impl<T: ~const A> const Drop for ConstDropImplWithBounds<T> {
+ fn drop(&mut self) {
+ T::a();
+ }
+}
+
+const fn check<T: ~const Destruct>(_: T) {}
+
+const _: () = check::<ConstDropImplWithBounds<NonTrivialDrop>>(
+ //~^ ERROR the trait bound
+ ConstDropImplWithBounds(PhantomData)
+ //~^ ERROR the trait bound
+);
+
+struct ConstDropImplWithNonConstBounds<T: A>(PhantomData<T>);
+
+impl<T: ~const A> const Drop for ConstDropImplWithNonConstBounds<T> {
+//~^ ERROR `Drop` impl requires `T: ~const A` but the struct it is implemented for does not
+ fn drop(&mut self) {
+ T::a();
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/rfc-2632-const-trait-impl/const-drop-fail-2.stock.stderr b/tests/ui/rfc-2632-const-trait-impl/const-drop-fail-2.stock.stderr
new file mode 100644
index 000000000..bcdc80f82
--- /dev/null
+++ b/tests/ui/rfc-2632-const-trait-impl/const-drop-fail-2.stock.stderr
@@ -0,0 +1,50 @@
+error[E0277]: the trait bound `NonTrivialDrop: ~const A` is not satisfied
+ --> $DIR/const-drop-fail-2.rs:31:23
+ |
+LL | const _: () = check::<ConstDropImplWithBounds<NonTrivialDrop>>(
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `~const A` is not implemented for `NonTrivialDrop`
+ |
+note: the trait `A` is implemented for `NonTrivialDrop`, but that implementation is not `const`
+ --> $DIR/const-drop-fail-2.rs:31:23
+ |
+LL | const _: () = check::<ConstDropImplWithBounds<NonTrivialDrop>>(
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+note: required by a bound in `ConstDropImplWithBounds`
+ --> $DIR/const-drop-fail-2.rs:21:35
+ |
+LL | struct ConstDropImplWithBounds<T: ~const A>(PhantomData<T>);
+ | ^^^^^^^^ required by this bound in `ConstDropImplWithBounds`
+
+error[E0277]: the trait bound `NonTrivialDrop: ~const A` is not satisfied
+ --> $DIR/const-drop-fail-2.rs:33:5
+ |
+LL | ConstDropImplWithBounds(PhantomData)
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `~const A` is not implemented for `NonTrivialDrop`
+ |
+note: the trait `A` is implemented for `NonTrivialDrop`, but that implementation is not `const`
+ --> $DIR/const-drop-fail-2.rs:33:5
+ |
+LL | ConstDropImplWithBounds(PhantomData)
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+note: required by a bound in `ConstDropImplWithBounds`
+ --> $DIR/const-drop-fail-2.rs:21:35
+ |
+LL | struct ConstDropImplWithBounds<T: ~const A>(PhantomData<T>);
+ | ^^^^^^^^ required by this bound in `ConstDropImplWithBounds`
+
+error[E0367]: `Drop` impl requires `T: ~const A` but the struct it is implemented for does not
+ --> $DIR/const-drop-fail-2.rs:39:9
+ |
+LL | impl<T: ~const A> const Drop for ConstDropImplWithNonConstBounds<T> {
+ | ^^^^^^^^
+ |
+note: the implementor must specify the same requirement
+ --> $DIR/const-drop-fail-2.rs:37:1
+ |
+LL | struct ConstDropImplWithNonConstBounds<T: A>(PhantomData<T>);
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error: aborting due to 3 previous errors
+
+Some errors have detailed explanations: E0277, E0367.
+For more information about an error, try `rustc --explain E0277`.
diff --git a/tests/ui/rfc-2632-const-trait-impl/const-drop-fail.precise.stderr b/tests/ui/rfc-2632-const-trait-impl/const-drop-fail.precise.stderr
index 796c0d388..40caada51 100644
--- a/tests/ui/rfc-2632-const-trait-impl/const-drop-fail.precise.stderr
+++ b/tests/ui/rfc-2632-const-trait-impl/const-drop-fail.precise.stderr
@@ -1,99 +1,58 @@
error[E0277]: can't drop `NonTrivialDrop` in const contexts
- --> $DIR/const-drop-fail.rs:44:5
+ --> $DIR/const-drop-fail.rs:26:23
|
-LL | const _: () = check($exp);
- | ----- required by a bound introduced by this call
+LL | const _: () = check($exp);
+ | ^^^^^^^^^^^ the trait `~const Destruct` is not implemented for `NonTrivialDrop`
...
-LL | NonTrivialDrop,
- | ^^^^^^^^^^^^^^ the trait `~const Destruct` is not implemented for `NonTrivialDrop`
+LL | / check_all! {
+LL | | NonTrivialDrop,
+LL | | ConstImplWithDropGlue(NonTrivialDrop),
+LL | | }
+ | |_- in this macro invocation
|
- = note: the trait bound `NonTrivialDrop: ~const Destruct` is not satisfied
-note: required by a bound in `check`
- --> $DIR/const-drop-fail.rs:35:19
- |
-LL | const fn check<T: ~const Destruct>(_: T) {}
- | ^^^^^^^^^^^^^^^ required by this bound in `check`
-help: consider borrowing here
+note: the trait `Destruct` is implemented for `NonTrivialDrop`, but that implementation is not `const`
+ --> $DIR/const-drop-fail.rs:26:23
|
-LL | &NonTrivialDrop,
- | +
-LL | &mut NonTrivialDrop,
- | ++++
+LL | const _: () = check($exp);
+ | ^^^^^^^^^^^
+...
+LL | / check_all! {
+LL | | NonTrivialDrop,
+LL | | ConstImplWithDropGlue(NonTrivialDrop),
+LL | | }
+ | |_- in this macro invocation
+ = note: this error originates in the macro `check_all` (in Nightly builds, run with -Z macro-backtrace for more info)
error[E0277]: can't drop `NonTrivialDrop` in const contexts
- --> $DIR/const-drop-fail.rs:46:5
+ --> $DIR/const-drop-fail.rs:26:23
|
-LL | const _: () = check($exp);
- | ----- required by a bound introduced by this call
+LL | const _: () = check($exp);
+ | ^^^^^^^^^^^ within `ConstImplWithDropGlue`, the trait `~const Destruct` is not implemented for `NonTrivialDrop`
...
-LL | ConstImplWithDropGlue(NonTrivialDrop),
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ within `ConstImplWithDropGlue`, the trait `~const Destruct` is not implemented for `NonTrivialDrop`
+LL | / check_all! {
+LL | | NonTrivialDrop,
+LL | | ConstImplWithDropGlue(NonTrivialDrop),
+LL | | }
+ | |_- in this macro invocation
|
note: the trait `Destruct` is implemented for `NonTrivialDrop`, but that implementation is not `const`
- --> $DIR/const-drop-fail.rs:46:5
+ --> $DIR/const-drop-fail.rs:26:23
|
-LL | ConstImplWithDropGlue(NonTrivialDrop),
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+LL | const _: () = check($exp);
+ | ^^^^^^^^^^^
+...
+LL | / check_all! {
+LL | | NonTrivialDrop,
+LL | | ConstImplWithDropGlue(NonTrivialDrop),
+LL | | }
+ | |_- in this macro invocation
note: required because it appears within the type `ConstImplWithDropGlue`
--> $DIR/const-drop-fail.rs:16:8
|
LL | struct ConstImplWithDropGlue(NonTrivialDrop);
| ^^^^^^^^^^^^^^^^^^^^^
-note: required by a bound in `check`
- --> $DIR/const-drop-fail.rs:35:19
- |
-LL | const fn check<T: ~const Destruct>(_: T) {}
- | ^^^^^^^^^^^^^^^ required by this bound in `check`
-
-error[E0277]: the trait bound `NonTrivialDrop: ~const A` is not satisfied
- --> $DIR/const-drop-fail.rs:48:47
- |
-LL | ConstDropImplWithBounds::<NonTrivialDrop>(PhantomData),
- | ----------------------------------------- ^^^^^^^^^^^ the trait `~const A` is not implemented for `NonTrivialDrop`
- | |
- | required by a bound introduced by this call
- |
-note: the trait `A` is implemented for `NonTrivialDrop`, but that implementation is not `const`
- --> $DIR/const-drop-fail.rs:48:47
- |
-LL | ConstDropImplWithBounds::<NonTrivialDrop>(PhantomData),
- | ^^^^^^^^^^^
-note: required by a bound in `ConstDropImplWithBounds`
- --> $DIR/const-drop-fail.rs:27:35
- |
-LL | struct ConstDropImplWithBounds<T: ~const A>(PhantomData<T>);
- | ^^^^^^^^ required by this bound in `ConstDropImplWithBounds`
-
-error[E0277]: the trait bound `NonTrivialDrop: ~const A` is not satisfied
- --> $DIR/const-drop-fail.rs:48:5
- |
-LL | ConstDropImplWithBounds::<NonTrivialDrop>(PhantomData),
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `~const A` is not implemented for `NonTrivialDrop`
- |
-note: the trait `A` is implemented for `NonTrivialDrop`, but that implementation is not `const`
- --> $DIR/const-drop-fail.rs:48:5
- |
-LL | ConstDropImplWithBounds::<NonTrivialDrop>(PhantomData),
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-note: required by a bound in `ConstDropImplWithBounds`
- --> $DIR/const-drop-fail.rs:27:35
- |
-LL | struct ConstDropImplWithBounds<T: ~const A>(PhantomData<T>);
- | ^^^^^^^^ required by this bound in `ConstDropImplWithBounds`
-
-error[E0367]: `Drop` impl requires `T: ~const A` but the struct it is implemented for does not
- --> $DIR/const-drop-fail.rs:55:9
- |
-LL | impl<T: ~const A> const Drop for ConstDropImplWithNonConstBounds<T> {
- | ^^^^^^^^
- |
-note: the implementor must specify the same requirement
- --> $DIR/const-drop-fail.rs:53:1
- |
-LL | struct ConstDropImplWithNonConstBounds<T: A>(PhantomData<T>);
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ = note: this error originates in the macro `check_all` (in Nightly builds, run with -Z macro-backtrace for more info)
-error: aborting due to 5 previous errors
+error: aborting due to 2 previous errors
-Some errors have detailed explanations: E0277, E0367.
-For more information about an error, try `rustc --explain E0277`.
+For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/rfc-2632-const-trait-impl/const-drop-fail.rs b/tests/ui/rfc-2632-const-trait-impl/const-drop-fail.rs
index d36c7f81c..c4bdb9ef5 100644
--- a/tests/ui/rfc-2632-const-trait-impl/const-drop-fail.rs
+++ b/tests/ui/rfc-2632-const-trait-impl/const-drop-fail.rs
@@ -19,44 +19,19 @@ impl const Drop for ConstImplWithDropGlue {
fn drop(&mut self) {}
}
-#[const_trait]
-trait A { fn a() { } }
-
-impl A for NonTrivialDrop {}
-
-struct ConstDropImplWithBounds<T: ~const A>(PhantomData<T>);
-
-impl<T: ~const A> const Drop for ConstDropImplWithBounds<T> {
- fn drop(&mut self) {
- T::a();
- }
-}
-
const fn check<T: ~const Destruct>(_: T) {}
macro_rules! check_all {
($($exp:expr),*$(,)?) => {$(
const _: () = check($exp);
+ //~^ ERROR can't drop
+ //~| ERROR can't drop
)*};
}
check_all! {
NonTrivialDrop,
- //~^ ERROR can't drop
ConstImplWithDropGlue(NonTrivialDrop),
- //~^ ERROR can't drop
- ConstDropImplWithBounds::<NonTrivialDrop>(PhantomData),
- //~^ ERROR the trait bound
- //~| ERROR the trait bound
-}
-
-struct ConstDropImplWithNonConstBounds<T: A>(PhantomData<T>);
-
-impl<T: ~const A> const Drop for ConstDropImplWithNonConstBounds<T> {
-//~^ ERROR `Drop` impl requires `T: ~const A` but the struct it is implemented for does not
- fn drop(&mut self) {
- T::a();
- }
}
fn main() {}
diff --git a/tests/ui/rfc-2632-const-trait-impl/const-drop-fail.stock.stderr b/tests/ui/rfc-2632-const-trait-impl/const-drop-fail.stock.stderr
index 796c0d388..40caada51 100644
--- a/tests/ui/rfc-2632-const-trait-impl/const-drop-fail.stock.stderr
+++ b/tests/ui/rfc-2632-const-trait-impl/const-drop-fail.stock.stderr
@@ -1,99 +1,58 @@
error[E0277]: can't drop `NonTrivialDrop` in const contexts
- --> $DIR/const-drop-fail.rs:44:5
+ --> $DIR/const-drop-fail.rs:26:23
|
-LL | const _: () = check($exp);
- | ----- required by a bound introduced by this call
+LL | const _: () = check($exp);
+ | ^^^^^^^^^^^ the trait `~const Destruct` is not implemented for `NonTrivialDrop`
...
-LL | NonTrivialDrop,
- | ^^^^^^^^^^^^^^ the trait `~const Destruct` is not implemented for `NonTrivialDrop`
+LL | / check_all! {
+LL | | NonTrivialDrop,
+LL | | ConstImplWithDropGlue(NonTrivialDrop),
+LL | | }
+ | |_- in this macro invocation
|
- = note: the trait bound `NonTrivialDrop: ~const Destruct` is not satisfied
-note: required by a bound in `check`
- --> $DIR/const-drop-fail.rs:35:19
- |
-LL | const fn check<T: ~const Destruct>(_: T) {}
- | ^^^^^^^^^^^^^^^ required by this bound in `check`
-help: consider borrowing here
+note: the trait `Destruct` is implemented for `NonTrivialDrop`, but that implementation is not `const`
+ --> $DIR/const-drop-fail.rs:26:23
|
-LL | &NonTrivialDrop,
- | +
-LL | &mut NonTrivialDrop,
- | ++++
+LL | const _: () = check($exp);
+ | ^^^^^^^^^^^
+...
+LL | / check_all! {
+LL | | NonTrivialDrop,
+LL | | ConstImplWithDropGlue(NonTrivialDrop),
+LL | | }
+ | |_- in this macro invocation
+ = note: this error originates in the macro `check_all` (in Nightly builds, run with -Z macro-backtrace for more info)
error[E0277]: can't drop `NonTrivialDrop` in const contexts
- --> $DIR/const-drop-fail.rs:46:5
+ --> $DIR/const-drop-fail.rs:26:23
|
-LL | const _: () = check($exp);
- | ----- required by a bound introduced by this call
+LL | const _: () = check($exp);
+ | ^^^^^^^^^^^ within `ConstImplWithDropGlue`, the trait `~const Destruct` is not implemented for `NonTrivialDrop`
...
-LL | ConstImplWithDropGlue(NonTrivialDrop),
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ within `ConstImplWithDropGlue`, the trait `~const Destruct` is not implemented for `NonTrivialDrop`
+LL | / check_all! {
+LL | | NonTrivialDrop,
+LL | | ConstImplWithDropGlue(NonTrivialDrop),
+LL | | }
+ | |_- in this macro invocation
|
note: the trait `Destruct` is implemented for `NonTrivialDrop`, but that implementation is not `const`
- --> $DIR/const-drop-fail.rs:46:5
+ --> $DIR/const-drop-fail.rs:26:23
|
-LL | ConstImplWithDropGlue(NonTrivialDrop),
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+LL | const _: () = check($exp);
+ | ^^^^^^^^^^^
+...
+LL | / check_all! {
+LL | | NonTrivialDrop,
+LL | | ConstImplWithDropGlue(NonTrivialDrop),
+LL | | }
+ | |_- in this macro invocation
note: required because it appears within the type `ConstImplWithDropGlue`
--> $DIR/const-drop-fail.rs:16:8
|
LL | struct ConstImplWithDropGlue(NonTrivialDrop);
| ^^^^^^^^^^^^^^^^^^^^^
-note: required by a bound in `check`
- --> $DIR/const-drop-fail.rs:35:19
- |
-LL | const fn check<T: ~const Destruct>(_: T) {}
- | ^^^^^^^^^^^^^^^ required by this bound in `check`
-
-error[E0277]: the trait bound `NonTrivialDrop: ~const A` is not satisfied
- --> $DIR/const-drop-fail.rs:48:47
- |
-LL | ConstDropImplWithBounds::<NonTrivialDrop>(PhantomData),
- | ----------------------------------------- ^^^^^^^^^^^ the trait `~const A` is not implemented for `NonTrivialDrop`
- | |
- | required by a bound introduced by this call
- |
-note: the trait `A` is implemented for `NonTrivialDrop`, but that implementation is not `const`
- --> $DIR/const-drop-fail.rs:48:47
- |
-LL | ConstDropImplWithBounds::<NonTrivialDrop>(PhantomData),
- | ^^^^^^^^^^^
-note: required by a bound in `ConstDropImplWithBounds`
- --> $DIR/const-drop-fail.rs:27:35
- |
-LL | struct ConstDropImplWithBounds<T: ~const A>(PhantomData<T>);
- | ^^^^^^^^ required by this bound in `ConstDropImplWithBounds`
-
-error[E0277]: the trait bound `NonTrivialDrop: ~const A` is not satisfied
- --> $DIR/const-drop-fail.rs:48:5
- |
-LL | ConstDropImplWithBounds::<NonTrivialDrop>(PhantomData),
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `~const A` is not implemented for `NonTrivialDrop`
- |
-note: the trait `A` is implemented for `NonTrivialDrop`, but that implementation is not `const`
- --> $DIR/const-drop-fail.rs:48:5
- |
-LL | ConstDropImplWithBounds::<NonTrivialDrop>(PhantomData),
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-note: required by a bound in `ConstDropImplWithBounds`
- --> $DIR/const-drop-fail.rs:27:35
- |
-LL | struct ConstDropImplWithBounds<T: ~const A>(PhantomData<T>);
- | ^^^^^^^^ required by this bound in `ConstDropImplWithBounds`
-
-error[E0367]: `Drop` impl requires `T: ~const A` but the struct it is implemented for does not
- --> $DIR/const-drop-fail.rs:55:9
- |
-LL | impl<T: ~const A> const Drop for ConstDropImplWithNonConstBounds<T> {
- | ^^^^^^^^
- |
-note: the implementor must specify the same requirement
- --> $DIR/const-drop-fail.rs:53:1
- |
-LL | struct ConstDropImplWithNonConstBounds<T: A>(PhantomData<T>);
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ = note: this error originates in the macro `check_all` (in Nightly builds, run with -Z macro-backtrace for more info)
-error: aborting due to 5 previous errors
+error: aborting due to 2 previous errors
-Some errors have detailed explanations: E0277, E0367.
-For more information about an error, try `rustc --explain E0277`.
+For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/rfc-2632-const-trait-impl/const_derives/derive-const-non-const-type.rs b/tests/ui/rfc-2632-const-trait-impl/const_derives/derive-const-non-const-type.rs
index 92843a8a2..ed6699f37 100644
--- a/tests/ui/rfc-2632-const-trait-impl/const_derives/derive-const-non-const-type.rs
+++ b/tests/ui/rfc-2632-const-trait-impl/const_derives/derive-const-non-const-type.rs
@@ -9,5 +9,6 @@ impl Default for A {
#[derive_const(Default)]
pub struct S(A);
//~^ cannot call non-const fn
+//~| the trait bound
fn main() {}
diff --git a/tests/ui/rfc-2632-const-trait-impl/const_derives/derive-const-non-const-type.stderr b/tests/ui/rfc-2632-const-trait-impl/const_derives/derive-const-non-const-type.stderr
index 96e0c78b9..653037ef3 100644
--- a/tests/ui/rfc-2632-const-trait-impl/const_derives/derive-const-non-const-type.stderr
+++ b/tests/ui/rfc-2632-const-trait-impl/const_derives/derive-const-non-const-type.stderr
@@ -1,3 +1,25 @@
+error[E0277]: the trait bound `A: Default` is not satisfied
+ --> $DIR/derive-const-non-const-type.rs:10:14
+ |
+LL | #[derive_const(Default)]
+ | ------- in this derive macro expansion
+LL | pub struct S(A);
+ | ^ the trait `~const Default` is not implemented for `A`
+ |
+note: the trait `Default` is implemented for `A`, but that implementation is not `const`
+ --> $DIR/derive-const-non-const-type.rs:10:14
+ |
+LL | #[derive_const(Default)]
+ | ------- in this derive macro expansion
+LL | pub struct S(A);
+ | ^
+ = note: this error originates in the derive macro `Default` (in Nightly builds, run with -Z macro-backtrace for more info)
+help: consider annotating `A` with `#[derive(Default)]`
+ |
+LL + #[derive(Default)]
+LL | pub struct A;
+ |
+
error[E0015]: cannot call non-const fn `<A as Default>::default` in constant functions
--> $DIR/derive-const-non-const-type.rs:10:14
|
@@ -10,6 +32,7 @@ LL | pub struct S(A);
= help: add `#![feature(const_trait_impl)]` to the crate attributes to enable
= note: this error originates in the derive macro `Default` (in Nightly builds, run with -Z macro-backtrace for more info)
-error: aborting due to previous error
+error: aborting due to 2 previous errors
-For more information about this error, try `rustc --explain E0015`.
+Some errors have detailed explanations: E0015, E0277.
+For more information about an error, try `rustc --explain E0015`.
diff --git a/tests/ui/rfc-2632-const-trait-impl/default-method-body-is-const-body-checking.stderr b/tests/ui/rfc-2632-const-trait-impl/default-method-body-is-const-body-checking.stderr
index a244ab10c..26644f72c 100644
--- a/tests/ui/rfc-2632-const-trait-impl/default-method-body-is-const-body-checking.stderr
+++ b/tests/ui/rfc-2632-const-trait-impl/default-method-body-is-const-body-checking.stderr
@@ -1,19 +1,14 @@
error[E0277]: the trait bound `(): ~const Tr` is not satisfied
- --> $DIR/default-method-body-is-const-body-checking.rs:12:15
+ --> $DIR/default-method-body-is-const-body-checking.rs:12:9
|
LL | foo::<()>();
- | ^^ 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-body-checking.rs:12:15
+ --> $DIR/default-method-body-is-const-body-checking.rs:12:9
|
LL | foo::<()>();
- | ^^
-note: required by a bound in `foo`
- --> $DIR/default-method-body-is-const-body-checking.rs:7:28
- |
-LL | const fn foo<T>() where T: ~const Tr {}
- | ^^^^^^^^^ required by this bound in `foo`
+ | ^^^^^^^^^^^
error: aborting due to previous error
diff --git a/tests/ui/rfc-2632-const-trait-impl/function-pointer-does-not-require-const.rs b/tests/ui/rfc-2632-const-trait-impl/function-pointer-does-not-require-const.rs
index 1726cf82e..60790e297 100644
--- a/tests/ui/rfc-2632-const-trait-impl/function-pointer-does-not-require-const.rs
+++ b/tests/ui/rfc-2632-const-trait-impl/function-pointer-does-not-require-const.rs
@@ -1,8 +1,15 @@
// check-pass
+#![feature(const_trait_impl)]
-type I32Cmp = fn(&i32, &i32) -> core::cmp::Ordering;
-pub const fn min_by_i32() -> fn(i32, i32, I32Cmp) -> i32 {
- core::cmp::min_by
+#[const_trait]
+pub trait Test {}
+
+impl Test for () {}
+
+pub const fn test<T: ~const Test>() {}
+
+pub const fn min_by_i32() -> fn() {
+ test::<()>
}
fn main() {}
diff --git a/tests/ui/rfc-2632-const-trait-impl/gate.rs b/tests/ui/rfc-2632-const-trait-impl/gate.rs
index f2cd26c91..d1c93ab9f 100644
--- a/tests/ui/rfc-2632-const-trait-impl/gate.rs
+++ b/tests/ui/rfc-2632-const-trait-impl/gate.rs
@@ -1,5 +1,13 @@
// gate-test-const_closures
+
fn main() {
(const || {})();
//~^ ERROR: const closures are experimental
}
+
+macro_rules! e {
+ ($e:expr) => {}
+}
+
+e!((const || {}));
+//~^ ERROR const closures are experimental
diff --git a/tests/ui/rfc-2632-const-trait-impl/gate.stderr b/tests/ui/rfc-2632-const-trait-impl/gate.stderr
index 30edc4127..11cc2cd56 100644
--- a/tests/ui/rfc-2632-const-trait-impl/gate.stderr
+++ b/tests/ui/rfc-2632-const-trait-impl/gate.stderr
@@ -1,12 +1,21 @@
error[E0658]: const closures are experimental
- --> $DIR/gate.rs:3:6
+ --> $DIR/gate.rs:4:6
|
LL | (const || {})();
- | ^^^^^^^^^^^
+ | ^^^^^
|
= note: see issue #106003 <https://github.com/rust-lang/rust/issues/106003> for more information
= help: add `#![feature(const_closures)]` to the crate attributes to enable
-error: aborting due to previous error
+error[E0658]: const closures are experimental
+ --> $DIR/gate.rs:12:5
+ |
+LL | e!((const || {}));
+ | ^^^^^
+ |
+ = note: see issue #106003 <https://github.com/rust-lang/rust/issues/106003> for more information
+ = help: add `#![feature(const_closures)]` to the crate attributes to enable
+
+error: aborting due to 2 previous errors
For more information about this error, try `rustc --explain E0658`.
diff --git a/tests/ui/rfc-2632-const-trait-impl/nested-closure.rs b/tests/ui/rfc-2632-const-trait-impl/nested-closure.rs
index a85113600..0b423b340 100644
--- a/tests/ui/rfc-2632-const-trait-impl/nested-closure.rs
+++ b/tests/ui/rfc-2632-const-trait-impl/nested-closure.rs
@@ -1,6 +1,6 @@
// check-pass
-#![feature(const_trait_impl, once_cell)]
+#![feature(const_trait_impl, lazy_cell)]
use std::sync::LazyLock;