about summary refs log tree commit diff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/codegen-llvm/align-byval-alignment-mismatch.rs4
-rw-r--r--tests/codegen-llvm/autodiff/autodiffv2.rs (renamed from tests/codegen-llvm/autodiffv2.rs)7
-rw-r--r--tests/codegen-llvm/autodiff/batched.rs71
-rw-r--r--tests/codegen-llvm/autodiff/generic.rs17
-rw-r--r--tests/codegen-llvm/autodiff/identical_fnc.rs10
-rw-r--r--tests/codegen-llvm/autodiff/inline.rs23
-rw-r--r--tests/codegen-llvm/autodiff/scalar.rs3
-rw-r--r--tests/codegen-llvm/autodiff/sret.rs28
-rw-r--r--tests/codegen-llvm/autodiff/trait.rs30
-rw-r--r--tests/codegen-llvm/call-tmps-lifetime.rs16
-rw-r--r--tests/codegen-llvm/intrinsics/transmute-simd.rs24
-rw-r--r--tests/codegen-llvm/intrinsics/transmute.rs8
-rw-r--r--tests/codegen-llvm/issues/issue-105386-ub-in-debuginfo.rs2
-rw-r--r--tests/codegen-llvm/lifetime_start_end.rs16
-rw-r--r--tests/codegen-llvm/uninhabited-transparent-return-abi.rs4
-rw-r--r--tests/pretty/autodiff/autodiff_forward.pp106
-rw-r--r--tests/pretty/autodiff/autodiff_reverse.pp40
-rw-r--r--tests/pretty/autodiff/autodiff_reverse.rs4
-rw-r--r--tests/pretty/autodiff/inherent_impl.pp12
-rw-r--r--tests/run-make/lto-long-filenames/main.rs7
-rw-r--r--tests/run-make/lto-long-filenames/rmake.rs32
-rw-r--r--tests/run-make/wasm-unexpected-features/foo.rs43
-rw-r--r--tests/run-make/wasm-unexpected-features/rmake.rs26
-rw-r--r--tests/rustdoc-js-std/core-transmute.js2
-rw-r--r--tests/rustdoc-js-std/transmute-fail.js2
-rw-r--r--tests/rustdoc-js-std/transmute.js2
-rw-r--r--tests/rustdoc-js/sort-stability.js9
-rw-r--r--tests/rustdoc-js/sort-stability.rs16
-rw-r--r--tests/ui/abi/interrupt-invalid-signature.avr.stderr28
-rw-r--r--tests/ui/abi/interrupt-invalid-signature.i686.stderr15
-rw-r--r--tests/ui/abi/interrupt-invalid-signature.msp430.stderr28
-rw-r--r--tests/ui/abi/interrupt-invalid-signature.riscv32.stderr54
-rw-r--r--tests/ui/abi/interrupt-invalid-signature.riscv64.stderr54
-rw-r--r--tests/ui/abi/interrupt-invalid-signature.rs110
-rw-r--r--tests/ui/abi/interrupt-invalid-signature.x64.stderr15
-rw-r--r--tests/ui/abi/interrupt-returns-never-or-unit.rs110
-rw-r--r--tests/ui/autodiff/macro_hygiene.rs22
-rw-r--r--tests/ui/codemap_tests/issue-28308.rs16
-rw-r--r--tests/ui/codemap_tests/issue-28308.stderr28
-rw-r--r--tests/ui/consts/control-flow/assert.stderr4
-rw-r--r--tests/ui/explicit-tail-calls/callee_is_track_caller.rs5
-rw-r--r--tests/ui/explicit-tail-calls/callee_is_track_caller.stderr10
-rw-r--r--tests/ui/explicit-tail-calls/callee_is_track_caller_polymorphic.rs20
-rw-r--r--tests/ui/explicit-tail-calls/callee_is_track_caller_polymorphic.stderr10
-rw-r--r--tests/ui/explicit-tail-calls/caller-lifetime-presence.rs51
-rw-r--r--tests/ui/explicit-tail-calls/caller-lifetime-presence.stderr32
-rw-r--r--tests/ui/extern-flag/empty-extern-arg.rs1
-rw-r--r--tests/ui/extern-flag/empty-extern-arg.stderr4
-rw-r--r--tests/ui/generics/post_monomorphization_error_backtrace.stderr8
-rw-r--r--tests/ui/inline-const/const-expr-generic-err.stderr4
-rw-r--r--tests/ui/macros/assert-macro-lifetimes.rs8
-rw-r--r--tests/ui/mir/alignment/packed.rs2
-rw-r--r--tests/ui/parser/inverted-parameters.rs1
-rw-r--r--tests/ui/parser/inverted-parameters.stderr7
-rw-r--r--tests/ui/parser/lifetime-in-pattern.stderr5
-rw-r--r--tests/ui/parser/omitted-arg-in-item-fn.stderr5
-rw-r--r--tests/ui/parser/pat-lt-bracket-2.stderr5
-rw-r--r--tests/ui/parser/suggest-self-in-bare-function.rs25
-rw-r--r--tests/ui/parser/suggest-self-in-bare-function.stderr56
-rw-r--r--tests/ui/proc-macro/derive-helper-legacy-spurious.rs2
-rw-r--r--tests/ui/proc-macro/derive-helper-legacy-spurious.stderr8
-rw-r--r--tests/ui/resolve/inner-attr-prelude-macro.rs11
-rw-r--r--tests/ui/resolve/issue-104700-inner_scope.rs7
-rw-r--r--tests/ui/resolve/issue-104700-inner_scope.stderr16
-rw-r--r--tests/ui/simd/const-err-trumps-simd-err.stderr4
-rw-r--r--tests/ui/span/issue-34264.stderr11
-rw-r--r--tests/ui/structs/default-field-values/non-exhaustive-ctor-not-found.rs8
-rw-r--r--tests/ui/structs/default-field-values/non-exhaustive-ctor-not-found.stderr22
-rw-r--r--tests/ui/suggestions/issue-64252-self-type.stderr6
-rw-r--r--tests/ui/thir-print/thir-tree-loop-match.stdout4
-rw-r--r--tests/ui/transmutability/uninhabited.stderr12
-rw-r--r--tests/ui/type/issue-102598.stderr1
-rw-r--r--tests/ui/unpretty/exhaustive.expanded.stdout6
-rw-r--r--tests/ui/unpretty/exhaustive.hir.stdout6
-rw-r--r--tests/ui/unpretty/exhaustive.rs6
75 files changed, 1063 insertions, 374 deletions
diff --git a/tests/codegen-llvm/align-byval-alignment-mismatch.rs b/tests/codegen-llvm/align-byval-alignment-mismatch.rs
index c69fc2de9d2..8eaf2751ed7 100644
--- a/tests/codegen-llvm/align-byval-alignment-mismatch.rs
+++ b/tests/codegen-llvm/align-byval-alignment-mismatch.rs
@@ -55,10 +55,10 @@ extern "C" {
 pub unsafe fn rust_to_c_increases_alignment(x: Align1) {
     // i686-linux: start:
     // i686-linux-NEXT: [[ALLOCA:%[0-9a-z]+]] = alloca [48 x i8], align 4
-    // i686-linux-NEXT: call void @llvm.lifetime.start.p0(i64 48, ptr {{.*}}[[ALLOCA]])
+    // i686-linux-NEXT: call void @llvm.lifetime.start.p0({{(i64 48, )?}}ptr {{.*}}[[ALLOCA]])
     // i686-linux-NEXT: call void @llvm.memcpy.{{.+}}(ptr {{.*}}align 4 {{.*}}[[ALLOCA]], ptr {{.*}}align 1 {{.*}}%x
     // i686-linux-NEXT: call void @extern_c_align1({{.+}} [[ALLOCA]])
-    // i686-linux-NEXT: call void @llvm.lifetime.end.p0(i64 48, ptr {{.*}}[[ALLOCA]])
+    // i686-linux-NEXT: call void @llvm.lifetime.end.p0({{(i64 48, )?}}ptr {{.*}}[[ALLOCA]])
 
     // x86_64-linux: start:
     // x86_64-linux-NEXT: call void @extern_c_align1
diff --git a/tests/codegen-llvm/autodiffv2.rs b/tests/codegen-llvm/autodiff/autodiffv2.rs
index a40d19d3be3..85aed6a183b 100644
--- a/tests/codegen-llvm/autodiffv2.rs
+++ b/tests/codegen-llvm/autodiff/autodiffv2.rs
@@ -26,12 +26,13 @@
 
 #![feature(autodiff)]
 
-use std::autodiff::autodiff;
+use std::autodiff::autodiff_forward;
 
+// CHECK: ;
 #[no_mangle]
 //#[autodiff(d_square1, Forward, Dual, Dual)]
-#[autodiff(d_square2, Forward, 4, Dualv, Dualv)]
-#[autodiff(d_square3, Forward, 4, Dual, Dual)]
+#[autodiff_forward(d_square2, 4, Dualv, Dualv)]
+#[autodiff_forward(d_square3, 4, Dual, Dual)]
 fn square(x: &[f32], y: &mut [f32]) {
     assert!(x.len() >= 4);
     assert!(y.len() >= 5);
diff --git a/tests/codegen-llvm/autodiff/batched.rs b/tests/codegen-llvm/autodiff/batched.rs
index d27aed50e6c..306a6ed9d1f 100644
--- a/tests/codegen-llvm/autodiff/batched.rs
+++ b/tests/codegen-llvm/autodiff/batched.rs
@@ -17,11 +17,12 @@ use std::autodiff::autodiff_forward;
 #[autodiff_forward(d_square2, 4, Dual, DualOnly)]
 #[autodiff_forward(d_square1, 4, Dual, Dual)]
 #[no_mangle]
+#[inline(never)]
 fn square(x: &f32) -> f32 {
     x * x
 }
 
-// d_sqaure2
+// d_square2
 // CHECK: define internal fastcc [4 x float] @fwddiffe4square(float %x.0.val, [4 x ptr] %"x'")
 // CHECK-NEXT: start:
 // CHECK-NEXT:   %0 = extractvalue [4 x ptr] %"x'", 0
@@ -32,24 +33,20 @@ fn square(x: &f32) -> f32 {
 // CHECK-NEXT:   %"_2'ipl2" = load float, ptr %2, align 4
 // CHECK-NEXT:   %3 = extractvalue [4 x ptr] %"x'", 3
 // CHECK-NEXT:   %"_2'ipl3" = load float, ptr %3, align 4
-// CHECK-NEXT:   %4 = insertelement <4 x float> poison, float %"_2'ipl", i64 0
-// CHECK-NEXT:   %5 = insertelement <4 x float> %4, float %"_2'ipl1", i64 1
-// CHECK-NEXT:   %6 = insertelement <4 x float> %5, float %"_2'ipl2", i64 2
-// CHECK-NEXT:   %7 = insertelement <4 x float> %6, float %"_2'ipl3", i64 3
-// CHECK-NEXT:   %8 = fadd fast <4 x float> %7, %7
-// CHECK-NEXT:   %9 = insertelement <4 x float> poison, float %x.0.val, i64 0
-// CHECK-NEXT:   %10 = shufflevector <4 x float> %9, <4 x float> poison, <4 x i32> zeroinitializer
-// CHECK-NEXT:   %11 = fmul fast <4 x float> %8, %10
-// CHECK-NEXT:   %12 = extractelement <4 x float> %11, i64 0
-// CHECK-NEXT:   %13 = insertvalue [4 x float] undef, float %12, 0
-// CHECK-NEXT:   %14 = extractelement <4 x float> %11, i64 1
-// CHECK-NEXT:   %15 = insertvalue [4 x float] %13, float %14, 1
-// CHECK-NEXT:   %16 = extractelement <4 x float> %11, i64 2
-// CHECK-NEXT:   %17 = insertvalue [4 x float] %15, float %16, 2
-// CHECK-NEXT:   %18 = extractelement <4 x float> %11, i64 3
-// CHECK-NEXT:   %19 = insertvalue [4 x float] %17, float %18, 3
-// CHECK-NEXT:   ret [4 x float] %19
-// CHECK-NEXT: }
+// CHECK-NEXT:   %4 = fmul float %"_2'ipl", 2.000000e+00
+// CHECK-NEXT:   %5 = fmul fast float %4, %x.0.val
+// CHECK-NEXT:   %6 = insertvalue [4 x float] undef, float %5, 0
+// CHECK-NEXT:   %7 = fmul float %"_2'ipl1", 2.000000e+00
+// CHECK-NEXT:   %8 = fmul fast float %7, %x.0.val
+// CHECK-NEXT:   %9 = insertvalue [4 x float] %6, float %8, 1
+// CHECK-NEXT:   %10 = fmul float %"_2'ipl2", 2.000000e+00
+// CHECK-NEXT:   %11 = fmul fast float %10, %x.0.val
+// CHECK-NEXT:   %12 = insertvalue [4 x float] %9, float %11, 2
+// CHECK-NEXT:   %13 = fmul float %"_2'ipl3", 2.000000e+00
+// CHECK-NEXT:   %14 = fmul fast float %13, %x.0.val
+// CHECK-NEXT:   %15 = insertvalue [4 x float] %12, float %14, 3
+// CHECK-NEXT:   ret [4 x float] %15
+// CHECK-NEXT:   }
 
 // d_square3, the extra float is the original return value (x * x)
 // CHECK: define internal fastcc { float, [4 x float] } @fwddiffe4square.1(float %x.0.val, [4 x ptr] %"x'")
@@ -63,26 +60,22 @@ fn square(x: &f32) -> f32 {
 // CHECK-NEXT:   %3 = extractvalue [4 x ptr] %"x'", 3
 // CHECK-NEXT:   %"_2'ipl3" = load float, ptr %3, align 4
 // CHECK-NEXT:   %_0 = fmul float %x.0.val, %x.0.val
-// CHECK-NEXT:   %4 = insertelement <4 x float> poison, float %"_2'ipl", i64 0
-// CHECK-NEXT:   %5 = insertelement <4 x float> %4, float %"_2'ipl1", i64 1
-// CHECK-NEXT:   %6 = insertelement <4 x float> %5, float %"_2'ipl2", i64 2
-// CHECK-NEXT:   %7 = insertelement <4 x float> %6, float %"_2'ipl3", i64 3
-// CHECK-NEXT:   %8 = fadd fast <4 x float> %7, %7
-// CHECK-NEXT:   %9 = insertelement <4 x float> poison, float %x.0.val, i64 0
-// CHECK-NEXT:   %10 = shufflevector <4 x float> %9, <4 x float> poison, <4 x i32> zeroinitializer
-// CHECK-NEXT:   %11 = fmul fast <4 x float> %8, %10
-// CHECK-NEXT:   %12 = extractelement <4 x float> %11, i64 0
-// CHECK-NEXT:   %13 = insertvalue [4 x float] undef, float %12, 0
-// CHECK-NEXT:   %14 = extractelement <4 x float> %11, i64 1
-// CHECK-NEXT:   %15 = insertvalue [4 x float] %13, float %14, 1
-// CHECK-NEXT:   %16 = extractelement <4 x float> %11, i64 2
-// CHECK-NEXT:   %17 = insertvalue [4 x float] %15, float %16, 2
-// CHECK-NEXT:   %18 = extractelement <4 x float> %11, i64 3
-// CHECK-NEXT:   %19 = insertvalue [4 x float] %17, float %18, 3
-// CHECK-NEXT:   %20 = insertvalue { float, [4 x float] } undef, float %_0, 0
-// CHECK-NEXT:   %21 = insertvalue { float, [4 x float] } %20, [4 x float] %19, 1
-// CHECK-NEXT:   ret { float, [4 x float] } %21
-// CHECK-NEXT: }
+// CHECK-NEXT:   %4 = fmul float %"_2'ipl", 2.000000e+00
+// CHECK-NEXT:   %5 = fmul fast float %4, %x.0.val
+// CHECK-NEXT:   %6 = insertvalue [4 x float] undef, float %5, 0
+// CHECK-NEXT:   %7 = fmul float %"_2'ipl1", 2.000000e+00
+// CHECK-NEXT:   %8 = fmul fast float %7, %x.0.val
+// CHECK-NEXT:   %9 = insertvalue [4 x float] %6, float %8, 1
+// CHECK-NEXT:   %10 = fmul float %"_2'ipl2", 2.000000e+00
+// CHECK-NEXT:   %11 = fmul fast float %10, %x.0.val
+// CHECK-NEXT:   %12 = insertvalue [4 x float] %9, float %11, 2
+// CHECK-NEXT:   %13 = fmul float %"_2'ipl3", 2.000000e+00
+// CHECK-NEXT:   %14 = fmul fast float %13, %x.0.val
+// CHECK-NEXT:   %15 = insertvalue [4 x float] %12, float %14, 3
+// CHECK-NEXT:   %16 = insertvalue { float, [4 x float] } undef, float %_0, 0
+// CHECK-NEXT:   %17 = insertvalue { float, [4 x float] } %16, [4 x float] %15, 1
+// CHECK-NEXT:   ret { float, [4 x float] } %17
+// CHECK-NEXT:   }
 
 fn main() {
     let x = std::hint::black_box(3.0);
diff --git a/tests/codegen-llvm/autodiff/generic.rs b/tests/codegen-llvm/autodiff/generic.rs
index 2f674079be0..6f56460a2b6 100644
--- a/tests/codegen-llvm/autodiff/generic.rs
+++ b/tests/codegen-llvm/autodiff/generic.rs
@@ -6,27 +6,28 @@
 use std::autodiff::autodiff_reverse;
 
 #[autodiff_reverse(d_square, Duplicated, Active)]
+#[inline(never)]
 fn square<T: std::ops::Mul<Output = T> + Copy>(x: &T) -> T {
     *x * *x
 }
 
-// Ensure that `d_square::<f64>` code is generated even if `square::<f64>` was never called
+// Ensure that `d_square::<f32>` code is generated
 //
 // CHECK: ; generic::square
-// CHECK-NEXT: ; Function Attrs:
-// CHECK-NEXT: define internal {{.*}} double
+// CHECK-NEXT: ; Function Attrs: {{.*}}
+// CHECK-NEXT: define internal {{.*}} float
 // CHECK-NEXT: start:
 // CHECK-NOT: ret
-// CHECK: fmul double
+// CHECK: fmul float
 
-// Ensure that `d_square::<f32>` code is generated
+// Ensure that `d_square::<f64>` code is generated even if `square::<f64>` was never called
 //
 // CHECK: ; generic::square
-// CHECK-NEXT: ; Function Attrs: {{.*}}
-// CHECK-NEXT: define internal {{.*}} float
+// CHECK-NEXT: ; Function Attrs:
+// CHECK-NEXT: define internal {{.*}} double
 // CHECK-NEXT: start:
 // CHECK-NOT: ret
-// CHECK: fmul float
+// CHECK: fmul double
 
 fn main() {
     let xf32: f32 = std::hint::black_box(3.0);
diff --git a/tests/codegen-llvm/autodiff/identical_fnc.rs b/tests/codegen-llvm/autodiff/identical_fnc.rs
index 1c25b3d09ab..6066f8cb34f 100644
--- a/tests/codegen-llvm/autodiff/identical_fnc.rs
+++ b/tests/codegen-llvm/autodiff/identical_fnc.rs
@@ -14,25 +14,27 @@
 use std::autodiff::autodiff_reverse;
 
 #[autodiff_reverse(d_square, Duplicated, Active)]
+#[inline(never)]
 fn square(x: &f64) -> f64 {
     x * x
 }
 
 #[autodiff_reverse(d_square2, Duplicated, Active)]
+#[inline(never)]
 fn square2(x: &f64) -> f64 {
     x * x
 }
 
 // CHECK:; identical_fnc::main
 // CHECK-NEXT:; Function Attrs:
-// CHECK-NEXT:define internal void @_ZN13identical_fnc4main17hf4dbc69c8d2f9130E()
+// CHECK-NEXT:define internal void @_ZN13identical_fnc4main17h6009e4f751bf9407E()
 // CHECK-NEXT:start:
 // CHECK-NOT:br
 // CHECK-NOT:ret
 // CHECK:; call identical_fnc::d_square
-// CHECK-NEXT:  call fastcc void @_ZN13identical_fnc8d_square17h4c364207a2f8e06dE(double %x.val, ptr noalias noundef nonnull align 8 dereferenceable(8) %dx1)
-// CHECK-NEXT:; call identical_fnc::d_square
-// CHECK-NEXT:  call fastcc void @_ZN13identical_fnc8d_square17h4c364207a2f8e06dE(double %x.val, ptr noalias noundef nonnull align 8 dereferenceable(8) %dx2)
+// CHECK-NEXT:call fastcc void @_ZN13identical_fnc8d_square17hcb5768e95528c35fE(double %x.val, ptr noalias noundef align 8 dereferenceable(8) %dx1)
+// CHECK:; call identical_fnc::d_square
+// CHECK-NEXT:call fastcc void @_ZN13identical_fnc8d_square17hcb5768e95528c35fE(double %x.val, ptr noalias noundef align 8 dereferenceable(8) %dx2)
 
 fn main() {
     let x = std::hint::black_box(3.0);
diff --git a/tests/codegen-llvm/autodiff/inline.rs b/tests/codegen-llvm/autodiff/inline.rs
deleted file mode 100644
index 65bed170207..00000000000
--- a/tests/codegen-llvm/autodiff/inline.rs
+++ /dev/null
@@ -1,23 +0,0 @@
-//@ compile-flags: -Zautodiff=Enable -C opt-level=3  -Clto=fat -Zautodiff=NoPostopt
-//@ no-prefer-dynamic
-//@ needs-enzyme
-
-#![feature(autodiff)]
-
-use std::autodiff::autodiff_reverse;
-
-#[autodiff_reverse(d_square, Duplicated, Active)]
-fn square(x: &f64) -> f64 {
-    x * x
-}
-
-// CHECK: ; inline::d_square
-// CHECK-NEXT: ; Function Attrs: alwaysinline
-// CHECK-NOT: noinline
-// CHECK-NEXT: define internal fastcc void @_ZN6inline8d_square17h021c74e92c259cdeE
-fn main() {
-    let x = std::hint::black_box(3.0);
-    let mut dx1 = std::hint::black_box(1.0);
-    let _ = d_square(&x, &mut dx1, 1.0);
-    assert_eq!(dx1, 6.0);
-}
diff --git a/tests/codegen-llvm/autodiff/scalar.rs b/tests/codegen-llvm/autodiff/scalar.rs
index 096b4209e84..55b989f920d 100644
--- a/tests/codegen-llvm/autodiff/scalar.rs
+++ b/tests/codegen-llvm/autodiff/scalar.rs
@@ -7,11 +7,12 @@ use std::autodiff::autodiff_reverse;
 
 #[autodiff_reverse(d_square, Duplicated, Active)]
 #[no_mangle]
+#[inline(never)]
 fn square(x: &f64) -> f64 {
     x * x
 }
 
-// CHECK:define internal fastcc double @diffesquare(double %x.0.val, ptr nocapture nonnull align 8 %"x'"
+// CHECK:define internal fastcc double @diffesquare(double %x.0.val, ptr nonnull align 8 captures(none) %"x'")
 // CHECK-NEXT:invertstart:
 // CHECK-NEXT:  %_0 = fmul double %x.0.val, %x.0.val
 // CHECK-NEXT:  %0 = fadd fast double %x.0.val, %x.0.val
diff --git a/tests/codegen-llvm/autodiff/sret.rs b/tests/codegen-llvm/autodiff/sret.rs
index d2fa85e3e37..dbc253ce894 100644
--- a/tests/codegen-llvm/autodiff/sret.rs
+++ b/tests/codegen-llvm/autodiff/sret.rs
@@ -13,30 +13,30 @@ use std::autodiff::autodiff_reverse;
 
 #[no_mangle]
 #[autodiff_reverse(df, Active, Active, Active)]
+#[inline(never)]
 fn primal(x: f32, y: f32) -> f64 {
     (x * x * y) as f64
 }
 
-// CHECK:define internal fastcc void @_ZN4sret2df17h93be4316dd8ea006E(ptr dead_on_unwind noalias nocapture noundef nonnull writable writeonly align 8 dereferenceable(16) initializes((0, 16)) %_0, float noundef %x, float noundef %y)
-// CHECK-NEXT:start:
-// CHECK-NEXT:  %0 = tail call fastcc { double, float, float } @diffeprimal(float %x, float %y)
-// CHECK-NEXT:  %.elt = extractvalue { double, float, float } %0, 0
-// CHECK-NEXT:  store double %.elt, ptr %_0, align 8
-// CHECK-NEXT:  %_0.repack1 = getelementptr inbounds nuw i8, ptr %_0, i64 8
-// CHECK-NEXT:  %.elt2 = extractvalue { double, float, float } %0, 1
-// CHECK-NEXT:  store float %.elt2, ptr %_0.repack1, align 8
-// CHECK-NEXT:  %_0.repack3 = getelementptr inbounds nuw i8, ptr %_0, i64 12
-// CHECK-NEXT:  %.elt4 = extractvalue { double, float, float } %0, 2
-// CHECK-NEXT:  store float %.elt4, ptr %_0.repack3, align 4
-// CHECK-NEXT:  ret void
-// CHECK-NEXT:}
+// CHECK: define internal fastcc { double, float, float } @diffeprimal(float noundef %x, float noundef %y)
+// CHECK-NEXT: invertstart:
+// CHECK-NEXT: %_4 = fmul float %x, %x
+// CHECK-NEXT: %_3 = fmul float %_4, %y
+// CHECK-NEXT: %_0 = fpext float %_3 to double
+// CHECK-NEXT: %0 = fadd fast float %y, %y
+// CHECK-NEXT: %1 = fmul fast float %0, %x
+// CHECK-NEXT: %2 = insertvalue { double, float, float } undef, double %_0, 0
+// CHECK-NEXT: %3 = insertvalue { double, float, float } %2, float %1, 1
+// CHECK-NEXT: %4 = insertvalue { double, float, float } %3, float %_4, 2
+// CHECK-NEXT: ret { double, float, float } %4
+// CHECK-NEXT: }
 
 fn main() {
     let x = std::hint::black_box(3.0);
     let y = std::hint::black_box(2.5);
     let scalar = std::hint::black_box(1.0);
     let (r1, r2, r3) = df(x, y, scalar);
-    // 3*3*1.5 = 22.5
+    // 3*3*2.5 = 22.5
     assert_eq!(r1, 22.5);
     // 2*x*y = 2*3*2.5 = 15.0
     assert_eq!(r2, 15.0);
diff --git a/tests/codegen-llvm/autodiff/trait.rs b/tests/codegen-llvm/autodiff/trait.rs
new file mode 100644
index 00000000000..701f3a9e843
--- /dev/null
+++ b/tests/codegen-llvm/autodiff/trait.rs
@@ -0,0 +1,30 @@
+//@ compile-flags: -Zautodiff=Enable -Zautodiff=NoPostopt -C opt-level=3 -Clto=fat
+//@ no-prefer-dynamic
+//@ needs-enzyme
+
+// Just check it does not crash for now
+// CHECK: ;
+#![feature(autodiff)]
+
+use std::autodiff::autodiff_reverse;
+
+struct Foo {
+    a: f64,
+}
+
+trait MyTrait {
+    fn f(&self, x: f64) -> f64;
+    fn df(&self, x: f64, seed: f64) -> (f64, f64);
+}
+
+impl MyTrait for Foo {
+    #[autodiff_reverse(df, Const, Active, Active)]
+    fn f(&self, x: f64) -> f64 {
+        self.a * 0.25 * (x * x - 1.0 - 2.0 * x.ln())
+    }
+}
+
+fn main() {
+    let foo = Foo { a: 3.0f64 };
+    dbg!(foo.df(1.0, 1.0));
+}
diff --git a/tests/codegen-llvm/call-tmps-lifetime.rs b/tests/codegen-llvm/call-tmps-lifetime.rs
index 7b7b6e17bdd..0d7657ed758 100644
--- a/tests/codegen-llvm/call-tmps-lifetime.rs
+++ b/tests/codegen-llvm/call-tmps-lifetime.rs
@@ -16,14 +16,14 @@ use minicore::*;
 // CHECK-NEXT: start:
 // CHECK-NEXT: [[B:%.*]] = alloca
 // CHECK-NEXT: [[A:%.*]] = alloca
-// CHECK-NEXT: call void @llvm.lifetime.start.p0(i64 4096, ptr [[A]])
+// CHECK-NEXT: call void @llvm.lifetime.start.p0({{(i64 4096, )?}}ptr [[A]])
 // CHECK-NEXT: call void @llvm.memcpy.p0.p0.i32(ptr align 4 [[A]], ptr align 4 {{.*}}, i32 4096, i1 false)
 // CHECK-NEXT: call void %h(ptr {{.*}} [[A]])
-// CHECK-NEXT: call void @llvm.lifetime.end.p0(i64 4096, ptr [[A]])
-// CHECK-NEXT: call void @llvm.lifetime.start.p0(i64 4096, ptr [[B]])
+// CHECK-NEXT: call void @llvm.lifetime.end.p0({{(i64 4096, )?}}ptr [[A]])
+// CHECK-NEXT: call void @llvm.lifetime.start.p0({{(i64 4096, )?}}ptr [[B]])
 // CHECK-NEXT: call void @llvm.memcpy.p0.p0.i32(ptr align 4 [[B]], ptr align 4 {{.*}}, i32 4096, i1 false)
 // CHECK-NEXT: call void %h(ptr {{.*}} [[B]])
-// CHECK-NEXT: call void @llvm.lifetime.end.p0(i64 4096, ptr [[B]])
+// CHECK-NEXT: call void @llvm.lifetime.end.p0({{(i64 4096, )?}}ptr [[B]])
 #[no_mangle]
 pub fn const_indirect(h: extern "C" fn([u32; 1024])) {
     const C: [u32; 1024] = [0; 1024];
@@ -42,12 +42,12 @@ pub struct Str {
 // CHECK-LABEL: define void @immediate_indirect(ptr {{.*}}%s.0, i32 {{.*}}%s.1, ptr {{.*}}%g)
 // CHECK-NEXT: start:
 // CHECK-NEXT: [[A:%.*]] = alloca
-// CHECK-NEXT: call void @llvm.lifetime.start.p0(i64 8, ptr [[A]])
+// CHECK-NEXT: call void @llvm.lifetime.start.p0({{(i64 8, )?}}ptr [[A]])
 // CHECK-NEXT: store ptr %s.0, ptr [[A]]
 // CHECK-NEXT: [[B:%.]] = getelementptr inbounds i8, ptr [[A]], i32 4
 // CHECK-NEXT: store i32 %s.1, ptr [[B]]
 // CHECK-NEXT: call void %g(ptr {{.*}} [[A]])
-// CHECK-NEXT: call void @llvm.lifetime.end.p0(i64 8, ptr [[A]])
+// CHECK-NEXT: call void @llvm.lifetime.end.p0({{(i64 8, )?}}ptr [[A]])
 #[no_mangle]
 pub fn immediate_indirect(s: Str, g: extern "C" fn(Str)) {
     g(s);
@@ -58,10 +58,10 @@ pub fn immediate_indirect(s: Str, g: extern "C" fn(Str)) {
 // CHECK-LABEL: define void @align_indirect(ptr{{.*}} align 1{{.*}} %a, ptr{{.*}} %fun)
 // CHECK-NEXT: start:
 // CHECK-NEXT: [[A:%.*]] = alloca [1024 x i8], align 4
-// CHECK-NEXT: call void @llvm.lifetime.start.p0(i64 1024, ptr [[A]])
+// CHECK-NEXT: call void @llvm.lifetime.start.p0({{(i64 1024, )?}}ptr [[A]])
 // CHECK-NEXT: call void @llvm.memcpy.p0.p0.i32(ptr align 4 [[A]], ptr align 1 %a, i32 1024, i1 false)
 // CHECK-NEXT: call void %fun(ptr {{.*}} [[A]])
-// CHECK-NEXT: call void @llvm.lifetime.end.p0(i64 1024, ptr [[A]])
+// CHECK-NEXT: call void @llvm.lifetime.end.p0({{(i64 1024, )?}}ptr [[A]])
 #[no_mangle]
 pub fn align_indirect(a: [u8; 1024], fun: extern "C" fn([u8; 1024])) {
     fun(a);
diff --git a/tests/codegen-llvm/intrinsics/transmute-simd.rs b/tests/codegen-llvm/intrinsics/transmute-simd.rs
index e34b27e1333..92af16945ab 100644
--- a/tests/codegen-llvm/intrinsics/transmute-simd.rs
+++ b/tests/codegen-llvm/intrinsics/transmute-simd.rs
@@ -97,10 +97,10 @@ pub extern "C" fn float_ptr_same_lanes(v: f64x2) -> PtrX2 {
     // CHECK-NOT: alloca
     // CHECK: %[[TEMP:.+]] = alloca [16 x i8]
     // CHECK-NOT: alloca
-    // CHECK: call void @llvm.lifetime.start.p0(i64 16, ptr %[[TEMP]])
+    // CHECK: call void @llvm.lifetime.start.p0({{(i64 16, )?}}ptr %[[TEMP]])
     // CHECK: store <2 x double> %v, ptr %[[TEMP]]
     // CHECK: %[[RET:.+]] = load <2 x ptr>, ptr %[[TEMP]]
-    // CHECK: call void @llvm.lifetime.end.p0(i64 16, ptr %[[TEMP]])
+    // CHECK: call void @llvm.lifetime.end.p0({{(i64 16, )?}}ptr %[[TEMP]])
     // CHECK: ret <2 x ptr> %[[RET]]
     unsafe { transmute(v) }
 }
@@ -111,10 +111,10 @@ pub extern "C" fn ptr_float_same_lanes(v: PtrX2) -> f64x2 {
     // CHECK-NOT: alloca
     // CHECK: %[[TEMP:.+]] = alloca [16 x i8]
     // CHECK-NOT: alloca
-    // CHECK: call void @llvm.lifetime.start.p0(i64 16, ptr %[[TEMP]])
+    // CHECK: call void @llvm.lifetime.start.p0({{(i64 16, )?}}ptr %[[TEMP]])
     // CHECK: store <2 x ptr> %v, ptr %[[TEMP]]
     // CHECK: %[[RET:.+]] = load <2 x double>, ptr %[[TEMP]]
-    // CHECK: call void @llvm.lifetime.end.p0(i64 16, ptr %[[TEMP]])
+    // CHECK: call void @llvm.lifetime.end.p0({{(i64 16, )?}}ptr %[[TEMP]])
     // CHECK: ret <2 x double> %[[RET]]
     unsafe { transmute(v) }
 }
@@ -125,10 +125,10 @@ pub extern "C" fn int_ptr_same_lanes(v: i64x2) -> PtrX2 {
     // CHECK-NOT: alloca
     // CHECK: %[[TEMP:.+]] = alloca [16 x i8]
     // CHECK-NOT: alloca
-    // CHECK: call void @llvm.lifetime.start.p0(i64 16, ptr %[[TEMP]])
+    // CHECK: call void @llvm.lifetime.start.p0({{(i64 16, )?}}ptr %[[TEMP]])
     // CHECK: store <2 x i64> %v, ptr %[[TEMP]]
     // CHECK: %[[RET:.+]] = load <2 x ptr>, ptr %[[TEMP]]
-    // CHECK: call void @llvm.lifetime.end.p0(i64 16, ptr %[[TEMP]])
+    // CHECK: call void @llvm.lifetime.end.p0({{(i64 16, )?}}ptr %[[TEMP]])
     // CHECK: ret <2 x ptr> %[[RET]]
     unsafe { transmute(v) }
 }
@@ -139,10 +139,10 @@ pub extern "C" fn ptr_int_same_lanes(v: PtrX2) -> i64x2 {
     // CHECK-NOT: alloca
     // CHECK: %[[TEMP:.+]] = alloca [16 x i8]
     // CHECK-NOT: alloca
-    // CHECK: call void @llvm.lifetime.start.p0(i64 16, ptr %[[TEMP]])
+    // CHECK: call void @llvm.lifetime.start.p0({{(i64 16, )?}}ptr %[[TEMP]])
     // CHECK: store <2 x ptr> %v, ptr %[[TEMP]]
     // CHECK: %[[RET:.+]] = load <2 x i64>, ptr %[[TEMP]]
-    // CHECK: call void @llvm.lifetime.end.p0(i64 16, ptr %[[TEMP]])
+    // CHECK: call void @llvm.lifetime.end.p0({{(i64 16, )?}}ptr %[[TEMP]])
     // CHECK: ret <2 x i64> %[[RET]]
     unsafe { transmute(v) }
 }
@@ -153,10 +153,10 @@ pub extern "C" fn float_ptr_widen(v: f32x4) -> PtrX2 {
     // CHECK-NOT: alloca
     // CHECK: %[[TEMP:.+]] = alloca [16 x i8]
     // CHECK-NOT: alloca
-    // CHECK: call void @llvm.lifetime.start.p0(i64 16, ptr %[[TEMP]])
+    // CHECK: call void @llvm.lifetime.start.p0({{(i64 16, )?}}ptr %[[TEMP]])
     // CHECK: store <4 x float> %v, ptr %[[TEMP]]
     // CHECK: %[[RET:.+]] = load <2 x ptr>, ptr %[[TEMP]]
-    // CHECK: call void @llvm.lifetime.end.p0(i64 16, ptr %[[TEMP]])
+    // CHECK: call void @llvm.lifetime.end.p0({{(i64 16, )?}}ptr %[[TEMP]])
     // CHECK: ret <2 x ptr> %[[RET]]
     unsafe { transmute(v) }
 }
@@ -167,10 +167,10 @@ pub extern "C" fn int_ptr_widen(v: i32x4) -> PtrX2 {
     // CHECK-NOT: alloca
     // CHECK: %[[TEMP:.+]] = alloca [16 x i8]
     // CHECK-NOT: alloca
-    // CHECK: call void @llvm.lifetime.start.p0(i64 16, ptr %[[TEMP]])
+    // CHECK: call void @llvm.lifetime.start.p0({{(i64 16, )?}}ptr %[[TEMP]])
     // CHECK: store <4 x i32> %v, ptr %[[TEMP]]
     // CHECK: %[[RET:.+]] = load <2 x ptr>, ptr %[[TEMP]]
-    // CHECK: call void @llvm.lifetime.end.p0(i64 16, ptr %[[TEMP]])
+    // CHECK: call void @llvm.lifetime.end.p0({{(i64 16, )?}}ptr %[[TEMP]])
     // CHECK: ret <2 x ptr> %[[RET]]
     unsafe { transmute(v) }
 }
diff --git a/tests/codegen-llvm/intrinsics/transmute.rs b/tests/codegen-llvm/intrinsics/transmute.rs
index 91cff38773d..e327c100d7d 100644
--- a/tests/codegen-llvm/intrinsics/transmute.rs
+++ b/tests/codegen-llvm/intrinsics/transmute.rs
@@ -192,12 +192,12 @@ pub unsafe fn check_byte_from_bool(x: bool) -> u8 {
 #[no_mangle]
 pub unsafe fn check_to_pair(x: u64) -> Option<i32> {
     // CHECK: %[[TEMP:.+]] = alloca [8 x i8], align 8
-    // CHECK: call void @llvm.lifetime.start.p0(i64 8, ptr %[[TEMP]])
+    // CHECK: call void @llvm.lifetime.start.p0({{(i64 8, )?}}ptr %[[TEMP]])
     // CHECK: store i64 %x, ptr %[[TEMP]], align 8
     // CHECK: %[[PAIR0:.+]] = load i32, ptr %[[TEMP]], align 8
     // CHECK: %[[PAIR1P:.+]] = getelementptr inbounds i8, ptr %[[TEMP]], i64 4
     // CHECK: %[[PAIR1:.+]] = load i32, ptr %[[PAIR1P]], align 4
-    // CHECK: call void @llvm.lifetime.end.p0(i64 8, ptr %[[TEMP]])
+    // CHECK: call void @llvm.lifetime.end.p0({{(i64 8, )?}}ptr %[[TEMP]])
     // CHECK: insertvalue {{.+}}, i32 %[[PAIR0]], 0
     // CHECK: insertvalue {{.+}}, i32 %[[PAIR1]], 1
     transmute(x)
@@ -207,12 +207,12 @@ pub unsafe fn check_to_pair(x: u64) -> Option<i32> {
 #[no_mangle]
 pub unsafe fn check_from_pair(x: Option<i32>) -> u64 {
     // CHECK: %[[TEMP:.+]] = alloca [8 x i8], align 8
-    // CHECK: call void @llvm.lifetime.start.p0(i64 8, ptr %[[TEMP]])
+    // CHECK: call void @llvm.lifetime.start.p0({{(i64 8, )?}}ptr %[[TEMP]])
     // CHECK: store i32 %x.0, ptr %[[TEMP]], align 8
     // CHECK: %[[PAIR1P:.+]] = getelementptr inbounds i8, ptr %[[TEMP]], i64 4
     // CHECK: store i32 %x.1, ptr %[[PAIR1P]], align 4
     // CHECK: %[[R:.+]] = load i64, ptr %[[TEMP]], align 8
-    // CHECK: call void @llvm.lifetime.end.p0(i64 8, ptr %[[TEMP]])
+    // CHECK: call void @llvm.lifetime.end.p0({{(i64 8, )?}}ptr %[[TEMP]])
     // CHECK: ret i64 %[[R]]
     transmute(x)
 }
diff --git a/tests/codegen-llvm/issues/issue-105386-ub-in-debuginfo.rs b/tests/codegen-llvm/issues/issue-105386-ub-in-debuginfo.rs
index 848aa910b58..95e70bf5678 100644
--- a/tests/codegen-llvm/issues/issue-105386-ub-in-debuginfo.rs
+++ b/tests/codegen-llvm/issues/issue-105386-ub-in-debuginfo.rs
@@ -19,6 +19,6 @@ pub fn outer_function(x: S, y: S) -> usize {
 // CHECK: [[spill:%.*]] = alloca
 // CHECK-NOT: [[ptr_tmp:%.*]] = getelementptr inbounds i8, ptr [[spill]]
 // CHECK-NOT: [[load:%.*]] = load ptr, ptr
-// CHECK: call void @llvm.lifetime.start{{.*}}({{.*}}, ptr [[spill]])
+// CHECK: call void @llvm.lifetime.start{{.*}}({{(.*, )?}}ptr [[spill]])
 // CHECK: [[inner:%.*]] = getelementptr inbounds i8, ptr [[spill]]
 // CHECK: call void @llvm.memcpy{{.*}}(ptr {{align .*}} [[inner]], ptr {{align .*}} %x
diff --git a/tests/codegen-llvm/lifetime_start_end.rs b/tests/codegen-llvm/lifetime_start_end.rs
index 0639e7640aa..2df5acf54df 100644
--- a/tests/codegen-llvm/lifetime_start_end.rs
+++ b/tests/codegen-llvm/lifetime_start_end.rs
@@ -8,27 +8,27 @@ pub fn test() {
     let a = 0u8;
     &a; // keep variable in an alloca
 
-    // CHECK: call void @llvm.lifetime.start{{.*}}(i{{[0-9 ]+}}, ptr %a)
+    // CHECK: call void @llvm.lifetime.start{{.*}}({{(i[0-9 ]+, )?}}ptr %a)
 
     {
         let b = &Some(a);
         &b; // keep variable in an alloca
 
-        // CHECK: call void @llvm.lifetime.start{{.*}}(i{{[0-9 ]+}}, {{.*}})
+        // CHECK: call void @llvm.lifetime.start{{.*}}({{(i[0-9 ]+, )?}}{{.*}})
 
-        // CHECK: call void @llvm.lifetime.start{{.*}}(i{{[0-9 ]+}}, {{.*}})
+        // CHECK: call void @llvm.lifetime.start{{.*}}({{(i[0-9 ]+, )?}}{{.*}})
 
-        // CHECK: call void @llvm.lifetime.end{{.*}}(i{{[0-9 ]+}}, {{.*}})
+        // CHECK: call void @llvm.lifetime.end{{.*}}({{(i[0-9 ]+, )?}}{{.*}})
 
-        // CHECK: call void @llvm.lifetime.end{{.*}}(i{{[0-9 ]+}}, {{.*}})
+        // CHECK: call void @llvm.lifetime.end{{.*}}({{(i[0-9 ]+, )?}}{{.*}})
     }
 
     let c = 1u8;
     &c; // keep variable in an alloca
 
-    // CHECK: call void @llvm.lifetime.start{{.*}}(i{{[0-9 ]+}}, ptr %c)
+    // CHECK: call void @llvm.lifetime.start{{.*}}({{(i[0-9 ]+, )?}}ptr %c)
 
-    // CHECK: call void @llvm.lifetime.end{{.*}}(i{{[0-9 ]+}}, ptr %c)
+    // CHECK: call void @llvm.lifetime.end{{.*}}({{(i[0-9 ]+, )?}}ptr %c)
 
-    // CHECK: call void @llvm.lifetime.end{{.*}}(i{{[0-9 ]+}}, ptr %a)
+    // CHECK: call void @llvm.lifetime.end{{.*}}({{(i[0-9 ]+, )?}}ptr %a)
 }
diff --git a/tests/codegen-llvm/uninhabited-transparent-return-abi.rs b/tests/codegen-llvm/uninhabited-transparent-return-abi.rs
index face1577c3f..83d9a7a32ab 100644
--- a/tests/codegen-llvm/uninhabited-transparent-return-abi.rs
+++ b/tests/codegen-llvm/uninhabited-transparent-return-abi.rs
@@ -23,7 +23,7 @@ extern "Rust" {
 #[no_mangle]
 pub fn test_uninhabited_ret_by_ref() {
     // CHECK: %_1 = alloca [24 x i8], align {{8|4}}
-    // CHECK-NEXT: call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %_1)
+    // CHECK-NEXT: call void @llvm.lifetime.start.p0({{(i64 24, )?}}ptr nonnull %_1)
     // CHECK-NEXT: call void @opaque({{.*}} sret([24 x i8]) {{.*}} %_1) #2
     // CHECK-NEXT: unreachable
     unsafe {
@@ -35,7 +35,7 @@ pub fn test_uninhabited_ret_by_ref() {
 #[no_mangle]
 pub fn test_uninhabited_ret_by_ref_with_arg(rsi: u32) {
     // CHECK: %_2 = alloca [24 x i8], align {{8|4}}
-    // CHECK-NEXT: call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %_2)
+    // CHECK-NEXT: call void @llvm.lifetime.start.p0({{(i64 24, )?}}ptr nonnull %_2)
     // CHECK-NEXT: call void @opaque_with_arg({{.*}} sret([24 x i8]) {{.*}} %_2, i32 noundef %rsi) #2
     // CHECK-NEXT: unreachable
     unsafe {
diff --git a/tests/pretty/autodiff/autodiff_forward.pp b/tests/pretty/autodiff/autodiff_forward.pp
index a2525abc832..6eddb5669c7 100644
--- a/tests/pretty/autodiff/autodiff_forward.pp
+++ b/tests/pretty/autodiff/autodiff_forward.pp
@@ -3,10 +3,10 @@
 //@ needs-enzyme
 
 #![feature(autodiff)]
-#[prelude_import]
-use ::std::prelude::rust_2015::*;
 #[macro_use]
 extern crate std;
+#[prelude_import]
+use ::std::prelude::rust_2015::*;
 //@ pretty-mode:expanded
 //@ pretty-compare-only
 //@ pp-exact:autodiff_forward.pp
@@ -16,7 +16,6 @@ extern crate std;
 use std::autodiff::{autodiff_forward, autodiff_reverse};
 
 #[rustc_autodiff]
-#[inline(never)]
 pub fn f1(x: &[f64], y: f64) -> f64 {
 
 
@@ -36,163 +35,96 @@ pub fn f1(x: &[f64], y: f64) -> f64 {
     ::core::panicking::panic("not implemented")
 }
 #[rustc_autodiff(Forward, 1, Dual, Const, Dual)]
-#[inline(never)]
 pub fn df1(x: &[f64], bx_0: &[f64], y: f64) -> (f64, f64) {
-    unsafe { asm!("NOP", options(pure, nomem)); };
-    ::core::hint::black_box(f1(x, y));
-    ::core::hint::black_box((bx_0,));
-    ::core::hint::black_box(<(f64, f64)>::default())
+    ::core::intrinsics::autodiff(f1::<>, df1::<>, (x, bx_0, y))
 }
 #[rustc_autodiff]
-#[inline(never)]
 pub fn f2(x: &[f64], y: f64) -> f64 {
     ::core::panicking::panic("not implemented")
 }
 #[rustc_autodiff(Forward, 1, Dual, Const, Const)]
-#[inline(never)]
 pub fn df2(x: &[f64], bx_0: &[f64], y: f64) -> f64 {
-    unsafe { asm!("NOP", options(pure, nomem)); };
-    ::core::hint::black_box(f2(x, y));
-    ::core::hint::black_box((bx_0,));
-    ::core::hint::black_box(f2(x, y))
+    ::core::intrinsics::autodiff(f2::<>, df2::<>, (x, bx_0, y))
 }
 #[rustc_autodiff]
-#[inline(never)]
 pub fn f3(x: &[f64], y: f64) -> f64 {
     ::core::panicking::panic("not implemented")
 }
 #[rustc_autodiff(Forward, 1, Dual, Const, Const)]
-#[inline(never)]
 pub fn df3(x: &[f64], bx_0: &[f64], y: f64) -> f64 {
-    unsafe { asm!("NOP", options(pure, nomem)); };
-    ::core::hint::black_box(f3(x, y));
-    ::core::hint::black_box((bx_0,));
-    ::core::hint::black_box(f3(x, y))
+    ::core::intrinsics::autodiff(f3::<>, df3::<>, (x, bx_0, y))
 }
 #[rustc_autodiff]
-#[inline(never)]
 pub fn f4() {}
 #[rustc_autodiff(Forward, 1, None)]
-#[inline(never)]
-pub fn df4() -> () {
-    unsafe { asm!("NOP", options(pure, nomem)); };
-    ::core::hint::black_box(f4());
-    ::core::hint::black_box(());
-}
+pub fn df4() -> () { ::core::intrinsics::autodiff(f4::<>, df4::<>, ()) }
 #[rustc_autodiff]
-#[inline(never)]
 pub fn f5(x: &[f64], y: f64) -> f64 {
     ::core::panicking::panic("not implemented")
 }
 #[rustc_autodiff(Forward, 1, Const, Dual, Const)]
-#[inline(never)]
 pub fn df5_y(x: &[f64], y: f64, by_0: f64) -> f64 {
-    unsafe { asm!("NOP", options(pure, nomem)); };
-    ::core::hint::black_box(f5(x, y));
-    ::core::hint::black_box((by_0,));
-    ::core::hint::black_box(f5(x, y))
+    ::core::intrinsics::autodiff(f5::<>, df5_y::<>, (x, y, by_0))
 }
 #[rustc_autodiff(Forward, 1, Dual, Const, Const)]
-#[inline(never)]
 pub fn df5_x(x: &[f64], bx_0: &[f64], y: f64) -> f64 {
-    unsafe { asm!("NOP", options(pure, nomem)); };
-    ::core::hint::black_box(f5(x, y));
-    ::core::hint::black_box((bx_0,));
-    ::core::hint::black_box(f5(x, y))
+    ::core::intrinsics::autodiff(f5::<>, df5_x::<>, (x, bx_0, y))
 }
 #[rustc_autodiff(Reverse, 1, Duplicated, Const, Active)]
-#[inline(never)]
 pub fn df5_rev(x: &[f64], dx_0: &mut [f64], y: f64, dret: f64) -> f64 {
-    unsafe { asm!("NOP", options(pure, nomem)); };
-    ::core::hint::black_box(f5(x, y));
-    ::core::hint::black_box((dx_0, dret));
-    ::core::hint::black_box(f5(x, y))
+    ::core::intrinsics::autodiff(f5::<>, df5_rev::<>, (x, dx_0, y, dret))
 }
 struct DoesNotImplDefault;
 #[rustc_autodiff]
-#[inline(never)]
 pub fn f6() -> DoesNotImplDefault {
     ::core::panicking::panic("not implemented")
 }
 #[rustc_autodiff(Forward, 1, Const)]
-#[inline(never)]
 pub fn df6() -> DoesNotImplDefault {
-    unsafe { asm!("NOP", options(pure, nomem)); };
-    ::core::hint::black_box(f6());
-    ::core::hint::black_box(());
-    ::core::hint::black_box(f6())
+    ::core::intrinsics::autodiff(f6::<>, df6::<>, ())
 }
 #[rustc_autodiff]
-#[inline(never)]
 pub fn f7(x: f32) -> () {}
 #[rustc_autodiff(Forward, 1, Const, None)]
-#[inline(never)]
 pub fn df7(x: f32) -> () {
-    unsafe { asm!("NOP", options(pure, nomem)); };
-    ::core::hint::black_box(f7(x));
-    ::core::hint::black_box(());
+    ::core::intrinsics::autodiff(f7::<>, df7::<>, (x,))
 }
 #[no_mangle]
 #[rustc_autodiff]
-#[inline(never)]
 fn f8(x: &f32) -> f32 { ::core::panicking::panic("not implemented") }
 #[rustc_autodiff(Forward, 4, Dual, Dual)]
-#[inline(never)]
 fn f8_3(x: &f32, bx_0: &f32, bx_1: &f32, bx_2: &f32, bx_3: &f32)
     -> [f32; 5usize] {
-    unsafe { asm!("NOP", options(pure, nomem)); };
-    ::core::hint::black_box(f8(x));
-    ::core::hint::black_box((bx_0, bx_1, bx_2, bx_3));
-    ::core::hint::black_box(<[f32; 5usize]>::default())
+    ::core::intrinsics::autodiff(f8::<>, f8_3::<>,
+        (x, bx_0, bx_1, bx_2, bx_3))
 }
 #[rustc_autodiff(Forward, 4, Dual, DualOnly)]
-#[inline(never)]
 fn f8_2(x: &f32, bx_0: &f32, bx_1: &f32, bx_2: &f32, bx_3: &f32)
     -> [f32; 4usize] {
-    unsafe { asm!("NOP", options(pure, nomem)); };
-    ::core::hint::black_box(f8(x));
-    ::core::hint::black_box((bx_0, bx_1, bx_2, bx_3));
-    ::core::hint::black_box(<[f32; 4usize]>::default())
+    ::core::intrinsics::autodiff(f8::<>, f8_2::<>,
+        (x, bx_0, bx_1, bx_2, bx_3))
 }
 #[rustc_autodiff(Forward, 1, Dual, DualOnly)]
-#[inline(never)]
 fn f8_1(x: &f32, bx_0: &f32) -> f32 {
-    unsafe { asm!("NOP", options(pure, nomem)); };
-    ::core::hint::black_box(f8(x));
-    ::core::hint::black_box((bx_0,));
-    ::core::hint::black_box(<f32>::default())
+    ::core::intrinsics::autodiff(f8::<>, f8_1::<>, (x, bx_0))
 }
 pub fn f9() {
     #[rustc_autodiff]
-    #[inline(never)]
     fn inner(x: f32) -> f32 { x * x }
     #[rustc_autodiff(Forward, 1, Dual, Dual)]
-    #[inline(never)]
     fn d_inner_2(x: f32, bx_0: f32) -> (f32, f32) {
-        unsafe { asm!("NOP", options(pure, nomem)); };
-        ::core::hint::black_box(inner(x));
-        ::core::hint::black_box((bx_0,));
-        ::core::hint::black_box(<(f32, f32)>::default())
+        ::core::intrinsics::autodiff(inner::<>, d_inner_2::<>, (x, bx_0))
     }
     #[rustc_autodiff(Forward, 1, Dual, DualOnly)]
-    #[inline(never)]
     fn d_inner_1(x: f32, bx_0: f32) -> f32 {
-        unsafe { asm!("NOP", options(pure, nomem)); };
-        ::core::hint::black_box(inner(x));
-        ::core::hint::black_box((bx_0,));
-        ::core::hint::black_box(<f32>::default())
+        ::core::intrinsics::autodiff(inner::<>, d_inner_1::<>, (x, bx_0))
     }
 }
 #[rustc_autodiff]
-#[inline(never)]
 pub fn f10<T: std::ops::Mul<Output = T> + Copy>(x: &T) -> T { *x * *x }
 #[rustc_autodiff(Reverse, 1, Duplicated, Active)]
-#[inline(never)]
 pub fn d_square<T: std::ops::Mul<Output = T> +
     Copy>(x: &T, dx_0: &mut T, dret: T) -> T {
-    unsafe { asm!("NOP", options(pure, nomem)); };
-    ::core::hint::black_box(f10::<T>(x));
-    ::core::hint::black_box((dx_0, dret));
-    ::core::hint::black_box(f10::<T>(x))
+    ::core::intrinsics::autodiff(f10::<T>, d_square::<T>, (x, dx_0, dret))
 }
 fn main() {}
diff --git a/tests/pretty/autodiff/autodiff_reverse.pp b/tests/pretty/autodiff/autodiff_reverse.pp
index e67c3443dde..8f598b865c7 100644
--- a/tests/pretty/autodiff/autodiff_reverse.pp
+++ b/tests/pretty/autodiff/autodiff_reverse.pp
@@ -3,10 +3,10 @@
 //@ needs-enzyme
 
 #![feature(autodiff)]
-#[prelude_import]
-use ::std::prelude::rust_2015::*;
 #[macro_use]
 extern crate std;
+#[prelude_import]
+use ::std::prelude::rust_2015::*;
 //@ pretty-mode:expanded
 //@ pretty-compare-only
 //@ pp-exact:autodiff_reverse.pp
@@ -16,7 +16,6 @@ extern crate std;
 use std::autodiff::autodiff_reverse;
 
 #[rustc_autodiff]
-#[inline(never)]
 pub fn f1(x: &[f64], y: f64) -> f64 {
 
     // Not the most interesting derivative, but who are we to judge
@@ -29,58 +28,33 @@ pub fn f1(x: &[f64], y: f64) -> f64 {
     ::core::panicking::panic("not implemented")
 }
 #[rustc_autodiff(Reverse, 1, Duplicated, Const, Active)]
-#[inline(never)]
 pub fn df1(x: &[f64], dx_0: &mut [f64], y: f64, dret: f64) -> f64 {
-    unsafe { asm!("NOP", options(pure, nomem)); };
-    ::core::hint::black_box(f1(x, y));
-    ::core::hint::black_box((dx_0, dret));
-    ::core::hint::black_box(f1(x, y))
+    ::core::intrinsics::autodiff(f1::<>, df1::<>, (x, dx_0, y, dret))
 }
 #[rustc_autodiff]
-#[inline(never)]
 pub fn f2() {}
 #[rustc_autodiff(Reverse, 1, None)]
-#[inline(never)]
-pub fn df2() {
-    unsafe { asm!("NOP", options(pure, nomem)); };
-    ::core::hint::black_box(f2());
-    ::core::hint::black_box(());
-}
+pub fn df2() { ::core::intrinsics::autodiff(f2::<>, df2::<>, ()) }
 #[rustc_autodiff]
-#[inline(never)]
 pub fn f3(x: &[f64], y: f64) -> f64 {
     ::core::panicking::panic("not implemented")
 }
 #[rustc_autodiff(Reverse, 1, Duplicated, Const, Active)]
-#[inline(never)]
 pub fn df3(x: &[f64], dx_0: &mut [f64], y: f64, dret: f64) -> f64 {
-    unsafe { asm!("NOP", options(pure, nomem)); };
-    ::core::hint::black_box(f3(x, y));
-    ::core::hint::black_box((dx_0, dret));
-    ::core::hint::black_box(f3(x, y))
+    ::core::intrinsics::autodiff(f3::<>, df3::<>, (x, dx_0, y, dret))
 }
 enum Foo { Reverse, }
 use Foo::Reverse;
 #[rustc_autodiff]
-#[inline(never)]
 pub fn f4(x: f32) { ::core::panicking::panic("not implemented") }
 #[rustc_autodiff(Reverse, 1, Const, None)]
-#[inline(never)]
-pub fn df4(x: f32) {
-    unsafe { asm!("NOP", options(pure, nomem)); };
-    ::core::hint::black_box(f4(x));
-    ::core::hint::black_box(());
-}
+pub fn df4(x: f32) { ::core::intrinsics::autodiff(f4::<>, df4::<>, (x,)) }
 #[rustc_autodiff]
-#[inline(never)]
 pub fn f5(x: *const f32, y: &f32) {
     ::core::panicking::panic("not implemented")
 }
 #[rustc_autodiff(Reverse, 1, DuplicatedOnly, Duplicated, None)]
-#[inline(never)]
 pub unsafe fn df5(x: *const f32, dx_0: *mut f32, y: &f32, dy_0: &mut f32) {
-    unsafe { asm!("NOP", options(pure, nomem)); };
-    ::core::hint::black_box(f5(x, y));
-    ::core::hint::black_box((dx_0, dy_0));
+    ::core::intrinsics::autodiff(f5::<>, df5::<>, (x, dx_0, y, dy_0))
 }
 fn main() {}
diff --git a/tests/pretty/autodiff/autodiff_reverse.rs b/tests/pretty/autodiff/autodiff_reverse.rs
index d37e5e3eb4c..c50b81d7780 100644
--- a/tests/pretty/autodiff/autodiff_reverse.rs
+++ b/tests/pretty/autodiff/autodiff_reverse.rs
@@ -23,7 +23,9 @@ pub fn f3(x: &[f64], y: f64) -> f64 {
     unimplemented!()
 }
 
-enum Foo { Reverse }
+enum Foo {
+    Reverse,
+}
 use Foo::Reverse;
 // What happens if we already have Reverse in type (enum variant decl) and value (enum variant
 // constructor) namespace? > It's expected to work normally.
diff --git a/tests/pretty/autodiff/inherent_impl.pp b/tests/pretty/autodiff/inherent_impl.pp
index d18061b2dbd..36a9222640a 100644
--- a/tests/pretty/autodiff/inherent_impl.pp
+++ b/tests/pretty/autodiff/inherent_impl.pp
@@ -3,10 +3,10 @@
 //@ needs-enzyme
 
 #![feature(autodiff)]
-#[prelude_import]
-use ::std::prelude::rust_2015::*;
 #[macro_use]
 extern crate std;
+#[prelude_import]
+use ::std::prelude::rust_2015::*;
 //@ pretty-mode:expanded
 //@ pretty-compare-only
 //@ pp-exact:inherent_impl.pp
@@ -26,16 +26,12 @@ trait MyTrait {
 
 impl MyTrait for Foo {
     #[rustc_autodiff]
-    #[inline(never)]
     fn f(&self, x: f64) -> f64 {
         self.a * 0.25 * (x * x - 1.0 - 2.0 * x.ln())
     }
     #[rustc_autodiff(Reverse, 1, Const, Active, Active)]
-    #[inline(never)]
     fn df(&self, x: f64, dret: f64) -> (f64, f64) {
-        unsafe { asm!("NOP", options(pure, nomem)); };
-        ::core::hint::black_box(self.f(x));
-        ::core::hint::black_box((dret,));
-        ::core::hint::black_box((self.f(x), f64::default()))
+        ::core::intrinsics::autodiff(Self::f::<>, Self::df::<>,
+            (self, x, dret))
     }
 }
diff --git a/tests/run-make/lto-long-filenames/main.rs b/tests/run-make/lto-long-filenames/main.rs
new file mode 100644
index 00000000000..daedff5c05f
--- /dev/null
+++ b/tests/run-make/lto-long-filenames/main.rs
@@ -0,0 +1,7 @@
+// This file has very long lines, but there is no way to avoid it as we are testing
+// long crate names. so:
+// ignore-tidy-linelength
+
+extern crate generated_large_large_large_large_large_large_large_large_large_large_large_large_large_large_large_large_large_crate_name;
+
+fn main() {}
diff --git a/tests/run-make/lto-long-filenames/rmake.rs b/tests/run-make/lto-long-filenames/rmake.rs
new file mode 100644
index 00000000000..9e0ba63e9f5
--- /dev/null
+++ b/tests/run-make/lto-long-filenames/rmake.rs
@@ -0,0 +1,32 @@
+// This file has very long lines, but there is no way to avoid it as we are testing
+// long crate names. so:
+// ignore-tidy-linelength
+
+// A variant of the smoke test to check that link time optimization
+// (LTO) is accepted by the compiler, and that
+// passing its various flags still results in successful compilation, even for very long crate names.
+// See https://github.com/rust-lang/rust/issues/49914
+
+//@ ignore-cross-compile
+
+use std::fs;
+
+use run_make_support::{rfs, rustc};
+
+// This test make sure we don't get such following error:
+// error: could not write output to generated_large_large_large_large_large_large_large_large_large_large_large_large_large_large_large_large_large_crate_name.generated_large_large_large_large_large_large_large_large_large_large_large_large_large_large_large_large_large_crate_name.9384edb61bfd127c-cgu.0.rcgu.o: File name too long
+// as reported in issue #49914
+fn main() {
+    let lto_flags = ["-Clto", "-Clto=yes", "-Clto=off", "-Clto=thin", "-Clto=fat"];
+    let aux_file = "generated_large_large_large_large_large_large_large_large_large_large_large_large_large_large_large_large_large_crate_name.rs";
+    // The auxiliary file is used to test long crate names.
+    // The file name is intentionally long to test the handling of long filenames.
+    // We don't commit it to avoid issues with Windows paths which have known limitations for the full path length.
+    // Posix usually only have a limit for the length of the file name.
+    rfs::write(aux_file, "#![crate_type = \"rlib\"]\n");
+
+    for flag in lto_flags {
+        rustc().input(aux_file).arg(flag).run();
+        rustc().input("main.rs").arg(flag).run();
+    }
+}
diff --git a/tests/run-make/wasm-unexpected-features/foo.rs b/tests/run-make/wasm-unexpected-features/foo.rs
new file mode 100644
index 00000000000..5c7aa2d6190
--- /dev/null
+++ b/tests/run-make/wasm-unexpected-features/foo.rs
@@ -0,0 +1,43 @@
+#![no_core]
+#![crate_type = "cdylib"]
+#![feature(no_core, lang_items, allocator_internals, rustc_attrs)]
+#![needs_allocator]
+#![allow(internal_features)]
+
+#[rustc_std_internal_symbol]
+unsafe fn __rust_alloc(_size: usize, _align: usize) -> *mut u8 {
+    0 as *mut u8
+}
+
+unsafe extern "Rust" {
+    #[rustc_std_internal_symbol]
+    fn __rust_alloc_error_handler(size: usize, align: usize) -> !;
+}
+
+#[used]
+static mut BUF: [u8; 1024] = [0; 1024];
+
+#[unsafe(no_mangle)]
+extern "C" fn init() {
+    unsafe {
+        __rust_alloc_error_handler(0, 0);
+    }
+}
+
+mod minicore {
+    #[lang = "pointee_sized"]
+    pub trait PointeeSized {}
+
+    #[lang = "meta_sized"]
+    pub trait MetaSized: PointeeSized {}
+
+    #[lang = "sized"]
+    pub trait Sized: MetaSized {}
+
+    #[lang = "copy"]
+    pub trait Copy {}
+    impl Copy for u8 {}
+
+    #[lang = "drop_in_place"]
+    fn drop_in_place<T>(_: *mut T) {}
+}
diff --git a/tests/run-make/wasm-unexpected-features/rmake.rs b/tests/run-make/wasm-unexpected-features/rmake.rs
new file mode 100644
index 00000000000..416b5ef4caa
--- /dev/null
+++ b/tests/run-make/wasm-unexpected-features/rmake.rs
@@ -0,0 +1,26 @@
+//@ only-wasm32-wasip1
+
+use std::path::Path;
+
+use run_make_support::{rfs, rustc, wasmparser};
+
+fn main() {
+    rustc()
+        .input("foo.rs")
+        .target("wasm32-wasip1")
+        .target_cpu("mvp")
+        .opt_level("z")
+        .lto("fat")
+        .linker_plugin_lto("on")
+        .link_arg("--import-memory")
+        .run();
+    verify_features(Path::new("foo.wasm"));
+}
+
+fn verify_features(path: &Path) {
+    eprintln!("verify {path:?}");
+    let file = rfs::read(&path);
+
+    let mut validator = wasmparser::Validator::new_with_features(wasmparser::WasmFeatures::WASM1);
+    validator.validate_all(&file).unwrap();
+}
diff --git a/tests/rustdoc-js-std/core-transmute.js b/tests/rustdoc-js-std/core-transmute.js
index b15f398902c..8c9910a32d7 100644
--- a/tests/rustdoc-js-std/core-transmute.js
+++ b/tests/rustdoc-js-std/core-transmute.js
@@ -3,9 +3,9 @@ const EXPECTED = [
     {
         'query': 'generic:T -> generic:U',
         'others': [
-            { 'path': 'core::mem', 'name': 'transmute' },
             { 'path': 'core::intrinsics::simd', 'name': 'simd_as' },
             { 'path': 'core::intrinsics::simd', 'name': 'simd_cast' },
+            { 'path': 'core::mem', 'name': 'transmute' },
         ],
     },
 ];
diff --git a/tests/rustdoc-js-std/transmute-fail.js b/tests/rustdoc-js-std/transmute-fail.js
index 459e8dc3f00..ddfb2761948 100644
--- a/tests/rustdoc-js-std/transmute-fail.js
+++ b/tests/rustdoc-js-std/transmute-fail.js
@@ -6,9 +6,9 @@ const EXPECTED = [
         // should-fail tag and the search query below:
         'query': 'generic:T -> generic:T',
         'others': [
-            { 'path': 'std::mem', 'name': 'transmute' },
             { 'path': 'std::intrinsics::simd', 'name': 'simd_as' },
             { 'path': 'std::intrinsics::simd', 'name': 'simd_cast' },
+            { 'path': 'std::mem', 'name': 'transmute' },
         ],
     },
 ];
diff --git a/tests/rustdoc-js-std/transmute.js b/tests/rustdoc-js-std/transmute.js
index a85b02e2994..f52e0ab1436 100644
--- a/tests/rustdoc-js-std/transmute.js
+++ b/tests/rustdoc-js-std/transmute.js
@@ -5,9 +5,9 @@ const EXPECTED = [
         // should-fail tag and the search query below:
         'query': 'generic:T -> generic:U',
         'others': [
-            { 'path': 'std::mem', 'name': 'transmute' },
             { 'path': 'std::intrinsics::simd', 'name': 'simd_as' },
             { 'path': 'std::intrinsics::simd', 'name': 'simd_cast' },
+            { 'path': 'std::mem', 'name': 'transmute' },
         ],
     },
 ];
diff --git a/tests/rustdoc-js/sort-stability.js b/tests/rustdoc-js/sort-stability.js
deleted file mode 100644
index 8c095619a08..00000000000
--- a/tests/rustdoc-js/sort-stability.js
+++ /dev/null
@@ -1,9 +0,0 @@
-const EXPECTED = [
-    {
-        'query': 'foo',
-        'others': [
-            {"path": "sort_stability::old", "name": "foo"},
-            {"path": "sort_stability::new", "name": "foo"},
-        ],
-    },
-];
diff --git a/tests/rustdoc-js/sort-stability.rs b/tests/rustdoc-js/sort-stability.rs
deleted file mode 100644
index 68662bb3aab..00000000000
--- a/tests/rustdoc-js/sort-stability.rs
+++ /dev/null
@@ -1,16 +0,0 @@
-#![feature(staged_api)]
-#![stable(feature = "foo_lib", since = "1.0.0")]
-
-#[stable(feature = "old_foo", since = "1.0.1")]
-pub mod old {
-    /// Old, stable foo
-    #[stable(feature = "old_foo", since = "1.0.1")]
-    pub fn foo() {}
-}
-
-#[unstable(feature = "new_foo", issue = "none")]
-pub mod new {
-    /// New, unstable foo
-    #[unstable(feature = "new_foo", issue = "none")]
-    pub fn foo() {}
-}
diff --git a/tests/ui/abi/interrupt-invalid-signature.avr.stderr b/tests/ui/abi/interrupt-invalid-signature.avr.stderr
new file mode 100644
index 00000000000..91f5ca2022e
--- /dev/null
+++ b/tests/ui/abi/interrupt-invalid-signature.avr.stderr
@@ -0,0 +1,28 @@
+error: invalid signature for `extern "avr-interrupt"` function
+  --> $DIR/interrupt-invalid-signature.rs:44:35
+   |
+LL | extern "avr-interrupt" fn avr_arg(_byte: u8) {}
+   |                                   ^^^^^^^^^
+   |
+   = note: functions with the "avr-interrupt" ABI cannot have any parameters or return type
+help: remove the parameters and return type
+   |
+LL - extern "avr-interrupt" fn avr_arg(_byte: u8) {}
+LL + extern "avr-interrupt" fn avr_arg() {}
+   |
+
+error: invalid signature for `extern "avr-interrupt"` function
+  --> $DIR/interrupt-invalid-signature.rs:59:40
+   |
+LL | extern "avr-interrupt" fn avr_ret() -> u8 {
+   |                                        ^^
+   |
+   = note: functions with the "avr-interrupt" ABI cannot have any parameters or return type
+help: remove the parameters and return type
+   |
+LL - extern "avr-interrupt" fn avr_ret() -> u8 {
+LL + extern "avr-interrupt" fn avr_ret() {
+   |
+
+error: aborting due to 2 previous errors
+
diff --git a/tests/ui/abi/interrupt-invalid-signature.i686.stderr b/tests/ui/abi/interrupt-invalid-signature.i686.stderr
new file mode 100644
index 00000000000..86f2e097c37
--- /dev/null
+++ b/tests/ui/abi/interrupt-invalid-signature.i686.stderr
@@ -0,0 +1,15 @@
+error: invalid signature for `extern "x86-interrupt"` function
+  --> $DIR/interrupt-invalid-signature.rs:83:40
+   |
+LL | extern "x86-interrupt" fn x86_ret() -> u8 {
+   |                                        ^^
+   |
+   = note: functions with the "x86-interrupt" ABI cannot have a return type
+help: remove the return type
+  --> $DIR/interrupt-invalid-signature.rs:83:40
+   |
+LL | extern "x86-interrupt" fn x86_ret() -> u8 {
+   |                                        ^^
+
+error: aborting due to 1 previous error
+
diff --git a/tests/ui/abi/interrupt-invalid-signature.msp430.stderr b/tests/ui/abi/interrupt-invalid-signature.msp430.stderr
new file mode 100644
index 00000000000..38479f93de5
--- /dev/null
+++ b/tests/ui/abi/interrupt-invalid-signature.msp430.stderr
@@ -0,0 +1,28 @@
+error: invalid signature for `extern "msp430-interrupt"` function
+  --> $DIR/interrupt-invalid-signature.rs:40:41
+   |
+LL | extern "msp430-interrupt" fn msp430_arg(_byte: u8) {}
+   |                                         ^^^^^^^^^
+   |
+   = note: functions with the "msp430-interrupt" ABI cannot have any parameters or return type
+help: remove the parameters and return type
+   |
+LL - extern "msp430-interrupt" fn msp430_arg(_byte: u8) {}
+LL + extern "msp430-interrupt" fn msp430_arg() {}
+   |
+
+error: invalid signature for `extern "msp430-interrupt"` function
+  --> $DIR/interrupt-invalid-signature.rs:65:46
+   |
+LL | extern "msp430-interrupt" fn msp430_ret() -> u8 {
+   |                                              ^^
+   |
+   = note: functions with the "msp430-interrupt" ABI cannot have any parameters or return type
+help: remove the parameters and return type
+   |
+LL - extern "msp430-interrupt" fn msp430_ret() -> u8 {
+LL + extern "msp430-interrupt" fn msp430_ret() {
+   |
+
+error: aborting due to 2 previous errors
+
diff --git a/tests/ui/abi/interrupt-invalid-signature.riscv32.stderr b/tests/ui/abi/interrupt-invalid-signature.riscv32.stderr
new file mode 100644
index 00000000000..d632b17ab83
--- /dev/null
+++ b/tests/ui/abi/interrupt-invalid-signature.riscv32.stderr
@@ -0,0 +1,54 @@
+error: invalid signature for `extern "riscv-interrupt-m"` function
+  --> $DIR/interrupt-invalid-signature.rs:48:43
+   |
+LL | extern "riscv-interrupt-m" fn riscv_m_arg(_byte: u8) {}
+   |                                           ^^^^^^^^^
+   |
+   = note: functions with the "riscv-interrupt-m" ABI cannot have any parameters or return type
+help: remove the parameters and return type
+   |
+LL - extern "riscv-interrupt-m" fn riscv_m_arg(_byte: u8) {}
+LL + extern "riscv-interrupt-m" fn riscv_m_arg() {}
+   |
+
+error: invalid signature for `extern "riscv-interrupt-s"` function
+  --> $DIR/interrupt-invalid-signature.rs:52:43
+   |
+LL | extern "riscv-interrupt-s" fn riscv_s_arg(_byte: u8) {}
+   |                                           ^^^^^^^^^
+   |
+   = note: functions with the "riscv-interrupt-s" ABI cannot have any parameters or return type
+help: remove the parameters and return type
+   |
+LL - extern "riscv-interrupt-s" fn riscv_s_arg(_byte: u8) {}
+LL + extern "riscv-interrupt-s" fn riscv_s_arg() {}
+   |
+
+error: invalid signature for `extern "riscv-interrupt-m"` function
+  --> $DIR/interrupt-invalid-signature.rs:71:48
+   |
+LL | extern "riscv-interrupt-m" fn riscv_m_ret() -> u8 {
+   |                                                ^^
+   |
+   = note: functions with the "riscv-interrupt-m" ABI cannot have any parameters or return type
+help: remove the parameters and return type
+   |
+LL - extern "riscv-interrupt-m" fn riscv_m_ret() -> u8 {
+LL + extern "riscv-interrupt-m" fn riscv_m_ret() {
+   |
+
+error: invalid signature for `extern "riscv-interrupt-s"` function
+  --> $DIR/interrupt-invalid-signature.rs:77:48
+   |
+LL | extern "riscv-interrupt-s" fn riscv_s_ret() -> u8 {
+   |                                                ^^
+   |
+   = note: functions with the "riscv-interrupt-s" ABI cannot have any parameters or return type
+help: remove the parameters and return type
+   |
+LL - extern "riscv-interrupt-s" fn riscv_s_ret() -> u8 {
+LL + extern "riscv-interrupt-s" fn riscv_s_ret() {
+   |
+
+error: aborting due to 4 previous errors
+
diff --git a/tests/ui/abi/interrupt-invalid-signature.riscv64.stderr b/tests/ui/abi/interrupt-invalid-signature.riscv64.stderr
new file mode 100644
index 00000000000..d632b17ab83
--- /dev/null
+++ b/tests/ui/abi/interrupt-invalid-signature.riscv64.stderr
@@ -0,0 +1,54 @@
+error: invalid signature for `extern "riscv-interrupt-m"` function
+  --> $DIR/interrupt-invalid-signature.rs:48:43
+   |
+LL | extern "riscv-interrupt-m" fn riscv_m_arg(_byte: u8) {}
+   |                                           ^^^^^^^^^
+   |
+   = note: functions with the "riscv-interrupt-m" ABI cannot have any parameters or return type
+help: remove the parameters and return type
+   |
+LL - extern "riscv-interrupt-m" fn riscv_m_arg(_byte: u8) {}
+LL + extern "riscv-interrupt-m" fn riscv_m_arg() {}
+   |
+
+error: invalid signature for `extern "riscv-interrupt-s"` function
+  --> $DIR/interrupt-invalid-signature.rs:52:43
+   |
+LL | extern "riscv-interrupt-s" fn riscv_s_arg(_byte: u8) {}
+   |                                           ^^^^^^^^^
+   |
+   = note: functions with the "riscv-interrupt-s" ABI cannot have any parameters or return type
+help: remove the parameters and return type
+   |
+LL - extern "riscv-interrupt-s" fn riscv_s_arg(_byte: u8) {}
+LL + extern "riscv-interrupt-s" fn riscv_s_arg() {}
+   |
+
+error: invalid signature for `extern "riscv-interrupt-m"` function
+  --> $DIR/interrupt-invalid-signature.rs:71:48
+   |
+LL | extern "riscv-interrupt-m" fn riscv_m_ret() -> u8 {
+   |                                                ^^
+   |
+   = note: functions with the "riscv-interrupt-m" ABI cannot have any parameters or return type
+help: remove the parameters and return type
+   |
+LL - extern "riscv-interrupt-m" fn riscv_m_ret() -> u8 {
+LL + extern "riscv-interrupt-m" fn riscv_m_ret() {
+   |
+
+error: invalid signature for `extern "riscv-interrupt-s"` function
+  --> $DIR/interrupt-invalid-signature.rs:77:48
+   |
+LL | extern "riscv-interrupt-s" fn riscv_s_ret() -> u8 {
+   |                                                ^^
+   |
+   = note: functions with the "riscv-interrupt-s" ABI cannot have any parameters or return type
+help: remove the parameters and return type
+   |
+LL - extern "riscv-interrupt-s" fn riscv_s_ret() -> u8 {
+LL + extern "riscv-interrupt-s" fn riscv_s_ret() {
+   |
+
+error: aborting due to 4 previous errors
+
diff --git a/tests/ui/abi/interrupt-invalid-signature.rs b/tests/ui/abi/interrupt-invalid-signature.rs
new file mode 100644
index 00000000000..e389285b069
--- /dev/null
+++ b/tests/ui/abi/interrupt-invalid-signature.rs
@@ -0,0 +1,110 @@
+/*! Tests interrupt ABIs have a constricted signature
+
+Most interrupt ABIs share a similar restriction in terms of not allowing most signatures.
+Specifically, they generally cannot have arguments or return types.
+So we test that they error in essentially all of the same places.
+A notable and interesting exception is x86.
+
+This test uses `cfg` because it is not testing whether these ABIs work on the platform.
+*/
+//@ add-core-stubs
+//@ revisions: x64 i686 riscv32 riscv64 avr msp430
+//
+//@ [x64] needs-llvm-components: x86
+//@ [x64] compile-flags: --target=x86_64-unknown-linux-gnu --crate-type=rlib
+//@ [i686] needs-llvm-components: x86
+//@ [i686] compile-flags: --target=i686-unknown-linux-gnu --crate-type=rlib
+//@ [riscv32] needs-llvm-components: riscv
+//@ [riscv32] compile-flags: --target=riscv32i-unknown-none-elf --crate-type=rlib
+//@ [riscv64] needs-llvm-components: riscv
+//@ [riscv64] compile-flags: --target=riscv64gc-unknown-none-elf --crate-type=rlib
+//@ [avr] needs-llvm-components: avr
+//@ [avr] compile-flags: --target=avr-none -C target-cpu=atmega328p --crate-type=rlib
+//@ [msp430] needs-llvm-components: msp430
+//@ [msp430] compile-flags: --target=msp430-none-elf --crate-type=rlib
+#![no_core]
+#![feature(
+    no_core,
+    abi_msp430_interrupt,
+    abi_avr_interrupt,
+    abi_x86_interrupt,
+    abi_riscv_interrupt
+)]
+
+extern crate minicore;
+use minicore::*;
+
+/* most extern "interrupt" definitions should not accept args */
+
+#[cfg(msp430)]
+extern "msp430-interrupt" fn msp430_arg(_byte: u8) {}
+//[msp430]~^ ERROR invalid signature
+
+#[cfg(avr)]
+extern "avr-interrupt" fn avr_arg(_byte: u8) {}
+//[avr]~^ ERROR invalid signature
+
+#[cfg(any(riscv32,riscv64))]
+extern "riscv-interrupt-m" fn riscv_m_arg(_byte: u8) {}
+//[riscv32,riscv64]~^ ERROR invalid signature
+
+#[cfg(any(riscv32,riscv64))]
+extern "riscv-interrupt-s" fn riscv_s_arg(_byte: u8) {}
+//[riscv32,riscv64]~^ ERROR invalid signature
+
+
+/* all extern "interrupt" definitions should not return non-1ZST values */
+
+#[cfg(avr)]
+extern "avr-interrupt" fn avr_ret() -> u8 {
+    //[avr]~^ ERROR invalid signature
+    1
+}
+
+#[cfg(msp430)]
+extern "msp430-interrupt" fn msp430_ret() -> u8 {
+    //[msp430]~^ ERROR invalid signature
+    1
+}
+
+#[cfg(any(riscv32,riscv64))]
+extern "riscv-interrupt-m" fn riscv_m_ret() -> u8 {
+    //[riscv32,riscv64]~^ ERROR invalid signature
+    1
+}
+
+#[cfg(any(riscv32,riscv64))]
+extern "riscv-interrupt-s" fn riscv_s_ret() -> u8 {
+    //[riscv32,riscv64]~^ ERROR invalid signature
+    1
+}
+
+#[cfg(any(x64,i686))]
+extern "x86-interrupt" fn x86_ret() -> u8 {
+    //[x64,i686]~^ ERROR invalid signature
+    1
+}
+
+
+
+/* extern "interrupt" fnptrs with invalid signatures */
+
+#[cfg(avr)]
+fn avr_ptr(_f: extern "avr-interrupt" fn(u8) -> u8) {
+}
+
+#[cfg(msp430)]
+fn msp430_ptr(_f: extern "msp430-interrupt" fn(u8) -> u8) {
+}
+
+#[cfg(any(riscv32,riscv64))]
+fn riscv_m_ptr(_f: extern "riscv-interrupt-m" fn(u8) -> u8) {
+}
+
+#[cfg(any(riscv32,riscv64))]
+fn riscv_s_ptr(_f: extern "riscv-interrupt-s" fn(u8) -> u8) {
+}
+
+#[cfg(any(x64,i686))]
+fn x86_ptr(_f: extern "x86-interrupt" fn() -> u8) {
+}
diff --git a/tests/ui/abi/interrupt-invalid-signature.x64.stderr b/tests/ui/abi/interrupt-invalid-signature.x64.stderr
new file mode 100644
index 00000000000..86f2e097c37
--- /dev/null
+++ b/tests/ui/abi/interrupt-invalid-signature.x64.stderr
@@ -0,0 +1,15 @@
+error: invalid signature for `extern "x86-interrupt"` function
+  --> $DIR/interrupt-invalid-signature.rs:83:40
+   |
+LL | extern "x86-interrupt" fn x86_ret() -> u8 {
+   |                                        ^^
+   |
+   = note: functions with the "x86-interrupt" ABI cannot have a return type
+help: remove the return type
+  --> $DIR/interrupt-invalid-signature.rs:83:40
+   |
+LL | extern "x86-interrupt" fn x86_ret() -> u8 {
+   |                                        ^^
+
+error: aborting due to 1 previous error
+
diff --git a/tests/ui/abi/interrupt-returns-never-or-unit.rs b/tests/ui/abi/interrupt-returns-never-or-unit.rs
new file mode 100644
index 00000000000..8e224229a0b
--- /dev/null
+++ b/tests/ui/abi/interrupt-returns-never-or-unit.rs
@@ -0,0 +1,110 @@
+/*! Tests interrupt ABIs can return !
+
+Most interrupt ABIs share a similar restriction in terms of not allowing most signatures,
+but it makes sense to allow them to return ! because they could indeed be divergent.
+
+This test uses `cfg` because it is not testing whether these ABIs work on the platform.
+*/
+//@ add-core-stubs
+//@ revisions: x64 i686 riscv32 riscv64 avr msp430
+//@ build-pass
+//
+//@ [x64] needs-llvm-components: x86
+//@ [x64] compile-flags: --target=x86_64-unknown-linux-gnu --crate-type=rlib
+//@ [i686] needs-llvm-components: x86
+//@ [i686] compile-flags: --target=i686-unknown-linux-gnu --crate-type=rlib
+//@ [riscv32] needs-llvm-components: riscv
+//@ [riscv32] compile-flags: --target=riscv32i-unknown-none-elf --crate-type=rlib
+//@ [riscv64] needs-llvm-components: riscv
+//@ [riscv64] compile-flags: --target=riscv64gc-unknown-none-elf --crate-type=rlib
+//@ [avr] needs-llvm-components: avr
+//@ [avr] compile-flags: --target=avr-none -C target-cpu=atmega328p --crate-type=rlib
+//@ [msp430] needs-llvm-components: msp430
+//@ [msp430] compile-flags: --target=msp430-none-elf --crate-type=rlib
+#![no_core]
+#![feature(
+    no_core,
+    abi_msp430_interrupt,
+    abi_avr_interrupt,
+    abi_x86_interrupt,
+    abi_riscv_interrupt
+)]
+
+extern crate minicore;
+use minicore::*;
+
+/* interrupts can return never */
+
+#[cfg(avr)]
+extern "avr-interrupt" fn avr_ret_never() -> ! {
+    loop {}
+}
+
+#[cfg(msp430)]
+extern "msp430-interrupt" fn msp430_ret_never() -> ! {
+    loop {}
+}
+
+#[cfg(any(riscv32,riscv64))]
+extern "riscv-interrupt-m" fn riscv_m_ret_never() -> ! {
+    loop {}
+}
+
+#[cfg(any(riscv32,riscv64))]
+extern "riscv-interrupt-s" fn riscv_s_ret_never() -> ! {
+    loop {}
+}
+
+#[cfg(any(x64,i686))]
+extern "x86-interrupt" fn x86_ret_never() -> ! {
+    loop {}
+}
+
+/* interrupts can return explicit () */
+
+#[cfg(avr)]
+extern "avr-interrupt" fn avr_ret_unit() -> () {
+    ()
+}
+
+#[cfg(msp430)]
+extern "msp430-interrupt" fn msp430_ret_unit() -> () {
+    ()
+}
+
+#[cfg(any(riscv32,riscv64))]
+extern "riscv-interrupt-m" fn riscv_m_ret_unit() -> () {
+    ()
+}
+
+#[cfg(any(riscv32,riscv64))]
+extern "riscv-interrupt-s" fn riscv_s_ret_unit() -> () {
+    ()
+}
+
+#[cfg(any(x64,i686))]
+extern "x86-interrupt" fn x86_ret_unit() -> () {
+    ()
+}
+
+/* extern "interrupt" fnptrs can return ! too */
+
+#[cfg(avr)]
+fn avr_ptr(_f: extern "avr-interrupt" fn() -> !) {
+}
+
+#[cfg(msp430)]
+fn msp430_ptr(_f: extern "msp430-interrupt" fn() -> !) {
+}
+
+#[cfg(any(riscv32,riscv64))]
+fn riscv_m_ptr(_f: extern "riscv-interrupt-m" fn() -> !) {
+}
+
+#[cfg(any(riscv32,riscv64))]
+fn riscv_s_ptr(_f: extern "riscv-interrupt-s" fn() -> !) {
+}
+
+#[cfg(any(x64,i686))]
+fn x86_ptr(_f: extern "x86-interrupt" fn() -> !) {
+}
diff --git a/tests/ui/autodiff/macro_hygiene.rs b/tests/ui/autodiff/macro_hygiene.rs
new file mode 100644
index 00000000000..dec58254b99
--- /dev/null
+++ b/tests/ui/autodiff/macro_hygiene.rs
@@ -0,0 +1,22 @@
+//@ compile-flags: -Zautodiff=Enable -C opt-level=3  -Clto=fat
+//@ no-prefer-dynamic
+//@ needs-enzyme
+//@ check-pass
+
+// In the past, we just checked for correct macro hygiene information.
+
+#![feature(autodiff)]
+
+macro_rules! demo {
+    () => {
+        #[std::autodiff::autodiff_reverse(fd, Active, Active)]
+        fn f(x: f64) -> f64 {
+            x * x
+        }
+    };
+}
+demo!();
+
+fn main() {
+    dbg!(f(2.0f64));
+}
diff --git a/tests/ui/codemap_tests/issue-28308.rs b/tests/ui/codemap_tests/issue-28308.rs
index 81493f8c453..b0e04d0f1f6 100644
--- a/tests/ui/codemap_tests/issue-28308.rs
+++ b/tests/ui/codemap_tests/issue-28308.rs
@@ -1,4 +1,16 @@
 fn main() {
-    assert!("foo");
-    //~^ ERROR cannot apply unary operator `!`
+    assert!("foo"); //~ ERROR mismatched types
+    //~^ NOTE expected `bool`, found `str`
+    //~| NOTE in this expansion of assert!
+    let x = Some(&1);
+    assert!(x); //~ ERROR mismatched types
+    //~^ NOTE expected `bool`, found `Option<&{integer}>`
+    //~| NOTE expected enum `bool`
+    //~| NOTE in this expansion of assert!
+    //~| NOTE in this expansion of assert!
+    assert!(x, ""); //~ ERROR mismatched types
+    //~^ NOTE expected `bool`, found `Option<&{integer}>`
+    //~| NOTE expected enum `bool`
+    //~| NOTE in this expansion of assert!
+    //~| NOTE in this expansion of assert!
 }
diff --git a/tests/ui/codemap_tests/issue-28308.stderr b/tests/ui/codemap_tests/issue-28308.stderr
index 7bc9e05dfc0..e84ceb44aac 100644
--- a/tests/ui/codemap_tests/issue-28308.stderr
+++ b/tests/ui/codemap_tests/issue-28308.stderr
@@ -1,9 +1,27 @@
-error[E0600]: cannot apply unary operator `!` to type `&'static str`
-  --> $DIR/issue-28308.rs:2:5
+error[E0308]: mismatched types
+  --> $DIR/issue-28308.rs:2:13
    |
 LL |     assert!("foo");
-   |     ^^^^^^^^^^^^^^ cannot apply unary operator `!`
+   |             ^^^^^ expected `bool`, found `str`
 
-error: aborting due to 1 previous error
+error[E0308]: mismatched types
+  --> $DIR/issue-28308.rs:6:13
+   |
+LL |     assert!(x);
+   |             ^ expected `bool`, found `Option<&{integer}>`
+   |
+   = note: expected enum `bool`
+              found type `Option<&{integer}>`
+
+error[E0308]: mismatched types
+  --> $DIR/issue-28308.rs:11:13
+   |
+LL |     assert!(x, "");
+   |             ^ expected `bool`, found `Option<&{integer}>`
+   |
+   = note: expected enum `bool`
+              found type `Option<&{integer}>`
+
+error: aborting due to 3 previous errors
 
-For more information about this error, try `rustc --explain E0600`.
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/consts/control-flow/assert.stderr b/tests/ui/consts/control-flow/assert.stderr
index 026097a6ba0..deaad6abbcc 100644
--- a/tests/ui/consts/control-flow/assert.stderr
+++ b/tests/ui/consts/control-flow/assert.stderr
@@ -1,8 +1,8 @@
 error[E0080]: evaluation panicked: assertion failed: false
-  --> $DIR/assert.rs:5:15
+  --> $DIR/assert.rs:5:23
    |
 LL | const _: () = assert!(false);
-   |               ^^^^^^^^^^^^^^ evaluation of `_` failed here
+   |                       ^^^^^ evaluation of `_` failed here
 
 error: aborting due to 1 previous error
 
diff --git a/tests/ui/explicit-tail-calls/callee_is_track_caller.rs b/tests/ui/explicit-tail-calls/callee_is_track_caller.rs
index bcb93fda8c8..b85b335844b 100644
--- a/tests/ui/explicit-tail-calls/callee_is_track_caller.rs
+++ b/tests/ui/explicit-tail-calls/callee_is_track_caller.rs
@@ -1,10 +1,11 @@
-//@ check-pass
-// FIXME(explicit_tail_calls): make this run-pass, once tail calls are properly implemented
+//@ run-pass
+//@ ignore-pass
 #![expect(incomplete_features)]
 #![feature(explicit_tail_calls)]
 
 fn a(x: u32) -> u32 {
     become b(x);
+    //~^ warning: tail calling a function marked with `#[track_caller]` has no special effect
 }
 
 #[track_caller]
diff --git a/tests/ui/explicit-tail-calls/callee_is_track_caller.stderr b/tests/ui/explicit-tail-calls/callee_is_track_caller.stderr
new file mode 100644
index 00000000000..e1a251d156f
--- /dev/null
+++ b/tests/ui/explicit-tail-calls/callee_is_track_caller.stderr
@@ -0,0 +1,10 @@
+warning: tail calling a function marked with `#[track_caller]` has no special effect
+  --> $DIR/callee_is_track_caller.rs:7:12
+   |
+LL |     become b(x);
+   |            ^^^^
+   |
+   = note: `#[warn(tail_call_track_caller)]` on by default
+
+warning: 1 warning emitted
+
diff --git a/tests/ui/explicit-tail-calls/callee_is_track_caller_polymorphic.rs b/tests/ui/explicit-tail-calls/callee_is_track_caller_polymorphic.rs
new file mode 100644
index 00000000000..33384de83eb
--- /dev/null
+++ b/tests/ui/explicit-tail-calls/callee_is_track_caller_polymorphic.rs
@@ -0,0 +1,20 @@
+//@ run-pass
+//@ ignore-pass
+#![expect(incomplete_features)]
+#![feature(explicit_tail_calls)]
+
+fn c<T: Trait>() {
+    become T::f();
+    //~^ warning: tail calling a function marked with `#[track_caller]` has no special effect
+}
+
+trait Trait {
+    #[track_caller]
+    fn f() {}
+}
+
+impl Trait for () {}
+
+fn main() {
+    c::<()>();
+}
diff --git a/tests/ui/explicit-tail-calls/callee_is_track_caller_polymorphic.stderr b/tests/ui/explicit-tail-calls/callee_is_track_caller_polymorphic.stderr
new file mode 100644
index 00000000000..5a1c40509ad
--- /dev/null
+++ b/tests/ui/explicit-tail-calls/callee_is_track_caller_polymorphic.stderr
@@ -0,0 +1,10 @@
+warning: tail calling a function marked with `#[track_caller]` has no special effect
+  --> $DIR/callee_is_track_caller_polymorphic.rs:7:12
+   |
+LL |     become T::f();
+   |            ^^^^^^
+   |
+   = note: `#[warn(tail_call_track_caller)]` on by default
+
+warning: 1 warning emitted
+
diff --git a/tests/ui/explicit-tail-calls/caller-lifetime-presence.rs b/tests/ui/explicit-tail-calls/caller-lifetime-presence.rs
new file mode 100644
index 00000000000..2382bc9dd1e
--- /dev/null
+++ b/tests/ui/explicit-tail-calls/caller-lifetime-presence.rs
@@ -0,0 +1,51 @@
+//! Regression test for: https://github.com/rust-lang/rust/issues/144957
+//!
+//! This test ensures that lifetime information is included in diagnostics.
+//!
+//! Specifically, it checks that the `become` call produces an error with lifetimes shown
+//! in both caller and callee signatures.
+//!
+//! If the test fails:
+//! - Lifetimes may be missing (fix the diagnostic), or
+//! - The message format changed (update the test).
+
+#![feature(explicit_tail_calls)]
+#![allow(incomplete_features)]
+
+fn foo<'a>(_: fn(&'a ())) {
+    become bar(dummy);
+    //~^ ERROR mismatched signatures
+    //~| NOTE `become` requires caller and callee to have matching signatures
+    //~| NOTE caller signature: `fn(fn(&'a ()))`
+    //~| NOTE callee signature: `fn(for<'a> fn(&'a ()))`
+}
+
+fn bar(_: fn(&())) {}
+
+fn dummy(_: &()) {}
+
+fn foo_(_: fn(&())) {
+    become bar1(dummy2);
+    //~^ ERROR mismatched signatures
+    //~| NOTE `become` requires caller and callee to have matching signatures
+    //~| NOTE caller signature: `fn(for<'a> fn(&'a ()))`
+    //~| NOTE callee signature: `fn(fn(&'a ()))`
+}
+
+fn bar1<'a>(_: fn(&'a ())) {}
+
+fn dummy2(_: &()) {}
+
+fn foo__(_: fn(&'static ())) {
+    become bar(dummy3);
+    //~^ ERROR mismatched signatures
+    //~| NOTE `become` requires caller and callee to have matching signatures
+    //~| NOTE caller signature: `fn(fn(&'static ()))`
+    //~| NOTE callee signature: `fn(for<'a> fn(&'a ()))`
+}
+
+fn bar2(_: fn(&())) {}
+
+fn dummy3(_: &()) {}
+
+fn main() {}
diff --git a/tests/ui/explicit-tail-calls/caller-lifetime-presence.stderr b/tests/ui/explicit-tail-calls/caller-lifetime-presence.stderr
new file mode 100644
index 00000000000..2fb981d9682
--- /dev/null
+++ b/tests/ui/explicit-tail-calls/caller-lifetime-presence.stderr
@@ -0,0 +1,32 @@
+error: mismatched signatures
+  --> $DIR/caller-lifetime-presence.rs:16:5
+   |
+LL |     become bar(dummy);
+   |     ^^^^^^^^^^^^^^^^^
+   |
+   = note: `become` requires caller and callee to have matching signatures
+   = note: caller signature: `fn(fn(&'a ()))`
+   = note: callee signature: `fn(for<'a> fn(&'a ()))`
+
+error: mismatched signatures
+  --> $DIR/caller-lifetime-presence.rs:28:5
+   |
+LL |     become bar1(dummy2);
+   |     ^^^^^^^^^^^^^^^^^^^
+   |
+   = note: `become` requires caller and callee to have matching signatures
+   = note: caller signature: `fn(for<'a> fn(&'a ()))`
+   = note: callee signature: `fn(fn(&'a ()))`
+
+error: mismatched signatures
+  --> $DIR/caller-lifetime-presence.rs:40:5
+   |
+LL |     become bar(dummy3);
+   |     ^^^^^^^^^^^^^^^^^^
+   |
+   = note: `become` requires caller and callee to have matching signatures
+   = note: caller signature: `fn(fn(&'static ()))`
+   = note: callee signature: `fn(for<'a> fn(&'a ()))`
+
+error: aborting due to 3 previous errors
+
diff --git a/tests/ui/extern-flag/empty-extern-arg.rs b/tests/ui/extern-flag/empty-extern-arg.rs
index 2dee721ed03..10cc3be7113 100644
--- a/tests/ui/extern-flag/empty-extern-arg.rs
+++ b/tests/ui/extern-flag/empty-extern-arg.rs
@@ -1,4 +1,5 @@
 //~ ERROR extern location for std does not exist
+//~^ ERROR cannot resolve a prelude import
 //@ compile-flags: --extern std=
 //@ needs-unwind since it affects the error output
 //@ ignore-emscripten missing eh_catch_typeinfo lang item
diff --git a/tests/ui/extern-flag/empty-extern-arg.stderr b/tests/ui/extern-flag/empty-extern-arg.stderr
index 79efcc5d8b0..3e0a0d6cd5f 100644
--- a/tests/ui/extern-flag/empty-extern-arg.stderr
+++ b/tests/ui/extern-flag/empty-extern-arg.stderr
@@ -1,5 +1,7 @@
 error: extern location for std does not exist: 
 
+error: cannot resolve a prelude import
+
 error: `#[panic_handler]` function required, but not found
 
 error: unwinding panics are not supported without std
@@ -7,5 +9,5 @@ error: unwinding panics are not supported without std
    = help: using nightly cargo, use -Zbuild-std with panic="abort" to avoid unwinding
    = note: since the core library is usually precompiled with panic="unwind", rebuilding your crate with panic="abort" may not be enough to fix the problem
 
-error: aborting due to 3 previous errors
+error: aborting due to 4 previous errors
 
diff --git a/tests/ui/generics/post_monomorphization_error_backtrace.stderr b/tests/ui/generics/post_monomorphization_error_backtrace.stderr
index 6953414f0c2..92c7df73638 100644
--- a/tests/ui/generics/post_monomorphization_error_backtrace.stderr
+++ b/tests/ui/generics/post_monomorphization_error_backtrace.stderr
@@ -1,8 +1,8 @@
 error[E0080]: evaluation panicked: assertion failed: std::mem::size_of::<T>() == 0
-  --> $DIR/post_monomorphization_error_backtrace.rs:6:23
+  --> $DIR/post_monomorphization_error_backtrace.rs:6:31
    |
 LL |         const V: () = assert!(std::mem::size_of::<T>() == 0);
-   |                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ evaluation of `assert_zst::F::<u32>::V` failed here
+   |                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ evaluation of `assert_zst::F::<u32>::V` failed here
 
 note: erroneous constant encountered
   --> $DIR/post_monomorphization_error_backtrace.rs:14:5
@@ -17,10 +17,10 @@ LL |     assert_zst::<U>()
    |     ^^^^^^^^^^^^^^^^^
 
 error[E0080]: evaluation panicked: assertion failed: std::mem::size_of::<T>() == 0
-  --> $DIR/post_monomorphization_error_backtrace.rs:6:23
+  --> $DIR/post_monomorphization_error_backtrace.rs:6:31
    |
 LL |         const V: () = assert!(std::mem::size_of::<T>() == 0);
-   |                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ evaluation of `assert_zst::F::<i32>::V` failed here
+   |                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ evaluation of `assert_zst::F::<i32>::V` failed here
 
 note: erroneous constant encountered
   --> $DIR/post_monomorphization_error_backtrace.rs:14:5
diff --git a/tests/ui/inline-const/const-expr-generic-err.stderr b/tests/ui/inline-const/const-expr-generic-err.stderr
index 26039ba6d44..e053e88db17 100644
--- a/tests/ui/inline-const/const-expr-generic-err.stderr
+++ b/tests/ui/inline-const/const-expr-generic-err.stderr
@@ -1,8 +1,8 @@
 error[E0080]: evaluation panicked: assertion failed: std::mem::size_of::<T>() == 0
-  --> $DIR/const-expr-generic-err.rs:4:13
+  --> $DIR/const-expr-generic-err.rs:4:21
    |
 LL |     const { assert!(std::mem::size_of::<T>() == 0); }
-   |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ evaluation of `foo::<i32>::{constant#0}` failed here
+   |                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ evaluation of `foo::<i32>::{constant#0}` failed here
 
 note: erroneous constant encountered
   --> $DIR/const-expr-generic-err.rs:4:5
diff --git a/tests/ui/macros/assert-macro-lifetimes.rs b/tests/ui/macros/assert-macro-lifetimes.rs
new file mode 100644
index 00000000000..cc259283204
--- /dev/null
+++ b/tests/ui/macros/assert-macro-lifetimes.rs
@@ -0,0 +1,8 @@
+//@ check-pass
+#[derive(PartialEq, Eq, Hash)]
+struct S;
+fn main() {
+    let foo = std::rc::Rc::new(std::cell::RefCell::new(std::collections::HashMap::<S, S>::new()));
+    // Ensure that the lifetimes of the borrow do not leak past the end of `main`.
+    assert!(matches!(foo.borrow().get(&S).unwrap(), S))
+}
diff --git a/tests/ui/mir/alignment/packed.rs b/tests/ui/mir/alignment/packed.rs
index cf908365e1a..aa79880a21a 100644
--- a/tests/ui/mir/alignment/packed.rs
+++ b/tests/ui/mir/alignment/packed.rs
@@ -12,7 +12,7 @@ fn main() {
     // Test that we can use addr_of! to get the address of a packed member which according to its
     // type is not aligned, but because it is a projection from a packed type is a valid place.
     let ptr0 = std::ptr::addr_of!(memory[0].tail);
-    let ptr1 = std::ptr::addr_of!(memory[0].tail);
+    let ptr1 = std::ptr::addr_of!(memory[1].tail);
     // Even if ptr0 happens to be aligned by chance, ptr1 is not.
     assert!(!ptr0.is_aligned() || !ptr1.is_aligned());
 
diff --git a/tests/ui/parser/inverted-parameters.rs b/tests/ui/parser/inverted-parameters.rs
index bc2f53f0be1..5b2827b6fee 100644
--- a/tests/ui/parser/inverted-parameters.rs
+++ b/tests/ui/parser/inverted-parameters.rs
@@ -23,7 +23,6 @@ fn pattern((i32, i32) (a, b)) {}
 fn fizz(i32) {}
 //~^ ERROR expected one of `:`, `@`
 //~| HELP if this is a parameter name, give it a type
-//~| HELP if this is a `self` type, give it a parameter name
 //~| HELP if this is a type, explicitly ignore the parameter name
 
 fn missing_colon(quux S) {}
diff --git a/tests/ui/parser/inverted-parameters.stderr b/tests/ui/parser/inverted-parameters.stderr
index 7b969032d0f..93b95a75608 100644
--- a/tests/ui/parser/inverted-parameters.stderr
+++ b/tests/ui/parser/inverted-parameters.stderr
@@ -34,11 +34,6 @@ error: expected one of `:`, `@`, or `|`, found `)`
 LL | fn fizz(i32) {}
    |            ^ expected one of `:`, `@`, or `|`
    |
-   = note: anonymous parameters are removed in the 2018 edition (see RFC 1685)
-help: if this is a `self` type, give it a parameter name
-   |
-LL | fn fizz(self: i32) {}
-   |         +++++
 help: if this is a parameter name, give it a type
    |
 LL | fn fizz(i32: TypeName) {}
@@ -49,7 +44,7 @@ LL | fn fizz(_: i32) {}
    |         ++
 
 error: expected one of `:`, `@`, or `|`, found `S`
-  --> $DIR/inverted-parameters.rs:29:23
+  --> $DIR/inverted-parameters.rs:28:23
    |
 LL | fn missing_colon(quux S) {}
    |                  -----^
diff --git a/tests/ui/parser/lifetime-in-pattern.stderr b/tests/ui/parser/lifetime-in-pattern.stderr
index ffda28b202b..0d01120a057 100644
--- a/tests/ui/parser/lifetime-in-pattern.stderr
+++ b/tests/ui/parser/lifetime-in-pattern.stderr
@@ -16,11 +16,6 @@ error: expected one of `:`, `@`, or `|`, found `)`
 LL | fn test(&'a str) {
    |                ^ expected one of `:`, `@`, or `|`
    |
-   = note: anonymous parameters are removed in the 2018 edition (see RFC 1685)
-help: if this is a `self` type, give it a parameter name
-   |
-LL | fn test(self: &'a str) {
-   |         +++++
 help: if this is a parameter name, give it a type
    |
 LL - fn test(&'a str) {
diff --git a/tests/ui/parser/omitted-arg-in-item-fn.stderr b/tests/ui/parser/omitted-arg-in-item-fn.stderr
index 6f2a9f64c94..d6bc5d9c68f 100644
--- a/tests/ui/parser/omitted-arg-in-item-fn.stderr
+++ b/tests/ui/parser/omitted-arg-in-item-fn.stderr
@@ -4,11 +4,6 @@ error: expected one of `:`, `@`, or `|`, found `)`
 LL | fn foo(x) {
    |         ^ expected one of `:`, `@`, or `|`
    |
-   = note: anonymous parameters are removed in the 2018 edition (see RFC 1685)
-help: if this is a `self` type, give it a parameter name
-   |
-LL | fn foo(self: x) {
-   |        +++++
 help: if this is a parameter name, give it a type
    |
 LL | fn foo(x: TypeName) {
diff --git a/tests/ui/parser/pat-lt-bracket-2.stderr b/tests/ui/parser/pat-lt-bracket-2.stderr
index 5fe97b2ef4c..9e056bd63ec 100644
--- a/tests/ui/parser/pat-lt-bracket-2.stderr
+++ b/tests/ui/parser/pat-lt-bracket-2.stderr
@@ -4,11 +4,6 @@ error: expected one of `:`, `@`, or `|`, found `<`
 LL | fn a(B<) {}
    |       ^ expected one of `:`, `@`, or `|`
    |
-   = note: anonymous parameters are removed in the 2018 edition (see RFC 1685)
-help: if this is a `self` type, give it a parameter name
-   |
-LL | fn a(self: B<) {}
-   |      +++++
 help: if this is a type, explicitly ignore the parameter name
    |
 LL | fn a(_: B<) {}
diff --git a/tests/ui/parser/suggest-self-in-bare-function.rs b/tests/ui/parser/suggest-self-in-bare-function.rs
new file mode 100644
index 00000000000..e7f2a12bcd0
--- /dev/null
+++ b/tests/ui/parser/suggest-self-in-bare-function.rs
@@ -0,0 +1,25 @@
+// We should not suggest `self` in bare functions.
+// And a note for RFC 1685 should not be shown.
+// See #144968
+
+//@ edition:2018
+
+fn is_even(value) -> bool { //~ ERROR expected one of `:`, `@`, or `|`, found `)`
+    value % 2 == 0
+}
+
+struct S;
+
+impl S {
+    fn is_even(value) -> bool { //~ ERROR expected one of `:`, `@`, or `|`, found `)`
+        value % 2 == 0
+    }
+}
+
+trait T {
+    fn is_even(value) -> bool { //~ ERROR expected one of `:`, `@`, or `|`, found `)`
+        value % 2 == 0
+    }
+}
+
+fn main() {}
diff --git a/tests/ui/parser/suggest-self-in-bare-function.stderr b/tests/ui/parser/suggest-self-in-bare-function.stderr
new file mode 100644
index 00000000000..40cbe5575fd
--- /dev/null
+++ b/tests/ui/parser/suggest-self-in-bare-function.stderr
@@ -0,0 +1,56 @@
+error: expected one of `:`, `@`, or `|`, found `)`
+  --> $DIR/suggest-self-in-bare-function.rs:7:17
+   |
+LL | fn is_even(value) -> bool {
+   |                 ^ expected one of `:`, `@`, or `|`
+   |
+help: if this is a parameter name, give it a type
+   |
+LL | fn is_even(value: TypeName) -> bool {
+   |                 ++++++++++
+help: if this is a type, explicitly ignore the parameter name
+   |
+LL | fn is_even(_: value) -> bool {
+   |            ++
+
+error: expected one of `:`, `@`, or `|`, found `)`
+  --> $DIR/suggest-self-in-bare-function.rs:14:21
+   |
+LL |     fn is_even(value) -> bool {
+   |                     ^ expected one of `:`, `@`, or `|`
+   |
+help: if this is a `self` type, give it a parameter name
+   |
+LL |     fn is_even(self: value) -> bool {
+   |                +++++
+help: if this is a parameter name, give it a type
+   |
+LL |     fn is_even(value: TypeName) -> bool {
+   |                     ++++++++++
+help: if this is a type, explicitly ignore the parameter name
+   |
+LL |     fn is_even(_: value) -> bool {
+   |                ++
+
+error: expected one of `:`, `@`, or `|`, found `)`
+  --> $DIR/suggest-self-in-bare-function.rs:20:21
+   |
+LL |     fn is_even(value) -> bool {
+   |                     ^ expected one of `:`, `@`, or `|`
+   |
+   = note: anonymous parameters are removed in the 2018 edition (see RFC 1685)
+help: if this is a `self` type, give it a parameter name
+   |
+LL |     fn is_even(self: value) -> bool {
+   |                +++++
+help: if this is a parameter name, give it a type
+   |
+LL |     fn is_even(value: TypeName) -> bool {
+   |                     ++++++++++
+help: if this is a type, explicitly ignore the parameter name
+   |
+LL |     fn is_even(_: value) -> bool {
+   |                ++
+
+error: aborting due to 3 previous errors
+
diff --git a/tests/ui/proc-macro/derive-helper-legacy-spurious.rs b/tests/ui/proc-macro/derive-helper-legacy-spurious.rs
index 8e902f30419..0b55e775f38 100644
--- a/tests/ui/proc-macro/derive-helper-legacy-spurious.rs
+++ b/tests/ui/proc-macro/derive-helper-legacy-spurious.rs
@@ -6,7 +6,7 @@
 extern crate test_macros;
 
 #[derive(Empty)]
-#[empty_helper] //~ ERROR cannot find attribute `empty_helper` in this scope
+#[empty_helper]
 struct Foo {}
 
 fn main() {}
diff --git a/tests/ui/proc-macro/derive-helper-legacy-spurious.stderr b/tests/ui/proc-macro/derive-helper-legacy-spurious.stderr
index b34713b8ca6..4cd89904ef3 100644
--- a/tests/ui/proc-macro/derive-helper-legacy-spurious.stderr
+++ b/tests/ui/proc-macro/derive-helper-legacy-spurious.stderr
@@ -4,11 +4,5 @@ error: cannot find attribute `dummy` in this scope
 LL | #![dummy]
    |    ^^^^^
 
-error: cannot find attribute `empty_helper` in this scope
-  --> $DIR/derive-helper-legacy-spurious.rs:9:3
-   |
-LL | #[empty_helper]
-   |   ^^^^^^^^^^^^
-
-error: aborting due to 2 previous errors
+error: aborting due to 1 previous error
 
diff --git a/tests/ui/resolve/inner-attr-prelude-macro.rs b/tests/ui/resolve/inner-attr-prelude-macro.rs
new file mode 100644
index 00000000000..1047c908ad1
--- /dev/null
+++ b/tests/ui/resolve/inner-attr-prelude-macro.rs
@@ -0,0 +1,11 @@
+//@ check-pass
+//! This test checks that macro names resolved from the libstd prelude
+//! still work even if there's a crate-level custom inner attribute.
+
+#![feature(custom_inner_attributes)]
+
+#![rustfmt::skip]
+
+fn main() {
+    let _ = todo!();
+}
diff --git a/tests/ui/resolve/issue-104700-inner_scope.rs b/tests/ui/resolve/issue-104700-inner_scope.rs
index e8f28c113e3..fb77ab2626b 100644
--- a/tests/ui/resolve/issue-104700-inner_scope.rs
+++ b/tests/ui/resolve/issue-104700-inner_scope.rs
@@ -7,5 +7,12 @@ fn main() {
     if bar == 2 { //~ ERROR cannot find value
         println!("yes");
     }
+    {
+        let baz = 3;
+        struct S;
+    }
+    if baz == 3 { //~ ERROR cannot find value
+        println!("yes");
+    }
     test_func(1); //~ ERROR cannot find function
 }
diff --git a/tests/ui/resolve/issue-104700-inner_scope.stderr b/tests/ui/resolve/issue-104700-inner_scope.stderr
index 051b234fc72..b579f8e76d9 100644
--- a/tests/ui/resolve/issue-104700-inner_scope.stderr
+++ b/tests/ui/resolve/issue-104700-inner_scope.stderr
@@ -10,12 +10,24 @@ help: the binding `bar` is available in a different scope in the same function
 LL |         let bar = 2;
    |             ^^^
 
+error[E0425]: cannot find value `baz` in this scope
+  --> $DIR/issue-104700-inner_scope.rs:14:8
+   |
+LL |     if baz == 3 {
+   |        ^^^
+   |
+help: the binding `baz` is available in a different scope in the same function
+  --> $DIR/issue-104700-inner_scope.rs:11:13
+   |
+LL |         let baz = 3;
+   |             ^^^
+
 error[E0425]: cannot find function `test_func` in this scope
-  --> $DIR/issue-104700-inner_scope.rs:10:5
+  --> $DIR/issue-104700-inner_scope.rs:17:5
    |
 LL |     test_func(1);
    |     ^^^^^^^^^ not found in this scope
 
-error: aborting due to 2 previous errors
+error: aborting due to 3 previous errors
 
 For more information about this error, try `rustc --explain E0425`.
diff --git a/tests/ui/simd/const-err-trumps-simd-err.stderr b/tests/ui/simd/const-err-trumps-simd-err.stderr
index 93d1fce637f..6d25a28c92c 100644
--- a/tests/ui/simd/const-err-trumps-simd-err.stderr
+++ b/tests/ui/simd/const-err-trumps-simd-err.stderr
@@ -1,8 +1,8 @@
 error[E0080]: evaluation panicked: assertion failed: LANE < 4
-  --> $DIR/const-err-trumps-simd-err.rs:17:13
+  --> $DIR/const-err-trumps-simd-err.rs:17:21
    |
 LL |     const { assert!(LANE < 4); } // the error should be here...
-   |             ^^^^^^^^^^^^^^^^^ evaluation of `get_elem::<4>::{constant#0}` failed here
+   |                     ^^^^^^^^ evaluation of `get_elem::<4>::{constant#0}` failed here
 
 note: erroneous constant encountered
   --> $DIR/const-err-trumps-simd-err.rs:17:5
diff --git a/tests/ui/span/issue-34264.stderr b/tests/ui/span/issue-34264.stderr
index c8046a1bddf..cc41d3048df 100644
--- a/tests/ui/span/issue-34264.stderr
+++ b/tests/ui/span/issue-34264.stderr
@@ -4,11 +4,6 @@ error: expected one of `:`, `@`, or `|`, found `<`
 LL | fn foo(Option<i32>, String) {}
    |              ^ expected one of `:`, `@`, or `|`
    |
-   = note: anonymous parameters are removed in the 2018 edition (see RFC 1685)
-help: if this is a `self` type, give it a parameter name
-   |
-LL | fn foo(self: Option<i32>, String) {}
-   |        +++++
 help: if this is a type, explicitly ignore the parameter name
    |
 LL | fn foo(_: Option<i32>, String) {}
@@ -20,7 +15,6 @@ error: expected one of `:`, `@`, or `|`, found `)`
 LL | fn foo(Option<i32>, String) {}
    |                           ^ expected one of `:`, `@`, or `|`
    |
-   = note: anonymous parameters are removed in the 2018 edition (see RFC 1685)
 help: if this is a parameter name, give it a type
    |
 LL | fn foo(Option<i32>, String: TypeName) {}
@@ -36,11 +30,6 @@ error: expected one of `:`, `@`, or `|`, found `,`
 LL | fn bar(x, y: usize) {}
    |         ^ expected one of `:`, `@`, or `|`
    |
-   = note: anonymous parameters are removed in the 2018 edition (see RFC 1685)
-help: if this is a `self` type, give it a parameter name
-   |
-LL | fn bar(self: x, y: usize) {}
-   |        +++++
 help: if this is a parameter name, give it a type
    |
 LL | fn bar(x: TypeName, y: usize) {}
diff --git a/tests/ui/structs/default-field-values/non-exhaustive-ctor-not-found.rs b/tests/ui/structs/default-field-values/non-exhaustive-ctor-not-found.rs
new file mode 100644
index 00000000000..4c5926a91ea
--- /dev/null
+++ b/tests/ui/structs/default-field-values/non-exhaustive-ctor-not-found.rs
@@ -0,0 +1,8 @@
+// Regression test for https://github.com/rust-lang/rust/issues/145367
+mod m {
+    struct Priv2;
+}
+fn main() {
+    WithUse { one: m::Priv2 } //~ ERROR: cannot find struct, variant or union type `WithUse` in this scope
+    //~^ ERROR: unit struct `Priv2` is private
+}
diff --git a/tests/ui/structs/default-field-values/non-exhaustive-ctor-not-found.stderr b/tests/ui/structs/default-field-values/non-exhaustive-ctor-not-found.stderr
new file mode 100644
index 00000000000..1f0c80092b7
--- /dev/null
+++ b/tests/ui/structs/default-field-values/non-exhaustive-ctor-not-found.stderr
@@ -0,0 +1,22 @@
+error[E0422]: cannot find struct, variant or union type `WithUse` in this scope
+  --> $DIR/non-exhaustive-ctor-not-found.rs:6:5
+   |
+LL |     WithUse { one: m::Priv2 }
+   |     ^^^^^^^ not found in this scope
+
+error[E0603]: unit struct `Priv2` is private
+  --> $DIR/non-exhaustive-ctor-not-found.rs:6:23
+   |
+LL |     WithUse { one: m::Priv2 }
+   |                       ^^^^^ private unit struct
+   |
+note: the unit struct `Priv2` is defined here
+  --> $DIR/non-exhaustive-ctor-not-found.rs:3:5
+   |
+LL |     struct Priv2;
+   |     ^^^^^^^^^^^^^
+
+error: aborting due to 2 previous errors
+
+Some errors have detailed explanations: E0422, E0603.
+For more information about an error, try `rustc --explain E0422`.
diff --git a/tests/ui/suggestions/issue-64252-self-type.stderr b/tests/ui/suggestions/issue-64252-self-type.stderr
index c3418dab0e8..320d09b589b 100644
--- a/tests/ui/suggestions/issue-64252-self-type.stderr
+++ b/tests/ui/suggestions/issue-64252-self-type.stderr
@@ -4,11 +4,6 @@ error: expected one of `:`, `@`, or `|`, found `<`
 LL | pub fn foo(Box<Self>) { }
    |               ^ expected one of `:`, `@`, or `|`
    |
-   = note: anonymous parameters are removed in the 2018 edition (see RFC 1685)
-help: if this is a `self` type, give it a parameter name
-   |
-LL | pub fn foo(self: Box<Self>) { }
-   |            +++++
 help: if this is a type, explicitly ignore the parameter name
    |
 LL | pub fn foo(_: Box<Self>) { }
@@ -20,7 +15,6 @@ error: expected one of `:`, `@`, or `|`, found `<`
 LL |     fn bar(Box<Self>) { }
    |               ^ expected one of `:`, `@`, or `|`
    |
-   = note: anonymous parameters are removed in the 2018 edition (see RFC 1685)
 help: if this is a `self` type, give it a parameter name
    |
 LL |     fn bar(self: Box<Self>) { }
diff --git a/tests/ui/thir-print/thir-tree-loop-match.stdout b/tests/ui/thir-print/thir-tree-loop-match.stdout
index 5c4c50cb156..f2b63782c59 100644
--- a/tests/ui/thir-print/thir-tree-loop-match.stdout
+++ b/tests/ui/thir-print/thir-tree-loop-match.stdout
@@ -121,7 +121,7 @@ body:
                                                                                                         span: $DIR/thir-tree-loop-match.rs:12:17: 12:21 (#0)
                                                                                                         kind: PatKind {
                                                                                                             Constant {
-                                                                                                                value: Ty(bool, true)
+                                                                                                                value: true
                                                                                                             }
                                                                                                         }
                                                                                                     }
@@ -219,7 +219,7 @@ body:
                                                                                                         span: $DIR/thir-tree-loop-match.rs:16:17: 16:22 (#0)
                                                                                                         kind: PatKind {
                                                                                                             Constant {
-                                                                                                                value: Ty(bool, false)
+                                                                                                                value: false
                                                                                                             }
                                                                                                         }
                                                                                                     }
diff --git a/tests/ui/transmutability/uninhabited.stderr b/tests/ui/transmutability/uninhabited.stderr
index 4757daec997..9f289852809 100644
--- a/tests/ui/transmutability/uninhabited.stderr
+++ b/tests/ui/transmutability/uninhabited.stderr
@@ -41,10 +41,10 @@ LL | |         }>
    | |__________^ required by this bound in `is_maybe_transmutable`
 
 error[E0080]: evaluation panicked: assertion failed: false
-  --> $DIR/uninhabited.rs:41:9
+  --> $DIR/uninhabited.rs:41:17
    |
 LL |         assert!(false);
-   |         ^^^^^^^^^^^^^^ evaluation of `yawning_void_struct::_` failed here
+   |                 ^^^^^ evaluation of `yawning_void_struct::_` failed here
 
 error[E0277]: `()` cannot be safely transmuted into `yawning_void_enum::Void`
   --> $DIR/uninhabited.rs:71:41
@@ -68,10 +68,10 @@ LL | |         }>
    | |__________^ required by this bound in `is_maybe_transmutable`
 
 error[E0080]: evaluation panicked: assertion failed: false
-  --> $DIR/uninhabited.rs:63:9
+  --> $DIR/uninhabited.rs:63:17
    |
 LL |         assert!(false);
-   |         ^^^^^^^^^^^^^^ evaluation of `yawning_void_enum::_` failed here
+   |                 ^^^^^ evaluation of `yawning_void_enum::_` failed here
 
 error[E0277]: `u128` cannot be safely transmuted into `DistantVoid`
   --> $DIR/uninhabited.rs:92:43
@@ -95,10 +95,10 @@ LL | |         }>
    | |__________^ required by this bound in `is_maybe_transmutable`
 
 error[E0080]: evaluation panicked: assertion failed: false
-  --> $DIR/uninhabited.rs:87:9
+  --> $DIR/uninhabited.rs:87:17
    |
 LL |         assert!(false);
-   |         ^^^^^^^^^^^^^^ evaluation of `distant_void::_` failed here
+   |                 ^^^^^ evaluation of `distant_void::_` failed here
 
 error[E0277]: `Src` cannot be safely transmuted into `issue_126267::Error`
   --> $DIR/uninhabited.rs:108:42
diff --git a/tests/ui/type/issue-102598.stderr b/tests/ui/type/issue-102598.stderr
index a232395cedb..5623a7aa80d 100644
--- a/tests/ui/type/issue-102598.stderr
+++ b/tests/ui/type/issue-102598.stderr
@@ -15,7 +15,6 @@ error: expected one of `:`, `@`, or `|`, found `)`
 LL | fn foo<'a>(_: impl 'a Sized) {}
    |                            ^ expected one of `:`, `@`, or `|`
    |
-   = note: anonymous parameters are removed in the 2018 edition (see RFC 1685)
 help: if this is a parameter name, give it a type
    |
 LL | fn foo<'a>(_: impl 'a Sized: TypeName) {}
diff --git a/tests/ui/unpretty/exhaustive.expanded.stdout b/tests/ui/unpretty/exhaustive.expanded.stdout
index 6b08f3e1cd7..0327ad5f92b 100644
--- a/tests/ui/unpretty/exhaustive.expanded.stdout
+++ b/tests/ui/unpretty/exhaustive.expanded.stdout
@@ -34,9 +34,6 @@ extern crate std;
 #[prelude_import]
 use std::prelude::rust_2024::*;
 
-#[prelude_import]
-use self::prelude::*;
-
 mod prelude {
     pub use std::prelude::rust_2024::*;
 
@@ -47,6 +44,9 @@ mod prelude {
     }
 }
 
+#[prelude_import]
+use self::prelude::*;
+
 mod attributes {
     //! inner single-line doc comment
     /*!
diff --git a/tests/ui/unpretty/exhaustive.hir.stdout b/tests/ui/unpretty/exhaustive.hir.stdout
index e9823c9575b..68356a33c9e 100644
--- a/tests/ui/unpretty/exhaustive.hir.stdout
+++ b/tests/ui/unpretty/exhaustive.hir.stdout
@@ -33,9 +33,6 @@ extern crate std;
 #[prelude_import]
 use std::prelude::rust_2024::*;
 
-#[prelude_import]
-use self::prelude::*;
-
 mod prelude {
     use std::prelude::rust_2024::*;
 
@@ -48,6 +45,9 @@ mod prelude {
     }
 }
 
+#[prelude_import]
+use self::prelude::*;
+
 /// inner single-line doc comment
 /**
      * inner multi-line doc comment
diff --git a/tests/ui/unpretty/exhaustive.rs b/tests/ui/unpretty/exhaustive.rs
index 5292ddad4f6..b19d4f9fe2c 100644
--- a/tests/ui/unpretty/exhaustive.rs
+++ b/tests/ui/unpretty/exhaustive.rs
@@ -29,9 +29,6 @@
 #![feature(yeet_expr)]
 #![allow(incomplete_features)]
 
-#[prelude_import]
-use self::prelude::*;
-
 mod prelude {
     pub use std::prelude::rust_2024::*;
 
@@ -42,6 +39,9 @@ mod prelude {
     }
 }
 
+#[prelude_import]
+use self::prelude::*;
+
 mod attributes {
     //! inner single-line doc comment
     /*!