about summary refs log tree commit diff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/assembly/cmse.rs8
-rw-r--r--tests/crashes/126269.rs12
-rw-r--r--tests/crashes/126982.rs18
-rw-r--r--tests/crashes/130104.rs2
-rw-r--r--tests/crashes/131048.rs7
-rw-r--r--tests/crashes/132142.rs2
-rw-r--r--tests/crashes/134217.rs9
-rw-r--r--tests/crashes/138265.rs12
-rw-r--r--tests/rustdoc-ui/lints/redundant_explicit_links-expansion.rs40
-rw-r--r--tests/rustdoc-ui/lints/redundant_explicit_links-expansion.stderr39
-rw-r--r--tests/ui/SUMMARY.md10
-rw-r--r--tests/ui/abi/unsupported-abi-transmute.rs15
-rw-r--r--tests/ui/abi/unsupported-abi-transmute.stderr8
-rw-r--r--tests/ui/abi/unsupported-in-impls.rs36
-rw-r--r--tests/ui/abi/unsupported-in-impls.stderr27
-rw-r--r--tests/ui/abi/unsupported-varargs-fnptr.rs1
-rw-r--r--tests/ui/abi/unsupported-varargs-fnptr.stderr2
-rw-r--r--tests/ui/abi/unsupported.aarch64.stderr50
-rw-r--r--tests/ui/abi/unsupported.arm.stderr50
-rw-r--r--tests/ui/abi/unsupported.i686.stderr24
-rw-r--r--tests/ui/abi/unsupported.riscv32.stderr50
-rw-r--r--tests/ui/abi/unsupported.riscv64.stderr50
-rw-r--r--tests/ui/abi/unsupported.rs34
-rw-r--r--tests/ui/abi/unsupported.x64.stderr50
-rw-r--r--tests/ui/abi/unsupported.x64_win.stderr50
-rw-r--r--tests/ui/borrowck/borrowck-move-by-capture.stderr2
-rw-r--r--tests/ui/borrowck/borrowck-move-moved-value-into-closure.stderr6
-rw-r--r--tests/ui/cmse-nonsecure/cmse-nonsecure-call/callback-as-argument.rs6
-rw-r--r--tests/ui/cmse-nonsecure/cmse-nonsecure-call/gate_test.rs4
-rw-r--r--tests/ui/cmse-nonsecure/cmse-nonsecure-call/gate_test.stderr14
-rw-r--r--tests/ui/cmse-nonsecure/cmse-nonsecure-call/generics.rs28
-rw-r--r--tests/ui/cmse-nonsecure/cmse-nonsecure-call/generics.stderr70
-rw-r--r--tests/ui/cmse-nonsecure/cmse-nonsecure-call/params-via-stack.rs12
-rw-r--r--tests/ui/cmse-nonsecure/cmse-nonsecure-call/params-via-stack.stderr50
-rw-r--r--tests/ui/cmse-nonsecure/cmse-nonsecure-call/return-via-stack.rs20
-rw-r--r--tests/ui/cmse-nonsecure/cmse-nonsecure-call/return-via-stack.stderr90
-rw-r--r--tests/ui/cmse-nonsecure/cmse-nonsecure-call/via-registers.rs34
-rw-r--r--tests/ui/cmse-nonsecure/cmse-nonsecure-call/wrong-abi-location-1.rs4
-rw-r--r--tests/ui/cmse-nonsecure/cmse-nonsecure-call/wrong-abi-location-1.stderr6
-rw-r--r--tests/ui/cmse-nonsecure/cmse-nonsecure-call/wrong-abi-location-2.rs4
-rw-r--r--tests/ui/cmse-nonsecure/cmse-nonsecure-call/wrong-abi-location-2.stderr4
-rw-r--r--tests/ui/cmse-nonsecure/cmse-nonsecure-entry/gate_test.rs2
-rw-r--r--tests/ui/cmse-nonsecure/cmse-nonsecure-entry/gate_test.stderr12
-rw-r--r--tests/ui/cmse-nonsecure/cmse-nonsecure-entry/generics.rs24
-rw-r--r--tests/ui/cmse-nonsecure/cmse-nonsecure-entry/generics.stderr50
-rw-r--r--tests/ui/cmse-nonsecure/cmse-nonsecure-entry/params-via-stack.rs10
-rw-r--r--tests/ui/cmse-nonsecure/cmse-nonsecure-entry/params-via-stack.stderr50
-rw-r--r--tests/ui/cmse-nonsecure/cmse-nonsecure-entry/return-via-stack.rs18
-rw-r--r--tests/ui/cmse-nonsecure/cmse-nonsecure-entry/return-via-stack.stderr90
-rw-r--r--tests/ui/cmse-nonsecure/cmse-nonsecure-entry/trustzone-only.aarch64.stderr6
-rw-r--r--tests/ui/cmse-nonsecure/cmse-nonsecure-entry/trustzone-only.rs2
-rw-r--r--tests/ui/cmse-nonsecure/cmse-nonsecure-entry/trustzone-only.thumb7.stderr6
-rw-r--r--tests/ui/cmse-nonsecure/cmse-nonsecure-entry/trustzone-only.x86.stderr6
-rw-r--r--tests/ui/cmse-nonsecure/cmse-nonsecure-entry/via-registers.rs32
-rw-r--r--tests/ui/coercion/invalid-blanket-coerce-unsized-impl.rs13
-rw-r--r--tests/ui/coercion/invalid-blanket-coerce-unsized-impl.stderr19
-rw-r--r--tests/ui/defaults-well-formedness.rs27
-rw-r--r--tests/ui/deprecation/deprecated_main_function.rs (renamed from tests/ui/deprecation-in-force-unstable.rs)2
-rw-r--r--tests/ui/deref-rc.rs8
-rw-r--r--tests/ui/deref.rs6
-rw-r--r--tests/ui/derive-uninhabited-enum-38885.rs19
-rw-r--r--tests/ui/derives/derive-debug-uninhabited-enum.rs23
-rw-r--r--tests/ui/derives/derive-debug-uninhabited-enum.stderr (renamed from tests/ui/derive-uninhabited-enum-38885.stderr)2
-rw-r--r--tests/ui/destructure-trait-ref.rs46
-rw-r--r--tests/ui/diverging-fallback-method-chain.rs20
-rw-r--r--tests/ui/diverging-fallback-option.rs14
-rw-r--r--tests/ui/expr/if/if-else-chain-missing-else.stderr21
-rw-r--r--tests/ui/expr/if/if-else-type-mismatch.stderr17
-rw-r--r--tests/ui/generics/default-type-params-well-formedness.rs50
-rw-r--r--tests/ui/inference/deref-suggestion.stderr27
-rw-r--r--tests/ui/moves/moves-based-on-type-capture-clause-bad.fixed11
-rw-r--r--tests/ui/moves/moves-based-on-type-capture-clause-bad.rs1
-rw-r--r--tests/ui/moves/moves-based-on-type-capture-clause-bad.stderr8
-rw-r--r--tests/ui/moves/no-capture-arc.rs (renamed from tests/ui/no-capture-arc.rs)0
-rw-r--r--tests/ui/moves/no-capture-arc.stderr (renamed from tests/ui/no-capture-arc.stderr)6
-rw-r--r--tests/ui/moves/no-reuse-move-arc.fixed17
-rw-r--r--tests/ui/moves/no-reuse-move-arc.rs (renamed from tests/ui/no-reuse-move-arc.rs)1
-rw-r--r--tests/ui/moves/no-reuse-move-arc.stderr (renamed from tests/ui/no-reuse-move-arc.stderr)8
-rw-r--r--tests/ui/never_type/never-type-fallback-option.rs22
-rw-r--r--tests/ui/print-calling-conventions.stdout4
-rw-r--r--tests/ui/stats/input-stats.rs5
-rw-r--r--tests/ui/stats/input-stats.stderr12
-rw-r--r--tests/ui/suggestions/option-content-move3.stderr2
-rw-r--r--tests/ui/suggestions/return-bindings.stderr16
-rw-r--r--tests/ui/traits/trait-object-destructure.rs29
-rw-r--r--tests/ui/traits/trait-object-destructure.stderr (renamed from tests/ui/destructure-trait-ref.stderr)12
-rw-r--r--tests/ui/typeck/consider-borrowing-141810-1.stderr25
-rw-r--r--tests/ui/typeck/consider-borrowing-141810-2.stderr21
-rw-r--r--tests/ui/typeck/consider-borrowing-141810-3.stderr21
-rw-r--r--tests/ui/typeck/inference-method-chain-diverging-fallback.rs19
90 files changed, 910 insertions, 912 deletions
diff --git a/tests/assembly/cmse.rs b/tests/assembly/cmse.rs
index 2984df92225..a68ee99eac6 100644
--- a/tests/assembly/cmse.rs
+++ b/tests/assembly/cmse.rs
@@ -6,7 +6,7 @@
 //@ [hard] needs-llvm-components: arm
 //@ [soft] needs-llvm-components: arm
 #![crate_type = "lib"]
-#![feature(abi_c_cmse_nonsecure_call, cmse_nonsecure_entry, no_core, lang_items)]
+#![feature(abi_cmse_nonsecure_call, cmse_nonsecure_entry, no_core, lang_items)]
 #![no_core]
 
 extern crate minicore;
@@ -53,7 +53,7 @@ use minicore::*;
 // Branch back to non-secure side
 // CHECK: bxns lr
 #[no_mangle]
-pub extern "C-cmse-nonsecure-entry" fn entry_point() -> i64 {
+pub extern "cmse-nonsecure-entry" fn entry_point() -> i64 {
     0
 }
 
@@ -95,8 +95,6 @@ pub extern "C-cmse-nonsecure-entry" fn entry_point() -> i64 {
 // Call to non-secure
 // CHECK: blxns r12
 #[no_mangle]
-pub fn call_nonsecure(
-    f: unsafe extern "C-cmse-nonsecure-call" fn(u32, u32, u32, u32) -> u64,
-) -> u64 {
+pub fn call_nonsecure(f: unsafe extern "cmse-nonsecure-call" fn(u32, u32, u32, u32) -> u64) -> u64 {
     unsafe { f(0, 1, 2, 3) }
 }
diff --git a/tests/crashes/126269.rs b/tests/crashes/126269.rs
deleted file mode 100644
index ca4b76eb930..00000000000
--- a/tests/crashes/126269.rs
+++ /dev/null
@@ -1,12 +0,0 @@
-//@ known-bug: rust-lang/rust#126269
-#![feature(coerce_unsized)]
-
-pub enum Foo<T> {
-    Bar([T; usize::MAX]),
-}
-
-use std::ops::CoerceUnsized;
-
-impl<T, U> CoerceUnsized<U> for T {}
-
-fn main() {}
diff --git a/tests/crashes/126982.rs b/tests/crashes/126982.rs
deleted file mode 100644
index 8522d9415eb..00000000000
--- a/tests/crashes/126982.rs
+++ /dev/null
@@ -1,18 +0,0 @@
-//@ known-bug: rust-lang/rust#126982
-
-#![feature(coerce_unsized)]
-use std::ops::CoerceUnsized;
-
-struct Foo<T: ?Sized> {
-    a: T,
-}
-
-impl<T, U> CoerceUnsized<U> for Foo<T> {}
-
-union U {
-    a: usize,
-}
-
-const C: U = Foo { a: 10 };
-
-fn main() {}
diff --git a/tests/crashes/130104.rs b/tests/crashes/130104.rs
index 0ffc21ad360..b961108c923 100644
--- a/tests/crashes/130104.rs
+++ b/tests/crashes/130104.rs
@@ -2,5 +2,5 @@
 
 fn main() {
     let non_secure_function =
-        core::mem::transmute::<fn() -> _, extern "C-cmse-nonsecure-call" fn() -> _>;
+        core::mem::transmute::<fn() -> _, extern "cmse-nonsecure-call" fn() -> _>;
 }
diff --git a/tests/crashes/131048.rs b/tests/crashes/131048.rs
deleted file mode 100644
index d57e9921a8a..00000000000
--- a/tests/crashes/131048.rs
+++ /dev/null
@@ -1,7 +0,0 @@
-//@ known-bug: #131048
-
-impl<A> std::ops::CoerceUnsized<A> for A {}
-
-fn main() {
-    format_args!("Hello, world!");
-}
diff --git a/tests/crashes/132142.rs b/tests/crashes/132142.rs
index 9a026f3bca7..813bf0bf0a8 100644
--- a/tests/crashes/132142.rs
+++ b/tests/crashes/132142.rs
@@ -1,3 +1,3 @@
 //@ known-bug: #132142
 
-async extern "C-cmse-nonsecure-entry" fn fun(...) {}
+async extern "cmse-nonsecure-entry" fn fun(...) {}
diff --git a/tests/crashes/134217.rs b/tests/crashes/134217.rs
deleted file mode 100644
index 1b14c660e8b..00000000000
--- a/tests/crashes/134217.rs
+++ /dev/null
@@ -1,9 +0,0 @@
-//@ known-bug: #134217
-
-impl<A> std::ops::CoerceUnsized<A> for A {}
-
-fn main() {
-    if let _ = true
-        && true
-    {}
-}
diff --git a/tests/crashes/138265.rs b/tests/crashes/138265.rs
deleted file mode 100644
index f6c8ea74889..00000000000
--- a/tests/crashes/138265.rs
+++ /dev/null
@@ -1,12 +0,0 @@
-//@ known-bug: #138265
-
-#![feature(coerce_unsized)]
-#![crate_type = "lib"]
-impl<A> std::ops::CoerceUnsized<A> for A {}
-pub fn f() {
-    [0; {
-        let mut c = &0;
-        c = &0;
-        0
-    }]
-}
diff --git a/tests/rustdoc-ui/lints/redundant_explicit_links-expansion.rs b/tests/rustdoc-ui/lints/redundant_explicit_links-expansion.rs
new file mode 100644
index 00000000000..2e42a0a5c5d
--- /dev/null
+++ b/tests/rustdoc-ui/lints/redundant_explicit_links-expansion.rs
@@ -0,0 +1,40 @@
+// This is a regression test for <https://github.com/rust-lang/rust/issues/141553>.
+// If the link is generated from expansion, we should not emit the lint.
+
+#![deny(rustdoc::redundant_explicit_links)]
+
+macro_rules! mac1 {
+    () => {
+        "provided by a [`BufferProvider`](crate::BufferProvider)."
+    };
+}
+
+macro_rules! mac2 {
+    () => {
+        #[doc = mac1!()]
+        pub struct BufferProvider;
+    }
+}
+
+macro_rules! mac3 {
+    () => {
+        "Provided by"
+    };
+}
+
+// Should not lint.
+#[doc = mac1!()]
+pub struct Foo;
+
+// Should not lint.
+mac2!{}
+
+#[doc = "provided by a [`BufferProvider`](crate::BufferProvider)."]
+/// bla
+//~^^ ERROR: redundant_explicit_links
+pub struct Bla;
+
+#[doc = mac3!()]
+/// a [`BufferProvider`](crate::BufferProvider).
+//~^ ERROR: redundant_explicit_links
+pub fn f() {}
diff --git a/tests/rustdoc-ui/lints/redundant_explicit_links-expansion.stderr b/tests/rustdoc-ui/lints/redundant_explicit_links-expansion.stderr
new file mode 100644
index 00000000000..a81931fb073
--- /dev/null
+++ b/tests/rustdoc-ui/lints/redundant_explicit_links-expansion.stderr
@@ -0,0 +1,39 @@
+error: redundant explicit link target
+  --> $DIR/redundant_explicit_links-expansion.rs:32:43
+   |
+LL | #[doc = "provided by a [`BufferProvider`](crate::BufferProvider)."]
+   |                         ----------------  ^^^^^^^^^^^^^^^^^^^^^ explicit target is redundant
+   |                         |
+   |                         because label contains path that resolves to same destination
+   |
+   = note: when a link's destination is not specified,
+           the label is used to resolve intra-doc links
+note: the lint level is defined here
+  --> $DIR/redundant_explicit_links-expansion.rs:4:9
+   |
+LL | #![deny(rustdoc::redundant_explicit_links)]
+   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+help: remove explicit link target
+   |
+LL - #[doc = "provided by a [`BufferProvider`](crate::BufferProvider)."]
+LL + #[doc = "provided by a [`BufferProvider`]."]
+   |
+
+error: redundant explicit link target
+  --> $DIR/redundant_explicit_links-expansion.rs:38:26
+   |
+LL | /// a [`BufferProvider`](crate::BufferProvider).
+   |        ----------------  ^^^^^^^^^^^^^^^^^^^^^ explicit target is redundant
+   |        |
+   |        because label contains path that resolves to same destination
+   |
+   = note: when a link's destination is not specified,
+           the label is used to resolve intra-doc links
+help: remove explicit link target
+   |
+LL - /// a [`BufferProvider`](crate::BufferProvider).
+LL + /// a [`BufferProvider`].
+   |
+
+error: aborting due to 2 previous errors
+
diff --git a/tests/ui/SUMMARY.md b/tests/ui/SUMMARY.md
index d807e38dab2..72b673dd50a 100644
--- a/tests/ui/SUMMARY.md
+++ b/tests/ui/SUMMARY.md
@@ -8,6 +8,8 @@ For now, only immediate subdirectories under `tests/ui/` are described, but thes
 
 These tests deal with *Application Binary Interfaces* (ABI), mostly relating to function name mangling (and the `#[no_mangle]` attribute), calling conventions, or compiler flags which affect ABI.
 
+Tests for unsupported ABIs can be made cross-platform by using the `extern "rust-invalid"` ABI, which is considered unsupported on every platform.
+
 ## `tests/ui/allocator`
 
 These tests exercise `#![feature(allocator_api)]` and the `#[global_allocator]` attribute.
@@ -208,14 +210,14 @@ Tests targeted at how we deduce the types of closure arguments. This process is
 
 Any closure-focused tests that does not fit in the other more specific closure subdirectories belong here. E.g. syntax, `move`, lifetimes.
 
-## `tests/ui/cmse-nonsecure/`: `C-cmse-nonsecure` ABIs
+## `tests/ui/cmse-nonsecure/`: `cmse-nonsecure` ABIs
 
-Tests for `cmse_nonsecure_entry` and `abi_c_cmse_nonsecure_call` ABIs. Used specifically for the Armv8-M architecture, the former marks Secure functions with additional behaviours, such as adding a special symbol and constraining the number of parameters, while the latter alters function pointers to indicate they are non-secure and to handle them differently than usual.
+Tests for `extern "cmse-nonsecure-call"` and `extern "cmse-nonsecure-entry"` functions. Used specifically for the Armv8-M architecture, the former marks Secure functions with additional behaviours, such as adding a special symbol and constraining the number of parameters, while the latter alters function pointers to indicate they are non-secure and to handle them differently than usual.
 
 See:
 
-- [`cmse_nonsecure_entry` | The Unstable book](https://doc.rust-lang.org/unstable-book/language-features/cmse-nonsecure-entry.html)
-- [`abi_c_cmse_nonsecure_call` | The Unstable book](https://doc.rust-lang.org/beta/unstable-book/language-features/abi-c-cmse-nonsecure-call.html)
+- [`cmse_nonsecure_entry` | The Unstable book](https://doc.rust-lang.org/nightly/unstable-book/language-features/cmse-nonsecure-entry.html)
+- [`abi_cmse_nonsecure_call` | The Unstable book](https://doc.rust-lang.org/nightly/unstable-book/language-features/abi-cmse-nonsecure-call.html)
 
 ## `tests/ui/codegen/`: Code Generation
 
diff --git a/tests/ui/abi/unsupported-abi-transmute.rs b/tests/ui/abi/unsupported-abi-transmute.rs
index 31501bc6d10..42aa180e1fd 100644
--- a/tests/ui/abi/unsupported-abi-transmute.rs
+++ b/tests/ui/abi/unsupported-abi-transmute.rs
@@ -1,15 +1,12 @@
-//@ add-core-stubs
-//@ compile-flags: --crate-type=lib --target x86_64-unknown-none
-//@ needs-llvm-components: x86
+// Check we error before unsupported ABIs reach codegen stages.
+
 //@ edition: 2018
-#![no_core]
-#![feature(no_core, lang_items)]
-extern crate minicore;
-use minicore::*;
+//@ compile-flags: --crate-type=lib
+#![feature(rustc_attrs)]
 
-// Check we error before unsupported ABIs reach codegen stages.
+use core::mem;
 
 fn anything() {
-    let a = unsafe { mem::transmute::<usize, extern "thiscall" fn(i32)>(4) }(2);
+    let a = unsafe { mem::transmute::<usize, extern "rust-invalid" fn(i32)>(4) }(2);
     //~^ ERROR: is not a supported ABI for the current target [E0570]
 }
diff --git a/tests/ui/abi/unsupported-abi-transmute.stderr b/tests/ui/abi/unsupported-abi-transmute.stderr
index 63056180c71..f1d202b1a1c 100644
--- a/tests/ui/abi/unsupported-abi-transmute.stderr
+++ b/tests/ui/abi/unsupported-abi-transmute.stderr
@@ -1,8 +1,8 @@
-error[E0570]: "thiscall" is not a supported ABI for the current target
-  --> $DIR/unsupported-abi-transmute.rs:13:53
+error[E0570]: "rust-invalid" is not a supported ABI for the current target
+  --> $DIR/unsupported-abi-transmute.rs:10:53
    |
-LL |     let a = unsafe { mem::transmute::<usize, extern "thiscall" fn(i32)>(4) }(2);
-   |                                                     ^^^^^^^^^^
+LL |     let a = unsafe { mem::transmute::<usize, extern "rust-invalid" fn(i32)>(4) }(2);
+   |                                                     ^^^^^^^^^^^^^^
 
 error: aborting due to 1 previous error
 
diff --git a/tests/ui/abi/unsupported-in-impls.rs b/tests/ui/abi/unsupported-in-impls.rs
new file mode 100644
index 00000000000..71797954865
--- /dev/null
+++ b/tests/ui/abi/unsupported-in-impls.rs
@@ -0,0 +1,36 @@
+// Test for https://github.com/rust-lang/rust/issues/86232
+// Due to AST-to-HIR lowering nuances, we used to allow unsupported ABIs to "leak" into the HIR
+// without being checked, as we would check after generating the ExternAbi.
+// Checking afterwards only works if we examine every HIR construct that contains an ExternAbi,
+// and those may be very different in HIR, even if they read the same in source.
+// This made it very easy to make mistakes.
+//
+// Here we test that an unsupported ABI in various impl-related positions will be rejected,
+// both in the original declarations and the actual implementations.
+
+#![feature(rustc_attrs)]
+//@ compile-flags: --crate-type lib
+
+pub struct FnPtrBearer {
+    pub ptr: extern "rust-invalid" fn(),
+    //~^ ERROR: is not a supported ABI
+}
+
+impl FnPtrBearer {
+    pub extern "rust-invalid" fn inherent_fn(self) {
+        //~^ ERROR: is not a supported ABI
+        (self.ptr)()
+    }
+}
+
+pub trait Trait {
+    extern "rust-invalid" fn trait_fn(self);
+    //~^ ERROR: is not a supported ABI
+}
+
+impl Trait for FnPtrBearer {
+    extern "rust-invalid" fn trait_fn(self) {
+        //~^ ERROR: is not a supported ABI
+        self.inherent_fn()
+    }
+}
diff --git a/tests/ui/abi/unsupported-in-impls.stderr b/tests/ui/abi/unsupported-in-impls.stderr
new file mode 100644
index 00000000000..d7a188f8a04
--- /dev/null
+++ b/tests/ui/abi/unsupported-in-impls.stderr
@@ -0,0 +1,27 @@
+error[E0570]: "rust-invalid" is not a supported ABI for the current target
+  --> $DIR/unsupported-in-impls.rs:15:21
+   |
+LL |     pub ptr: extern "rust-invalid" fn(),
+   |                     ^^^^^^^^^^^^^^
+
+error[E0570]: "rust-invalid" is not a supported ABI for the current target
+  --> $DIR/unsupported-in-impls.rs:20:16
+   |
+LL |     pub extern "rust-invalid" fn inherent_fn(self) {
+   |                ^^^^^^^^^^^^^^
+
+error[E0570]: "rust-invalid" is not a supported ABI for the current target
+  --> $DIR/unsupported-in-impls.rs:27:12
+   |
+LL |     extern "rust-invalid" fn trait_fn(self);
+   |            ^^^^^^^^^^^^^^
+
+error[E0570]: "rust-invalid" is not a supported ABI for the current target
+  --> $DIR/unsupported-in-impls.rs:32:12
+   |
+LL |     extern "rust-invalid" fn trait_fn(self) {
+   |            ^^^^^^^^^^^^^^
+
+error: aborting due to 4 previous errors
+
+For more information about this error, try `rustc --explain E0570`.
diff --git a/tests/ui/abi/unsupported-varargs-fnptr.rs b/tests/ui/abi/unsupported-varargs-fnptr.rs
index 733e16c7e4b..1d23916d039 100644
--- a/tests/ui/abi/unsupported-varargs-fnptr.rs
+++ b/tests/ui/abi/unsupported-varargs-fnptr.rs
@@ -1,5 +1,6 @@
 // FIXME(workingjubilee): add revisions and generalize to other platform-specific varargs ABIs,
 // preferably after the only-arch directive is enhanced with an "or pattern" syntax
+// NOTE: This deliberately tests an ABI that supports varargs, so no `extern "rust-invalid"`
 //@ only-x86_64
 
 // We have to use this flag to force ABI computation of an invalid ABI
diff --git a/tests/ui/abi/unsupported-varargs-fnptr.stderr b/tests/ui/abi/unsupported-varargs-fnptr.stderr
index 445e57df9d8..238f2b31330 100644
--- a/tests/ui/abi/unsupported-varargs-fnptr.stderr
+++ b/tests/ui/abi/unsupported-varargs-fnptr.stderr
@@ -1,5 +1,5 @@
 error[E0570]: "aapcs" is not a supported ABI for the current target
-  --> $DIR/unsupported-varargs-fnptr.rs:13:20
+  --> $DIR/unsupported-varargs-fnptr.rs:14:20
    |
 LL | fn aapcs(f: extern "aapcs" fn(usize, ...)) {
    |                    ^^^^^^^
diff --git a/tests/ui/abi/unsupported.aarch64.stderr b/tests/ui/abi/unsupported.aarch64.stderr
index 85e251a65d2..61d07f29fd7 100644
--- a/tests/ui/abi/unsupported.aarch64.stderr
+++ b/tests/ui/abi/unsupported.aarch64.stderr
@@ -132,53 +132,29 @@ error[E0570]: "vectorcall" is not a supported ABI for the current target
 LL | extern "vectorcall" {}
    |        ^^^^^^^^^^^^
 
-error[E0570]: "C-cmse-nonsecure-call" is not a supported ABI for the current target
+error[E0570]: "cmse-nonsecure-call" is not a supported ABI for the current target
   --> $DIR/unsupported.rs:120:28
    |
-LL | fn cmse_call_ptr(f: extern "C-cmse-nonsecure-call" fn()) {
-   |                            ^^^^^^^^^^^^^^^^^^^^^^^
+LL | fn cmse_call_ptr(f: extern "cmse-nonsecure-call" fn()) {
+   |                            ^^^^^^^^^^^^^^^^^^^^^
 
-error[E0570]: "C-cmse-nonsecure-entry" is not a supported ABI for the current target
+error[E0570]: "cmse-nonsecure-entry" is not a supported ABI for the current target
   --> $DIR/unsupported.rs:125:8
    |
-LL | extern "C-cmse-nonsecure-entry" fn cmse_entry() {}
-   |        ^^^^^^^^^^^^^^^^^^^^^^^^
+LL | extern "cmse-nonsecure-entry" fn cmse_entry() {}
+   |        ^^^^^^^^^^^^^^^^^^^^^^
 
-error[E0570]: "C-cmse-nonsecure-entry" is not a supported ABI for the current target
+error[E0570]: "cmse-nonsecure-entry" is not a supported ABI for the current target
   --> $DIR/unsupported.rs:127:29
    |
-LL | fn cmse_entry_ptr(f: extern "C-cmse-nonsecure-entry" fn()) {
-   |                             ^^^^^^^^^^^^^^^^^^^^^^^^
+LL | fn cmse_entry_ptr(f: extern "cmse-nonsecure-entry" fn()) {
+   |                             ^^^^^^^^^^^^^^^^^^^^^^
 
-error[E0570]: "C-cmse-nonsecure-entry" is not a supported ABI for the current target
+error[E0570]: "cmse-nonsecure-entry" is not a supported ABI for the current target
   --> $DIR/unsupported.rs:131:8
    |
-LL | extern "C-cmse-nonsecure-entry" {}
-   |        ^^^^^^^^^^^^^^^^^^^^^^^^
-
-error[E0570]: "thiscall" is not a supported ABI for the current target
-  --> $DIR/unsupported.rs:141:17
-   |
-LL |     ptr: extern "thiscall" fn(),
-   |                 ^^^^^^^^^^
-
-error[E0570]: "thiscall" is not a supported ABI for the current target
-  --> $DIR/unsupported.rs:146:16
-   |
-LL |     pub extern "thiscall" fn inherent_fn(self) {
-   |                ^^^^^^^^^^
-
-error[E0570]: "thiscall" is not a supported ABI for the current target
-  --> $DIR/unsupported.rs:153:12
-   |
-LL |     extern "thiscall" fn trait_fn(self);
-   |            ^^^^^^^^^^
-
-error[E0570]: "thiscall" is not a supported ABI for the current target
-  --> $DIR/unsupported.rs:158:12
-   |
-LL |     extern "thiscall" fn trait_fn(self) {
-   |            ^^^^^^^^^^
+LL | extern "cmse-nonsecure-entry" {}
+   |        ^^^^^^^^^^^^^^^^^^^^^^
 
 warning: "cdecl" is not a supported ABI for the current target
   --> $DIR/unsupported.rs:99:17
@@ -221,6 +197,6 @@ LL | extern "cdecl" fn cdecl() {}
    = note: for more information, see issue #137018 <https://github.com/rust-lang/rust/issues/137018>
    = help: use `extern "C"` instead
 
-error: aborting due to 29 previous errors; 4 warnings emitted
+error: aborting due to 25 previous errors; 4 warnings emitted
 
 For more information about this error, try `rustc --explain E0570`.
diff --git a/tests/ui/abi/unsupported.arm.stderr b/tests/ui/abi/unsupported.arm.stderr
index a4274d0ac60..37b6e2316b0 100644
--- a/tests/ui/abi/unsupported.arm.stderr
+++ b/tests/ui/abi/unsupported.arm.stderr
@@ -114,53 +114,29 @@ error[E0570]: "vectorcall" is not a supported ABI for the current target
 LL | extern "vectorcall" {}
    |        ^^^^^^^^^^^^
 
-error[E0570]: "C-cmse-nonsecure-call" is not a supported ABI for the current target
+error[E0570]: "cmse-nonsecure-call" is not a supported ABI for the current target
   --> $DIR/unsupported.rs:120:28
    |
-LL | fn cmse_call_ptr(f: extern "C-cmse-nonsecure-call" fn()) {
-   |                            ^^^^^^^^^^^^^^^^^^^^^^^
+LL | fn cmse_call_ptr(f: extern "cmse-nonsecure-call" fn()) {
+   |                            ^^^^^^^^^^^^^^^^^^^^^
 
-error[E0570]: "C-cmse-nonsecure-entry" is not a supported ABI for the current target
+error[E0570]: "cmse-nonsecure-entry" is not a supported ABI for the current target
   --> $DIR/unsupported.rs:125:8
    |
-LL | extern "C-cmse-nonsecure-entry" fn cmse_entry() {}
-   |        ^^^^^^^^^^^^^^^^^^^^^^^^
+LL | extern "cmse-nonsecure-entry" fn cmse_entry() {}
+   |        ^^^^^^^^^^^^^^^^^^^^^^
 
-error[E0570]: "C-cmse-nonsecure-entry" is not a supported ABI for the current target
+error[E0570]: "cmse-nonsecure-entry" is not a supported ABI for the current target
   --> $DIR/unsupported.rs:127:29
    |
-LL | fn cmse_entry_ptr(f: extern "C-cmse-nonsecure-entry" fn()) {
-   |                             ^^^^^^^^^^^^^^^^^^^^^^^^
+LL | fn cmse_entry_ptr(f: extern "cmse-nonsecure-entry" fn()) {
+   |                             ^^^^^^^^^^^^^^^^^^^^^^
 
-error[E0570]: "C-cmse-nonsecure-entry" is not a supported ABI for the current target
+error[E0570]: "cmse-nonsecure-entry" is not a supported ABI for the current target
   --> $DIR/unsupported.rs:131:8
    |
-LL | extern "C-cmse-nonsecure-entry" {}
-   |        ^^^^^^^^^^^^^^^^^^^^^^^^
-
-error[E0570]: "thiscall" is not a supported ABI for the current target
-  --> $DIR/unsupported.rs:141:17
-   |
-LL |     ptr: extern "thiscall" fn(),
-   |                 ^^^^^^^^^^
-
-error[E0570]: "thiscall" is not a supported ABI for the current target
-  --> $DIR/unsupported.rs:146:16
-   |
-LL |     pub extern "thiscall" fn inherent_fn(self) {
-   |                ^^^^^^^^^^
-
-error[E0570]: "thiscall" is not a supported ABI for the current target
-  --> $DIR/unsupported.rs:153:12
-   |
-LL |     extern "thiscall" fn trait_fn(self);
-   |            ^^^^^^^^^^
-
-error[E0570]: "thiscall" is not a supported ABI for the current target
-  --> $DIR/unsupported.rs:158:12
-   |
-LL |     extern "thiscall" fn trait_fn(self) {
-   |            ^^^^^^^^^^
+LL | extern "cmse-nonsecure-entry" {}
+   |        ^^^^^^^^^^^^^^^^^^^^^^
 
 warning: "cdecl" is not a supported ABI for the current target
   --> $DIR/unsupported.rs:99:17
@@ -203,6 +179,6 @@ LL | extern "cdecl" fn cdecl() {}
    = note: for more information, see issue #137018 <https://github.com/rust-lang/rust/issues/137018>
    = help: use `extern "C"` instead
 
-error: aborting due to 26 previous errors; 4 warnings emitted
+error: aborting due to 22 previous errors; 4 warnings emitted
 
 For more information about this error, try `rustc --explain E0570`.
diff --git a/tests/ui/abi/unsupported.i686.stderr b/tests/ui/abi/unsupported.i686.stderr
index 5e5d74c1d98..8478c481941 100644
--- a/tests/ui/abi/unsupported.i686.stderr
+++ b/tests/ui/abi/unsupported.i686.stderr
@@ -58,29 +58,29 @@ error[E0570]: "riscv-interrupt-m" is not a supported ABI for the current target
 LL | extern "riscv-interrupt-m" {}
    |        ^^^^^^^^^^^^^^^^^^^
 
-error[E0570]: "C-cmse-nonsecure-call" is not a supported ABI for the current target
+error[E0570]: "cmse-nonsecure-call" is not a supported ABI for the current target
   --> $DIR/unsupported.rs:120:28
    |
-LL | fn cmse_call_ptr(f: extern "C-cmse-nonsecure-call" fn()) {
-   |                            ^^^^^^^^^^^^^^^^^^^^^^^
+LL | fn cmse_call_ptr(f: extern "cmse-nonsecure-call" fn()) {
+   |                            ^^^^^^^^^^^^^^^^^^^^^
 
-error[E0570]: "C-cmse-nonsecure-entry" is not a supported ABI for the current target
+error[E0570]: "cmse-nonsecure-entry" is not a supported ABI for the current target
   --> $DIR/unsupported.rs:125:8
    |
-LL | extern "C-cmse-nonsecure-entry" fn cmse_entry() {}
-   |        ^^^^^^^^^^^^^^^^^^^^^^^^
+LL | extern "cmse-nonsecure-entry" fn cmse_entry() {}
+   |        ^^^^^^^^^^^^^^^^^^^^^^
 
-error[E0570]: "C-cmse-nonsecure-entry" is not a supported ABI for the current target
+error[E0570]: "cmse-nonsecure-entry" is not a supported ABI for the current target
   --> $DIR/unsupported.rs:127:29
    |
-LL | fn cmse_entry_ptr(f: extern "C-cmse-nonsecure-entry" fn()) {
-   |                             ^^^^^^^^^^^^^^^^^^^^^^^^
+LL | fn cmse_entry_ptr(f: extern "cmse-nonsecure-entry" fn()) {
+   |                             ^^^^^^^^^^^^^^^^^^^^^^
 
-error[E0570]: "C-cmse-nonsecure-entry" is not a supported ABI for the current target
+error[E0570]: "cmse-nonsecure-entry" is not a supported ABI for the current target
   --> $DIR/unsupported.rs:131:8
    |
-LL | extern "C-cmse-nonsecure-entry" {}
-   |        ^^^^^^^^^^^^^^^^^^^^^^^^
+LL | extern "cmse-nonsecure-entry" {}
+   |        ^^^^^^^^^^^^^^^^^^^^^^
 
 error: aborting due to 14 previous errors
 
diff --git a/tests/ui/abi/unsupported.riscv32.stderr b/tests/ui/abi/unsupported.riscv32.stderr
index 7ef7cae5057..d7eb222eb76 100644
--- a/tests/ui/abi/unsupported.riscv32.stderr
+++ b/tests/ui/abi/unsupported.riscv32.stderr
@@ -126,53 +126,29 @@ error[E0570]: "vectorcall" is not a supported ABI for the current target
 LL | extern "vectorcall" {}
    |        ^^^^^^^^^^^^
 
-error[E0570]: "C-cmse-nonsecure-call" is not a supported ABI for the current target
+error[E0570]: "cmse-nonsecure-call" is not a supported ABI for the current target
   --> $DIR/unsupported.rs:120:28
    |
-LL | fn cmse_call_ptr(f: extern "C-cmse-nonsecure-call" fn()) {
-   |                            ^^^^^^^^^^^^^^^^^^^^^^^
+LL | fn cmse_call_ptr(f: extern "cmse-nonsecure-call" fn()) {
+   |                            ^^^^^^^^^^^^^^^^^^^^^
 
-error[E0570]: "C-cmse-nonsecure-entry" is not a supported ABI for the current target
+error[E0570]: "cmse-nonsecure-entry" is not a supported ABI for the current target
   --> $DIR/unsupported.rs:125:8
    |
-LL | extern "C-cmse-nonsecure-entry" fn cmse_entry() {}
-   |        ^^^^^^^^^^^^^^^^^^^^^^^^
+LL | extern "cmse-nonsecure-entry" fn cmse_entry() {}
+   |        ^^^^^^^^^^^^^^^^^^^^^^
 
-error[E0570]: "C-cmse-nonsecure-entry" is not a supported ABI for the current target
+error[E0570]: "cmse-nonsecure-entry" is not a supported ABI for the current target
   --> $DIR/unsupported.rs:127:29
    |
-LL | fn cmse_entry_ptr(f: extern "C-cmse-nonsecure-entry" fn()) {
-   |                             ^^^^^^^^^^^^^^^^^^^^^^^^
+LL | fn cmse_entry_ptr(f: extern "cmse-nonsecure-entry" fn()) {
+   |                             ^^^^^^^^^^^^^^^^^^^^^^
 
-error[E0570]: "C-cmse-nonsecure-entry" is not a supported ABI for the current target
+error[E0570]: "cmse-nonsecure-entry" is not a supported ABI for the current target
   --> $DIR/unsupported.rs:131:8
    |
-LL | extern "C-cmse-nonsecure-entry" {}
-   |        ^^^^^^^^^^^^^^^^^^^^^^^^
-
-error[E0570]: "thiscall" is not a supported ABI for the current target
-  --> $DIR/unsupported.rs:141:17
-   |
-LL |     ptr: extern "thiscall" fn(),
-   |                 ^^^^^^^^^^
-
-error[E0570]: "thiscall" is not a supported ABI for the current target
-  --> $DIR/unsupported.rs:146:16
-   |
-LL |     pub extern "thiscall" fn inherent_fn(self) {
-   |                ^^^^^^^^^^
-
-error[E0570]: "thiscall" is not a supported ABI for the current target
-  --> $DIR/unsupported.rs:153:12
-   |
-LL |     extern "thiscall" fn trait_fn(self);
-   |            ^^^^^^^^^^
-
-error[E0570]: "thiscall" is not a supported ABI for the current target
-  --> $DIR/unsupported.rs:158:12
-   |
-LL |     extern "thiscall" fn trait_fn(self) {
-   |            ^^^^^^^^^^
+LL | extern "cmse-nonsecure-entry" {}
+   |        ^^^^^^^^^^^^^^^^^^^^^^
 
 warning: "cdecl" is not a supported ABI for the current target
   --> $DIR/unsupported.rs:99:17
@@ -215,6 +191,6 @@ LL | extern "cdecl" fn cdecl() {}
    = note: for more information, see issue #137018 <https://github.com/rust-lang/rust/issues/137018>
    = help: use `extern "C"` instead
 
-error: aborting due to 28 previous errors; 4 warnings emitted
+error: aborting due to 24 previous errors; 4 warnings emitted
 
 For more information about this error, try `rustc --explain E0570`.
diff --git a/tests/ui/abi/unsupported.riscv64.stderr b/tests/ui/abi/unsupported.riscv64.stderr
index 7ef7cae5057..d7eb222eb76 100644
--- a/tests/ui/abi/unsupported.riscv64.stderr
+++ b/tests/ui/abi/unsupported.riscv64.stderr
@@ -126,53 +126,29 @@ error[E0570]: "vectorcall" is not a supported ABI for the current target
 LL | extern "vectorcall" {}
    |        ^^^^^^^^^^^^
 
-error[E0570]: "C-cmse-nonsecure-call" is not a supported ABI for the current target
+error[E0570]: "cmse-nonsecure-call" is not a supported ABI for the current target
   --> $DIR/unsupported.rs:120:28
    |
-LL | fn cmse_call_ptr(f: extern "C-cmse-nonsecure-call" fn()) {
-   |                            ^^^^^^^^^^^^^^^^^^^^^^^
+LL | fn cmse_call_ptr(f: extern "cmse-nonsecure-call" fn()) {
+   |                            ^^^^^^^^^^^^^^^^^^^^^
 
-error[E0570]: "C-cmse-nonsecure-entry" is not a supported ABI for the current target
+error[E0570]: "cmse-nonsecure-entry" is not a supported ABI for the current target
   --> $DIR/unsupported.rs:125:8
    |
-LL | extern "C-cmse-nonsecure-entry" fn cmse_entry() {}
-   |        ^^^^^^^^^^^^^^^^^^^^^^^^
+LL | extern "cmse-nonsecure-entry" fn cmse_entry() {}
+   |        ^^^^^^^^^^^^^^^^^^^^^^
 
-error[E0570]: "C-cmse-nonsecure-entry" is not a supported ABI for the current target
+error[E0570]: "cmse-nonsecure-entry" is not a supported ABI for the current target
   --> $DIR/unsupported.rs:127:29
    |
-LL | fn cmse_entry_ptr(f: extern "C-cmse-nonsecure-entry" fn()) {
-   |                             ^^^^^^^^^^^^^^^^^^^^^^^^
+LL | fn cmse_entry_ptr(f: extern "cmse-nonsecure-entry" fn()) {
+   |                             ^^^^^^^^^^^^^^^^^^^^^^
 
-error[E0570]: "C-cmse-nonsecure-entry" is not a supported ABI for the current target
+error[E0570]: "cmse-nonsecure-entry" is not a supported ABI for the current target
   --> $DIR/unsupported.rs:131:8
    |
-LL | extern "C-cmse-nonsecure-entry" {}
-   |        ^^^^^^^^^^^^^^^^^^^^^^^^
-
-error[E0570]: "thiscall" is not a supported ABI for the current target
-  --> $DIR/unsupported.rs:141:17
-   |
-LL |     ptr: extern "thiscall" fn(),
-   |                 ^^^^^^^^^^
-
-error[E0570]: "thiscall" is not a supported ABI for the current target
-  --> $DIR/unsupported.rs:146:16
-   |
-LL |     pub extern "thiscall" fn inherent_fn(self) {
-   |                ^^^^^^^^^^
-
-error[E0570]: "thiscall" is not a supported ABI for the current target
-  --> $DIR/unsupported.rs:153:12
-   |
-LL |     extern "thiscall" fn trait_fn(self);
-   |            ^^^^^^^^^^
-
-error[E0570]: "thiscall" is not a supported ABI for the current target
-  --> $DIR/unsupported.rs:158:12
-   |
-LL |     extern "thiscall" fn trait_fn(self) {
-   |            ^^^^^^^^^^
+LL | extern "cmse-nonsecure-entry" {}
+   |        ^^^^^^^^^^^^^^^^^^^^^^
 
 warning: "cdecl" is not a supported ABI for the current target
   --> $DIR/unsupported.rs:99:17
@@ -215,6 +191,6 @@ LL | extern "cdecl" fn cdecl() {}
    = note: for more information, see issue #137018 <https://github.com/rust-lang/rust/issues/137018>
    = help: use `extern "C"` instead
 
-error: aborting due to 28 previous errors; 4 warnings emitted
+error: aborting due to 24 previous errors; 4 warnings emitted
 
 For more information about this error, try `rustc --explain E0570`.
diff --git a/tests/ui/abi/unsupported.rs b/tests/ui/abi/unsupported.rs
index 4bb732c94ac..828fcc147a5 100644
--- a/tests/ui/abi/unsupported.rs
+++ b/tests/ui/abi/unsupported.rs
@@ -25,7 +25,7 @@
     abi_gpu_kernel,
     abi_x86_interrupt,
     abi_riscv_interrupt,
-    abi_c_cmse_nonsecure_call,
+    abi_cmse_nonsecure_call,
     abi_vectorcall,
     cmse_nonsecure_entry
 )]
@@ -117,18 +117,18 @@ fn vectorcall_ptr(f: extern "vectorcall" fn()) {
 extern "vectorcall" {}
 //[arm,aarch64,riscv32,riscv64]~^ ERROR is not a supported ABI
 
-fn cmse_call_ptr(f: extern "C-cmse-nonsecure-call" fn()) {
+fn cmse_call_ptr(f: extern "cmse-nonsecure-call" fn()) {
 //~^ ERROR is not a supported ABI
     f()
 }
 
-extern "C-cmse-nonsecure-entry" fn cmse_entry() {}
+extern "cmse-nonsecure-entry" fn cmse_entry() {}
 //~^ ERROR is not a supported ABI
-fn cmse_entry_ptr(f: extern "C-cmse-nonsecure-entry" fn()) {
+fn cmse_entry_ptr(f: extern "cmse-nonsecure-entry" fn()) {
 //~^ ERROR is not a supported ABI
     f()
 }
-extern "C-cmse-nonsecure-entry" {}
+extern "cmse-nonsecure-entry" {}
 //~^ ERROR is not a supported ABI
 
 #[cfg(windows)]
@@ -136,27 +136,3 @@ extern "C-cmse-nonsecure-entry" {}
 extern "cdecl" {}
 //[x64_win]~^ WARN unsupported_calling_conventions
 //[x64_win]~^^ WARN this was previously accepted
-
-struct FnPtrBearer {
-    ptr: extern "thiscall" fn(),
-    //[x64,x64_win,arm,aarch64,riscv32,riscv64]~^ ERROR: is not a supported ABI
-}
-
-impl FnPtrBearer {
-    pub extern "thiscall" fn inherent_fn(self) {
-        //[x64,x64_win,arm,aarch64,riscv32,riscv64]~^ ERROR: is not a supported ABI
-        (self.ptr)()
-    }
-}
-
-trait Trait {
-    extern "thiscall" fn trait_fn(self);
-    //[x64,x64_win,arm,aarch64,riscv32,riscv64]~^ ERROR: is not a supported ABI
-}
-
-impl Trait for FnPtrBearer {
-    extern "thiscall" fn trait_fn(self) {
-        //[x64,x64_win,arm,aarch64,riscv32,riscv64]~^ ERROR: is not a supported ABI
-        self.inherent_fn()
-    }
-}
diff --git a/tests/ui/abi/unsupported.x64.stderr b/tests/ui/abi/unsupported.x64.stderr
index 7b021dff7c9..cf04680b587 100644
--- a/tests/ui/abi/unsupported.x64.stderr
+++ b/tests/ui/abi/unsupported.x64.stderr
@@ -108,53 +108,29 @@ LL | extern "stdcall-unwind" {}
    |
    = help: if you need `extern "stdcall-unwind"` on win32 and `extern "C-unwind"` everywhere else, use `extern "system-unwind"`
 
-error[E0570]: "C-cmse-nonsecure-call" is not a supported ABI for the current target
+error[E0570]: "cmse-nonsecure-call" is not a supported ABI for the current target
   --> $DIR/unsupported.rs:120:28
    |
-LL | fn cmse_call_ptr(f: extern "C-cmse-nonsecure-call" fn()) {
-   |                            ^^^^^^^^^^^^^^^^^^^^^^^
+LL | fn cmse_call_ptr(f: extern "cmse-nonsecure-call" fn()) {
+   |                            ^^^^^^^^^^^^^^^^^^^^^
 
-error[E0570]: "C-cmse-nonsecure-entry" is not a supported ABI for the current target
+error[E0570]: "cmse-nonsecure-entry" is not a supported ABI for the current target
   --> $DIR/unsupported.rs:125:8
    |
-LL | extern "C-cmse-nonsecure-entry" fn cmse_entry() {}
-   |        ^^^^^^^^^^^^^^^^^^^^^^^^
+LL | extern "cmse-nonsecure-entry" fn cmse_entry() {}
+   |        ^^^^^^^^^^^^^^^^^^^^^^
 
-error[E0570]: "C-cmse-nonsecure-entry" is not a supported ABI for the current target
+error[E0570]: "cmse-nonsecure-entry" is not a supported ABI for the current target
   --> $DIR/unsupported.rs:127:29
    |
-LL | fn cmse_entry_ptr(f: extern "C-cmse-nonsecure-entry" fn()) {
-   |                             ^^^^^^^^^^^^^^^^^^^^^^^^
+LL | fn cmse_entry_ptr(f: extern "cmse-nonsecure-entry" fn()) {
+   |                             ^^^^^^^^^^^^^^^^^^^^^^
 
-error[E0570]: "C-cmse-nonsecure-entry" is not a supported ABI for the current target
+error[E0570]: "cmse-nonsecure-entry" is not a supported ABI for the current target
   --> $DIR/unsupported.rs:131:8
    |
-LL | extern "C-cmse-nonsecure-entry" {}
-   |        ^^^^^^^^^^^^^^^^^^^^^^^^
-
-error[E0570]: "thiscall" is not a supported ABI for the current target
-  --> $DIR/unsupported.rs:141:17
-   |
-LL |     ptr: extern "thiscall" fn(),
-   |                 ^^^^^^^^^^
-
-error[E0570]: "thiscall" is not a supported ABI for the current target
-  --> $DIR/unsupported.rs:146:16
-   |
-LL |     pub extern "thiscall" fn inherent_fn(self) {
-   |                ^^^^^^^^^^
-
-error[E0570]: "thiscall" is not a supported ABI for the current target
-  --> $DIR/unsupported.rs:153:12
-   |
-LL |     extern "thiscall" fn trait_fn(self);
-   |            ^^^^^^^^^^
-
-error[E0570]: "thiscall" is not a supported ABI for the current target
-  --> $DIR/unsupported.rs:158:12
-   |
-LL |     extern "thiscall" fn trait_fn(self) {
-   |            ^^^^^^^^^^
+LL | extern "cmse-nonsecure-entry" {}
+   |        ^^^^^^^^^^^^^^^^^^^^^^
 
 warning: "cdecl" is not a supported ABI for the current target
   --> $DIR/unsupported.rs:99:17
@@ -197,6 +173,6 @@ LL | extern "cdecl" fn cdecl() {}
    = note: for more information, see issue #137018 <https://github.com/rust-lang/rust/issues/137018>
    = help: use `extern "C"` instead
 
-error: aborting due to 25 previous errors; 4 warnings emitted
+error: aborting due to 21 previous errors; 4 warnings emitted
 
 For more information about this error, try `rustc --explain E0570`.
diff --git a/tests/ui/abi/unsupported.x64_win.stderr b/tests/ui/abi/unsupported.x64_win.stderr
index 4ce5b3340d1..d383a4df732 100644
--- a/tests/ui/abi/unsupported.x64_win.stderr
+++ b/tests/ui/abi/unsupported.x64_win.stderr
@@ -76,53 +76,29 @@ error[E0570]: "thiscall" is not a supported ABI for the current target
 LL | extern "thiscall" {}
    |        ^^^^^^^^^^
 
-error[E0570]: "C-cmse-nonsecure-call" is not a supported ABI for the current target
+error[E0570]: "cmse-nonsecure-call" is not a supported ABI for the current target
   --> $DIR/unsupported.rs:120:28
    |
-LL | fn cmse_call_ptr(f: extern "C-cmse-nonsecure-call" fn()) {
-   |                            ^^^^^^^^^^^^^^^^^^^^^^^
+LL | fn cmse_call_ptr(f: extern "cmse-nonsecure-call" fn()) {
+   |                            ^^^^^^^^^^^^^^^^^^^^^
 
-error[E0570]: "C-cmse-nonsecure-entry" is not a supported ABI for the current target
+error[E0570]: "cmse-nonsecure-entry" is not a supported ABI for the current target
   --> $DIR/unsupported.rs:125:8
    |
-LL | extern "C-cmse-nonsecure-entry" fn cmse_entry() {}
-   |        ^^^^^^^^^^^^^^^^^^^^^^^^
+LL | extern "cmse-nonsecure-entry" fn cmse_entry() {}
+   |        ^^^^^^^^^^^^^^^^^^^^^^
 
-error[E0570]: "C-cmse-nonsecure-entry" is not a supported ABI for the current target
+error[E0570]: "cmse-nonsecure-entry" is not a supported ABI for the current target
   --> $DIR/unsupported.rs:127:29
    |
-LL | fn cmse_entry_ptr(f: extern "C-cmse-nonsecure-entry" fn()) {
-   |                             ^^^^^^^^^^^^^^^^^^^^^^^^
+LL | fn cmse_entry_ptr(f: extern "cmse-nonsecure-entry" fn()) {
+   |                             ^^^^^^^^^^^^^^^^^^^^^^
 
-error[E0570]: "C-cmse-nonsecure-entry" is not a supported ABI for the current target
+error[E0570]: "cmse-nonsecure-entry" is not a supported ABI for the current target
   --> $DIR/unsupported.rs:131:8
    |
-LL | extern "C-cmse-nonsecure-entry" {}
-   |        ^^^^^^^^^^^^^^^^^^^^^^^^
-
-error[E0570]: "thiscall" is not a supported ABI for the current target
-  --> $DIR/unsupported.rs:141:17
-   |
-LL |     ptr: extern "thiscall" fn(),
-   |                 ^^^^^^^^^^
-
-error[E0570]: "thiscall" is not a supported ABI for the current target
-  --> $DIR/unsupported.rs:146:16
-   |
-LL |     pub extern "thiscall" fn inherent_fn(self) {
-   |                ^^^^^^^^^^
-
-error[E0570]: "thiscall" is not a supported ABI for the current target
-  --> $DIR/unsupported.rs:153:12
-   |
-LL |     extern "thiscall" fn trait_fn(self);
-   |            ^^^^^^^^^^
-
-error[E0570]: "thiscall" is not a supported ABI for the current target
-  --> $DIR/unsupported.rs:158:12
-   |
-LL |     extern "thiscall" fn trait_fn(self) {
-   |            ^^^^^^^^^^
+LL | extern "cmse-nonsecure-entry" {}
+   |        ^^^^^^^^^^^^^^^^^^^^^^
 
 warning: "stdcall" is not a supported ABI for the current target
   --> $DIR/unsupported.rs:81:19
@@ -215,6 +191,6 @@ LL | extern "cdecl" fn cdecl() {}
    = note: for more information, see issue #137018 <https://github.com/rust-lang/rust/issues/137018>
    = help: use `extern "C"` instead
 
-error: aborting due to 21 previous errors; 9 warnings emitted
+error: aborting due to 17 previous errors; 9 warnings emitted
 
 For more information about this error, try `rustc --explain E0570`.
diff --git a/tests/ui/borrowck/borrowck-move-by-capture.stderr b/tests/ui/borrowck/borrowck-move-by-capture.stderr
index 9915acfe065..58d5e90e990 100644
--- a/tests/ui/borrowck/borrowck-move-by-capture.stderr
+++ b/tests/ui/borrowck/borrowck-move-by-capture.stderr
@@ -12,7 +12,7 @@ LL |         let _h = to_fn_once(move || -> isize { *bar });
    |                             |                  move occurs because `bar` has type `Box<isize>`, which does not implement the `Copy` trait
    |                             `bar` is moved here
    |
-help: clone the value before moving it into the closure
+help: consider cloning the value before moving it into the closure
    |
 LL ~         let value = bar.clone();
 LL ~         let _h = to_fn_once(move || -> isize { value });
diff --git a/tests/ui/borrowck/borrowck-move-moved-value-into-closure.stderr b/tests/ui/borrowck/borrowck-move-moved-value-into-closure.stderr
index 6a77d86f250..5ddc6a6d82d 100644
--- a/tests/ui/borrowck/borrowck-move-moved-value-into-closure.stderr
+++ b/tests/ui/borrowck/borrowck-move-moved-value-into-closure.stderr
@@ -12,6 +12,12 @@ LL |     call_f(move|| { *t + 1 });
    |            ^^^^^^   -- use occurs due to use in closure
    |            |
    |            value used here after move
+   |
+help: consider cloning the value before moving it into the closure
+   |
+LL ~     let value = t.clone();
+LL ~     call_f(move|| { value + 1 });
+   |
 
 error: aborting due to 1 previous error
 
diff --git a/tests/ui/cmse-nonsecure/cmse-nonsecure-call/callback-as-argument.rs b/tests/ui/cmse-nonsecure/cmse-nonsecure-call/callback-as-argument.rs
index b25a81b858b..796c2634b62 100644
--- a/tests/ui/cmse-nonsecure/cmse-nonsecure-call/callback-as-argument.rs
+++ b/tests/ui/cmse-nonsecure/cmse-nonsecure-call/callback-as-argument.rs
@@ -2,15 +2,15 @@
 //@ build-pass
 //@ compile-flags: --target thumbv8m.main-none-eabi --crate-type lib
 //@ needs-llvm-components: arm
-#![feature(abi_c_cmse_nonsecure_call, cmse_nonsecure_entry, no_core, lang_items, intrinsics)]
+#![feature(abi_cmse_nonsecure_call, cmse_nonsecure_entry, no_core, lang_items, intrinsics)]
 #![no_core]
 
 extern crate minicore;
 use minicore::*;
 
 #[no_mangle]
-pub extern "C-cmse-nonsecure-entry" fn test(
-    f: extern "C-cmse-nonsecure-call" fn(u32, u32, u32, u32) -> u32,
+pub extern "cmse-nonsecure-entry" fn test(
+    f: extern "cmse-nonsecure-call" fn(u32, u32, u32, u32) -> u32,
     a: u32,
     b: u32,
     c: u32,
diff --git a/tests/ui/cmse-nonsecure/cmse-nonsecure-call/gate_test.rs b/tests/ui/cmse-nonsecure/cmse-nonsecure-call/gate_test.rs
index 40e2da8d1cd..cb805309a02 100644
--- a/tests/ui/cmse-nonsecure/cmse-nonsecure-call/gate_test.rs
+++ b/tests/ui/cmse-nonsecure/cmse-nonsecure-call/gate_test.rs
@@ -1,7 +1,7 @@
-// gate-test-abi_c_cmse_nonsecure_call
+// gate-test-abi_cmse_nonsecure_call
 fn main() {
     let non_secure_function = unsafe {
-        core::mem::transmute::<usize, extern "C-cmse-nonsecure-call" fn(i32, i32, i32, i32) -> i32>(
+        core::mem::transmute::<usize, extern "cmse-nonsecure-call" fn(i32, i32, i32, i32) -> i32>(
             //~^ ERROR: is not a supported ABI for the current target [E0570]
             //~| ERROR: ABI is experimental and subject to change [E0658]
             0x10000004,
diff --git a/tests/ui/cmse-nonsecure/cmse-nonsecure-call/gate_test.stderr b/tests/ui/cmse-nonsecure/cmse-nonsecure-call/gate_test.stderr
index dcbe09d8b36..ecf70e890f4 100644
--- a/tests/ui/cmse-nonsecure/cmse-nonsecure-call/gate_test.stderr
+++ b/tests/ui/cmse-nonsecure/cmse-nonsecure-call/gate_test.stderr
@@ -1,17 +1,17 @@
-error[E0570]: "C-cmse-nonsecure-call" is not a supported ABI for the current target
+error[E0570]: "cmse-nonsecure-call" is not a supported ABI for the current target
   --> $DIR/gate_test.rs:4:46
    |
-LL |         core::mem::transmute::<usize, extern "C-cmse-nonsecure-call" fn(i32, i32, i32, i32) -> i32>(
-   |                                              ^^^^^^^^^^^^^^^^^^^^^^^
+LL |         core::mem::transmute::<usize, extern "cmse-nonsecure-call" fn(i32, i32, i32, i32) -> i32>(
+   |                                              ^^^^^^^^^^^^^^^^^^^^^
 
-error[E0658]: the extern "C-cmse-nonsecure-call" ABI is experimental and subject to change
+error[E0658]: the extern "cmse-nonsecure-call" ABI is experimental and subject to change
   --> $DIR/gate_test.rs:4:46
    |
-LL |         core::mem::transmute::<usize, extern "C-cmse-nonsecure-call" fn(i32, i32, i32, i32) -> i32>(
-   |                                              ^^^^^^^^^^^^^^^^^^^^^^^
+LL |         core::mem::transmute::<usize, extern "cmse-nonsecure-call" fn(i32, i32, i32, i32) -> i32>(
+   |                                              ^^^^^^^^^^^^^^^^^^^^^
    |
    = note: see issue #81391 <https://github.com/rust-lang/rust/issues/81391> for more information
-   = help: add `#![feature(abi_c_cmse_nonsecure_call)]` to the crate attributes to enable
+   = help: add `#![feature(abi_cmse_nonsecure_call)]` to the crate attributes to enable
    = note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
 
 error: aborting due to 2 previous errors
diff --git a/tests/ui/cmse-nonsecure/cmse-nonsecure-call/generics.rs b/tests/ui/cmse-nonsecure/cmse-nonsecure-call/generics.rs
index 84080890e08..4ce5890a2da 100644
--- a/tests/ui/cmse-nonsecure/cmse-nonsecure-call/generics.rs
+++ b/tests/ui/cmse-nonsecure/cmse-nonsecure-call/generics.rs
@@ -1,7 +1,7 @@
 //@ add-core-stubs
 //@ compile-flags: --target thumbv8m.main-none-eabi --crate-type lib
 //@ needs-llvm-components: arm
-#![feature(abi_c_cmse_nonsecure_call, no_core, lang_items)]
+#![feature(abi_cmse_nonsecure_call, no_core, lang_items)]
 #![no_core]
 
 extern crate minicore;
@@ -11,31 +11,31 @@ use minicore::*;
 struct Wrapper<T>(T);
 
 struct Test<T: Copy> {
-    f1: extern "C-cmse-nonsecure-call" fn<U: Copy>(U, u32, u32, u32) -> u64,
+    f1: extern "cmse-nonsecure-call" fn<U: Copy>(U, u32, u32, u32) -> u64,
     //~^ ERROR cannot find type `U` in this scope
     //~| ERROR function pointer types may not have generic parameters
-    f2: extern "C-cmse-nonsecure-call" fn(impl Copy, u32, u32, u32) -> u64,
+    f2: extern "cmse-nonsecure-call" fn(impl Copy, u32, u32, u32) -> u64,
     //~^ ERROR `impl Trait` is not allowed in `fn` pointer parameters
-    f3: extern "C-cmse-nonsecure-call" fn(T, u32, u32, u32) -> u64, //~ ERROR [E0798]
-    f4: extern "C-cmse-nonsecure-call" fn(Wrapper<T>, u32, u32, u32) -> u64, //~ ERROR [E0798]
+    f3: extern "cmse-nonsecure-call" fn(T, u32, u32, u32) -> u64, //~ ERROR [E0798]
+    f4: extern "cmse-nonsecure-call" fn(Wrapper<T>, u32, u32, u32) -> u64, //~ ERROR [E0798]
 }
 
-type WithReference = extern "C-cmse-nonsecure-call" fn(&usize);
+type WithReference = extern "cmse-nonsecure-call" fn(&usize);
 
 trait Trait {}
-type WithTraitObject = extern "C-cmse-nonsecure-call" fn(&dyn Trait) -> &dyn Trait;
-//~^ ERROR return value of `"C-cmse-nonsecure-call"` function too large to pass via registers [E0798]
+type WithTraitObject = extern "cmse-nonsecure-call" fn(&dyn Trait) -> &dyn Trait;
+//~^ ERROR return value of `"cmse-nonsecure-call"` function too large to pass via registers [E0798]
 
 type WithStaticTraitObject =
-    extern "C-cmse-nonsecure-call" fn(&'static dyn Trait) -> &'static dyn Trait;
-//~^ ERROR return value of `"C-cmse-nonsecure-call"` function too large to pass via registers [E0798]
+    extern "cmse-nonsecure-call" fn(&'static dyn Trait) -> &'static dyn Trait;
+//~^ ERROR return value of `"cmse-nonsecure-call"` function too large to pass via registers [E0798]
 
 #[repr(transparent)]
 struct WrapperTransparent<'a>(&'a dyn Trait);
 
 type WithTransparentTraitObject =
-    extern "C-cmse-nonsecure-call" fn(WrapperTransparent) -> WrapperTransparent;
-//~^ ERROR return value of `"C-cmse-nonsecure-call"` function too large to pass via registers [E0798]
+    extern "cmse-nonsecure-call" fn(WrapperTransparent) -> WrapperTransparent;
+//~^ ERROR return value of `"cmse-nonsecure-call"` function too large to pass via registers [E0798]
 
-type WithVarArgs = extern "C-cmse-nonsecure-call" fn(u32, ...);
-//~^ ERROR C-variadic functions with the "C-cmse-nonsecure-call" calling convention are not supported
+type WithVarArgs = extern "cmse-nonsecure-call" fn(u32, ...);
+//~^ ERROR C-variadic functions with the "cmse-nonsecure-call" calling convention are not supported
diff --git a/tests/ui/cmse-nonsecure/cmse-nonsecure-call/generics.stderr b/tests/ui/cmse-nonsecure/cmse-nonsecure-call/generics.stderr
index 2b51f48915b..15656853576 100644
--- a/tests/ui/cmse-nonsecure/cmse-nonsecure-call/generics.stderr
+++ b/tests/ui/cmse-nonsecure/cmse-nonsecure-call/generics.stderr
@@ -1,21 +1,21 @@
 error: function pointer types may not have generic parameters
-  --> $DIR/generics.rs:14:42
+  --> $DIR/generics.rs:14:40
    |
-LL |     f1: extern "C-cmse-nonsecure-call" fn<U: Copy>(U, u32, u32, u32) -> u64,
-   |                                          ^^^^^^^^^
+LL |     f1: extern "cmse-nonsecure-call" fn<U: Copy>(U, u32, u32, u32) -> u64,
+   |                                        ^^^^^^^^^
 
 error[E0412]: cannot find type `U` in this scope
-  --> $DIR/generics.rs:14:52
+  --> $DIR/generics.rs:14:50
    |
 LL | struct Test<T: Copy> {
    |             - similarly named type parameter `T` defined here
-LL |     f1: extern "C-cmse-nonsecure-call" fn<U: Copy>(U, u32, u32, u32) -> u64,
-   |                                                    ^
+LL |     f1: extern "cmse-nonsecure-call" fn<U: Copy>(U, u32, u32, u32) -> u64,
+   |                                                  ^
    |
 help: a type parameter with a similar name exists
    |
-LL -     f1: extern "C-cmse-nonsecure-call" fn<U: Copy>(U, u32, u32, u32) -> u64,
-LL +     f1: extern "C-cmse-nonsecure-call" fn<U: Copy>(T, u32, u32, u32) -> u64,
+LL -     f1: extern "cmse-nonsecure-call" fn<U: Copy>(U, u32, u32, u32) -> u64,
+LL +     f1: extern "cmse-nonsecure-call" fn<U: Copy>(T, u32, u32, u32) -> u64,
    |
 help: you might be missing a type parameter
    |
@@ -23,57 +23,57 @@ LL | struct Test<T: Copy, U> {
    |                    +++
 
 error[E0562]: `impl Trait` is not allowed in `fn` pointer parameters
-  --> $DIR/generics.rs:17:43
+  --> $DIR/generics.rs:17:41
    |
-LL |     f2: extern "C-cmse-nonsecure-call" fn(impl Copy, u32, u32, u32) -> u64,
-   |                                           ^^^^^^^^^
+LL |     f2: extern "cmse-nonsecure-call" fn(impl Copy, u32, u32, u32) -> u64,
+   |                                         ^^^^^^^^^
    |
    = note: `impl Trait` is only allowed in arguments and return types of functions and methods
 
-error[E0798]: function pointers with the `"C-cmse-nonsecure-call"` ABI cannot contain generics in their type
+error[E0798]: function pointers with the `"cmse-nonsecure-call"` ABI cannot contain generics in their type
   --> $DIR/generics.rs:19:9
    |
-LL |     f3: extern "C-cmse-nonsecure-call" fn(T, u32, u32, u32) -> u64,
-   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+LL |     f3: extern "cmse-nonsecure-call" fn(T, u32, u32, u32) -> u64,
+   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
-error[E0798]: function pointers with the `"C-cmse-nonsecure-call"` ABI cannot contain generics in their type
+error[E0798]: function pointers with the `"cmse-nonsecure-call"` ABI cannot contain generics in their type
   --> $DIR/generics.rs:20:9
    |
-LL |     f4: extern "C-cmse-nonsecure-call" fn(Wrapper<T>, u32, u32, u32) -> u64,
-   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+LL |     f4: extern "cmse-nonsecure-call" fn(Wrapper<T>, u32, u32, u32) -> u64,
+   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
-error[E0798]: return value of `"C-cmse-nonsecure-call"` function too large to pass via registers
-  --> $DIR/generics.rs:26:73
+error[E0798]: return value of `"cmse-nonsecure-call"` function too large to pass via registers
+  --> $DIR/generics.rs:26:71
    |
-LL | type WithTraitObject = extern "C-cmse-nonsecure-call" fn(&dyn Trait) -> &dyn Trait;
-   |                                                                         ^^^^^^^^^^ this type doesn't fit in the available registers
+LL | type WithTraitObject = extern "cmse-nonsecure-call" fn(&dyn Trait) -> &dyn Trait;
+   |                                                                       ^^^^^^^^^^ this type doesn't fit in the available registers
    |
-   = note: functions with the `"C-cmse-nonsecure-call"` ABI must pass their result via the available return registers
+   = note: functions with the `"cmse-nonsecure-call"` ABI must pass their result via the available return registers
    = note: the result must either be a (transparently wrapped) i64, u64 or f64, or be at most 4 bytes in size
 
-error[E0798]: return value of `"C-cmse-nonsecure-call"` function too large to pass via registers
-  --> $DIR/generics.rs:30:62
+error[E0798]: return value of `"cmse-nonsecure-call"` function too large to pass via registers
+  --> $DIR/generics.rs:30:60
    |
-LL |     extern "C-cmse-nonsecure-call" fn(&'static dyn Trait) -> &'static dyn Trait;
-   |                                                              ^^^^^^^^^^^^^^^^^^ this type doesn't fit in the available registers
+LL |     extern "cmse-nonsecure-call" fn(&'static dyn Trait) -> &'static dyn Trait;
+   |                                                            ^^^^^^^^^^^^^^^^^^ this type doesn't fit in the available registers
    |
-   = note: functions with the `"C-cmse-nonsecure-call"` ABI must pass their result via the available return registers
+   = note: functions with the `"cmse-nonsecure-call"` ABI must pass their result via the available return registers
    = note: the result must either be a (transparently wrapped) i64, u64 or f64, or be at most 4 bytes in size
 
-error[E0798]: return value of `"C-cmse-nonsecure-call"` function too large to pass via registers
-  --> $DIR/generics.rs:37:62
+error[E0798]: return value of `"cmse-nonsecure-call"` function too large to pass via registers
+  --> $DIR/generics.rs:37:60
    |
-LL |     extern "C-cmse-nonsecure-call" fn(WrapperTransparent) -> WrapperTransparent;
-   |                                                              ^^^^^^^^^^^^^^^^^^ this type doesn't fit in the available registers
+LL |     extern "cmse-nonsecure-call" fn(WrapperTransparent) -> WrapperTransparent;
+   |                                                            ^^^^^^^^^^^^^^^^^^ this type doesn't fit in the available registers
    |
-   = note: functions with the `"C-cmse-nonsecure-call"` ABI must pass their result via the available return registers
+   = note: functions with the `"cmse-nonsecure-call"` ABI must pass their result via the available return registers
    = note: the result must either be a (transparently wrapped) i64, u64 or f64, or be at most 4 bytes in size
 
-error[E0045]: C-variadic functions with the "C-cmse-nonsecure-call" calling convention are not supported
+error[E0045]: C-variadic functions with the "cmse-nonsecure-call" calling convention are not supported
   --> $DIR/generics.rs:40:20
    |
-LL | type WithVarArgs = extern "C-cmse-nonsecure-call" fn(u32, ...);
-   |                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ C-variadic function must have a compatible calling convention
+LL | type WithVarArgs = extern "cmse-nonsecure-call" fn(u32, ...);
+   |                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ C-variadic function must have a compatible calling convention
 
 error: aborting due to 9 previous errors
 
diff --git a/tests/ui/cmse-nonsecure/cmse-nonsecure-call/params-via-stack.rs b/tests/ui/cmse-nonsecure/cmse-nonsecure-call/params-via-stack.rs
index 8328f9b6dd5..7036cd367e4 100644
--- a/tests/ui/cmse-nonsecure/cmse-nonsecure-call/params-via-stack.rs
+++ b/tests/ui/cmse-nonsecure/cmse-nonsecure-call/params-via-stack.rs
@@ -1,7 +1,7 @@
 //@ add-core-stubs
 //@ compile-flags: --target thumbv8m.main-none-eabi --crate-type lib
 //@ needs-llvm-components: arm
-#![feature(abi_c_cmse_nonsecure_call, no_core, lang_items)]
+#![feature(abi_cmse_nonsecure_call, no_core, lang_items)]
 #![no_core]
 
 extern crate minicore;
@@ -13,10 +13,10 @@ pub struct AlignRelevant(u32);
 
 #[no_mangle]
 pub fn test(
-    f1: extern "C-cmse-nonsecure-call" fn(u32, u32, u32, u32, x: u32, y: u32), //~ ERROR [E0798]
-    f2: extern "C-cmse-nonsecure-call" fn(u32, u32, u32, u16, u16),            //~ ERROR [E0798]
-    f3: extern "C-cmse-nonsecure-call" fn(u32, u64, u32),                      //~ ERROR [E0798]
-    f4: extern "C-cmse-nonsecure-call" fn(AlignRelevant, u32),                 //~ ERROR [E0798]
-    f5: extern "C-cmse-nonsecure-call" fn([u32; 5]),                           //~ ERROR [E0798]
+    f1: extern "cmse-nonsecure-call" fn(u32, u32, u32, u32, x: u32, y: u32), //~ ERROR [E0798]
+    f2: extern "cmse-nonsecure-call" fn(u32, u32, u32, u16, u16),            //~ ERROR [E0798]
+    f3: extern "cmse-nonsecure-call" fn(u32, u64, u32),                      //~ ERROR [E0798]
+    f4: extern "cmse-nonsecure-call" fn(AlignRelevant, u32),                 //~ ERROR [E0798]
+    f5: extern "cmse-nonsecure-call" fn([u32; 5]),                           //~ ERROR [E0798]
 ) {
 }
diff --git a/tests/ui/cmse-nonsecure/cmse-nonsecure-call/params-via-stack.stderr b/tests/ui/cmse-nonsecure/cmse-nonsecure-call/params-via-stack.stderr
index 10a5e856107..5d59405fbd1 100644
--- a/tests/ui/cmse-nonsecure/cmse-nonsecure-call/params-via-stack.stderr
+++ b/tests/ui/cmse-nonsecure/cmse-nonsecure-call/params-via-stack.stderr
@@ -1,42 +1,42 @@
-error[E0798]: arguments for `"C-cmse-nonsecure-call"` function too large to pass via registers
-  --> $DIR/params-via-stack.rs:16:63
+error[E0798]: arguments for `"cmse-nonsecure-call"` function too large to pass via registers
+  --> $DIR/params-via-stack.rs:16:61
    |
-LL |     f1: extern "C-cmse-nonsecure-call" fn(u32, u32, u32, u32, x: u32, y: u32),
-   |                                                               ^^^^^^^^^^^^^^ these arguments don't fit in the available registers
+LL |     f1: extern "cmse-nonsecure-call" fn(u32, u32, u32, u32, x: u32, y: u32),
+   |                                                             ^^^^^^^^^^^^^^ these arguments don't fit in the available registers
    |
-   = note: functions with the `"C-cmse-nonsecure-call"` ABI must pass all their arguments via the 4 32-bit available argument registers
+   = note: functions with the `"cmse-nonsecure-call"` ABI must pass all their arguments via the 4 32-bit available argument registers
 
-error[E0798]: arguments for `"C-cmse-nonsecure-call"` function too large to pass via registers
-  --> $DIR/params-via-stack.rs:17:63
+error[E0798]: arguments for `"cmse-nonsecure-call"` function too large to pass via registers
+  --> $DIR/params-via-stack.rs:17:61
    |
-LL |     f2: extern "C-cmse-nonsecure-call" fn(u32, u32, u32, u16, u16),
-   |                                                               ^^^ this argument doesn't fit in the available registers
+LL |     f2: extern "cmse-nonsecure-call" fn(u32, u32, u32, u16, u16),
+   |                                                             ^^^ this argument doesn't fit in the available registers
    |
-   = note: functions with the `"C-cmse-nonsecure-call"` ABI must pass all their arguments via the 4 32-bit available argument registers
+   = note: functions with the `"cmse-nonsecure-call"` ABI must pass all their arguments via the 4 32-bit available argument registers
 
-error[E0798]: arguments for `"C-cmse-nonsecure-call"` function too large to pass via registers
-  --> $DIR/params-via-stack.rs:18:53
+error[E0798]: arguments for `"cmse-nonsecure-call"` function too large to pass via registers
+  --> $DIR/params-via-stack.rs:18:51
    |
-LL |     f3: extern "C-cmse-nonsecure-call" fn(u32, u64, u32),
-   |                                                     ^^^ this argument doesn't fit in the available registers
+LL |     f3: extern "cmse-nonsecure-call" fn(u32, u64, u32),
+   |                                                   ^^^ this argument doesn't fit in the available registers
    |
-   = note: functions with the `"C-cmse-nonsecure-call"` ABI must pass all their arguments via the 4 32-bit available argument registers
+   = note: functions with the `"cmse-nonsecure-call"` ABI must pass all their arguments via the 4 32-bit available argument registers
 
-error[E0798]: arguments for `"C-cmse-nonsecure-call"` function too large to pass via registers
-  --> $DIR/params-via-stack.rs:19:58
+error[E0798]: arguments for `"cmse-nonsecure-call"` function too large to pass via registers
+  --> $DIR/params-via-stack.rs:19:56
    |
-LL |     f4: extern "C-cmse-nonsecure-call" fn(AlignRelevant, u32),
-   |                                                          ^^^ this argument doesn't fit in the available registers
+LL |     f4: extern "cmse-nonsecure-call" fn(AlignRelevant, u32),
+   |                                                        ^^^ this argument doesn't fit in the available registers
    |
-   = note: functions with the `"C-cmse-nonsecure-call"` ABI must pass all their arguments via the 4 32-bit available argument registers
+   = note: functions with the `"cmse-nonsecure-call"` ABI must pass all their arguments via the 4 32-bit available argument registers
 
-error[E0798]: arguments for `"C-cmse-nonsecure-call"` function too large to pass via registers
-  --> $DIR/params-via-stack.rs:20:43
+error[E0798]: arguments for `"cmse-nonsecure-call"` function too large to pass via registers
+  --> $DIR/params-via-stack.rs:20:41
    |
-LL |     f5: extern "C-cmse-nonsecure-call" fn([u32; 5]),
-   |                                           ^^^^^^^^ this argument doesn't fit in the available registers
+LL |     f5: extern "cmse-nonsecure-call" fn([u32; 5]),
+   |                                         ^^^^^^^^ this argument doesn't fit in the available registers
    |
-   = note: functions with the `"C-cmse-nonsecure-call"` ABI must pass all their arguments via the 4 32-bit available argument registers
+   = note: functions with the `"cmse-nonsecure-call"` ABI must pass all their arguments via the 4 32-bit available argument registers
 
 error: aborting due to 5 previous errors
 
diff --git a/tests/ui/cmse-nonsecure/cmse-nonsecure-call/return-via-stack.rs b/tests/ui/cmse-nonsecure/cmse-nonsecure-call/return-via-stack.rs
index 890ec4b00f6..77347b04ede 100644
--- a/tests/ui/cmse-nonsecure/cmse-nonsecure-call/return-via-stack.rs
+++ b/tests/ui/cmse-nonsecure/cmse-nonsecure-call/return-via-stack.rs
@@ -3,7 +3,7 @@
 //@ needs-llvm-components: arm
 //@ add-core-stubs
 
-#![feature(abi_c_cmse_nonsecure_call, no_core, lang_items)]
+#![feature(abi_cmse_nonsecure_call, no_core, lang_items)]
 #![no_core]
 
 extern crate minicore;
@@ -23,18 +23,18 @@ pub struct ReprCAlign16(u16);
 
 #[no_mangle]
 pub fn test(
-    f1: extern "C-cmse-nonsecure-call" fn() -> ReprCU64, //~ ERROR [E0798]
-    f2: extern "C-cmse-nonsecure-call" fn() -> ReprCBytes, //~ ERROR [E0798]
-    f3: extern "C-cmse-nonsecure-call" fn() -> U64Compound, //~ ERROR [E0798]
-    f4: extern "C-cmse-nonsecure-call" fn() -> ReprCAlign16, //~ ERROR [E0798]
-    f5: extern "C-cmse-nonsecure-call" fn() -> [u8; 5],  //~ ERROR [E0798]
+    f1: extern "cmse-nonsecure-call" fn() -> ReprCU64, //~ ERROR [E0798]
+    f2: extern "cmse-nonsecure-call" fn() -> ReprCBytes, //~ ERROR [E0798]
+    f3: extern "cmse-nonsecure-call" fn() -> U64Compound, //~ ERROR [E0798]
+    f4: extern "cmse-nonsecure-call" fn() -> ReprCAlign16, //~ ERROR [E0798]
+    f5: extern "cmse-nonsecure-call" fn() -> [u8; 5],  //~ ERROR [E0798]
 ) {
 }
 
 #[allow(improper_ctypes_definitions)]
 struct Test {
-    u128: extern "C-cmse-nonsecure-call" fn() -> u128, //~ ERROR [E0798]
-    i128: extern "C-cmse-nonsecure-call" fn() -> i128, //~ ERROR [E0798]
+    u128: extern "cmse-nonsecure-call" fn() -> u128, //~ ERROR [E0798]
+    i128: extern "cmse-nonsecure-call" fn() -> i128, //~ ERROR [E0798]
 }
 
 #[repr(C)]
@@ -49,7 +49,7 @@ pub union ReprRustUnionU64 {
 
 #[no_mangle]
 pub fn test_union(
-    f1: extern "C-cmse-nonsecure-call" fn() -> ReprRustUnionU64, //~ ERROR [E0798]
-    f2: extern "C-cmse-nonsecure-call" fn() -> ReprCUnionU64,    //~ ERROR [E0798]
+    f1: extern "cmse-nonsecure-call" fn() -> ReprRustUnionU64, //~ ERROR [E0798]
+    f2: extern "cmse-nonsecure-call" fn() -> ReprCUnionU64,    //~ ERROR [E0798]
 ) {
 }
diff --git a/tests/ui/cmse-nonsecure/cmse-nonsecure-call/return-via-stack.stderr b/tests/ui/cmse-nonsecure/cmse-nonsecure-call/return-via-stack.stderr
index d2077352900..ddf969c1bce 100644
--- a/tests/ui/cmse-nonsecure/cmse-nonsecure-call/return-via-stack.stderr
+++ b/tests/ui/cmse-nonsecure/cmse-nonsecure-call/return-via-stack.stderr
@@ -1,82 +1,82 @@
-error[E0798]: return value of `"C-cmse-nonsecure-call"` function too large to pass via registers
-  --> $DIR/return-via-stack.rs:36:50
+error[E0798]: return value of `"cmse-nonsecure-call"` function too large to pass via registers
+  --> $DIR/return-via-stack.rs:36:48
    |
-LL |     u128: extern "C-cmse-nonsecure-call" fn() -> u128,
-   |                                                  ^^^^ this type doesn't fit in the available registers
+LL |     u128: extern "cmse-nonsecure-call" fn() -> u128,
+   |                                                ^^^^ this type doesn't fit in the available registers
    |
-   = note: functions with the `"C-cmse-nonsecure-call"` ABI must pass their result via the available return registers
+   = note: functions with the `"cmse-nonsecure-call"` ABI must pass their result via the available return registers
    = note: the result must either be a (transparently wrapped) i64, u64 or f64, or be at most 4 bytes in size
 
-error[E0798]: return value of `"C-cmse-nonsecure-call"` function too large to pass via registers
-  --> $DIR/return-via-stack.rs:37:50
+error[E0798]: return value of `"cmse-nonsecure-call"` function too large to pass via registers
+  --> $DIR/return-via-stack.rs:37:48
    |
-LL |     i128: extern "C-cmse-nonsecure-call" fn() -> i128,
-   |                                                  ^^^^ this type doesn't fit in the available registers
+LL |     i128: extern "cmse-nonsecure-call" fn() -> i128,
+   |                                                ^^^^ this type doesn't fit in the available registers
    |
-   = note: functions with the `"C-cmse-nonsecure-call"` ABI must pass their result via the available return registers
+   = note: functions with the `"cmse-nonsecure-call"` ABI must pass their result via the available return registers
    = note: the result must either be a (transparently wrapped) i64, u64 or f64, or be at most 4 bytes in size
 
-error[E0798]: return value of `"C-cmse-nonsecure-call"` function too large to pass via registers
-  --> $DIR/return-via-stack.rs:26:48
+error[E0798]: return value of `"cmse-nonsecure-call"` function too large to pass via registers
+  --> $DIR/return-via-stack.rs:26:46
    |
-LL |     f1: extern "C-cmse-nonsecure-call" fn() -> ReprCU64,
-   |                                                ^^^^^^^^ this type doesn't fit in the available registers
+LL |     f1: extern "cmse-nonsecure-call" fn() -> ReprCU64,
+   |                                              ^^^^^^^^ this type doesn't fit in the available registers
    |
-   = note: functions with the `"C-cmse-nonsecure-call"` ABI must pass their result via the available return registers
+   = note: functions with the `"cmse-nonsecure-call"` ABI must pass their result via the available return registers
    = note: the result must either be a (transparently wrapped) i64, u64 or f64, or be at most 4 bytes in size
 
-error[E0798]: return value of `"C-cmse-nonsecure-call"` function too large to pass via registers
-  --> $DIR/return-via-stack.rs:27:48
+error[E0798]: return value of `"cmse-nonsecure-call"` function too large to pass via registers
+  --> $DIR/return-via-stack.rs:27:46
    |
-LL |     f2: extern "C-cmse-nonsecure-call" fn() -> ReprCBytes,
-   |                                                ^^^^^^^^^^ this type doesn't fit in the available registers
+LL |     f2: extern "cmse-nonsecure-call" fn() -> ReprCBytes,
+   |                                              ^^^^^^^^^^ this type doesn't fit in the available registers
    |
-   = note: functions with the `"C-cmse-nonsecure-call"` ABI must pass their result via the available return registers
+   = note: functions with the `"cmse-nonsecure-call"` ABI must pass their result via the available return registers
    = note: the result must either be a (transparently wrapped) i64, u64 or f64, or be at most 4 bytes in size
 
-error[E0798]: return value of `"C-cmse-nonsecure-call"` function too large to pass via registers
-  --> $DIR/return-via-stack.rs:28:48
+error[E0798]: return value of `"cmse-nonsecure-call"` function too large to pass via registers
+  --> $DIR/return-via-stack.rs:28:46
    |
-LL |     f3: extern "C-cmse-nonsecure-call" fn() -> U64Compound,
-   |                                                ^^^^^^^^^^^ this type doesn't fit in the available registers
+LL |     f3: extern "cmse-nonsecure-call" fn() -> U64Compound,
+   |                                              ^^^^^^^^^^^ this type doesn't fit in the available registers
    |
-   = note: functions with the `"C-cmse-nonsecure-call"` ABI must pass their result via the available return registers
+   = note: functions with the `"cmse-nonsecure-call"` ABI must pass their result via the available return registers
    = note: the result must either be a (transparently wrapped) i64, u64 or f64, or be at most 4 bytes in size
 
-error[E0798]: return value of `"C-cmse-nonsecure-call"` function too large to pass via registers
-  --> $DIR/return-via-stack.rs:29:48
+error[E0798]: return value of `"cmse-nonsecure-call"` function too large to pass via registers
+  --> $DIR/return-via-stack.rs:29:46
    |
-LL |     f4: extern "C-cmse-nonsecure-call" fn() -> ReprCAlign16,
-   |                                                ^^^^^^^^^^^^ this type doesn't fit in the available registers
+LL |     f4: extern "cmse-nonsecure-call" fn() -> ReprCAlign16,
+   |                                              ^^^^^^^^^^^^ this type doesn't fit in the available registers
    |
-   = note: functions with the `"C-cmse-nonsecure-call"` ABI must pass their result via the available return registers
+   = note: functions with the `"cmse-nonsecure-call"` ABI must pass their result via the available return registers
    = note: the result must either be a (transparently wrapped) i64, u64 or f64, or be at most 4 bytes in size
 
-error[E0798]: return value of `"C-cmse-nonsecure-call"` function too large to pass via registers
-  --> $DIR/return-via-stack.rs:30:48
+error[E0798]: return value of `"cmse-nonsecure-call"` function too large to pass via registers
+  --> $DIR/return-via-stack.rs:30:46
    |
-LL |     f5: extern "C-cmse-nonsecure-call" fn() -> [u8; 5],
-   |                                                ^^^^^^^ this type doesn't fit in the available registers
+LL |     f5: extern "cmse-nonsecure-call" fn() -> [u8; 5],
+   |                                              ^^^^^^^ this type doesn't fit in the available registers
    |
-   = note: functions with the `"C-cmse-nonsecure-call"` ABI must pass their result via the available return registers
+   = note: functions with the `"cmse-nonsecure-call"` ABI must pass their result via the available return registers
    = note: the result must either be a (transparently wrapped) i64, u64 or f64, or be at most 4 bytes in size
 
-error[E0798]: return value of `"C-cmse-nonsecure-call"` function too large to pass via registers
-  --> $DIR/return-via-stack.rs:52:48
+error[E0798]: return value of `"cmse-nonsecure-call"` function too large to pass via registers
+  --> $DIR/return-via-stack.rs:52:46
    |
-LL |     f1: extern "C-cmse-nonsecure-call" fn() -> ReprRustUnionU64,
-   |                                                ^^^^^^^^^^^^^^^^ this type doesn't fit in the available registers
+LL |     f1: extern "cmse-nonsecure-call" fn() -> ReprRustUnionU64,
+   |                                              ^^^^^^^^^^^^^^^^ this type doesn't fit in the available registers
    |
-   = note: functions with the `"C-cmse-nonsecure-call"` ABI must pass their result via the available return registers
+   = note: functions with the `"cmse-nonsecure-call"` ABI must pass their result via the available return registers
    = note: the result must either be a (transparently wrapped) i64, u64 or f64, or be at most 4 bytes in size
 
-error[E0798]: return value of `"C-cmse-nonsecure-call"` function too large to pass via registers
-  --> $DIR/return-via-stack.rs:53:48
+error[E0798]: return value of `"cmse-nonsecure-call"` function too large to pass via registers
+  --> $DIR/return-via-stack.rs:53:46
    |
-LL |     f2: extern "C-cmse-nonsecure-call" fn() -> ReprCUnionU64,
-   |                                                ^^^^^^^^^^^^^ this type doesn't fit in the available registers
+LL |     f2: extern "cmse-nonsecure-call" fn() -> ReprCUnionU64,
+   |                                              ^^^^^^^^^^^^^ this type doesn't fit in the available registers
    |
-   = note: functions with the `"C-cmse-nonsecure-call"` ABI must pass their result via the available return registers
+   = note: functions with the `"cmse-nonsecure-call"` ABI must pass their result via the available return registers
    = note: the result must either be a (transparently wrapped) i64, u64 or f64, or be at most 4 bytes in size
 
 error: aborting due to 9 previous errors
diff --git a/tests/ui/cmse-nonsecure/cmse-nonsecure-call/via-registers.rs b/tests/ui/cmse-nonsecure/cmse-nonsecure-call/via-registers.rs
index 7dfe6cf9672..419d26875bc 100644
--- a/tests/ui/cmse-nonsecure/cmse-nonsecure-call/via-registers.rs
+++ b/tests/ui/cmse-nonsecure/cmse-nonsecure-call/via-registers.rs
@@ -2,7 +2,7 @@
 //@ build-pass
 //@ compile-flags: --target thumbv8m.main-none-eabi --crate-type lib
 //@ needs-llvm-components: arm
-#![feature(abi_c_cmse_nonsecure_call, no_core, lang_items, intrinsics)]
+#![feature(abi_cmse_nonsecure_call, no_core, lang_items, intrinsics)]
 #![no_core]
 
 extern crate minicore;
@@ -27,26 +27,26 @@ pub struct U32Compound(u16, u16);
 #[no_mangle]
 #[allow(improper_ctypes_definitions)]
 pub fn params(
-    f1: extern "C-cmse-nonsecure-call" fn(),
-    f2: extern "C-cmse-nonsecure-call" fn(u32, u32, u32, u32),
-    f3: extern "C-cmse-nonsecure-call" fn(u64, u64),
-    f4: extern "C-cmse-nonsecure-call" fn(u128),
-    f5: extern "C-cmse-nonsecure-call" fn(f64, f32, f32),
-    f6: extern "C-cmse-nonsecure-call" fn(ReprTransparentStruct<u64>, U32Compound),
-    f7: extern "C-cmse-nonsecure-call" fn([u32; 4]),
+    f1: extern "cmse-nonsecure-call" fn(),
+    f2: extern "cmse-nonsecure-call" fn(u32, u32, u32, u32),
+    f3: extern "cmse-nonsecure-call" fn(u64, u64),
+    f4: extern "cmse-nonsecure-call" fn(u128),
+    f5: extern "cmse-nonsecure-call" fn(f64, f32, f32),
+    f6: extern "cmse-nonsecure-call" fn(ReprTransparentStruct<u64>, U32Compound),
+    f7: extern "cmse-nonsecure-call" fn([u32; 4]),
 ) {
 }
 
 #[no_mangle]
 pub fn returns(
-    f1: extern "C-cmse-nonsecure-call" fn() -> u32,
-    f2: extern "C-cmse-nonsecure-call" fn() -> u64,
-    f3: extern "C-cmse-nonsecure-call" fn() -> i64,
-    f4: extern "C-cmse-nonsecure-call" fn() -> f64,
-    f5: extern "C-cmse-nonsecure-call" fn() -> [u8; 4],
-    f6: extern "C-cmse-nonsecure-call" fn() -> ReprTransparentStruct<u64>,
-    f7: extern "C-cmse-nonsecure-call" fn() -> ReprTransparentStruct<ReprTransparentStruct<u64>>,
-    f8: extern "C-cmse-nonsecure-call" fn() -> ReprTransparentEnumU64,
-    f9: extern "C-cmse-nonsecure-call" fn() -> U32Compound,
+    f1: extern "cmse-nonsecure-call" fn() -> u32,
+    f2: extern "cmse-nonsecure-call" fn() -> u64,
+    f3: extern "cmse-nonsecure-call" fn() -> i64,
+    f4: extern "cmse-nonsecure-call" fn() -> f64,
+    f5: extern "cmse-nonsecure-call" fn() -> [u8; 4],
+    f6: extern "cmse-nonsecure-call" fn() -> ReprTransparentStruct<u64>,
+    f7: extern "cmse-nonsecure-call" fn() -> ReprTransparentStruct<ReprTransparentStruct<u64>>,
+    f8: extern "cmse-nonsecure-call" fn() -> ReprTransparentEnumU64,
+    f9: extern "cmse-nonsecure-call" fn() -> U32Compound,
 ) {
 }
diff --git a/tests/ui/cmse-nonsecure/cmse-nonsecure-call/wrong-abi-location-1.rs b/tests/ui/cmse-nonsecure/cmse-nonsecure-call/wrong-abi-location-1.rs
index 5a2d2db19c5..44a1e7d69a8 100644
--- a/tests/ui/cmse-nonsecure/cmse-nonsecure-call/wrong-abi-location-1.rs
+++ b/tests/ui/cmse-nonsecure/cmse-nonsecure-call/wrong-abi-location-1.rs
@@ -1,10 +1,10 @@
 //@ add-core-stubs
 //@ compile-flags: --target thumbv8m.main-none-eabi --crate-type lib
 //@ needs-llvm-components: arm
-#![feature(abi_c_cmse_nonsecure_call, lang_items, no_core)]
+#![feature(abi_cmse_nonsecure_call, lang_items, no_core)]
 #![no_core]
 
 extern crate minicore;
 use minicore::*;
 
-pub extern "C-cmse-nonsecure-call" fn test() {} //~ ERROR [E0781]
+pub extern "cmse-nonsecure-call" fn test() {} //~ ERROR [E0781]
diff --git a/tests/ui/cmse-nonsecure/cmse-nonsecure-call/wrong-abi-location-1.stderr b/tests/ui/cmse-nonsecure/cmse-nonsecure-call/wrong-abi-location-1.stderr
index f49fab043a4..b9cccecc64b 100644
--- a/tests/ui/cmse-nonsecure/cmse-nonsecure-call/wrong-abi-location-1.stderr
+++ b/tests/ui/cmse-nonsecure/cmse-nonsecure-call/wrong-abi-location-1.stderr
@@ -1,8 +1,8 @@
-error[E0781]: the `"C-cmse-nonsecure-call"` ABI is only allowed on function pointers
+error[E0781]: the `"cmse-nonsecure-call"` ABI is only allowed on function pointers
   --> $DIR/wrong-abi-location-1.rs:10:1
    |
-LL | pub extern "C-cmse-nonsecure-call" fn test() {}
-   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+LL | pub extern "cmse-nonsecure-call" fn test() {}
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
 error: aborting due to 1 previous error
 
diff --git a/tests/ui/cmse-nonsecure/cmse-nonsecure-call/wrong-abi-location-2.rs b/tests/ui/cmse-nonsecure/cmse-nonsecure-call/wrong-abi-location-2.rs
index e93b153949a..f23f45f786f 100644
--- a/tests/ui/cmse-nonsecure/cmse-nonsecure-call/wrong-abi-location-2.rs
+++ b/tests/ui/cmse-nonsecure/cmse-nonsecure-call/wrong-abi-location-2.rs
@@ -1,12 +1,12 @@
 //@ add-core-stubs
 //@ compile-flags: --target thumbv8m.main-none-eabi --crate-type lib
 //@ needs-llvm-components: arm
-#![feature(abi_c_cmse_nonsecure_call, lang_items, no_core)]
+#![feature(abi_cmse_nonsecure_call, lang_items, no_core)]
 #![no_core]
 
 extern crate minicore;
 use minicore::*;
 
-extern "C-cmse-nonsecure-call" { //~ ERROR [E0781]
+extern "cmse-nonsecure-call" { //~ ERROR [E0781]
     fn test();
 }
diff --git a/tests/ui/cmse-nonsecure/cmse-nonsecure-call/wrong-abi-location-2.stderr b/tests/ui/cmse-nonsecure/cmse-nonsecure-call/wrong-abi-location-2.stderr
index bae8d20d81c..437d7b80b1f 100644
--- a/tests/ui/cmse-nonsecure/cmse-nonsecure-call/wrong-abi-location-2.stderr
+++ b/tests/ui/cmse-nonsecure/cmse-nonsecure-call/wrong-abi-location-2.stderr
@@ -1,7 +1,7 @@
-error[E0781]: the `"C-cmse-nonsecure-call"` ABI is only allowed on function pointers
+error[E0781]: the `"cmse-nonsecure-call"` ABI is only allowed on function pointers
   --> $DIR/wrong-abi-location-2.rs:10:1
    |
-LL | / extern "C-cmse-nonsecure-call" {
+LL | / extern "cmse-nonsecure-call" {
 LL | |     fn test();
 LL | | }
    | |_^
diff --git a/tests/ui/cmse-nonsecure/cmse-nonsecure-entry/gate_test.rs b/tests/ui/cmse-nonsecure/cmse-nonsecure-entry/gate_test.rs
index de68097e139..8ec22033a3d 100644
--- a/tests/ui/cmse-nonsecure/cmse-nonsecure-entry/gate_test.rs
+++ b/tests/ui/cmse-nonsecure/cmse-nonsecure-entry/gate_test.rs
@@ -1,7 +1,7 @@
 // gate-test-cmse_nonsecure_entry
 
 #[no_mangle]
-pub extern "C-cmse-nonsecure-entry" fn entry_function(input: u32) -> u32 {
+pub extern "cmse-nonsecure-entry" fn entry_function(input: u32) -> u32 {
     //~^ ERROR: is not a supported ABI for the current target [E0570]
     //~| ERROR: ABI is experimental and subject to change [E0658]
     input + 6
diff --git a/tests/ui/cmse-nonsecure/cmse-nonsecure-entry/gate_test.stderr b/tests/ui/cmse-nonsecure/cmse-nonsecure-entry/gate_test.stderr
index 312f57591f9..e40862e74ee 100644
--- a/tests/ui/cmse-nonsecure/cmse-nonsecure-entry/gate_test.stderr
+++ b/tests/ui/cmse-nonsecure/cmse-nonsecure-entry/gate_test.stderr
@@ -1,14 +1,14 @@
-error[E0570]: "C-cmse-nonsecure-entry" is not a supported ABI for the current target
+error[E0570]: "cmse-nonsecure-entry" is not a supported ABI for the current target
   --> $DIR/gate_test.rs:4:12
    |
-LL | pub extern "C-cmse-nonsecure-entry" fn entry_function(input: u32) -> u32 {
-   |            ^^^^^^^^^^^^^^^^^^^^^^^^
+LL | pub extern "cmse-nonsecure-entry" fn entry_function(input: u32) -> u32 {
+   |            ^^^^^^^^^^^^^^^^^^^^^^
 
-error[E0658]: the extern "C-cmse-nonsecure-entry" ABI is experimental and subject to change
+error[E0658]: the extern "cmse-nonsecure-entry" ABI is experimental and subject to change
   --> $DIR/gate_test.rs:4:12
    |
-LL | pub extern "C-cmse-nonsecure-entry" fn entry_function(input: u32) -> u32 {
-   |            ^^^^^^^^^^^^^^^^^^^^^^^^
+LL | pub extern "cmse-nonsecure-entry" fn entry_function(input: u32) -> u32 {
+   |            ^^^^^^^^^^^^^^^^^^^^^^
    |
    = note: see issue #75835 <https://github.com/rust-lang/rust/issues/75835> for more information
    = help: add `#![feature(cmse_nonsecure_entry)]` to the crate attributes to enable
diff --git a/tests/ui/cmse-nonsecure/cmse-nonsecure-entry/generics.rs b/tests/ui/cmse-nonsecure/cmse-nonsecure-entry/generics.rs
index 19b6179dde7..800dd580af2 100644
--- a/tests/ui/cmse-nonsecure/cmse-nonsecure-entry/generics.rs
+++ b/tests/ui/cmse-nonsecure/cmse-nonsecure-entry/generics.rs
@@ -11,12 +11,12 @@ use minicore::*;
 struct Wrapper<T>(T);
 
 impl<T: Copy> Wrapper<T> {
-    extern "C-cmse-nonsecure-entry" fn ambient_generic(_: T, _: u32, _: u32, _: u32) -> u64 {
+    extern "cmse-nonsecure-entry" fn ambient_generic(_: T, _: u32, _: u32, _: u32) -> u64 {
         //~^ ERROR [E0798]
         0
     }
 
-    extern "C-cmse-nonsecure-entry" fn ambient_generic_nested(
+    extern "cmse-nonsecure-entry" fn ambient_generic_nested(
         //~^ ERROR [E0798]
         _: Wrapper<T>,
         _: u32,
@@ -27,7 +27,7 @@ impl<T: Copy> Wrapper<T> {
     }
 }
 
-extern "C-cmse-nonsecure-entry" fn introduced_generic<U: Copy>(
+extern "cmse-nonsecure-entry" fn introduced_generic<U: Copy>(
     //~^ ERROR [E0798]
     _: U,
     _: u32,
@@ -37,40 +37,40 @@ extern "C-cmse-nonsecure-entry" fn introduced_generic<U: Copy>(
     0
 }
 
-extern "C-cmse-nonsecure-entry" fn impl_trait(_: impl Copy, _: u32, _: u32, _: u32) -> u64 {
+extern "cmse-nonsecure-entry" fn impl_trait(_: impl Copy, _: u32, _: u32, _: u32) -> u64 {
     //~^ ERROR [E0798]
     0
 }
 
-extern "C-cmse-nonsecure-entry" fn reference(x: &usize) -> usize {
+extern "cmse-nonsecure-entry" fn reference(x: &usize) -> usize {
     *x
 }
 
 trait Trait {}
 
-extern "C-cmse-nonsecure-entry" fn trait_object(x: &dyn Trait) -> &dyn Trait {
-    //~^ ERROR return value of `"C-cmse-nonsecure-entry"` function too large to pass via registers [E0798]
+extern "cmse-nonsecure-entry" fn trait_object(x: &dyn Trait) -> &dyn Trait {
+    //~^ ERROR return value of `"cmse-nonsecure-entry"` function too large to pass via registers [E0798]
     x
 }
 
-extern "C-cmse-nonsecure-entry" fn static_trait_object(
+extern "cmse-nonsecure-entry" fn static_trait_object(
     x: &'static dyn Trait,
 ) -> &'static dyn Trait {
-    //~^ ERROR return value of `"C-cmse-nonsecure-entry"` function too large to pass via registers [E0798]
+    //~^ ERROR return value of `"cmse-nonsecure-entry"` function too large to pass via registers [E0798]
     x
 }
 
 #[repr(transparent)]
 struct WrapperTransparent<'a>(&'a dyn Trait);
 
-extern "C-cmse-nonsecure-entry" fn wrapped_trait_object(
+extern "cmse-nonsecure-entry" fn wrapped_trait_object(
     x: WrapperTransparent,
 ) -> WrapperTransparent {
-    //~^ ERROR return value of `"C-cmse-nonsecure-entry"` function too large to pass via registers [E0798]
+    //~^ ERROR return value of `"cmse-nonsecure-entry"` function too large to pass via registers [E0798]
     x
 }
 
-extern "C-cmse-nonsecure-entry" fn c_variadic(_: u32, _: ...) {
+extern "cmse-nonsecure-entry" fn c_variadic(_: u32, _: ...) {
     //~^ ERROR only foreign, `unsafe extern "C"`, or `unsafe extern "C-unwind"` functions may have a C-variadic arg
     //~| ERROR requires `va_list` lang_item
 }
diff --git a/tests/ui/cmse-nonsecure/cmse-nonsecure-entry/generics.stderr b/tests/ui/cmse-nonsecure/cmse-nonsecure-entry/generics.stderr
index c314671dc29..f0190671b5a 100644
--- a/tests/ui/cmse-nonsecure/cmse-nonsecure-entry/generics.stderr
+++ b/tests/ui/cmse-nonsecure/cmse-nonsecure-entry/generics.stderr
@@ -1,13 +1,13 @@
 error: only foreign, `unsafe extern "C"`, or `unsafe extern "C-unwind"` functions may have a C-variadic arg
-  --> $DIR/generics.rs:73:55
+  --> $DIR/generics.rs:73:53
    |
-LL | extern "C-cmse-nonsecure-entry" fn c_variadic(_: u32, _: ...) {
-   |                                                       ^^^^^^
+LL | extern "cmse-nonsecure-entry" fn c_variadic(_: u32, _: ...) {
+   |                                                     ^^^^^^
 
-error[E0798]: functions with the `"C-cmse-nonsecure-entry"` ABI cannot contain generics in their type
+error[E0798]: functions with the `"cmse-nonsecure-entry"` ABI cannot contain generics in their type
   --> $DIR/generics.rs:30:1
    |
-LL | / extern "C-cmse-nonsecure-entry" fn introduced_generic<U: Copy>(
+LL | / extern "cmse-nonsecure-entry" fn introduced_generic<U: Copy>(
 LL | |
 LL | |     _: U,
 LL | |     _: u32,
@@ -16,22 +16,22 @@ LL | |     _: u32,
 LL | | ) -> u64 {
    | |________^
 
-error[E0798]: functions with the `"C-cmse-nonsecure-entry"` ABI cannot contain generics in their type
+error[E0798]: functions with the `"cmse-nonsecure-entry"` ABI cannot contain generics in their type
   --> $DIR/generics.rs:40:1
    |
-LL | extern "C-cmse-nonsecure-entry" fn impl_trait(_: impl Copy, _: u32, _: u32, _: u32) -> u64 {
-   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+LL | extern "cmse-nonsecure-entry" fn impl_trait(_: impl Copy, _: u32, _: u32, _: u32) -> u64 {
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
-error[E0798]: functions with the `"C-cmse-nonsecure-entry"` ABI cannot contain generics in their type
+error[E0798]: functions with the `"cmse-nonsecure-entry"` ABI cannot contain generics in their type
   --> $DIR/generics.rs:14:5
    |
-LL |     extern "C-cmse-nonsecure-entry" fn ambient_generic(_: T, _: u32, _: u32, _: u32) -> u64 {
-   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+LL |     extern "cmse-nonsecure-entry" fn ambient_generic(_: T, _: u32, _: u32, _: u32) -> u64 {
+   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
-error[E0798]: functions with the `"C-cmse-nonsecure-entry"` ABI cannot contain generics in their type
+error[E0798]: functions with the `"cmse-nonsecure-entry"` ABI cannot contain generics in their type
   --> $DIR/generics.rs:19:5
    |
-LL | /     extern "C-cmse-nonsecure-entry" fn ambient_generic_nested(
+LL | /     extern "cmse-nonsecure-entry" fn ambient_generic_nested(
 LL | |
 LL | |         _: Wrapper<T>,
 LL | |         _: u32,
@@ -40,38 +40,38 @@ LL | |         _: u32,
 LL | |     ) -> u64 {
    | |____________^
 
-error[E0798]: return value of `"C-cmse-nonsecure-entry"` function too large to pass via registers
-  --> $DIR/generics.rs:51:67
+error[E0798]: return value of `"cmse-nonsecure-entry"` function too large to pass via registers
+  --> $DIR/generics.rs:51:65
    |
-LL | extern "C-cmse-nonsecure-entry" fn trait_object(x: &dyn Trait) -> &dyn Trait {
-   |                                                                   ^^^^^^^^^^ this type doesn't fit in the available registers
+LL | extern "cmse-nonsecure-entry" fn trait_object(x: &dyn Trait) -> &dyn Trait {
+   |                                                                 ^^^^^^^^^^ this type doesn't fit in the available registers
    |
-   = note: functions with the `"C-cmse-nonsecure-entry"` ABI must pass their result via the available return registers
+   = note: functions with the `"cmse-nonsecure-entry"` ABI must pass their result via the available return registers
    = note: the result must either be a (transparently wrapped) i64, u64 or f64, or be at most 4 bytes in size
 
-error[E0798]: return value of `"C-cmse-nonsecure-entry"` function too large to pass via registers
+error[E0798]: return value of `"cmse-nonsecure-entry"` function too large to pass via registers
   --> $DIR/generics.rs:58:6
    |
 LL | ) -> &'static dyn Trait {
    |      ^^^^^^^^^^^^^^^^^^ this type doesn't fit in the available registers
    |
-   = note: functions with the `"C-cmse-nonsecure-entry"` ABI must pass their result via the available return registers
+   = note: functions with the `"cmse-nonsecure-entry"` ABI must pass their result via the available return registers
    = note: the result must either be a (transparently wrapped) i64, u64 or f64, or be at most 4 bytes in size
 
-error[E0798]: return value of `"C-cmse-nonsecure-entry"` function too large to pass via registers
+error[E0798]: return value of `"cmse-nonsecure-entry"` function too large to pass via registers
   --> $DIR/generics.rs:68:6
    |
 LL | ) -> WrapperTransparent {
    |      ^^^^^^^^^^^^^^^^^^ this type doesn't fit in the available registers
    |
-   = note: functions with the `"C-cmse-nonsecure-entry"` ABI must pass their result via the available return registers
+   = note: functions with the `"cmse-nonsecure-entry"` ABI must pass their result via the available return registers
    = note: the result must either be a (transparently wrapped) i64, u64 or f64, or be at most 4 bytes in size
 
 error: requires `va_list` lang_item
-  --> $DIR/generics.rs:73:55
+  --> $DIR/generics.rs:73:53
    |
-LL | extern "C-cmse-nonsecure-entry" fn c_variadic(_: u32, _: ...) {
-   |                                                       ^^^^^^
+LL | extern "cmse-nonsecure-entry" fn c_variadic(_: u32, _: ...) {
+   |                                                     ^^^^^^
 
 error: aborting due to 9 previous errors
 
diff --git a/tests/ui/cmse-nonsecure/cmse-nonsecure-entry/params-via-stack.rs b/tests/ui/cmse-nonsecure/cmse-nonsecure-entry/params-via-stack.rs
index 4c53f9422da..d4f722fa193 100644
--- a/tests/ui/cmse-nonsecure/cmse-nonsecure-entry/params-via-stack.rs
+++ b/tests/ui/cmse-nonsecure/cmse-nonsecure-entry/params-via-stack.rs
@@ -12,14 +12,14 @@ use minicore::*;
 pub struct AlignRelevant(u32);
 
 #[no_mangle]
-pub extern "C-cmse-nonsecure-entry" fn f1(_: u32, _: u32, _: u32, _: u32, _: u32, _: u32) {} //~ ERROR [E0798]
+pub extern "cmse-nonsecure-entry" fn f1(_: u32, _: u32, _: u32, _: u32, _: u32, _: u32) {} //~ ERROR [E0798]
 #[no_mangle]
-pub extern "C-cmse-nonsecure-entry" fn f2(_: u32, _: u32, _: u32, _: u16, _: u16) {} //~ ERROR [E0798]
+pub extern "cmse-nonsecure-entry" fn f2(_: u32, _: u32, _: u32, _: u16, _: u16) {} //~ ERROR [E0798]
 #[no_mangle]
-pub extern "C-cmse-nonsecure-entry" fn f3(_: u32, _: u64, _: u32) {} //~ ERROR [E0798]
+pub extern "cmse-nonsecure-entry" fn f3(_: u32, _: u64, _: u32) {} //~ ERROR [E0798]
 #[no_mangle]
-pub extern "C-cmse-nonsecure-entry" fn f4(_: AlignRelevant, _: u32) {} //~ ERROR [E0798]
+pub extern "cmse-nonsecure-entry" fn f4(_: AlignRelevant, _: u32) {} //~ ERROR [E0798]
 
 #[no_mangle]
 #[allow(improper_ctypes_definitions)]
-pub extern "C-cmse-nonsecure-entry" fn f5(_: [u32; 5]) {} //~ ERROR [E0798]
+pub extern "cmse-nonsecure-entry" fn f5(_: [u32; 5]) {} //~ ERROR [E0798]
diff --git a/tests/ui/cmse-nonsecure/cmse-nonsecure-entry/params-via-stack.stderr b/tests/ui/cmse-nonsecure/cmse-nonsecure-entry/params-via-stack.stderr
index 24e9ddf32fe..f8b96bddc94 100644
--- a/tests/ui/cmse-nonsecure/cmse-nonsecure-entry/params-via-stack.stderr
+++ b/tests/ui/cmse-nonsecure/cmse-nonsecure-entry/params-via-stack.stderr
@@ -1,42 +1,42 @@
-error[E0798]: arguments for `"C-cmse-nonsecure-entry"` function too large to pass via registers
-  --> $DIR/params-via-stack.rs:15:78
+error[E0798]: arguments for `"cmse-nonsecure-entry"` function too large to pass via registers
+  --> $DIR/params-via-stack.rs:15:76
    |
-LL | pub extern "C-cmse-nonsecure-entry" fn f1(_: u32, _: u32, _: u32, _: u32, _: u32, _: u32) {}
-   |                                                                              ^^^^^^^^^^^ these arguments don't fit in the available registers
+LL | pub extern "cmse-nonsecure-entry" fn f1(_: u32, _: u32, _: u32, _: u32, _: u32, _: u32) {}
+   |                                                                            ^^^^^^^^^^^ these arguments don't fit in the available registers
    |
-   = note: functions with the `"C-cmse-nonsecure-entry"` ABI must pass all their arguments via the 4 32-bit available argument registers
+   = note: functions with the `"cmse-nonsecure-entry"` ABI must pass all their arguments via the 4 32-bit available argument registers
 
-error[E0798]: arguments for `"C-cmse-nonsecure-entry"` function too large to pass via registers
-  --> $DIR/params-via-stack.rs:17:78
+error[E0798]: arguments for `"cmse-nonsecure-entry"` function too large to pass via registers
+  --> $DIR/params-via-stack.rs:17:76
    |
-LL | pub extern "C-cmse-nonsecure-entry" fn f2(_: u32, _: u32, _: u32, _: u16, _: u16) {}
-   |                                                                              ^^^ this argument doesn't fit in the available registers
+LL | pub extern "cmse-nonsecure-entry" fn f2(_: u32, _: u32, _: u32, _: u16, _: u16) {}
+   |                                                                            ^^^ this argument doesn't fit in the available registers
    |
-   = note: functions with the `"C-cmse-nonsecure-entry"` ABI must pass all their arguments via the 4 32-bit available argument registers
+   = note: functions with the `"cmse-nonsecure-entry"` ABI must pass all their arguments via the 4 32-bit available argument registers
 
-error[E0798]: arguments for `"C-cmse-nonsecure-entry"` function too large to pass via registers
-  --> $DIR/params-via-stack.rs:19:62
+error[E0798]: arguments for `"cmse-nonsecure-entry"` function too large to pass via registers
+  --> $DIR/params-via-stack.rs:19:60
    |
-LL | pub extern "C-cmse-nonsecure-entry" fn f3(_: u32, _: u64, _: u32) {}
-   |                                                              ^^^ this argument doesn't fit in the available registers
+LL | pub extern "cmse-nonsecure-entry" fn f3(_: u32, _: u64, _: u32) {}
+   |                                                            ^^^ this argument doesn't fit in the available registers
    |
-   = note: functions with the `"C-cmse-nonsecure-entry"` ABI must pass all their arguments via the 4 32-bit available argument registers
+   = note: functions with the `"cmse-nonsecure-entry"` ABI must pass all their arguments via the 4 32-bit available argument registers
 
-error[E0798]: arguments for `"C-cmse-nonsecure-entry"` function too large to pass via registers
-  --> $DIR/params-via-stack.rs:21:64
+error[E0798]: arguments for `"cmse-nonsecure-entry"` function too large to pass via registers
+  --> $DIR/params-via-stack.rs:21:62
    |
-LL | pub extern "C-cmse-nonsecure-entry" fn f4(_: AlignRelevant, _: u32) {}
-   |                                                                ^^^ this argument doesn't fit in the available registers
+LL | pub extern "cmse-nonsecure-entry" fn f4(_: AlignRelevant, _: u32) {}
+   |                                                              ^^^ this argument doesn't fit in the available registers
    |
-   = note: functions with the `"C-cmse-nonsecure-entry"` ABI must pass all their arguments via the 4 32-bit available argument registers
+   = note: functions with the `"cmse-nonsecure-entry"` ABI must pass all their arguments via the 4 32-bit available argument registers
 
-error[E0798]: arguments for `"C-cmse-nonsecure-entry"` function too large to pass via registers
-  --> $DIR/params-via-stack.rs:25:46
+error[E0798]: arguments for `"cmse-nonsecure-entry"` function too large to pass via registers
+  --> $DIR/params-via-stack.rs:25:44
    |
-LL | pub extern "C-cmse-nonsecure-entry" fn f5(_: [u32; 5]) {}
-   |                                              ^^^^^^^^ this argument doesn't fit in the available registers
+LL | pub extern "cmse-nonsecure-entry" fn f5(_: [u32; 5]) {}
+   |                                            ^^^^^^^^ this argument doesn't fit in the available registers
    |
-   = note: functions with the `"C-cmse-nonsecure-entry"` ABI must pass all their arguments via the 4 32-bit available argument registers
+   = note: functions with the `"cmse-nonsecure-entry"` ABI must pass all their arguments via the 4 32-bit available argument registers
 
 error: aborting due to 5 previous errors
 
diff --git a/tests/ui/cmse-nonsecure/cmse-nonsecure-entry/return-via-stack.rs b/tests/ui/cmse-nonsecure/cmse-nonsecure-entry/return-via-stack.rs
index 735eab10fa1..0052a0977ed 100644
--- a/tests/ui/cmse-nonsecure/cmse-nonsecure-entry/return-via-stack.rs
+++ b/tests/ui/cmse-nonsecure/cmse-nonsecure-entry/return-via-stack.rs
@@ -22,41 +22,41 @@ pub struct U64Compound(u32, u32);
 pub struct ReprCAlign16(u16);
 
 #[no_mangle]
-pub extern "C-cmse-nonsecure-entry" fn f1() -> ReprCU64 {
+pub extern "cmse-nonsecure-entry" fn f1() -> ReprCU64 {
     //~^ ERROR [E0798]
     ReprCU64(0)
 }
 #[no_mangle]
-pub extern "C-cmse-nonsecure-entry" fn f2() -> ReprCBytes {
+pub extern "cmse-nonsecure-entry" fn f2() -> ReprCBytes {
     //~^ ERROR [E0798]
     ReprCBytes(0, 1, 2, 3, 4)
 }
 #[no_mangle]
-pub extern "C-cmse-nonsecure-entry" fn f3() -> U64Compound {
+pub extern "cmse-nonsecure-entry" fn f3() -> U64Compound {
     //~^ ERROR [E0798]
     U64Compound(2, 3)
 }
 #[no_mangle]
-pub extern "C-cmse-nonsecure-entry" fn f4() -> ReprCAlign16 {
+pub extern "cmse-nonsecure-entry" fn f4() -> ReprCAlign16 {
     //~^ ERROR [E0798]
     ReprCAlign16(4)
 }
 
 #[no_mangle]
 #[allow(improper_ctypes_definitions)]
-pub extern "C-cmse-nonsecure-entry" fn f5() -> [u8; 5] {
+pub extern "cmse-nonsecure-entry" fn f5() -> [u8; 5] {
     //~^ ERROR [E0798]
     [0xAA; 5]
 }
 #[no_mangle]
 #[allow(improper_ctypes_definitions)]
-pub extern "C-cmse-nonsecure-entry" fn u128() -> u128 {
+pub extern "cmse-nonsecure-entry" fn u128() -> u128 {
     //~^ ERROR [E0798]
     123
 }
 #[no_mangle]
 #[allow(improper_ctypes_definitions)]
-pub extern "C-cmse-nonsecure-entry" fn i128() -> i128 {
+pub extern "cmse-nonsecure-entry" fn i128() -> i128 {
     //~^ ERROR [E0798]
     456
 }
@@ -73,12 +73,12 @@ pub union ReprCUnionU64 {
 
 #[no_mangle]
 #[allow(improper_ctypes_definitions)]
-pub extern "C-cmse-nonsecure-entry" fn union_rust() -> ReprRustUnionU64 {
+pub extern "cmse-nonsecure-entry" fn union_rust() -> ReprRustUnionU64 {
     //~^ ERROR [E0798]
     ReprRustUnionU64 { _unused: 1 }
 }
 #[no_mangle]
-pub extern "C-cmse-nonsecure-entry" fn union_c() -> ReprCUnionU64 {
+pub extern "cmse-nonsecure-entry" fn union_c() -> ReprCUnionU64 {
     //~^ ERROR [E0798]
     ReprCUnionU64 { _unused: 2 }
 }
diff --git a/tests/ui/cmse-nonsecure/cmse-nonsecure-entry/return-via-stack.stderr b/tests/ui/cmse-nonsecure/cmse-nonsecure-entry/return-via-stack.stderr
index 9c885d95318..c5effed92ae 100644
--- a/tests/ui/cmse-nonsecure/cmse-nonsecure-entry/return-via-stack.stderr
+++ b/tests/ui/cmse-nonsecure/cmse-nonsecure-entry/return-via-stack.stderr
@@ -1,82 +1,82 @@
-error[E0798]: return value of `"C-cmse-nonsecure-entry"` function too large to pass via registers
-  --> $DIR/return-via-stack.rs:25:48
+error[E0798]: return value of `"cmse-nonsecure-entry"` function too large to pass via registers
+  --> $DIR/return-via-stack.rs:25:46
    |
-LL | pub extern "C-cmse-nonsecure-entry" fn f1() -> ReprCU64 {
-   |                                                ^^^^^^^^ this type doesn't fit in the available registers
+LL | pub extern "cmse-nonsecure-entry" fn f1() -> ReprCU64 {
+   |                                              ^^^^^^^^ this type doesn't fit in the available registers
    |
-   = note: functions with the `"C-cmse-nonsecure-entry"` ABI must pass their result via the available return registers
+   = note: functions with the `"cmse-nonsecure-entry"` ABI must pass their result via the available return registers
    = note: the result must either be a (transparently wrapped) i64, u64 or f64, or be at most 4 bytes in size
 
-error[E0798]: return value of `"C-cmse-nonsecure-entry"` function too large to pass via registers
-  --> $DIR/return-via-stack.rs:30:48
+error[E0798]: return value of `"cmse-nonsecure-entry"` function too large to pass via registers
+  --> $DIR/return-via-stack.rs:30:46
    |
-LL | pub extern "C-cmse-nonsecure-entry" fn f2() -> ReprCBytes {
-   |                                                ^^^^^^^^^^ this type doesn't fit in the available registers
+LL | pub extern "cmse-nonsecure-entry" fn f2() -> ReprCBytes {
+   |                                              ^^^^^^^^^^ this type doesn't fit in the available registers
    |
-   = note: functions with the `"C-cmse-nonsecure-entry"` ABI must pass their result via the available return registers
+   = note: functions with the `"cmse-nonsecure-entry"` ABI must pass their result via the available return registers
    = note: the result must either be a (transparently wrapped) i64, u64 or f64, or be at most 4 bytes in size
 
-error[E0798]: return value of `"C-cmse-nonsecure-entry"` function too large to pass via registers
-  --> $DIR/return-via-stack.rs:35:48
+error[E0798]: return value of `"cmse-nonsecure-entry"` function too large to pass via registers
+  --> $DIR/return-via-stack.rs:35:46
    |
-LL | pub extern "C-cmse-nonsecure-entry" fn f3() -> U64Compound {
-   |                                                ^^^^^^^^^^^ this type doesn't fit in the available registers
+LL | pub extern "cmse-nonsecure-entry" fn f3() -> U64Compound {
+   |                                              ^^^^^^^^^^^ this type doesn't fit in the available registers
    |
-   = note: functions with the `"C-cmse-nonsecure-entry"` ABI must pass their result via the available return registers
+   = note: functions with the `"cmse-nonsecure-entry"` ABI must pass their result via the available return registers
    = note: the result must either be a (transparently wrapped) i64, u64 or f64, or be at most 4 bytes in size
 
-error[E0798]: return value of `"C-cmse-nonsecure-entry"` function too large to pass via registers
-  --> $DIR/return-via-stack.rs:40:48
+error[E0798]: return value of `"cmse-nonsecure-entry"` function too large to pass via registers
+  --> $DIR/return-via-stack.rs:40:46
    |
-LL | pub extern "C-cmse-nonsecure-entry" fn f4() -> ReprCAlign16 {
-   |                                                ^^^^^^^^^^^^ this type doesn't fit in the available registers
+LL | pub extern "cmse-nonsecure-entry" fn f4() -> ReprCAlign16 {
+   |                                              ^^^^^^^^^^^^ this type doesn't fit in the available registers
    |
-   = note: functions with the `"C-cmse-nonsecure-entry"` ABI must pass their result via the available return registers
+   = note: functions with the `"cmse-nonsecure-entry"` ABI must pass their result via the available return registers
    = note: the result must either be a (transparently wrapped) i64, u64 or f64, or be at most 4 bytes in size
 
-error[E0798]: return value of `"C-cmse-nonsecure-entry"` function too large to pass via registers
-  --> $DIR/return-via-stack.rs:47:48
+error[E0798]: return value of `"cmse-nonsecure-entry"` function too large to pass via registers
+  --> $DIR/return-via-stack.rs:47:46
    |
-LL | pub extern "C-cmse-nonsecure-entry" fn f5() -> [u8; 5] {
-   |                                                ^^^^^^^ this type doesn't fit in the available registers
+LL | pub extern "cmse-nonsecure-entry" fn f5() -> [u8; 5] {
+   |                                              ^^^^^^^ this type doesn't fit in the available registers
    |
-   = note: functions with the `"C-cmse-nonsecure-entry"` ABI must pass their result via the available return registers
+   = note: functions with the `"cmse-nonsecure-entry"` ABI must pass their result via the available return registers
    = note: the result must either be a (transparently wrapped) i64, u64 or f64, or be at most 4 bytes in size
 
-error[E0798]: return value of `"C-cmse-nonsecure-entry"` function too large to pass via registers
-  --> $DIR/return-via-stack.rs:53:50
+error[E0798]: return value of `"cmse-nonsecure-entry"` function too large to pass via registers
+  --> $DIR/return-via-stack.rs:53:48
    |
-LL | pub extern "C-cmse-nonsecure-entry" fn u128() -> u128 {
-   |                                                  ^^^^ this type doesn't fit in the available registers
+LL | pub extern "cmse-nonsecure-entry" fn u128() -> u128 {
+   |                                                ^^^^ this type doesn't fit in the available registers
    |
-   = note: functions with the `"C-cmse-nonsecure-entry"` ABI must pass their result via the available return registers
+   = note: functions with the `"cmse-nonsecure-entry"` ABI must pass their result via the available return registers
    = note: the result must either be a (transparently wrapped) i64, u64 or f64, or be at most 4 bytes in size
 
-error[E0798]: return value of `"C-cmse-nonsecure-entry"` function too large to pass via registers
-  --> $DIR/return-via-stack.rs:59:50
+error[E0798]: return value of `"cmse-nonsecure-entry"` function too large to pass via registers
+  --> $DIR/return-via-stack.rs:59:48
    |
-LL | pub extern "C-cmse-nonsecure-entry" fn i128() -> i128 {
-   |                                                  ^^^^ this type doesn't fit in the available registers
+LL | pub extern "cmse-nonsecure-entry" fn i128() -> i128 {
+   |                                                ^^^^ this type doesn't fit in the available registers
    |
-   = note: functions with the `"C-cmse-nonsecure-entry"` ABI must pass their result via the available return registers
+   = note: functions with the `"cmse-nonsecure-entry"` ABI must pass their result via the available return registers
    = note: the result must either be a (transparently wrapped) i64, u64 or f64, or be at most 4 bytes in size
 
-error[E0798]: return value of `"C-cmse-nonsecure-entry"` function too large to pass via registers
-  --> $DIR/return-via-stack.rs:76:56
+error[E0798]: return value of `"cmse-nonsecure-entry"` function too large to pass via registers
+  --> $DIR/return-via-stack.rs:76:54
    |
-LL | pub extern "C-cmse-nonsecure-entry" fn union_rust() -> ReprRustUnionU64 {
-   |                                                        ^^^^^^^^^^^^^^^^ this type doesn't fit in the available registers
+LL | pub extern "cmse-nonsecure-entry" fn union_rust() -> ReprRustUnionU64 {
+   |                                                      ^^^^^^^^^^^^^^^^ this type doesn't fit in the available registers
    |
-   = note: functions with the `"C-cmse-nonsecure-entry"` ABI must pass their result via the available return registers
+   = note: functions with the `"cmse-nonsecure-entry"` ABI must pass their result via the available return registers
    = note: the result must either be a (transparently wrapped) i64, u64 or f64, or be at most 4 bytes in size
 
-error[E0798]: return value of `"C-cmse-nonsecure-entry"` function too large to pass via registers
-  --> $DIR/return-via-stack.rs:81:53
+error[E0798]: return value of `"cmse-nonsecure-entry"` function too large to pass via registers
+  --> $DIR/return-via-stack.rs:81:51
    |
-LL | pub extern "C-cmse-nonsecure-entry" fn union_c() -> ReprCUnionU64 {
-   |                                                     ^^^^^^^^^^^^^ this type doesn't fit in the available registers
+LL | pub extern "cmse-nonsecure-entry" fn union_c() -> ReprCUnionU64 {
+   |                                                   ^^^^^^^^^^^^^ this type doesn't fit in the available registers
    |
-   = note: functions with the `"C-cmse-nonsecure-entry"` ABI must pass their result via the available return registers
+   = note: functions with the `"cmse-nonsecure-entry"` ABI must pass their result via the available return registers
    = note: the result must either be a (transparently wrapped) i64, u64 or f64, or be at most 4 bytes in size
 
 error: aborting due to 9 previous errors
diff --git a/tests/ui/cmse-nonsecure/cmse-nonsecure-entry/trustzone-only.aarch64.stderr b/tests/ui/cmse-nonsecure/cmse-nonsecure-entry/trustzone-only.aarch64.stderr
index 3072d3a3abf..3949eac1542 100644
--- a/tests/ui/cmse-nonsecure/cmse-nonsecure-entry/trustzone-only.aarch64.stderr
+++ b/tests/ui/cmse-nonsecure/cmse-nonsecure-entry/trustzone-only.aarch64.stderr
@@ -1,8 +1,8 @@
-error[E0570]: "C-cmse-nonsecure-entry" is not a supported ABI for the current target
+error[E0570]: "cmse-nonsecure-entry" is not a supported ABI for the current target
   --> $DIR/trustzone-only.rs:17:12
    |
-LL | pub extern "C-cmse-nonsecure-entry" fn entry_function(input: u32) -> u32 {
-   |            ^^^^^^^^^^^^^^^^^^^^^^^^
+LL | pub extern "cmse-nonsecure-entry" fn entry_function(input: u32) -> u32 {
+   |            ^^^^^^^^^^^^^^^^^^^^^^
 
 error: aborting due to 1 previous error
 
diff --git a/tests/ui/cmse-nonsecure/cmse-nonsecure-entry/trustzone-only.rs b/tests/ui/cmse-nonsecure/cmse-nonsecure-entry/trustzone-only.rs
index 6d84dab2166..ff5d2ec0ab6 100644
--- a/tests/ui/cmse-nonsecure/cmse-nonsecure-entry/trustzone-only.rs
+++ b/tests/ui/cmse-nonsecure/cmse-nonsecure-entry/trustzone-only.rs
@@ -14,7 +14,7 @@ extern crate minicore;
 use minicore::*;
 
 #[no_mangle]
-pub extern "C-cmse-nonsecure-entry" fn entry_function(input: u32) -> u32 {
+pub extern "cmse-nonsecure-entry" fn entry_function(input: u32) -> u32 {
     //~^ ERROR [E0570]
     input
 }
diff --git a/tests/ui/cmse-nonsecure/cmse-nonsecure-entry/trustzone-only.thumb7.stderr b/tests/ui/cmse-nonsecure/cmse-nonsecure-entry/trustzone-only.thumb7.stderr
index 3072d3a3abf..3949eac1542 100644
--- a/tests/ui/cmse-nonsecure/cmse-nonsecure-entry/trustzone-only.thumb7.stderr
+++ b/tests/ui/cmse-nonsecure/cmse-nonsecure-entry/trustzone-only.thumb7.stderr
@@ -1,8 +1,8 @@
-error[E0570]: "C-cmse-nonsecure-entry" is not a supported ABI for the current target
+error[E0570]: "cmse-nonsecure-entry" is not a supported ABI for the current target
   --> $DIR/trustzone-only.rs:17:12
    |
-LL | pub extern "C-cmse-nonsecure-entry" fn entry_function(input: u32) -> u32 {
-   |            ^^^^^^^^^^^^^^^^^^^^^^^^
+LL | pub extern "cmse-nonsecure-entry" fn entry_function(input: u32) -> u32 {
+   |            ^^^^^^^^^^^^^^^^^^^^^^
 
 error: aborting due to 1 previous error
 
diff --git a/tests/ui/cmse-nonsecure/cmse-nonsecure-entry/trustzone-only.x86.stderr b/tests/ui/cmse-nonsecure/cmse-nonsecure-entry/trustzone-only.x86.stderr
index 3072d3a3abf..3949eac1542 100644
--- a/tests/ui/cmse-nonsecure/cmse-nonsecure-entry/trustzone-only.x86.stderr
+++ b/tests/ui/cmse-nonsecure/cmse-nonsecure-entry/trustzone-only.x86.stderr
@@ -1,8 +1,8 @@
-error[E0570]: "C-cmse-nonsecure-entry" is not a supported ABI for the current target
+error[E0570]: "cmse-nonsecure-entry" is not a supported ABI for the current target
   --> $DIR/trustzone-only.rs:17:12
    |
-LL | pub extern "C-cmse-nonsecure-entry" fn entry_function(input: u32) -> u32 {
-   |            ^^^^^^^^^^^^^^^^^^^^^^^^
+LL | pub extern "cmse-nonsecure-entry" fn entry_function(input: u32) -> u32 {
+   |            ^^^^^^^^^^^^^^^^^^^^^^
 
 error: aborting due to 1 previous error
 
diff --git a/tests/ui/cmse-nonsecure/cmse-nonsecure-entry/via-registers.rs b/tests/ui/cmse-nonsecure/cmse-nonsecure-entry/via-registers.rs
index 912fc8b85eb..34373288125 100644
--- a/tests/ui/cmse-nonsecure/cmse-nonsecure-entry/via-registers.rs
+++ b/tests/ui/cmse-nonsecure/cmse-nonsecure-entry/via-registers.rs
@@ -26,49 +26,49 @@ pub enum ReprTransparentEnumU64 {
 pub struct U32Compound(u16, u16);
 
 #[no_mangle]
-pub extern "C-cmse-nonsecure-entry" fn inputs1() {}
+pub extern "cmse-nonsecure-entry" fn inputs1() {}
 #[no_mangle]
-pub extern "C-cmse-nonsecure-entry" fn inputs2(_: u32, _: u32, _: u32, _: u32) {}
+pub extern "cmse-nonsecure-entry" fn inputs2(_: u32, _: u32, _: u32, _: u32) {}
 #[no_mangle]
-pub extern "C-cmse-nonsecure-entry" fn inputs3(_: u64, _: u64) {}
+pub extern "cmse-nonsecure-entry" fn inputs3(_: u64, _: u64) {}
 #[no_mangle]
 #[allow(improper_ctypes_definitions)]
-pub extern "C-cmse-nonsecure-entry" fn inputs4(_: u128) {}
+pub extern "cmse-nonsecure-entry" fn inputs4(_: u128) {}
 #[no_mangle]
-pub extern "C-cmse-nonsecure-entry" fn inputs5(_: f64, _: f32, _: f32) {}
+pub extern "cmse-nonsecure-entry" fn inputs5(_: f64, _: f32, _: f32) {}
 #[no_mangle]
-pub extern "C-cmse-nonsecure-entry" fn inputs6(_: ReprTransparentStruct<u64>, _: U32Compound) {}
+pub extern "cmse-nonsecure-entry" fn inputs6(_: ReprTransparentStruct<u64>, _: U32Compound) {}
 #[no_mangle]
 #[allow(improper_ctypes_definitions)]
-pub extern "C-cmse-nonsecure-entry" fn inputs7(_: [u32; 4]) {}
+pub extern "cmse-nonsecure-entry" fn inputs7(_: [u32; 4]) {}
 
 #[no_mangle]
-pub extern "C-cmse-nonsecure-entry" fn outputs1() -> u32 {
+pub extern "cmse-nonsecure-entry" fn outputs1() -> u32 {
     0
 }
 #[no_mangle]
-pub extern "C-cmse-nonsecure-entry" fn outputs2() -> u64 {
+pub extern "cmse-nonsecure-entry" fn outputs2() -> u64 {
     0
 }
 #[no_mangle]
-pub extern "C-cmse-nonsecure-entry" fn outputs3() -> i64 {
+pub extern "cmse-nonsecure-entry" fn outputs3() -> i64 {
     0
 }
 #[no_mangle]
-pub extern "C-cmse-nonsecure-entry" fn outputs4() -> f64 {
+pub extern "cmse-nonsecure-entry" fn outputs4() -> f64 {
     0.0
 }
 #[no_mangle]
 #[allow(improper_ctypes_definitions)]
-pub extern "C-cmse-nonsecure-entry" fn outputs5() -> [u8; 4] {
+pub extern "cmse-nonsecure-entry" fn outputs5() -> [u8; 4] {
     [0xAA; 4]
 }
 #[no_mangle]
-pub extern "C-cmse-nonsecure-entry" fn outputs6() -> ReprTransparentStruct<u64> {
+pub extern "cmse-nonsecure-entry" fn outputs6() -> ReprTransparentStruct<u64> {
     ReprTransparentStruct { _marker1: (), _marker2: (), field: 0xAA, _marker3: () }
 }
 #[no_mangle]
-pub extern "C-cmse-nonsecure-entry" fn outputs7(
+pub extern "cmse-nonsecure-entry" fn outputs7(
 ) -> ReprTransparentStruct<ReprTransparentStruct<u64>> {
     ReprTransparentStruct {
         _marker1: (),
@@ -78,10 +78,10 @@ pub extern "C-cmse-nonsecure-entry" fn outputs7(
     }
 }
 #[no_mangle]
-pub extern "C-cmse-nonsecure-entry" fn outputs8() -> ReprTransparentEnumU64 {
+pub extern "cmse-nonsecure-entry" fn outputs8() -> ReprTransparentEnumU64 {
     ReprTransparentEnumU64::A(0)
 }
 #[no_mangle]
-pub extern "C-cmse-nonsecure-entry" fn outputs9() -> U32Compound {
+pub extern "cmse-nonsecure-entry" fn outputs9() -> U32Compound {
     U32Compound(1, 2)
 }
diff --git a/tests/ui/coercion/invalid-blanket-coerce-unsized-impl.rs b/tests/ui/coercion/invalid-blanket-coerce-unsized-impl.rs
new file mode 100644
index 00000000000..a4fd7710718
--- /dev/null
+++ b/tests/ui/coercion/invalid-blanket-coerce-unsized-impl.rs
@@ -0,0 +1,13 @@
+// Regression test minimized from #126982.
+// We used to apply a coerce_unsized coercion to literally every argument since
+// the blanket applied in literally all cases, even though it was incoherent.
+
+#![feature(coerce_unsized)]
+
+impl<A> std::ops::CoerceUnsized<A> for A {}
+//~^ ERROR type parameter `A` must be used as the type parameter for some local type
+//~| ERROR the trait `CoerceUnsized` may only be implemented for a coercion between structures
+
+const C: usize = 1;
+
+fn main() {}
diff --git a/tests/ui/coercion/invalid-blanket-coerce-unsized-impl.stderr b/tests/ui/coercion/invalid-blanket-coerce-unsized-impl.stderr
new file mode 100644
index 00000000000..377906ee334
--- /dev/null
+++ b/tests/ui/coercion/invalid-blanket-coerce-unsized-impl.stderr
@@ -0,0 +1,19 @@
+error[E0210]: type parameter `A` must be used as the type parameter for some local type (e.g., `MyStruct<A>`)
+  --> $DIR/invalid-blanket-coerce-unsized-impl.rs:7:6
+   |
+LL | impl<A> std::ops::CoerceUnsized<A> for A {}
+   |      ^ type parameter `A` must be used as the type parameter for some local type
+   |
+   = note: implementing a foreign trait is only possible if at least one of the types for which it is implemented is local
+   = note: only traits defined in the current crate can be implemented for a type parameter
+
+error[E0377]: the trait `CoerceUnsized` may only be implemented for a coercion between structures
+  --> $DIR/invalid-blanket-coerce-unsized-impl.rs:7:1
+   |
+LL | impl<A> std::ops::CoerceUnsized<A> for A {}
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error: aborting due to 2 previous errors
+
+Some errors have detailed explanations: E0210, E0377.
+For more information about an error, try `rustc --explain E0210`.
diff --git a/tests/ui/defaults-well-formedness.rs b/tests/ui/defaults-well-formedness.rs
deleted file mode 100644
index e5e48edad88..00000000000
--- a/tests/ui/defaults-well-formedness.rs
+++ /dev/null
@@ -1,27 +0,0 @@
-//@ run-pass
-
-#![allow(dead_code)]
-trait Trait<T> {}
-struct Foo<U, V=i32>(U, V) where U: Trait<V>;
-
-trait Marker {}
-struct TwoParams<T, U>(T, U);
-impl Marker for TwoParams<i32, i32> {}
-
-// Clauses with more than 1 param are not checked.
-struct IndividuallyBogus<T = i32, U = i32>(TwoParams<T, U>) where TwoParams<T, U>: Marker;
-struct BogusTogether<T = u32, U = i32>(T, U) where TwoParams<T, U>: Marker;
-// Clauses with non-defaulted params are not checked.
-struct NonDefaultedInClause<T, U = i32>(TwoParams<T, U>) where TwoParams<T, U>: Marker;
-struct DefaultedLhs<U, V=i32>(U, V) where V: Trait<U>;
-// Dependent defaults are not checked.
-struct Dependent<T, U = T>(T, U) where U: Copy;
-trait SelfBound<T: Copy=Self> {}
-// Not even for well-formedness.
-struct WellFormedProjection<A, T=<A as Iterator>::Item>(A, T);
-
-// Issue #49344, predicates with lifetimes should not be checked.
-trait Scope<'a> {}
-struct Request<'a, S: Scope<'a> = i32>(S, &'a ());
-
-fn main() {}
diff --git a/tests/ui/deprecation-in-force-unstable.rs b/tests/ui/deprecation/deprecated_main_function.rs
index 6aaf29b069a..398046637d8 100644
--- a/tests/ui/deprecation-in-force-unstable.rs
+++ b/tests/ui/deprecation/deprecated_main_function.rs
@@ -2,4 +2,4 @@
 //@ compile-flags:-Zforce-unstable-if-unmarked
 
 #[deprecated] // should work even with -Zforce-unstable-if-unmarked
-fn main() { }
+fn main() {}
diff --git a/tests/ui/deref-rc.rs b/tests/ui/deref-rc.rs
deleted file mode 100644
index 92fdd900359..00000000000
--- a/tests/ui/deref-rc.rs
+++ /dev/null
@@ -1,8 +0,0 @@
-//@ run-pass
-
-use std::rc::Rc;
-
-fn main() {
-    let x = Rc::new([1, 2, 3, 4]);
-    assert_eq!(*x, [1, 2, 3, 4]);
-}
diff --git a/tests/ui/deref.rs b/tests/ui/deref.rs
deleted file mode 100644
index 0a6f3cc81f6..00000000000
--- a/tests/ui/deref.rs
+++ /dev/null
@@ -1,6 +0,0 @@
-//@ run-pass
-
-pub fn main() {
-    let x: Box<isize> = Box::new(10);
-    let _y: isize = *x;
-}
diff --git a/tests/ui/derive-uninhabited-enum-38885.rs b/tests/ui/derive-uninhabited-enum-38885.rs
deleted file mode 100644
index 2259a542706..00000000000
--- a/tests/ui/derive-uninhabited-enum-38885.rs
+++ /dev/null
@@ -1,19 +0,0 @@
-//@ check-pass
-//@ compile-flags: -Wunused
-
-// ensure there are no special warnings about uninhabited types
-// when deriving Debug on an empty enum
-
-#[derive(Debug)]
-enum Void {}
-
-#[derive(Debug)]
-enum Foo {
-    Bar(#[allow(dead_code)] u8),
-    Void(Void), //~ WARN variant `Void` is never constructed
-}
-
-fn main() {
-    let x = Foo::Bar(42);
-    println!("{:?}", x);
-}
diff --git a/tests/ui/derives/derive-debug-uninhabited-enum.rs b/tests/ui/derives/derive-debug-uninhabited-enum.rs
new file mode 100644
index 00000000000..be7b3ab348d
--- /dev/null
+++ b/tests/ui/derives/derive-debug-uninhabited-enum.rs
@@ -0,0 +1,23 @@
+//! Regression test for `#[derive(Debug)]` on enums with uninhabited variants.
+//!
+//! Ensures there are no special warnings about uninhabited types when deriving
+//! Debug on an enum with uninhabited variants, only standard unused warnings.
+//!
+//! Issue: https://github.com/rust-lang/rust/issues/38885
+
+//@ check-pass
+//@ compile-flags: -Wunused
+
+#[derive(Debug)]
+enum Void {}
+
+#[derive(Debug)]
+enum Foo {
+    Bar(#[allow(dead_code)] u8),
+    Void(Void), //~ WARN variant `Void` is never constructed
+}
+
+fn main() {
+    let x = Foo::Bar(42);
+    println!("{:?}", x);
+}
diff --git a/tests/ui/derive-uninhabited-enum-38885.stderr b/tests/ui/derives/derive-debug-uninhabited-enum.stderr
index bcd8f6b7b53..4911b6b6cde 100644
--- a/tests/ui/derive-uninhabited-enum-38885.stderr
+++ b/tests/ui/derives/derive-debug-uninhabited-enum.stderr
@@ -1,5 +1,5 @@
 warning: variant `Void` is never constructed
-  --> $DIR/derive-uninhabited-enum-38885.rs:13:5
+  --> $DIR/derive-debug-uninhabited-enum.rs:17:5
    |
 LL | enum Foo {
    |      --- variant in this enum
diff --git a/tests/ui/destructure-trait-ref.rs b/tests/ui/destructure-trait-ref.rs
deleted file mode 100644
index daa0ca30d68..00000000000
--- a/tests/ui/destructure-trait-ref.rs
+++ /dev/null
@@ -1,46 +0,0 @@
-// The regression test for #15031 to make sure destructuring trait
-// reference work properly.
-
-//@ dont-require-annotations: NOTE
-
-#![feature(box_patterns)]
-
-trait T { fn foo(&self) {} }
-impl T for isize {}
-
-
-fn main() {
-    // For an expression of the form:
-    //
-    //      let &...&x = &..&SomeTrait;
-    //
-    // Say we have n `&` at the left hand and m `&` right hand, then:
-    // if n < m, we are golden;
-    // if n == m, it's a derefing non-derefable type error;
-    // if n > m, it's a type mismatch error.
-
-    // n < m
-    let &x = &(&1isize as &dyn T);
-    let &x = &&(&1isize as &dyn T);
-    let &&x = &&(&1isize as &dyn T);
-
-    // n == m
-    let &x = &1isize as &dyn T;      //~ ERROR type `&dyn T` cannot be dereferenced
-    let &&x = &(&1isize as &dyn T);  //~ ERROR type `&dyn T` cannot be dereferenced
-    let box x = Box::new(1isize) as Box<dyn T>;
-    //~^ ERROR type `Box<dyn T>` cannot be dereferenced
-
-    // n > m
-    let &&x = &1isize as &dyn T;
-    //~^ ERROR mismatched types
-    //~| NOTE expected trait object `dyn T`
-    //~| NOTE found reference `&_`
-    let &&&x = &(&1isize as &dyn T);
-    //~^ ERROR mismatched types
-    //~| NOTE expected trait object `dyn T`
-    //~| NOTE found reference `&_`
-    let box box x = Box::new(1isize) as Box<dyn T>;
-    //~^ ERROR mismatched types
-    //~| NOTE expected trait object `dyn T`
-    //~| NOTE found struct `Box<_>`
-}
diff --git a/tests/ui/diverging-fallback-method-chain.rs b/tests/ui/diverging-fallback-method-chain.rs
deleted file mode 100644
index aa8eba1191b..00000000000
--- a/tests/ui/diverging-fallback-method-chain.rs
+++ /dev/null
@@ -1,20 +0,0 @@
-//@ run-pass
-
-#![allow(unused_imports)]
-// Test a regression found when building compiler. The `produce()`
-// error type `T` winds up getting unified with result of `x.parse()`;
-// the type of the closure given to `unwrap_or_else` needs to be
-// inferred to `usize`.
-
-use std::num::ParseIntError;
-
-fn produce<T>() -> Result<&'static str, T> {
-    Ok("22")
-}
-
-fn main() {
-    let x: usize = produce()
-        .and_then(|x| x.parse())
-        .unwrap_or_else(|_| panic!());
-    println!("{}", x);
-}
diff --git a/tests/ui/diverging-fallback-option.rs b/tests/ui/diverging-fallback-option.rs
deleted file mode 100644
index aa793ebd017..00000000000
--- a/tests/ui/diverging-fallback-option.rs
+++ /dev/null
@@ -1,14 +0,0 @@
-//@ run-pass
-
-#![allow(warnings)]
-
-// Here the type of `c` is `Option<?T>`, where `?T` is unconstrained.
-// Because there is data-flow from the `{ return; }` block, which
-// diverges and hence has type `!`, into `c`, we will default `?T` to
-// `!`, and hence this code compiles rather than failing and requiring
-// a type annotation.
-
-fn main() {
-    let c = Some({ return; });
-    c.unwrap();
-}
diff --git a/tests/ui/expr/if/if-else-chain-missing-else.stderr b/tests/ui/expr/if/if-else-chain-missing-else.stderr
index 374c4927e30..6c437120d39 100644
--- a/tests/ui/expr/if/if-else-chain-missing-else.stderr
+++ b/tests/ui/expr/if/if-else-chain-missing-else.stderr
@@ -1,18 +1,15 @@
 error[E0308]: `if` and `else` have incompatible types
   --> $DIR/if-else-chain-missing-else.rs:12:12
    |
-LL |        let x = if let Ok(x) = res {
-   |  ______________-
-LL | |          x
-   | |          - expected because of this
-LL | |      } else if let Err(e) = res {
-   | | ____________^
-LL | ||         return Err(e);
-LL | ||     };
-   | ||     ^
-   | ||_____|
-   |  |_____`if` and `else` have incompatible types
-   |        expected `i32`, found `()`
+LL |       let x = if let Ok(x) = res {
+   |               ------------------ `if` and `else` have incompatible types
+LL |           x
+   |           - expected because of this
+LL |       } else if let Err(e) = res {
+   |  ____________^
+LL | |         return Err(e);
+LL | |     };
+   | |_____^ expected `i32`, found `()`
    |
    = note: `if` expressions without `else` evaluate to `()`
    = note: consider adding an `else` block that evaluates to the expected type
diff --git a/tests/ui/expr/if/if-else-type-mismatch.stderr b/tests/ui/expr/if/if-else-type-mismatch.stderr
index 1cf94c98800..56181267a31 100644
--- a/tests/ui/expr/if/if-else-type-mismatch.stderr
+++ b/tests/ui/expr/if/if-else-type-mismatch.stderr
@@ -92,13 +92,16 @@ LL | |     };
 error[E0308]: `if` and `else` have incompatible types
   --> $DIR/if-else-type-mismatch.rs:37:9
    |
-LL |       let _ = if true {
-   |  _____________________-
-LL | |
-LL | |     } else {
-   | |_____- expected because of this
-LL |           11u32
-   |           ^^^^^ expected `()`, found `u32`
+LL |        let _ = if true {
+   |  ______________-       -
+   | | _____________________|
+LL | ||
+LL | ||     } else {
+   | ||_____- expected because of this
+LL | |          11u32
+   | |          ^^^^^ expected `()`, found `u32`
+LL | |      };
+   | |______- `if` and `else` have incompatible types
 
 error[E0308]: `if` and `else` have incompatible types
   --> $DIR/if-else-type-mismatch.rs:42:12
diff --git a/tests/ui/generics/default-type-params-well-formedness.rs b/tests/ui/generics/default-type-params-well-formedness.rs
new file mode 100644
index 00000000000..22b8f5011f7
--- /dev/null
+++ b/tests/ui/generics/default-type-params-well-formedness.rs
@@ -0,0 +1,50 @@
+//! Test for well-formedness checking of default type parameters.
+//!
+//! Regression Test for: https://github.com/rust-lang/rust/issues/49344
+
+//@ run-pass
+
+#![allow(dead_code)]
+
+trait Trait<T> {}
+struct Foo<U, V = i32>(U, V)
+where
+    U: Trait<V>;
+
+trait Marker {}
+struct TwoParams<T, U>(T, U);
+impl Marker for TwoParams<i32, i32> {}
+
+// Clauses with more than 1 param are not checked.
+struct IndividuallyBogus<T = i32, U = i32>(TwoParams<T, U>)
+where
+    TwoParams<T, U>: Marker;
+
+struct BogusTogether<T = u32, U = i32>(T, U)
+where
+    TwoParams<T, U>: Marker;
+
+// Clauses with non-defaulted params are not checked.
+struct NonDefaultedInClause<T, U = i32>(TwoParams<T, U>)
+where
+    TwoParams<T, U>: Marker;
+
+struct DefaultedLhs<U, V = i32>(U, V)
+where
+    V: Trait<U>;
+
+// Dependent defaults are not checked.
+struct Dependent<T, U = T>(T, U)
+where
+    U: Copy;
+
+trait SelfBound<T: Copy = Self> {}
+
+// Not even for well-formedness.
+struct WellFormedProjection<A, T = <A as Iterator>::Item>(A, T);
+
+// Issue #49344, predicates with lifetimes should not be checked.
+trait Scope<'a> {}
+struct Request<'a, S: Scope<'a> = i32>(S, &'a ());
+
+fn main() {}
diff --git a/tests/ui/inference/deref-suggestion.stderr b/tests/ui/inference/deref-suggestion.stderr
index 096989db0b4..8ccd28198af 100644
--- a/tests/ui/inference/deref-suggestion.stderr
+++ b/tests/ui/inference/deref-suggestion.stderr
@@ -164,21 +164,18 @@ LL |         *b
 error[E0308]: `if` and `else` have incompatible types
   --> $DIR/deref-suggestion.rs:69:12
    |
-LL |        let val = if true {
-   |  ________________-
-LL | |          *a
-   | |          -- expected because of this
-LL | |      } else if true {
-   | | ____________^
-LL | ||
-LL | ||         b
-LL | ||     } else {
-LL | ||         &0
-LL | ||     };
-   | ||     ^
-   | ||_____|
-   |  |_____`if` and `else` have incompatible types
-   |        expected `i32`, found `&{integer}`
+LL |       let val = if true {
+   |                 ------- `if` and `else` have incompatible types
+LL |           *a
+   |           -- expected because of this
+LL |       } else if true {
+   |  ____________^
+LL | |
+LL | |         b
+LL | |     } else {
+LL | |         &0
+LL | |     };
+   | |_____^ expected `i32`, found `&{integer}`
 
 error[E0308]: mismatched types
   --> $DIR/deref-suggestion.rs:81:15
diff --git a/tests/ui/moves/moves-based-on-type-capture-clause-bad.fixed b/tests/ui/moves/moves-based-on-type-capture-clause-bad.fixed
new file mode 100644
index 00000000000..04a183ca96b
--- /dev/null
+++ b/tests/ui/moves/moves-based-on-type-capture-clause-bad.fixed
@@ -0,0 +1,11 @@
+//@ run-rustfix
+use std::thread;
+
+fn main() {
+    let x = "Hello world!".to_string();
+    let value = x.clone();
+    thread::spawn(move || {
+        println!("{}", value);
+    });
+    println!("{}", x); //~ ERROR borrow of moved value
+}
diff --git a/tests/ui/moves/moves-based-on-type-capture-clause-bad.rs b/tests/ui/moves/moves-based-on-type-capture-clause-bad.rs
index 9d7277c1c24..c9a7f2c8ed8 100644
--- a/tests/ui/moves/moves-based-on-type-capture-clause-bad.rs
+++ b/tests/ui/moves/moves-based-on-type-capture-clause-bad.rs
@@ -1,3 +1,4 @@
+//@ run-rustfix
 use std::thread;
 
 fn main() {
diff --git a/tests/ui/moves/moves-based-on-type-capture-clause-bad.stderr b/tests/ui/moves/moves-based-on-type-capture-clause-bad.stderr
index c2b9aeab237..17049fe6731 100644
--- a/tests/ui/moves/moves-based-on-type-capture-clause-bad.stderr
+++ b/tests/ui/moves/moves-based-on-type-capture-clause-bad.stderr
@@ -1,5 +1,5 @@
 error[E0382]: borrow of moved value: `x`
-  --> $DIR/moves-based-on-type-capture-clause-bad.rs:8:20
+  --> $DIR/moves-based-on-type-capture-clause-bad.rs:9:20
    |
 LL |     let x = "Hello world!".to_string();
    |         - move occurs because `x` has type `String`, which does not implement the `Copy` trait
@@ -12,6 +12,12 @@ LL |     println!("{}", x);
    |                    ^ value borrowed here after move
    |
    = note: this error originates in the macro `$crate::format_args_nl` which comes from the expansion of the macro `println` (in Nightly builds, run with -Z macro-backtrace for more info)
+help: consider cloning the value before moving it into the closure
+   |
+LL ~     let value = x.clone();
+LL ~     thread::spawn(move || {
+LL ~         println!("{}", value);
+   |
 
 error: aborting due to 1 previous error
 
diff --git a/tests/ui/no-capture-arc.rs b/tests/ui/moves/no-capture-arc.rs
index 9c957a4e01b..9c957a4e01b 100644
--- a/tests/ui/no-capture-arc.rs
+++ b/tests/ui/moves/no-capture-arc.rs
diff --git a/tests/ui/no-capture-arc.stderr b/tests/ui/moves/no-capture-arc.stderr
index 9c1f5c65066..6d4a867fa88 100644
--- a/tests/ui/no-capture-arc.stderr
+++ b/tests/ui/moves/no-capture-arc.stderr
@@ -13,6 +13,12 @@ LL |     assert_eq!((*arc_v)[2], 3);
    |                  ^^^^^ value borrowed here after move
    |
    = note: borrow occurs due to deref coercion to `Vec<i32>`
+help: consider cloning the value before moving it into the closure
+   |
+LL ~     let value = arc_v.clone();
+LL ~     thread::spawn(move|| {
+LL ~         assert_eq!((*value)[3], 4);
+   |
 
 error: aborting due to 1 previous error
 
diff --git a/tests/ui/moves/no-reuse-move-arc.fixed b/tests/ui/moves/no-reuse-move-arc.fixed
new file mode 100644
index 00000000000..a5dac8cc14b
--- /dev/null
+++ b/tests/ui/moves/no-reuse-move-arc.fixed
@@ -0,0 +1,17 @@
+//@ run-rustfix
+use std::sync::Arc;
+use std::thread;
+
+fn main() {
+    let v = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
+    let arc_v = Arc::new(v);
+
+    let value = arc_v.clone();
+    thread::spawn(move|| {
+        assert_eq!((*value)[3], 4);
+    });
+
+    assert_eq!((*arc_v)[2], 3); //~ ERROR borrow of moved value: `arc_v`
+
+    println!("{:?}", *arc_v);
+}
diff --git a/tests/ui/no-reuse-move-arc.rs b/tests/ui/moves/no-reuse-move-arc.rs
index 9c957a4e01b..0d67aa56489 100644
--- a/tests/ui/no-reuse-move-arc.rs
+++ b/tests/ui/moves/no-reuse-move-arc.rs
@@ -1,3 +1,4 @@
+//@ run-rustfix
 use std::sync::Arc;
 use std::thread;
 
diff --git a/tests/ui/no-reuse-move-arc.stderr b/tests/ui/moves/no-reuse-move-arc.stderr
index 61f4837dc0e..aff979af905 100644
--- a/tests/ui/no-reuse-move-arc.stderr
+++ b/tests/ui/moves/no-reuse-move-arc.stderr
@@ -1,5 +1,5 @@
 error[E0382]: borrow of moved value: `arc_v`
-  --> $DIR/no-reuse-move-arc.rs:12:18
+  --> $DIR/no-reuse-move-arc.rs:13:18
    |
 LL |     let arc_v = Arc::new(v);
    |         ----- move occurs because `arc_v` has type `Arc<Vec<i32>>`, which does not implement the `Copy` trait
@@ -13,6 +13,12 @@ LL |     assert_eq!((*arc_v)[2], 3);
    |                  ^^^^^ value borrowed here after move
    |
    = note: borrow occurs due to deref coercion to `Vec<i32>`
+help: consider cloning the value before moving it into the closure
+   |
+LL ~     let value = arc_v.clone();
+LL ~     thread::spawn(move|| {
+LL ~         assert_eq!((*value)[3], 4);
+   |
 
 error: aborting due to 1 previous error
 
diff --git a/tests/ui/never_type/never-type-fallback-option.rs b/tests/ui/never_type/never-type-fallback-option.rs
new file mode 100644
index 00000000000..9c8103aa0a4
--- /dev/null
+++ b/tests/ui/never_type/never-type-fallback-option.rs
@@ -0,0 +1,22 @@
+//@ run-pass
+
+#![allow(warnings)]
+
+//! Tests type inference fallback to `!` (never type) in `Option` context.
+//!
+//! Regression test for issues:
+//! - https://github.com/rust-lang/rust/issues/39808
+//! - https://github.com/rust-lang/rust/issues/39984
+//!
+//! Here the type of `c` is `Option<?T>`, where `?T` is unconstrained.
+//! Because there is data-flow from the `{ return; }` block, which
+//! diverges and hence has type `!`, into `c`, we will default `?T` to
+//! `!`, and hence this code compiles rather than failing and requiring
+//! a type annotation.
+
+fn main() {
+    let c = Some({
+        return;
+    });
+    c.unwrap();
+}
diff --git a/tests/ui/print-calling-conventions.stdout b/tests/ui/print-calling-conventions.stdout
index 4df6bd27f45..b8b939e1c04 100644
--- a/tests/ui/print-calling-conventions.stdout
+++ b/tests/ui/print-calling-conventions.stdout
@@ -1,6 +1,4 @@
 C
-C-cmse-nonsecure-call
-C-cmse-nonsecure-entry
 C-unwind
 Rust
 aapcs
@@ -9,6 +7,8 @@ avr-interrupt
 avr-non-blocking-interrupt
 cdecl
 cdecl-unwind
+cmse-nonsecure-call
+cmse-nonsecure-entry
 custom
 efiapi
 fastcall
diff --git a/tests/ui/stats/input-stats.rs b/tests/ui/stats/input-stats.rs
index e760e2894e3..4e8e25eb736 100644
--- a/tests/ui/stats/input-stats.rs
+++ b/tests/ui/stats/input-stats.rs
@@ -1,6 +1,7 @@
 //@ check-pass
 //@ compile-flags: -Zinput-stats
 //@ only-64bit
+//@ needs-asm-support
 // layout randomization affects the hir stat output
 //@ needs-deterministic-layouts
 //
@@ -49,5 +50,7 @@ fn main() {
         _ => {}
     }
 
-    unsafe { asm!("mov rdi, 1"); }
+    // NOTE(workingjubilee): do GPUs support NOPs? remove this cfg if they do
+    #[cfg(not(any(target_arch = "nvptx64", target_arch = "amdgpu")))]
+    unsafe { asm!("nop"); }
 }
diff --git a/tests/ui/stats/input-stats.stderr b/tests/ui/stats/input-stats.stderr
index b3b8784fa27..eb038bbcaf1 100644
--- a/tests/ui/stats/input-stats.stderr
+++ b/tests/ui/stats/input-stats.stderr
@@ -15,7 +15,7 @@ ast-stats - Ptr                       64 (NN.N%)             1
 ast-stats - Ref                       64 (NN.N%)             1
 ast-stats - ImplicitSelf             128 (NN.N%)             2
 ast-stats - Path                     640 (NN.N%)            10
-ast-stats PathSegment              864 (NN.N%)            36            24
+ast-stats PathSegment              888 (NN.N%)            37            24
 ast-stats Expr                     648 (NN.N%)             9            72
 ast-stats - InlineAsm                 72 (NN.N%)             1
 ast-stats - Match                     72 (NN.N%)             1
@@ -41,9 +41,9 @@ ast-stats - Let                       32 (NN.N%)             1
 ast-stats - Semi                      32 (NN.N%)             1
 ast-stats - Expr                      96 (NN.N%)             3
 ast-stats Param                    160 (NN.N%)             4            40
-ast-stats Attribute                128 (NN.N%)             4            32
+ast-stats Attribute                160 (NN.N%)             5            32
 ast-stats - DocComment                32 (NN.N%)             1
-ast-stats - Normal                    96 (NN.N%)             3
+ast-stats - Normal                   128 (NN.N%)             4
 ast-stats InlineAsm                120 (NN.N%)             1           120
 ast-stats FnDecl                   120 (NN.N%)             5            24
 ast-stats Local                     96 (NN.N%)             1            96
@@ -57,7 +57,7 @@ ast-stats GenericArgs               40 (NN.N%)             1            40
 ast-stats - AngleBracketed            40 (NN.N%)             1
 ast-stats Crate                     40 (NN.N%)             1            40
 ast-stats ----------------------------------------------------------------
-ast-stats Total                  7_416                   127
+ast-stats Total                  7_472                   129
 ast-stats ================================================================
 hir-stats ================================================================
 hir-stats HIR STATS: input_stats
@@ -93,7 +93,7 @@ hir-stats - Binding                  216 (NN.N%)             3
 hir-stats Block                    288 (NN.N%)             6            48
 hir-stats GenericBound             256 (NN.N%)             4            64
 hir-stats - Trait                    256 (NN.N%)             4
-hir-stats Attribute                160 (NN.N%)             4            40
+hir-stats Attribute                200 (NN.N%)             5            40
 hir-stats Variant                  144 (NN.N%)             2            72
 hir-stats GenericArgs              144 (NN.N%)             3            48
 hir-stats FieldDef                 128 (NN.N%)             2            64
@@ -119,5 +119,5 @@ hir-stats Mod                       32 (NN.N%)             1            32
 hir-stats Lifetime                  28 (NN.N%)             1            28
 hir-stats ForeignItemRef            24 (NN.N%)             1            24
 hir-stats ----------------------------------------------------------------
-hir-stats Total                  8_676                   172
+hir-stats Total                  8_716                   173
 hir-stats ================================================================
diff --git a/tests/ui/suggestions/option-content-move3.stderr b/tests/ui/suggestions/option-content-move3.stderr
index a20dcce1ee3..faaf8a9df9d 100644
--- a/tests/ui/suggestions/option-content-move3.stderr
+++ b/tests/ui/suggestions/option-content-move3.stderr
@@ -79,7 +79,7 @@ LL |             let x = var;
    |                     variable moved due to use in closure
    |                     move occurs because `var` has type `NotCopyableButCloneable`, which does not implement the `Copy` trait
    |
-help: clone the value before moving it into the closure
+help: consider cloning the value before moving it into the closure
    |
 LL ~         {
 LL +         let value = var.clone();
diff --git a/tests/ui/suggestions/return-bindings.stderr b/tests/ui/suggestions/return-bindings.stderr
index 8e396d17dc0..651998043e1 100644
--- a/tests/ui/suggestions/return-bindings.stderr
+++ b/tests/ui/suggestions/return-bindings.stderr
@@ -62,12 +62,16 @@ LL ~
 error[E0308]: `if` and `else` have incompatible types
   --> $DIR/return-bindings.rs:30:9
    |
-LL |       let s = if let Some(s) = opt_str {
-   |  ______________________________________-
-LL | |     } else {
-   | |_____- expected because of this
-LL |           String::new()
-   |           ^^^^^^^^^^^^^ expected `()`, found `String`
+LL |        let s = if let Some(s) = opt_str {
+   |  ______________-                        -
+   | | ______________________________________|
+LL | ||     } else {
+   | ||_____- expected because of this
+LL | |          String::new()
+   | |          ^^^^^^^^^^^^^ expected `()`, found `String`
+LL | |
+LL | |      };
+   | |______- `if` and `else` have incompatible types
    |
 help: consider returning the local binding `s`
    |
diff --git a/tests/ui/traits/trait-object-destructure.rs b/tests/ui/traits/trait-object-destructure.rs
new file mode 100644
index 00000000000..6c091677c8c
--- /dev/null
+++ b/tests/ui/traits/trait-object-destructure.rs
@@ -0,0 +1,29 @@
+//! Regression test for destructuring trait references (`&dyn T`/`Box<dyn T>`).
+//! Checks cases where number of `&`/`Box` patterns (n) matches/doesn't match references (m).
+//!
+//! Issue: https://github.com/rust-lang/rust/issues/15031
+
+#![feature(box_patterns)]
+
+trait T {
+    fn foo(&self) {}
+}
+
+impl T for isize {}
+
+fn main() {
+    // Valid cases: n < m (can dereference)
+    let &x = &(&1isize as &dyn T);
+    let &x = &&(&1isize as &dyn T);
+    let &&x = &&(&1isize as &dyn T);
+
+    // Error cases: n == m (cannot dereference trait object)
+    let &x = &1isize as &dyn T; //~ ERROR type `&dyn T` cannot be dereferenced
+    let &&x = &(&1isize as &dyn T); //~ ERROR type `&dyn T` cannot be dereferenced
+    let box x = Box::new(1isize) as Box<dyn T>; //~ ERROR type `Box<dyn T>` cannot be dereferenced
+
+    // Error cases: n > m (type mismatch)
+    let &&x = &1isize as &dyn T; //~ ERROR mismatched types
+    let &&&x = &(&1isize as &dyn T); //~ ERROR mismatched types
+    let box box x = Box::new(1isize) as Box<dyn T>; //~ ERROR mismatched types
+}
diff --git a/tests/ui/destructure-trait-ref.stderr b/tests/ui/traits/trait-object-destructure.stderr
index 0b5ea551a57..c7c832dc40a 100644
--- a/tests/ui/destructure-trait-ref.stderr
+++ b/tests/ui/traits/trait-object-destructure.stderr
@@ -1,23 +1,23 @@
 error[E0033]: type `&dyn T` cannot be dereferenced
-  --> $DIR/destructure-trait-ref.rs:28:9
+  --> $DIR/trait-object-destructure.rs:21:9
    |
 LL |     let &x = &1isize as &dyn T;
    |         ^^ type `&dyn T` cannot be dereferenced
 
 error[E0033]: type `&dyn T` cannot be dereferenced
-  --> $DIR/destructure-trait-ref.rs:29:10
+  --> $DIR/trait-object-destructure.rs:22:10
    |
 LL |     let &&x = &(&1isize as &dyn T);
    |          ^^ type `&dyn T` cannot be dereferenced
 
 error[E0033]: type `Box<dyn T>` cannot be dereferenced
-  --> $DIR/destructure-trait-ref.rs:30:9
+  --> $DIR/trait-object-destructure.rs:23:9
    |
 LL |     let box x = Box::new(1isize) as Box<dyn T>;
    |         ^^^^^ type `Box<dyn T>` cannot be dereferenced
 
 error[E0308]: mismatched types
-  --> $DIR/destructure-trait-ref.rs:34:10
+  --> $DIR/trait-object-destructure.rs:26:10
    |
 LL |     let &&x = &1isize as &dyn T;
    |          ^^   ----------------- this expression has type `&dyn T`
@@ -33,7 +33,7 @@ LL +     let &x = &1isize as &dyn T;
    |
 
 error[E0308]: mismatched types
-  --> $DIR/destructure-trait-ref.rs:38:11
+  --> $DIR/trait-object-destructure.rs:27:11
    |
 LL |     let &&&x = &(&1isize as &dyn T);
    |           ^^   -------------------- this expression has type `&&dyn T`
@@ -49,7 +49,7 @@ LL +     let &&x = &(&1isize as &dyn T);
    |
 
 error[E0308]: mismatched types
-  --> $DIR/destructure-trait-ref.rs:42:13
+  --> $DIR/trait-object-destructure.rs:28:13
    |
 LL |     let box box x = Box::new(1isize) as Box<dyn T>;
    |             ^^^^^   ------------------------------ this expression has type `Box<dyn T>`
diff --git a/tests/ui/typeck/consider-borrowing-141810-1.stderr b/tests/ui/typeck/consider-borrowing-141810-1.stderr
index 9291721ac71..35ca6793eee 100644
--- a/tests/ui/typeck/consider-borrowing-141810-1.stderr
+++ b/tests/ui/typeck/consider-borrowing-141810-1.stderr
@@ -1,20 +1,17 @@
 error[E0308]: `if` and `else` have incompatible types
   --> $DIR/consider-borrowing-141810-1.rs:4:12
    |
-LL |        let x = if true {
-   |  ______________-
-LL | |          &true
-   | |          ----- expected because of this
-LL | |      } else if false {
-   | | ____________^
-LL | ||         true
-LL | ||     } else {
-LL | ||         true
-LL | ||     };
-   | ||     ^
-   | ||_____|
-   |  |_____`if` and `else` have incompatible types
-   |        expected `&bool`, found `bool`
+LL |       let x = if true {
+   |               ------- `if` and `else` have incompatible types
+LL |           &true
+   |           ----- expected because of this
+LL |       } else if false {
+   |  ____________^
+LL | |         true
+LL | |     } else {
+LL | |         true
+LL | |     };
+   | |_____^ expected `&bool`, found `bool`
    |
 help: consider borrowing here
    |
diff --git a/tests/ui/typeck/consider-borrowing-141810-2.stderr b/tests/ui/typeck/consider-borrowing-141810-2.stderr
index dd229897283..44ecb5a4a94 100644
--- a/tests/ui/typeck/consider-borrowing-141810-2.stderr
+++ b/tests/ui/typeck/consider-borrowing-141810-2.stderr
@@ -1,18 +1,15 @@
 error[E0308]: `if` and `else` have incompatible types
   --> $DIR/consider-borrowing-141810-2.rs:4:12
    |
-LL |        let x = if true {
-   |  ______________-
-LL | |          &()
-   | |          --- expected because of this
-LL | |      } else if false {
-   | | ____________^
-LL | ||     } else {
-LL | ||     };
-   | ||     ^
-   | ||_____|
-   |  |_____`if` and `else` have incompatible types
-   |        expected `&()`, found `()`
+LL |       let x = if true {
+   |               ------- `if` and `else` have incompatible types
+LL |           &()
+   |           --- expected because of this
+LL |       } else if false {
+   |  ____________^
+LL | |     } else {
+LL | |     };
+   | |_____^ expected `&()`, found `()`
 
 error: aborting due to 1 previous error
 
diff --git a/tests/ui/typeck/consider-borrowing-141810-3.stderr b/tests/ui/typeck/consider-borrowing-141810-3.stderr
index 0b0c5f191a0..3adf8ba1a89 100644
--- a/tests/ui/typeck/consider-borrowing-141810-3.stderr
+++ b/tests/ui/typeck/consider-borrowing-141810-3.stderr
@@ -1,18 +1,15 @@
 error[E0308]: `if` and `else` have incompatible types
   --> $DIR/consider-borrowing-141810-3.rs:4:12
    |
-LL |        let x = if true {
-   |  ______________-
-LL | |          &()
-   | |          --- expected because of this
-LL | |      } else if false {
-   | | ____________^
-LL | ||
-LL | ||     };
-   | ||     ^
-   | ||_____|
-   |  |_____`if` and `else` have incompatible types
-   |        expected `&()`, found `()`
+LL |       let x = if true {
+   |               ------- `if` and `else` have incompatible types
+LL |           &()
+   |           --- expected because of this
+LL |       } else if false {
+   |  ____________^
+LL | |
+LL | |     };
+   | |_____^ expected `&()`, found `()`
    |
    = note: `if` expressions without `else` evaluate to `()`
    = note: consider adding an `else` block that evaluates to the expected type
diff --git a/tests/ui/typeck/inference-method-chain-diverging-fallback.rs b/tests/ui/typeck/inference-method-chain-diverging-fallback.rs
new file mode 100644
index 00000000000..8f549b7d9d6
--- /dev/null
+++ b/tests/ui/typeck/inference-method-chain-diverging-fallback.rs
@@ -0,0 +1,19 @@
+//! Test type inference in method chains with diverging fallback.
+//! Verifies that closure type in `unwrap_or_else` is properly inferred
+//! when chained with other combinators and contains a diverging path.
+
+//@ run-pass
+
+fn produce<T>() -> Result<&'static str, T> {
+    Ok("22")
+}
+
+fn main() {
+    // The closure's error type `T` must unify with `ParseIntError`,
+    // while the success type must be `usize` (from parse())
+    let x: usize = produce()
+        .and_then(|x| x.parse::<usize>()) // Explicit turbofish for clarity
+        .unwrap_or_else(|_| panic!()); // Diverging fallback
+
+    assert_eq!(x, 22);
+}