about summary refs log tree commit diff
path: root/tests/ui/consts
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2023-04-19 13:03:40 +0000
committerbors <bors@rust-lang.org>2023-04-19 13:03:40 +0000
commit3a5c8e91f094bb1cb1346651fe3512f0b603d826 (patch)
tree9768f32e150f510ea6fa2dd3552ac91080657ca3 /tests/ui/consts
parentd7f9e81650dcee3e2d5ad1973a71da644a2eff93 (diff)
parent14d1e87db9bf5e9c3dc8cfe7a0558d260b1e5ff2 (diff)
downloadrust-3a5c8e91f094bb1cb1346651fe3512f0b603d826.tar.gz
rust-3a5c8e91f094bb1cb1346651fe3512f0b603d826.zip
Auto merge of #110393 - fee1-dead-contrib:rm-const-traits, r=oli-obk
Rm const traits in libcore

See [zulip thread](https://rust-lang.zulipchat.com/#narrow/stream/146212-t-compiler.2Fconst-eval/topic/.60const.20Trait.60.20removal.20or.20rework)

* [x] Bless ui tests
* [ ] Re constify some unstable functions with workarounds if they are needed
Diffstat (limited to 'tests/ui/consts')
-rw-r--r--tests/ui/consts/const-eval/const-eval-overflow-3b.stderr4
-rw-r--r--tests/ui/consts/const-eval/const-eval-overflow-4b.stderr4
-rw-r--r--tests/ui/consts/const-eval/const_raw_ptr_ops.rs4
-rw-r--r--tests/ui/consts/const-eval/const_raw_ptr_ops.stderr27
-rw-r--r--tests/ui/consts/const-eval/ub-slice-get-unchecked.rs2
-rw-r--r--tests/ui/consts/const-eval/ub-slice-get-unchecked.stderr19
-rw-r--r--tests/ui/consts/const-float-classify.rs35
-rw-r--r--tests/ui/consts/const-fn-error.rs1
-rw-r--r--tests/ui/consts/const-fn-error.stderr19
-rw-r--r--tests/ui/consts/const-for.rs1
-rw-r--r--tests/ui/consts/const-for.stderr18
-rw-r--r--tests/ui/consts/const-try.rs2
-rw-r--r--tests/ui/consts/const-try.stderr20
-rw-r--r--tests/ui/consts/const_cmp_type_id.rs2
-rw-r--r--tests/ui/consts/const_cmp_type_id.stderr76
-rw-r--r--tests/ui/consts/fn_trait_refs.rs2
-rw-r--r--tests/ui/consts/fn_trait_refs.stderr15
-rw-r--r--tests/ui/consts/issue-25826.rs2
-rw-r--r--tests/ui/consts/issue-25826.stderr14
-rw-r--r--tests/ui/consts/issue-73976-monomorphic.rs2
-rw-r--r--tests/ui/consts/issue-73976-monomorphic.stderr28
-rw-r--r--tests/ui/consts/issue-94675.rs5
-rw-r--r--tests/ui/consts/issue-94675.stderr28
-rw-r--r--tests/ui/consts/min_const_fn/cmp_fn_pointers.rs2
-rw-r--r--tests/ui/consts/min_const_fn/cmp_fn_pointers.stderr14
-rw-r--r--tests/ui/consts/promoted_const_call.rs2
-rw-r--r--tests/ui/consts/promoted_const_call.stderr12
-rw-r--r--tests/ui/consts/rustc-impl-const-stability.rs2
-rw-r--r--tests/ui/consts/rustc-impl-const-stability.stderr11
-rw-r--r--tests/ui/consts/try-operator.rs2
-rw-r--r--tests/ui/consts/try-operator.stderr9
31 files changed, 254 insertions, 130 deletions
diff --git a/tests/ui/consts/const-eval/const-eval-overflow-3b.stderr b/tests/ui/consts/const-eval/const-eval-overflow-3b.stderr
index f199170018f..05f33c33946 100644
--- a/tests/ui/consts/const-eval/const-eval-overflow-3b.stderr
+++ b/tests/ui/consts/const-eval/const-eval-overflow-3b.stderr
@@ -4,13 +4,13 @@ error[E0308]: mismatched types
 LL |     = [0; (i8::MAX + 1u8) as usize];
    |                      ^^^ expected `i8`, found `u8`
 
-error[E0277]: cannot add `u8` to `i8` in const contexts
+error[E0277]: cannot add `u8` to `i8`
   --> $DIR/const-eval-overflow-3b.rs:16:20
    |
 LL |     = [0; (i8::MAX + 1u8) as usize];
    |                    ^ no implementation for `i8 + u8`
    |
-   = help: the trait `~const Add<u8>` is not implemented for `i8`
+   = help: the trait `Add<u8>` is not implemented for `i8`
    = help: the following other types implement trait `Add<Rhs>`:
              <&'a i8 as Add<i8>>
              <&i8 as Add<&i8>>
diff --git a/tests/ui/consts/const-eval/const-eval-overflow-4b.stderr b/tests/ui/consts/const-eval/const-eval-overflow-4b.stderr
index 1f8e402317a..d019f5920b5 100644
--- a/tests/ui/consts/const-eval/const-eval-overflow-4b.stderr
+++ b/tests/ui/consts/const-eval/const-eval-overflow-4b.stderr
@@ -4,13 +4,13 @@ error[E0308]: mismatched types
 LL |     : [u32; (i8::MAX as i8 + 1u8) as usize]
    |                              ^^^ expected `i8`, found `u8`
 
-error[E0277]: cannot add `u8` to `i8` in const contexts
+error[E0277]: cannot add `u8` to `i8`
   --> $DIR/const-eval-overflow-4b.rs:9:28
    |
 LL |     : [u32; (i8::MAX as i8 + 1u8) as usize]
    |                            ^ no implementation for `i8 + u8`
    |
-   = help: the trait `~const Add<u8>` is not implemented for `i8`
+   = help: the trait `Add<u8>` is not implemented for `i8`
    = help: the following other types implement trait `Add<Rhs>`:
              <&'a i8 as Add<i8>>
              <&i8 as Add<&i8>>
diff --git a/tests/ui/consts/const-eval/const_raw_ptr_ops.rs b/tests/ui/consts/const-eval/const_raw_ptr_ops.rs
index cd7c9800775..432a05756d3 100644
--- a/tests/ui/consts/const-eval/const_raw_ptr_ops.rs
+++ b/tests/ui/consts/const-eval/const_raw_ptr_ops.rs
@@ -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 can't compare
+const X: bool = unsafe { &1 as *const i32 == &2 as *const i32 }; //~ ERROR pointers cannot
 // unconst and bad, will thus error in miri
-const X2: bool = unsafe { 42 as *const i32 == 43 as *const i32 }; //~ ERROR can't compare
+const X2: bool = unsafe { 42 as *const i32 == 43 as *const i32 }; //~ ERROR pointers cannot
diff --git a/tests/ui/consts/const-eval/const_raw_ptr_ops.stderr b/tests/ui/consts/const-eval/const_raw_ptr_ops.stderr
index 12244450e7f..1f5bca273d3 100644
--- a/tests/ui/consts/const-eval/const_raw_ptr_ops.stderr
+++ b/tests/ui/consts/const-eval/const_raw_ptr_ops.stderr
@@ -1,29 +1,18 @@
-error[E0277]: can't compare `*const i32` with `_` in const contexts
-  --> $DIR/const_raw_ptr_ops.rs:4:43
+error: pointers cannot be reliably compared during const eval
+  --> $DIR/const_raw_ptr_ops.rs:4:26
    |
 LL | const X: bool = unsafe { &1 as *const i32 == &2 as *const i32 };
-   |                                           ^^ no implementation for `*const i32 == _`
+   |                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |
-   = 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 };
-   |                                           ^^
+   = note: see issue #53020 <https://github.com/rust-lang/rust/issues/53020> for more information
 
-error[E0277]: can't compare `*const i32` with `_` in const contexts
-  --> $DIR/const_raw_ptr_ops.rs:6:44
+error: pointers cannot be reliably compared during const eval
+  --> $DIR/const_raw_ptr_ops.rs:6:27
    |
 LL | const X2: bool = unsafe { 42 as *const i32 == 43 as *const i32 };
-   |                                            ^^ no implementation for `*const i32 == _`
+   |                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |
-   = 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 };
-   |                                            ^^
+   = note: see issue #53020 <https://github.com/rust-lang/rust/issues/53020> for more information
 
 error: aborting due to 2 previous errors
 
-For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/consts/const-eval/ub-slice-get-unchecked.rs b/tests/ui/consts/const-eval/ub-slice-get-unchecked.rs
index d9a74b4f3e2..ebc5543b380 100644
--- a/tests/ui/consts/const-eval/ub-slice-get-unchecked.rs
+++ b/tests/ui/consts/const-eval/ub-slice-get-unchecked.rs
@@ -1,3 +1,5 @@
+// known-bug: #110395
+
 #![feature(const_slice_index)]
 
 const A: [(); 5] = [(), (), (), (), ()];
diff --git a/tests/ui/consts/const-eval/ub-slice-get-unchecked.stderr b/tests/ui/consts/const-eval/ub-slice-get-unchecked.stderr
index 775e475dfeb..403fb5e0940 100644
--- a/tests/ui/consts/const-eval/ub-slice-get-unchecked.stderr
+++ b/tests/ui/consts/const-eval/ub-slice-get-unchecked.stderr
@@ -1,18 +1,11 @@
-error[E0080]: evaluation of constant value failed
-  --> $SRC_DIR/core/src/slice/index.rs:LL:COL
-   |
-   = note: overflow executing `unchecked_sub`
-   |
-note: inside `<std::ops::Range<usize> as SliceIndex<[()]>>::get_unchecked`
-  --> $SRC_DIR/core/src/slice/index.rs:LL:COL
-note: inside `core::slice::<impl [()]>::get_unchecked::<std::ops::Range<usize>>`
-  --> $SRC_DIR/core/src/slice/mod.rs:LL:COL
-note: inside `B`
-  --> $DIR/ub-slice-get-unchecked.rs:7:27
+error[E0015]: cannot call non-const fn `core::slice::<impl [()]>::get_unchecked::<std::ops::Range<usize>>` in constants
+  --> $DIR/ub-slice-get-unchecked.rs:9:29
    |
 LL | const B: &[()] = unsafe { A.get_unchecked(3..1) };
-   |                           ^^^^^^^^^^^^^^^^^^^^^
+   |                             ^^^^^^^^^^^^^^^^^^^
+   |
+   = note: calls in constants are limited to constant functions, tuple structs and tuple variants
 
 error: aborting due to previous error
 
-For more information about this error, try `rustc --explain E0080`.
+For more information about this error, try `rustc --explain E0015`.
diff --git a/tests/ui/consts/const-float-classify.rs b/tests/ui/consts/const-float-classify.rs
index 74238d0dd92..3a5d5bb46e9 100644
--- a/tests/ui/consts/const-float-classify.rs
+++ b/tests/ui/consts/const-float-classify.rs
@@ -8,11 +8,33 @@
 // Don't promote
 const fn nop<T>(x: T) -> T { x }
 
+// FIXME(const-hack): replace with PartialEq
+#[const_trait]
+trait MyEq<T> {
+    fn eq(self, b: T) -> bool;
+}
+
+impl const MyEq<bool> for bool {
+    fn eq(self, b: bool) -> bool {
+        self == b
+    }
+}
+
+impl const MyEq<NonDet> for bool {
+    fn eq(self, _: NonDet) -> bool {
+        true
+    }
+}
+
+const fn eq<A: ~const MyEq<B>, B>(x: A, y: B) -> bool {
+    x.eq(y)
+}
+
 macro_rules! const_assert {
     ($a:expr, $b:expr) => {
         {
-            const _: () = assert!($a == $b);
-            assert_eq!(nop($a), nop($b));
+            const _: () = assert!(eq($a, $b));
+            assert!(eq(nop($a), nop($b)));
         }
     };
 }
@@ -47,15 +69,6 @@ macro_rules! suite_inner {
 #[derive(Debug)]
 struct NonDet;
 
-impl const PartialEq<NonDet> for bool {
-    fn eq(&self, _: &NonDet) -> bool {
-        true
-    }
-    fn ne(&self, _: &NonDet) -> bool {
-        false
-    }
-}
-
 // The result of the `is_sign` methods are not checked for correctness, since LLVM does not
 // guarantee anything about the signedness of NaNs. See
 // https://github.com/rust-lang/rust/issues/55131.
diff --git a/tests/ui/consts/const-fn-error.rs b/tests/ui/consts/const-fn-error.rs
index dabbd58dbe0..50b7ce1f8c0 100644
--- a/tests/ui/consts/const-fn-error.rs
+++ b/tests/ui/consts/const-fn-error.rs
@@ -7,7 +7,6 @@ const fn f(x: usize) -> usize {
         //~| ERROR `for` is not allowed in a `const fn`
         //~| ERROR mutable references are not allowed in constant functions
         //~| ERROR cannot call non-const fn
-        //~| ERROR the trait bound
         sum += i;
     }
     sum
diff --git a/tests/ui/consts/const-fn-error.stderr b/tests/ui/consts/const-fn-error.stderr
index 73d235d6aec..f735b3d53ce 100644
--- a/tests/ui/consts/const-fn-error.stderr
+++ b/tests/ui/consts/const-fn-error.stderr
@@ -5,7 +5,7 @@ LL | /     for i in 0..x {
 LL | |
 LL | |
 LL | |
-...  |
+LL | |
 LL | |         sum += i;
 LL | |     }
    | |_____^
@@ -33,19 +33,6 @@ LL |     for i in 0..x {
    = note: see issue #57349 <https://github.com/rust-lang/rust/issues/57349> for more information
    = help: add `#![feature(const_mut_refs)]` to the crate attributes to enable
 
-error[E0277]: the trait bound `std::ops::Range<usize>: Iterator` is not satisfied
-  --> $DIR/const-fn-error.rs:5:14
-   |
-LL |     for i in 0..x {
-   |              ^^^^ `std::ops::Range<usize>` is not an iterator
-   |
-   = help: the trait `~const Iterator` is not implemented for `std::ops::Range<usize>`
-note: the trait `Iterator` is implemented for `std::ops::Range<usize>`, but that implementation is not `const`
-  --> $DIR/const-fn-error.rs:5:14
-   |
-LL |     for i in 0..x {
-   |              ^^^^
-
 error[E0015]: cannot call non-const fn `<std::ops::Range<usize> as Iterator>::next` in constant functions
   --> $DIR/const-fn-error.rs:5:14
    |
@@ -55,7 +42,7 @@ LL |     for i in 0..x {
    = note: calls in constant functions are limited to constant functions, tuple structs and tuple variants
    = help: add `#![feature(const_trait_impl)]` to the crate attributes to enable
 
-error: aborting due to 5 previous errors
+error: aborting due to 4 previous errors
 
-Some errors have detailed explanations: E0015, E0277, E0658.
+Some errors have detailed explanations: E0015, E0658.
 For more information about an error, try `rustc --explain E0015`.
diff --git a/tests/ui/consts/const-for.rs b/tests/ui/consts/const-for.rs
index ff9c977f794..8db24853558 100644
--- a/tests/ui/consts/const-for.rs
+++ b/tests/ui/consts/const-for.rs
@@ -5,7 +5,6 @@ const _: () = {
     for _ in 0..5 {}
     //~^ error: cannot call
     //~| error: cannot convert
-    //~| error: the trait bound
 };
 
 fn main() {}
diff --git a/tests/ui/consts/const-for.stderr b/tests/ui/consts/const-for.stderr
index 64f2f603b94..3fb9787c0d8 100644
--- a/tests/ui/consts/const-for.stderr
+++ b/tests/ui/consts/const-for.stderr
@@ -9,19 +9,6 @@ note: impl defined here, but it is not `const`
    = 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
 
-error[E0277]: the trait bound `std::ops::Range<i32>: Iterator` is not satisfied
-  --> $DIR/const-for.rs:5:14
-   |
-LL |     for _ in 0..5 {}
-   |              ^^^^ `std::ops::Range<i32>` is not an iterator
-   |
-   = help: the trait `~const Iterator` is not implemented for `std::ops::Range<i32>`
-note: the trait `Iterator` is implemented for `std::ops::Range<i32>`, but that implementation is not `const`
-  --> $DIR/const-for.rs:5:14
-   |
-LL |     for _ in 0..5 {}
-   |              ^^^^
-
 error[E0015]: cannot call non-const fn `<std::ops::Range<i32> as Iterator>::next` in constants
   --> $DIR/const-for.rs:5:14
    |
@@ -31,7 +18,6 @@ LL |     for _ in 0..5 {}
    = note: calls in constants are limited to constant functions, tuple structs and tuple variants
    = help: add `#![feature(const_trait_impl)]` to the crate attributes to enable
 
-error: aborting due to 3 previous errors
+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 E0015`.
diff --git a/tests/ui/consts/const-try.rs b/tests/ui/consts/const-try.rs
index e199fd9ff8a..6b7ba8f1e32 100644
--- a/tests/ui/consts/const-try.rs
+++ b/tests/ui/consts/const-try.rs
@@ -1,4 +1,4 @@
-// check-pass
+// known-bug: #110395
 
 // Demonstrates what's needed to make use of `?` in const contexts.
 
diff --git a/tests/ui/consts/const-try.stderr b/tests/ui/consts/const-try.stderr
new file mode 100644
index 00000000000..37014f9b83f
--- /dev/null
+++ b/tests/ui/consts/const-try.stderr
@@ -0,0 +1,20 @@
+error: const `impl` for trait `FromResidual` which is not marked with `#[const_trait]`
+  --> $DIR/const-try.rs:15:12
+   |
+LL | impl const FromResidual<Error> for TryMe {
+   |            ^^^^^^^^^^^^^^^^^^^
+   |
+   = note: marking a trait with `#[const_trait]` ensures all default method bodies are `const`
+   = note: adding a non-const method body in the future would be a breaking change
+
+error: const `impl` for trait `Try` which is not marked with `#[const_trait]`
+  --> $DIR/const-try.rs:21:12
+   |
+LL | impl const Try for TryMe {
+   |            ^^^
+   |
+   = note: marking a trait with `#[const_trait]` ensures all default method bodies are `const`
+   = note: adding a non-const method body in the future would be a breaking change
+
+error: aborting due to 2 previous errors
+
diff --git a/tests/ui/consts/const_cmp_type_id.rs b/tests/ui/consts/const_cmp_type_id.rs
index f10d1c24f7d..19cee2022ac 100644
--- a/tests/ui/consts/const_cmp_type_id.rs
+++ b/tests/ui/consts/const_cmp_type_id.rs
@@ -1,4 +1,4 @@
-// run-pass
+// known-bug: #110395
 #![feature(const_type_id)]
 #![feature(const_trait_impl)]
 
diff --git a/tests/ui/consts/const_cmp_type_id.stderr b/tests/ui/consts/const_cmp_type_id.stderr
new file mode 100644
index 00000000000..319d2b924a8
--- /dev/null
+++ b/tests/ui/consts/const_cmp_type_id.stderr
@@ -0,0 +1,76 @@
+error[E0277]: can't compare `TypeId` with `TypeId` in const contexts
+  --> $DIR/const_cmp_type_id.rs:8:13
+   |
+LL |     assert!(TypeId::of::<u8>() == TypeId::of::<u8>());
+   |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ no implementation for `TypeId == TypeId`
+   |
+   = 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/const_cmp_type_id.rs:8:13
+   |
+LL |     assert!(TypeId::of::<u8>() == TypeId::of::<u8>());
+   |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error[E0015]: cannot call non-const operator in constant functions
+  --> $DIR/const_cmp_type_id.rs:8:13
+   |
+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 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[E0277]: can't compare `TypeId` with `TypeId` in const contexts
+  --> $DIR/const_cmp_type_id.rs:9:13
+   |
+LL |     assert!(TypeId::of::<()>() != TypeId::of::<u8>());
+   |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ no implementation for `TypeId == TypeId`
+   |
+   = 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/const_cmp_type_id.rs:9:13
+   |
+LL |     assert!(TypeId::of::<()>() != TypeId::of::<u8>());
+   |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error[E0015]: cannot call non-const operator in constant functions
+  --> $DIR/const_cmp_type_id.rs:9:13
+   |
+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 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[E0277]: can't compare `TypeId` with `TypeId` in const contexts
+  --> $DIR/const_cmp_type_id.rs:10:22
+   |
+LL |     const _A: bool = TypeId::of::<u8>() < TypeId::of::<u16>();
+   |                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ no implementation for `TypeId < TypeId` and `TypeId > TypeId`
+   |
+   = help: the trait `~const PartialOrd` is not implemented for `TypeId`
+note: the trait `PartialOrd` is implemented for `TypeId`, but that implementation is not `const`
+  --> $DIR/const_cmp_type_id.rs:10:22
+   |
+LL |     const _A: bool = TypeId::of::<u8>() < TypeId::of::<u16>();
+   |                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error[E0015]: cannot call non-const operator in constants
+  --> $DIR/const_cmp_type_id.rs:10:22
+   |
+LL |     const _A: bool = 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 6 previous errors
+
+Some errors have detailed explanations: E0015, E0277.
+For more information about an error, try `rustc --explain E0015`.
diff --git a/tests/ui/consts/fn_trait_refs.rs b/tests/ui/consts/fn_trait_refs.rs
index b507492970a..be11ac7264a 100644
--- a/tests/ui/consts/fn_trait_refs.rs
+++ b/tests/ui/consts/fn_trait_refs.rs
@@ -1,4 +1,4 @@
-// check-pass
+// known-bug: #110395
 
 #![feature(const_fn_trait_ref_impls)]
 #![feature(fn_traits)]
diff --git a/tests/ui/consts/fn_trait_refs.stderr b/tests/ui/consts/fn_trait_refs.stderr
new file mode 100644
index 00000000000..bfebf66701b
--- /dev/null
+++ b/tests/ui/consts/fn_trait_refs.stderr
@@ -0,0 +1,15 @@
+error[E0635]: unknown feature `const_fn_trait_ref_impls`
+  --> $DIR/fn_trait_refs.rs:3:12
+   |
+LL | #![feature(const_fn_trait_ref_impls)]
+   |            ^^^^^^^^^^^^^^^^^^^^^^^^
+
+error[E0635]: unknown feature `const_cmp`
+  --> $DIR/fn_trait_refs.rs:8:12
+   |
+LL | #![feature(const_cmp)]
+   |            ^^^^^^^^^
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0635`.
diff --git a/tests/ui/consts/issue-25826.rs b/tests/ui/consts/issue-25826.rs
index c340c30a113..f5ed5aeedc3 100644
--- a/tests/ui/consts/issue-25826.rs
+++ b/tests/ui/consts/issue-25826.rs
@@ -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 can't compare
+    //~^ ERROR pointers cannot
     println!("{}", A);
 }
diff --git a/tests/ui/consts/issue-25826.stderr b/tests/ui/consts/issue-25826.stderr
index 905c5ee6eb4..780edd2149f 100644
--- a/tests/ui/consts/issue-25826.stderr
+++ b/tests/ui/consts/issue-25826.stderr
@@ -1,16 +1,10 @@
-error[E0277]: can't compare `*const ()` with `*const ()` in const contexts
-  --> $DIR/issue-25826.rs:3:52
+error: pointers cannot be reliably compared during const eval
+  --> $DIR/issue-25826.rs:3:30
    |
 LL |     const A: bool = unsafe { id::<u8> as *const () < id::<u16> as *const () };
-   |                                                    ^ no implementation for `*const () < *const ()` and `*const () > *const ()`
+   |                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |
-   = 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 () };
-   |                                                    ^
+   = note: see issue #53020 <https://github.com/rust-lang/rust/issues/53020> for more information
 
 error: aborting due to previous error
 
-For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/consts/issue-73976-monomorphic.rs b/tests/ui/consts/issue-73976-monomorphic.rs
index addcc1eaab6..a3b9510036d 100644
--- a/tests/ui/consts/issue-73976-monomorphic.rs
+++ b/tests/ui/consts/issue-73976-monomorphic.rs
@@ -1,4 +1,4 @@
-// check-pass
+// known-bug: #110395
 //
 // This test is complement to the test in issue-73976-polymorphic.rs.
 // In that test we ensure that polymorphic use of type_id and type_name in patterns
diff --git a/tests/ui/consts/issue-73976-monomorphic.stderr b/tests/ui/consts/issue-73976-monomorphic.stderr
new file mode 100644
index 00000000000..95ab78b1b23
--- /dev/null
+++ b/tests/ui/consts/issue-73976-monomorphic.stderr
@@ -0,0 +1,28 @@
+error[E0277]: can't compare `TypeId` with `TypeId` in const contexts
+  --> $DIR/issue-73976-monomorphic.rs:21:5
+   |
+LL |     GetTypeId::<T>::VALUE == GetTypeId::<usize>::VALUE
+   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ no implementation for `TypeId == TypeId`
+   |
+   = 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-73976-monomorphic.rs:21:5
+   |
+LL |     GetTypeId::<T>::VALUE == GetTypeId::<usize>::VALUE
+   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error[E0015]: cannot call non-const operator in constant functions
+  --> $DIR/issue-73976-monomorphic.rs:21:5
+   |
+LL |     GetTypeId::<T>::VALUE == GetTypeId::<usize>::VALUE
+   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+   |
+note: impl defined here, but it is not `const`
+  --> $SRC_DIR/core/src/any.rs:LL:COL
+   = note: calls in constant functions are limited to constant functions, tuple structs and tuple variants
+   = note: this error originates in the derive macro `PartialEq` (in Nightly builds, run with -Z macro-backtrace for more info)
+
+error: aborting due to 2 previous errors
+
+Some errors have detailed explanations: E0015, E0277.
+For more information about an error, try `rustc --explain E0015`.
diff --git a/tests/ui/consts/issue-94675.rs b/tests/ui/consts/issue-94675.rs
index ce21ebdb9ac..38c8129b8cf 100644
--- a/tests/ui/consts/issue-94675.rs
+++ b/tests/ui/consts/issue-94675.rs
@@ -7,8 +7,9 @@ struct Foo<'a> {
 impl<'a> Foo<'a> {
     const fn spam(&mut self, baz: &mut Vec<u32>) {
         self.bar[0] = baz.len();
-        //~^ the trait bound `Vec<usize>: ~const Index<_>` is not satisfied
-        //~| the trait bound `Vec<usize>: ~const IndexMut<usize>` is not satisfied
+        //~^ ERROR: cannot call
+        //~| ERROR: cannot call
+        //~| ERROR: the trait bound
     }
 }
 
diff --git a/tests/ui/consts/issue-94675.stderr b/tests/ui/consts/issue-94675.stderr
index f4683f7f536..b4e5db44e71 100644
--- a/tests/ui/consts/issue-94675.stderr
+++ b/tests/ui/consts/issue-94675.stderr
@@ -1,15 +1,10 @@
-error[E0277]: the trait bound `Vec<usize>: ~const Index<_>` is not satisfied
-  --> $DIR/issue-94675.rs:9:9
+error[E0015]: cannot call non-const fn `Vec::<u32>::len` in constant functions
+  --> $DIR/issue-94675.rs:9:27
    |
 LL |         self.bar[0] = baz.len();
-   |         ^^^^^^^^^^^ vector indices are of type `usize` or ranges of `usize`
-   |
-   = help: the trait `~const Index<_>` is not implemented for `Vec<usize>`
-note: the trait `Index<_>` is implemented for `Vec<usize>`, but that implementation is not `const`
-  --> $DIR/issue-94675.rs:9:9
+   |                           ^^^^^
    |
-LL |         self.bar[0] = baz.len();
-   |         ^^^^^^^^^^^
+   = note: calls in constant functions are limited to constant functions, tuple structs and tuple variants
 
 error[E0277]: the trait bound `Vec<usize>: ~const IndexMut<usize>` is not satisfied
   --> $DIR/issue-94675.rs:9:9
@@ -24,6 +19,17 @@ note: the trait `IndexMut<usize>` is implemented for `Vec<usize>`, but that impl
 LL |         self.bar[0] = baz.len();
    |         ^^^^^^^^^^^
 
-error: aborting due to 2 previous errors
+error[E0015]: cannot call non-const operator in constant functions
+  --> $DIR/issue-94675.rs:9:9
+   |
+LL |         self.bar[0] = baz.len();
+   |         ^^^^^^^^^^^
+   |
+note: impl defined here, but it is not `const`
+  --> $SRC_DIR/alloc/src/vec/mod.rs:LL:COL
+   = note: calls in constant functions are limited to constant functions, tuple structs and tuple variants
+
+error: aborting due to 3 previous errors
 
-For more information about this error, try `rustc --explain E0277`.
+Some errors have detailed explanations: E0015, E0277.
+For more information about an error, try `rustc --explain E0015`.
diff --git a/tests/ui/consts/min_const_fn/cmp_fn_pointers.rs b/tests/ui/consts/min_const_fn/cmp_fn_pointers.rs
index 9a2775688c6..c5990a7f515 100644
--- a/tests/ui/consts/min_const_fn/cmp_fn_pointers.rs
+++ b/tests/ui/consts/min_const_fn/cmp_fn_pointers.rs
@@ -1,6 +1,6 @@
 const fn cmp(x: fn(), y: fn()) -> bool {
     unsafe { x == y }
-    //~^ ERROR can't compare
+    //~^ ERROR pointers cannot
 }
 
 fn main() {}
diff --git a/tests/ui/consts/min_const_fn/cmp_fn_pointers.stderr b/tests/ui/consts/min_const_fn/cmp_fn_pointers.stderr
index 8a1b20a3345..3845068d841 100644
--- a/tests/ui/consts/min_const_fn/cmp_fn_pointers.stderr
+++ b/tests/ui/consts/min_const_fn/cmp_fn_pointers.stderr
@@ -1,16 +1,10 @@
-error[E0277]: can't compare `fn()` with `_` in const contexts
-  --> $DIR/cmp_fn_pointers.rs:2:16
+error: pointers cannot be reliably compared during const eval
+  --> $DIR/cmp_fn_pointers.rs:2:14
    |
 LL |     unsafe { x == y }
-   |                ^^ no implementation for `fn() == _`
+   |              ^^^^^^
    |
-   = 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 }
-   |                ^^
+   = note: see issue #53020 <https://github.com/rust-lang/rust/issues/53020> for more information
 
 error: aborting due to previous error
 
-For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/consts/promoted_const_call.rs b/tests/ui/consts/promoted_const_call.rs
index 30ae730535c..dae6cafaebb 100644
--- a/tests/ui/consts/promoted_const_call.rs
+++ b/tests/ui/consts/promoted_const_call.rs
@@ -1,7 +1,9 @@
 #![feature(const_mut_refs)]
 #![feature(const_trait_impl)]
+
 struct Panic;
 impl const Drop for Panic { fn drop(&mut self) { panic!(); } }
+
 pub const fn id<T>(x: T) -> T { x }
 pub const C: () = {
     let _: &'static _ = &id(&Panic);
diff --git a/tests/ui/consts/promoted_const_call.stderr b/tests/ui/consts/promoted_const_call.stderr
index 83cc16f6f94..1cbd8cbe699 100644
--- a/tests/ui/consts/promoted_const_call.stderr
+++ b/tests/ui/consts/promoted_const_call.stderr
@@ -1,5 +1,5 @@
 error[E0716]: temporary value dropped while borrowed
-  --> $DIR/promoted_const_call.rs:7:26
+  --> $DIR/promoted_const_call.rs:9:26
    |
 LL |     let _: &'static _ = &id(&Panic);
    |            ----------    ^^^^^^^^^^ creates a temporary value which is freed while still in use
@@ -10,7 +10,7 @@ LL | };
    | - temporary value is freed at the end of this statement
 
 error[E0716]: temporary value dropped while borrowed
-  --> $DIR/promoted_const_call.rs:7:30
+  --> $DIR/promoted_const_call.rs:9:30
    |
 LL |     let _: &'static _ = &id(&Panic);
    |            ----------        ^^^^^ - temporary value is freed at the end of this statement
@@ -19,7 +19,7 @@ LL |     let _: &'static _ = &id(&Panic);
    |            type annotation requires that borrow lasts for `'static`
 
 error[E0716]: temporary value dropped while borrowed
-  --> $DIR/promoted_const_call.rs:13:26
+  --> $DIR/promoted_const_call.rs:15:26
    |
 LL |     let _: &'static _ = &id(&Panic);
    |            ----------    ^^^^^^^^^^ creates a temporary value which is freed while still in use
@@ -30,7 +30,7 @@ LL | }
    | - temporary value is freed at the end of this statement
 
 error[E0716]: temporary value dropped while borrowed
-  --> $DIR/promoted_const_call.rs:13:30
+  --> $DIR/promoted_const_call.rs:15:30
    |
 LL |     let _: &'static _ = &id(&Panic);
    |            ----------        ^^^^^ - temporary value is freed at the end of this statement
@@ -39,7 +39,7 @@ LL |     let _: &'static _ = &id(&Panic);
    |            type annotation requires that borrow lasts for `'static`
 
 error[E0716]: temporary value dropped while borrowed
-  --> $DIR/promoted_const_call.rs:16:26
+  --> $DIR/promoted_const_call.rs:18:26
    |
 LL |     let _: &'static _ = &&(Panic, 0).1;
    |            ----------    ^^^^^^^^^^^^^ creates a temporary value which is freed while still in use
@@ -50,7 +50,7 @@ LL | }
    | - temporary value is freed at the end of this statement
 
 error[E0716]: temporary value dropped while borrowed
-  --> $DIR/promoted_const_call.rs:16:27
+  --> $DIR/promoted_const_call.rs:18:27
    |
 LL |     let _: &'static _ = &&(Panic, 0).1;
    |            ----------     ^^^^^^^^^^ creates a temporary value which is freed while still in use
diff --git a/tests/ui/consts/rustc-impl-const-stability.rs b/tests/ui/consts/rustc-impl-const-stability.rs
index 0c18efa0a02..a1a741e80e5 100644
--- a/tests/ui/consts/rustc-impl-const-stability.rs
+++ b/tests/ui/consts/rustc-impl-const-stability.rs
@@ -1,4 +1,4 @@
-// check-pass
+// known-bug: #110395
 
 #![crate_type = "lib"]
 #![feature(staged_api)]
diff --git a/tests/ui/consts/rustc-impl-const-stability.stderr b/tests/ui/consts/rustc-impl-const-stability.stderr
new file mode 100644
index 00000000000..e6930da71ec
--- /dev/null
+++ b/tests/ui/consts/rustc-impl-const-stability.stderr
@@ -0,0 +1,11 @@
+error: const `impl` for trait `Default` which is not marked with `#[const_trait]`
+  --> $DIR/rustc-impl-const-stability.rs:15:12
+   |
+LL | impl const Default for Data {
+   |            ^^^^^^^
+   |
+   = note: marking a trait with `#[const_trait]` ensures all default method bodies are `const`
+   = note: adding a non-const method body in the future would be a breaking change
+
+error: aborting due to previous error
+
diff --git a/tests/ui/consts/try-operator.rs b/tests/ui/consts/try-operator.rs
index fe43b132cbd..ed69f492fb9 100644
--- a/tests/ui/consts/try-operator.rs
+++ b/tests/ui/consts/try-operator.rs
@@ -1,4 +1,4 @@
-// run-pass
+// known-bug: #110395
 
 #![feature(try_trait_v2)]
 #![feature(const_trait_impl)]
diff --git a/tests/ui/consts/try-operator.stderr b/tests/ui/consts/try-operator.stderr
new file mode 100644
index 00000000000..f6a651c5e66
--- /dev/null
+++ b/tests/ui/consts/try-operator.stderr
@@ -0,0 +1,9 @@
+error[E0635]: unknown feature `const_convert`
+  --> $DIR/try-operator.rs:6:12
+   |
+LL | #![feature(const_convert)]
+   |            ^^^^^^^^^^^^^
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0635`.