about summary refs log tree commit diff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/assembly/stack-protector/stack-protector-target-support.rs5
-rw-r--r--tests/incremental/commandline-args.rs1
-rw-r--r--tests/incremental/remapped_paths_cc/main.rs1
-rw-r--r--tests/incremental/span_hash_stable/main.rs1
-rw-r--r--tests/incremental/spans_in_type_debuginfo.rs1
-rw-r--r--tests/incremental/spans_significant_w_debuginfo.rs1
-rw-r--r--tests/mir-opt/lower_intrinsics.option_payload.LowerIntrinsics.panic-abort.diff48
-rw-r--r--tests/mir-opt/lower_intrinsics.option_payload.LowerIntrinsics.panic-unwind.diff48
-rw-r--r--tests/mir-opt/lower_intrinsics.rs12
-rw-r--r--tests/rustdoc-js/generics2.js22
-rw-r--r--tests/rustdoc-js/generics2.rs13
-rw-r--r--tests/ui/abi/compatibility.rs30
-rw-r--r--tests/ui/abi/issue-94223.rs8
-rw-r--r--tests/ui/abi/unsized-args-in-c-abi-issues-94223-115845.rs30
-rw-r--r--tests/ui/abi/variadic-ffi.rs5
-rw-r--r--tests/ui/async-await/issue-60709.rs1
-rw-r--r--tests/ui/async-await/suggest-switching-edition-on-await-cargo.rs2
-rw-r--r--tests/ui/async-await/suggest-switching-edition-on-await-cargo.stderr12
-rw-r--r--tests/ui/async-await/suggest-switching-edition-on-await.rs2
-rw-r--r--tests/ui/async-await/suggest-switching-edition-on-await.stderr12
-rw-r--r--tests/ui/binding/match-arm-statics.rs1
-rw-r--r--tests/ui/cfg/conditional-compile-arch.rs3
-rw-r--r--tests/ui/consts/const_in_pattern/issue-34784-match-on-non-int-raw-ptr.rs8
-rw-r--r--tests/ui/consts/const_in_pattern/issue-34784-match-on-non-int-raw-ptr.stderr13
-rw-r--r--tests/ui/consts/effect_param.rs4
-rw-r--r--tests/ui/consts/effect_param.stderr20
-rw-r--r--tests/ui/coroutine/issue-58888.rs1
-rw-r--r--tests/ui/coroutine/size-moved-locals.rs1
-rw-r--r--tests/ui/derived-errors/issue-30580.stderr7
-rw-r--r--tests/ui/diagnostic_namespace/on_unimplemented/ignore_unsupported_options_and_continue_to_use_fallback.rs2
-rw-r--r--tests/ui/diagnostic_namespace/on_unimplemented/ignore_unsupported_options_and_continue_to_use_fallback.stderr28
-rw-r--r--tests/ui/diagnostic_namespace/on_unimplemented/report_warning_on_duplicated_options.rs25
-rw-r--r--tests/ui/diagnostic_namespace/on_unimplemented/report_warning_on_duplicated_options.stderr67
-rw-r--r--tests/ui/did_you_mean/dont-suggest-doc-hidden-fields.rs2
-rw-r--r--tests/ui/did_you_mean/dont-suggest-doc-hidden-fields.stderr2
-rw-r--r--tests/ui/did_you_mean/dont-suggest-hygienic-fields.stderr6
-rw-r--r--tests/ui/did_you_mean/issue-36798.stderr7
-rw-r--r--tests/ui/did_you_mean/issue-36798_unknown_field.stderr2
-rw-r--r--tests/ui/did_you_mean/issue-42599_available_fields_note.stderr14
-rw-r--r--tests/ui/error-codes/E0609.stderr2
-rw-r--r--tests/ui/error-codes/ex-E0612.stderr7
-rw-r--r--tests/ui/extern/extern-const.fixed1
-rw-r--r--tests/ui/extern/extern-const.rs1
-rw-r--r--tests/ui/extern/extern-const.stderr2
-rw-r--r--tests/ui/hygiene/extern-prelude-from-opaque-fail-2018.stderr2
-rw-r--r--tests/ui/issues/issue-11004.stderr6
-rw-r--r--tests/ui/issues/issue-13847.stderr2
-rw-r--r--tests/ui/issues/issue-14721.stderr2
-rw-r--r--tests/ui/issues/issue-18804/main.rs1
-rw-r--r--tests/ui/issues/issue-19244-1.stderr2
-rw-r--r--tests/ui/issues/issue-19244-2.stderr2
-rw-r--r--tests/ui/issues/issue-22468.stderr3
-rw-r--r--tests/ui/issues/issue-23253.stderr2
-rw-r--r--tests/ui/issues/issue-23477.rs1
-rw-r--r--tests/ui/issues/issue-24365.stderr6
-rw-r--r--tests/ui/issues/issue-24687-embed-debuginfo/main.rs1
-rw-r--r--tests/ui/issues/issue-24945-repeat-dash-opts.rs1
-rw-r--r--tests/ui/issues/issue-26484.rs1
-rw-r--r--tests/ui/issues/issue-31011.stderr2
-rw-r--r--tests/ui/issues/issue-33096.rs1
-rw-r--r--tests/ui/issues/issue-33525.stderr4
-rw-r--r--tests/ui/issues/issue-34569.rs1
-rw-r--r--tests/ui/issues/issue-36856.rs1
-rw-r--r--tests/ui/issues/issue-42210.rs1
-rw-r--r--tests/ui/issues/issue-45731.rs1
-rw-r--r--tests/ui/issues/issue-47073-zero-padded-tuple-struct-indices.stderr7
-rw-r--r--tests/ui/issues/issue-58463.rs1
-rw-r--r--tests/ui/lint/unused/must_use-pin.rs45
-rw-r--r--tests/ui/lint/unused/must_use-pin.stderr20
-rw-r--r--tests/ui/lto/debuginfo-lto.rs1
-rw-r--r--tests/ui/mismatched_types/cast-rfc0401.stderr2
-rw-r--r--tests/ui/offset-of/offset-of-self.stderr4
-rw-r--r--tests/ui/parser/bad-pointer-type.stderr4
-rw-r--r--tests/ui/parser/double-pointer.stderr4
-rw-r--r--tests/ui/parser/float-field.stderr6
-rw-r--r--tests/ui/parser/issues/issue-48508.rs1
-rw-r--r--tests/ui/privacy/suggest-box-new.fixed15
-rw-r--r--tests/ui/privacy/suggest-box-new.rs6
-rw-r--r--tests/ui/privacy/suggest-box-new.stderr90
-rw-r--r--tests/ui/rmeta/rmeta_meta_main.stderr7
-rw-r--r--tests/ui/sepcomp/sepcomp-lib-lto.rs1
-rw-r--r--tests/ui/structs/struct-fields-hints-no-dupe.stderr7
-rw-r--r--tests/ui/structs/struct-fields-hints.stderr7
-rw-r--r--tests/ui/structs/struct-fields-typo.stderr7
-rw-r--r--tests/ui/structs/struct-pat-derived-error.stderr7
-rw-r--r--tests/ui/structs/suggest-private-fields.stderr21
-rw-r--r--tests/ui/suggestions/call-on-missing.stderr4
-rw-r--r--tests/ui/suggestions/crate-or-module-typo.rs2
-rw-r--r--tests/ui/suggestions/crate-or-module-typo.stderr4
-rw-r--r--tests/ui/suggestions/non-existent-field-present-in-subfield.stderr2
-rw-r--r--tests/ui/suggestions/parenthesized-deref-suggestion.stderr5
-rw-r--r--tests/ui/suggestions/private-field.stderr2
-rw-r--r--tests/ui/suggestions/suggest-field-through-deref.fixed21
-rw-r--r--tests/ui/suggestions/suggest-field-through-deref.rs21
-rw-r--r--tests/ui/suggestions/suggest-field-through-deref.stderr69
-rw-r--r--tests/ui/suggestions/suggest-tryinto-edition-change.stderr6
-rw-r--r--tests/ui/suggestions/too-many-field-suggestions.stderr1
-rw-r--r--tests/ui/suggestions/type-mismatch-struct-field-shorthand-2.stderr7
-rw-r--r--tests/ui/tuple/index-invalid.stderr6
-rw-r--r--tests/ui/tuple/tuple-index-not-tuple.stderr7
-rw-r--r--tests/ui/tuple/tuple-index-out-of-bounds.stderr9
-rw-r--r--tests/ui/typeck/issue-52082-type-param-shadows-existing-type.stderr16
-rw-r--r--tests/ui/typeck/issue-53712.stderr3
-rw-r--r--tests/ui/typeck/issue-65611.stderr2
-rw-r--r--tests/ui/typeck/issue-87181/tuple-field.stderr2
-rw-r--r--tests/ui/typeck/issue-96738.stderr2
-rw-r--r--tests/ui/typeck/no-type-for-node-ice.stderr2
-rw-r--r--tests/ui/unboxed-closures/unboxed-closures-unique-type-id.rs1
-rw-r--r--tests/ui/union/union-suggest-field.mirunsafeck.stderr14
-rw-r--r--tests/ui/union/union-suggest-field.thirunsafeck.stderr14
-rw-r--r--tests/ui/unsafe/unsafe-fn-autoderef.stderr3
-rw-r--r--tests/ui/xcrate/auxiliary/xcrate_unit_struct.rs5
-rw-r--r--tests/ui/xcrate/xcrate-unit-struct.rs2
-rw-r--r--tests/ui/xcrate/xcrate-unit-struct.stderr13
114 files changed, 757 insertions, 275 deletions
diff --git a/tests/assembly/stack-protector/stack-protector-target-support.rs b/tests/assembly/stack-protector/stack-protector-target-support.rs
index e5cbace80b1..c6528ac7c8d 100644
--- a/tests/assembly/stack-protector/stack-protector-target-support.rs
+++ b/tests/assembly/stack-protector/stack-protector-target-support.rs
@@ -2,7 +2,7 @@
 // targets, with the exception of nvptx64-nvidia-cuda
 //
 // revisions: r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 r16 r17 r18 r19 r20 r21 r22 r23
-// revisions: r24 r25 r26 r27 r28 r29 r30 r31 r32 r33 r34 r35 r36 r37 r38 r39 r40 r41 r42 r43 r44
+// revisions: r24 r25 r26 r27 r28 r29 r30 r31 r32 r33     r35 r36 r37 r38 r39 r40 r41 r42 r43 r44
 // revisions: r45 r46 r47 r48 r49 r50 r51 r52 r53 r54 r55 r56 r57 r58 r59 r60 r61 r62 r63 r64 r65
 // revisions: r66 r67 r68 r69 r70 r71 r72 r73 r74 r75 r76 r77 r78 r79 r80 r81 r82 r83 r84
 // assembly-output: emit-asm
@@ -72,8 +72,7 @@
 // [r32] needs-llvm-components: arm
 // [r33] compile-flags: --target armv7-unknown-linux-musleabihf
 // [r33] needs-llvm-components: arm
-// [r34] compile-flags: --target asmjs-unknown-emscripten
-// [r34] needs-llvm-components: webassembly
+
 // [r35] compile-flags: --target i586-pc-windows-msvc
 // [r35] needs-llvm-components: x86
 // [r36] compile-flags: --target i586-unknown-linux-gnu
diff --git a/tests/incremental/commandline-args.rs b/tests/incremental/commandline-args.rs
index 35b7183db7f..e17e6feae07 100644
--- a/tests/incremental/commandline-args.rs
+++ b/tests/incremental/commandline-args.rs
@@ -1,7 +1,6 @@
 // Test that changing a tracked commandline argument invalidates
 // the cache while changing an untracked one doesn't.
 
-// ignore-asmjs wasm2js does not support source maps yet
 // revisions:rpass1 rpass2 rpass3 rpass4
 // compile-flags: -Z query-dep-graph
 
diff --git a/tests/incremental/remapped_paths_cc/main.rs b/tests/incremental/remapped_paths_cc/main.rs
index b01f02444ea..12411a92879 100644
--- a/tests/incremental/remapped_paths_cc/main.rs
+++ b/tests/incremental/remapped_paths_cc/main.rs
@@ -2,7 +2,6 @@
 // compile-flags: -Z query-dep-graph -g
 // aux-build:extern_crate.rs
 
-// ignore-asmjs wasm2js does not support source maps yet
 // This test case makes sure that we detect if paths emitted into debuginfo
 // are changed, even when the change happens in an external crate.
 
diff --git a/tests/incremental/span_hash_stable/main.rs b/tests/incremental/span_hash_stable/main.rs
index 367416430f8..f1d7de14559 100644
--- a/tests/incremental/span_hash_stable/main.rs
+++ b/tests/incremental/span_hash_stable/main.rs
@@ -3,7 +3,6 @@
 // the spans and this test makes sure that we handle them correctly by hashing
 // file:line:column instead of raw byte offset.
 
-// ignore-asmjs wasm2js does not support source maps yet
 // revisions:rpass1 rpass2
 // compile-flags: -g -Z query-dep-graph
 
diff --git a/tests/incremental/spans_in_type_debuginfo.rs b/tests/incremental/spans_in_type_debuginfo.rs
index f5cae15a4bc..8ed469db6e6 100644
--- a/tests/incremental/spans_in_type_debuginfo.rs
+++ b/tests/incremental/spans_in_type_debuginfo.rs
@@ -1,7 +1,6 @@
 // Test that moving a type definition within a source file does not affect
 // re-compilation.
 
-// ignore-asmjs wasm2js does not support source maps yet
 // revisions:rpass1 rpass2
 // compile-flags: -Z query-dep-graph -g
 
diff --git a/tests/incremental/spans_significant_w_debuginfo.rs b/tests/incremental/spans_significant_w_debuginfo.rs
index 38ab2846191..a036d3e69fe 100644
--- a/tests/incremental/spans_significant_w_debuginfo.rs
+++ b/tests/incremental/spans_significant_w_debuginfo.rs
@@ -3,7 +3,6 @@
 
 // revisions:rpass1 rpass2
 
-// ignore-asmjs wasm2js does not support source maps yet
 // compile-flags: -g -Z query-dep-graph
 
 #![feature(rustc_attrs)]
diff --git a/tests/mir-opt/lower_intrinsics.option_payload.LowerIntrinsics.panic-abort.diff b/tests/mir-opt/lower_intrinsics.option_payload.LowerIntrinsics.panic-abort.diff
deleted file mode 100644
index 194478560e9..00000000000
--- a/tests/mir-opt/lower_intrinsics.option_payload.LowerIntrinsics.panic-abort.diff
+++ /dev/null
@@ -1,48 +0,0 @@
-- // MIR for `option_payload` before LowerIntrinsics
-+ // MIR for `option_payload` after LowerIntrinsics
-  
-  fn option_payload(_1: &Option<usize>, _2: &Option<String>) -> () {
-      debug o => _1;
-      debug p => _2;
-      let mut _0: ();
-      let mut _4: *const std::option::Option<usize>;
-      let mut _6: *const std::option::Option<std::string::String>;
-      scope 1 {
-          let _3: *const usize;
-          scope 2 {
-              debug _x => _3;
-              let _5: *const std::string::String;
-              scope 3 {
-                  debug _y => _5;
-              }
-          }
-      }
-  
-      bb0: {
-          StorageLive(_3);
-          StorageLive(_4);
-          _4 = &raw const (*_1);
--         _3 = option_payload_ptr::<usize>(move _4) -> [return: bb1, unwind unreachable];
-+         _3 = &raw const (((*_4) as Some).0: usize);
-+         goto -> bb1;
-      }
-  
-      bb1: {
-          StorageDead(_4);
-          StorageLive(_5);
-          StorageLive(_6);
-          _6 = &raw const (*_2);
--         _5 = option_payload_ptr::<String>(move _6) -> [return: bb2, unwind unreachable];
-+         _5 = &raw const (((*_6) as Some).0: std::string::String);
-+         goto -> bb2;
-      }
-  
-      bb2: {
-          StorageDead(_6);
-          _0 = const ();
-          StorageDead(_5);
-          StorageDead(_3);
-          return;
-      }
-  }
-  
diff --git a/tests/mir-opt/lower_intrinsics.option_payload.LowerIntrinsics.panic-unwind.diff b/tests/mir-opt/lower_intrinsics.option_payload.LowerIntrinsics.panic-unwind.diff
deleted file mode 100644
index 194478560e9..00000000000
--- a/tests/mir-opt/lower_intrinsics.option_payload.LowerIntrinsics.panic-unwind.diff
+++ /dev/null
@@ -1,48 +0,0 @@
-- // MIR for `option_payload` before LowerIntrinsics
-+ // MIR for `option_payload` after LowerIntrinsics
-  
-  fn option_payload(_1: &Option<usize>, _2: &Option<String>) -> () {
-      debug o => _1;
-      debug p => _2;
-      let mut _0: ();
-      let mut _4: *const std::option::Option<usize>;
-      let mut _6: *const std::option::Option<std::string::String>;
-      scope 1 {
-          let _3: *const usize;
-          scope 2 {
-              debug _x => _3;
-              let _5: *const std::string::String;
-              scope 3 {
-                  debug _y => _5;
-              }
-          }
-      }
-  
-      bb0: {
-          StorageLive(_3);
-          StorageLive(_4);
-          _4 = &raw const (*_1);
--         _3 = option_payload_ptr::<usize>(move _4) -> [return: bb1, unwind unreachable];
-+         _3 = &raw const (((*_4) as Some).0: usize);
-+         goto -> bb1;
-      }
-  
-      bb1: {
-          StorageDead(_4);
-          StorageLive(_5);
-          StorageLive(_6);
-          _6 = &raw const (*_2);
--         _5 = option_payload_ptr::<String>(move _6) -> [return: bb2, unwind unreachable];
-+         _5 = &raw const (((*_6) as Some).0: std::string::String);
-+         goto -> bb2;
-      }
-  
-      bb2: {
-          StorageDead(_6);
-          _0 = const ();
-          StorageDead(_5);
-          StorageDead(_3);
-          return;
-      }
-  }
-  
diff --git a/tests/mir-opt/lower_intrinsics.rs b/tests/mir-opt/lower_intrinsics.rs
index 913605cc2b2..cba2bc18d86 100644
--- a/tests/mir-opt/lower_intrinsics.rs
+++ b/tests/mir-opt/lower_intrinsics.rs
@@ -222,18 +222,6 @@ pub fn write_via_move_string(r: &mut String, v: String) {
 
 pub enum Never {}
 
-// EMIT_MIR lower_intrinsics.option_payload.LowerIntrinsics.diff
-pub fn option_payload(o: &Option<usize>, p: &Option<String>) {
-    // CHECK-LABEL: fn option_payload(
-    // CHECK: {{_.*}} = &raw const (((*{{_.*}}) as Some).0: usize);
-    // CHECK: {{_.*}} = &raw const (((*{{_.*}}) as Some).0: std::string::String);
-
-    unsafe {
-        let _x = core::intrinsics::option_payload_ptr(o);
-        let _y = core::intrinsics::option_payload_ptr(p);
-    }
-}
-
 // EMIT_MIR lower_intrinsics.ptr_offset.LowerIntrinsics.diff
 pub unsafe fn ptr_offset(p: *const i32, d: isize) -> *const i32 {
     // CHECK-LABEL: fn ptr_offset(
diff --git a/tests/rustdoc-js/generics2.js b/tests/rustdoc-js/generics2.js
new file mode 100644
index 00000000000..f08704349a4
--- /dev/null
+++ b/tests/rustdoc-js/generics2.js
@@ -0,0 +1,22 @@
+// exact-check
+
+const EXPECTED = [
+    {
+        'query': 'outside<U>, outside<V> -> outside<W>',
+        'others': [],
+    },
+    {
+        'query': 'outside<V>, outside<U> -> outside<W>',
+        'others': [],
+    },
+    {
+        'query': 'outside<U>, outside<U> -> outside<W>',
+        'others': [],
+    },
+    {
+        'query': 'outside<U>, outside<U> -> outside<U>',
+        'others': [
+            {"path": "generics2", "name": "should_match_3"}
+        ],
+    },
+];
diff --git a/tests/rustdoc-js/generics2.rs b/tests/rustdoc-js/generics2.rs
new file mode 100644
index 00000000000..1177ade6831
--- /dev/null
+++ b/tests/rustdoc-js/generics2.rs
@@ -0,0 +1,13 @@
+pub struct Outside<T>(T);
+
+pub fn no_match<U, V>(a: Outside<U>, b: Outside<V>) -> (Outside<U>, Outside<V>) {
+    unimplemented!();
+}
+
+pub fn no_match_2<U, V>(a: Outside<V>, b: Outside<U>) -> (Outside<U>, Outside<V>) {
+    unimplemented!();
+}
+
+pub fn should_match_3<U>(a: Outside<U>, b: Outside<U>) -> (Outside<U>, Outside<U>) {
+    unimplemented!();
+}
diff --git a/tests/ui/abi/compatibility.rs b/tests/ui/abi/compatibility.rs
index 53e1eff9d72..d5f05313078 100644
--- a/tests/ui/abi/compatibility.rs
+++ b/tests/ui/abi/compatibility.rs
@@ -1,5 +1,14 @@
 // check-pass
 // revisions: host
+// revisions: i686
+//[i686] compile-flags: --target i686-unknown-linux-gnu
+//[i686] needs-llvm-components: x86
+// revisions: x86-64
+//[x86-64] compile-flags: --target x86_64-unknown-linux-gnu
+//[x86-64] needs-llvm-components: x86
+// revisions: x86-64-win
+//[x86-64-win] compile-flags: --target x86_64-pc-windows-msvc
+//[x86-64-win] needs-llvm-components: x86
 // revisions: arm
 //[arm] compile-flags: --target arm-unknown-linux-gnueabi
 //[arm] needs-llvm-components: arm
@@ -37,9 +46,23 @@
 // revisions: wasi
 //[wasi] compile-flags: --target wasm32-wasi
 //[wasi] needs-llvm-components: webassembly
-// revisions: nvptx64
-//[nvptx64] compile-flags: --target nvptx64-nvidia-cuda
-//[nvptx64] needs-llvm-components: nvptx
+// revisions: bpf
+//[bpf] compile-flags: --target bpfeb-unknown-none
+//[bpf] needs-llvm-components: bpf
+// revisions: m68k
+//[m68k] compile-flags: --target m68k-unknown-linux-gnu
+//[m68k] needs-llvm-components: m68k
+// FIXME: disabled on nvptx64 since the target ABI fails the sanity check
+// see https://github.com/rust-lang/rust/issues/117480
+/* revisions: nvptx64
+  [nvptx64] compile-flags: --target nvptx64-nvidia-cuda
+  [nvptx64] needs-llvm-components: nvptx
+*/
+// FIXME: disabled since it fails on CI saying the csky component is missing
+/* revisions: csky
+  [csky] compile-flags: --target csky-unknown-linux-gnuabiv2
+  [csky] needs-llvm-components: csky
+*/
 #![feature(rustc_attrs, unsized_fn_params, transparent_unions)]
 #![cfg_attr(not(host), feature(no_core, lang_items), no_std, no_core)]
 #![allow(unused, improper_ctypes_definitions, internal_features)]
@@ -324,6 +347,7 @@ mod unsized_ {
     use super::*;
     test_transparent_unsized!(str_, str);
     test_transparent_unsized!(slice, [u8]);
+    test_transparent_unsized!(slice_with_prefix, (usize, [u8]));
     test_transparent_unsized!(dyn_trait, dyn Any);
 }
 
diff --git a/tests/ui/abi/issue-94223.rs b/tests/ui/abi/issue-94223.rs
deleted file mode 100644
index 79d6b94031b..00000000000
--- a/tests/ui/abi/issue-94223.rs
+++ /dev/null
@@ -1,8 +0,0 @@
-// check-pass
-#![allow(improper_ctypes_definitions)]
-#![crate_type = "lib"]
-
-// Check that computing the fn abi for `bad`, with a external ABI fn ptr that is not FFI-safe, does
-// not ICE.
-
-pub fn bad(f: extern "C" fn([u8])) {}
diff --git a/tests/ui/abi/unsized-args-in-c-abi-issues-94223-115845.rs b/tests/ui/abi/unsized-args-in-c-abi-issues-94223-115845.rs
new file mode 100644
index 00000000000..a32cc6500f8
--- /dev/null
+++ b/tests/ui/abi/unsized-args-in-c-abi-issues-94223-115845.rs
@@ -0,0 +1,30 @@
+// check-pass
+#![allow(improper_ctypes_definitions)]
+#![feature(unsized_tuple_coercion)]
+#![feature(unsized_fn_params)]
+#![crate_type = "lib"]
+
+// Check that computing the fn abi for `bad`, with a external ABI fn ptr that is not FFI-safe, does
+// not ICE.
+
+pub fn bad(f: extern "C" fn([u8])) {}
+
+// While these get accepted, they should also not ICE.
+// (If we ever reject them, remove them from this test to ensure the `bad` above
+// is still tested. Do *not* make this a check/build-fail test.)
+
+pub extern "C" fn declare_bad(_x: str) {}
+
+#[no_mangle]
+pub extern "system" fn declare_more_bad(f: dyn FnOnce()) {
+}
+
+fn make_bad() -> extern "C" fn(([u8],)) {
+    todo!()
+}
+
+pub fn call_bad() {
+    let f = make_bad();
+    let slice: Box<([u8],)> = Box::new(([1; 8],));
+    f(*slice);
+}
diff --git a/tests/ui/abi/variadic-ffi.rs b/tests/ui/abi/variadic-ffi.rs
index a952ea07793..1862177005f 100644
--- a/tests/ui/abi/variadic-ffi.rs
+++ b/tests/ui/abi/variadic-ffi.rs
@@ -8,11 +8,6 @@ use std::ffi::VaList;
 extern "C" {
     fn rust_interesting_average(_: u64, ...) -> f64;
 
-    // FIXME: we need to disable this lint for `VaList`,
-    // since it contains a `MaybeUninit<i32>` on the asmjs target,
-    // and this type isn't FFI-safe. This is OK for now,
-    // since the type is layout-compatible with `i32`.
-    #[cfg_attr(target_arch = "asmjs", allow(improper_ctypes))]
     fn rust_valist_interesting_average(_: u64, _: VaList) -> f64;
 }
 
diff --git a/tests/ui/async-await/issue-60709.rs b/tests/ui/async-await/issue-60709.rs
index 2cda40e9e11..c206f01b98f 100644
--- a/tests/ui/async-await/issue-60709.rs
+++ b/tests/ui/async-await/issue-60709.rs
@@ -3,7 +3,6 @@
 // compile-flags: -Copt-level=z -Cdebuginfo=2 --edition=2018
 
 // run-pass
-// ignore-asmjs wasm2js does not support source maps yet
 
 use std::future::Future;
 use std::task::Poll;
diff --git a/tests/ui/async-await/suggest-switching-edition-on-await-cargo.rs b/tests/ui/async-await/suggest-switching-edition-on-await-cargo.rs
index 4919e0a051d..4a3195174df 100644
--- a/tests/ui/async-await/suggest-switching-edition-on-await-cargo.rs
+++ b/tests/ui/async-await/suggest-switching-edition-on-await-cargo.rs
@@ -23,6 +23,7 @@ fn await_on_struct_similar() {
     let x = S { awai: 42 };
     x.await;
     //~^ ERROR no field `await` on type
+    //~| NOTE unknown field
     //~| HELP a field with a similar name exists
     //~| NOTE to `.await` a `Future`, switch to Rust 2018
     //~| HELP set `edition = "2021"` in `Cargo.toml`
@@ -41,6 +42,7 @@ fn await_on_63533(x: Pin<&mut dyn Future<Output = ()>>) {
 fn await_on_apit(x: impl Future<Output = ()>) {
     x.await;
     //~^ ERROR no field `await` on type
+    //~| NOTE unknown field
     //~| NOTE to `.await` a `Future`, switch to Rust 2018
     //~| HELP set `edition = "2021"` in `Cargo.toml`
     //~| NOTE for more on editions, read https://doc.rust-lang.org/edition-guide
diff --git a/tests/ui/async-await/suggest-switching-edition-on-await-cargo.stderr b/tests/ui/async-await/suggest-switching-edition-on-await-cargo.stderr
index 409eb179e83..dd863ca541c 100644
--- a/tests/ui/async-await/suggest-switching-edition-on-await-cargo.stderr
+++ b/tests/ui/async-await/suggest-switching-edition-on-await-cargo.stderr
@@ -12,14 +12,18 @@ error[E0609]: no field `await` on type `await_on_struct_similar::S`
   --> $DIR/suggest-switching-edition-on-await-cargo.rs:24:7
    |
 LL |     x.await;
-   |       ^^^^^ help: a field with a similar name exists: `awai`
+   |       ^^^^^ unknown field
    |
    = note: to `.await` a `Future`, switch to Rust 2018 or later
    = help: set `edition = "2021"` in `Cargo.toml`
    = note: for more on editions, read https://doc.rust-lang.org/edition-guide
+help: a field with a similar name exists
+   |
+LL |     x.awai;
+   |       ~~~~
 
 error[E0609]: no field `await` on type `Pin<&mut dyn Future<Output = ()>>`
-  --> $DIR/suggest-switching-edition-on-await-cargo.rs:33:7
+  --> $DIR/suggest-switching-edition-on-await-cargo.rs:34:7
    |
 LL |     x.await;
    |       ^^^^^ unknown field
@@ -29,10 +33,10 @@ LL |     x.await;
    = note: for more on editions, read https://doc.rust-lang.org/edition-guide
 
 error[E0609]: no field `await` on type `impl Future<Output = ()>`
-  --> $DIR/suggest-switching-edition-on-await-cargo.rs:42:7
+  --> $DIR/suggest-switching-edition-on-await-cargo.rs:43:7
    |
 LL |     x.await;
-   |       ^^^^^
+   |       ^^^^^ unknown field
    |
    = note: to `.await` a `Future`, switch to Rust 2018 or later
    = help: set `edition = "2021"` in `Cargo.toml`
diff --git a/tests/ui/async-await/suggest-switching-edition-on-await.rs b/tests/ui/async-await/suggest-switching-edition-on-await.rs
index 9852e8fc918..10e245796ee 100644
--- a/tests/ui/async-await/suggest-switching-edition-on-await.rs
+++ b/tests/ui/async-await/suggest-switching-edition-on-await.rs
@@ -21,6 +21,7 @@ fn await_on_struct_similar() {
     let x = S { awai: 42 };
     x.await;
     //~^ ERROR no field `await` on type
+    //~| NOTE unknown field
     //~| HELP a field with a similar name exists
     //~| NOTE to `.await` a `Future`, switch to Rust 2018
     //~| HELP pass `--edition 2021` to `rustc`
@@ -39,6 +40,7 @@ fn await_on_63533(x: Pin<&mut dyn Future<Output = ()>>) {
 fn await_on_apit(x: impl Future<Output = ()>) {
     x.await;
     //~^ ERROR no field `await` on type
+    //~| NOTE unknown field
     //~| NOTE to `.await` a `Future`, switch to Rust 2018
     //~| HELP pass `--edition 2021` to `rustc`
     //~| NOTE for more on editions, read https://doc.rust-lang.org/edition-guide
diff --git a/tests/ui/async-await/suggest-switching-edition-on-await.stderr b/tests/ui/async-await/suggest-switching-edition-on-await.stderr
index ef3334381b7..0ed256b059f 100644
--- a/tests/ui/async-await/suggest-switching-edition-on-await.stderr
+++ b/tests/ui/async-await/suggest-switching-edition-on-await.stderr
@@ -12,14 +12,18 @@ error[E0609]: no field `await` on type `await_on_struct_similar::S`
   --> $DIR/suggest-switching-edition-on-await.rs:22:7
    |
 LL |     x.await;
-   |       ^^^^^ help: a field with a similar name exists: `awai`
+   |       ^^^^^ unknown field
    |
    = note: to `.await` a `Future`, switch to Rust 2018 or later
    = help: pass `--edition 2021` to `rustc`
    = note: for more on editions, read https://doc.rust-lang.org/edition-guide
+help: a field with a similar name exists
+   |
+LL |     x.awai;
+   |       ~~~~
 
 error[E0609]: no field `await` on type `Pin<&mut dyn Future<Output = ()>>`
-  --> $DIR/suggest-switching-edition-on-await.rs:31:7
+  --> $DIR/suggest-switching-edition-on-await.rs:32:7
    |
 LL |     x.await;
    |       ^^^^^ unknown field
@@ -29,10 +33,10 @@ LL |     x.await;
    = note: for more on editions, read https://doc.rust-lang.org/edition-guide
 
 error[E0609]: no field `await` on type `impl Future<Output = ()>`
-  --> $DIR/suggest-switching-edition-on-await.rs:40:7
+  --> $DIR/suggest-switching-edition-on-await.rs:41:7
    |
 LL |     x.await;
-   |       ^^^^^
+   |       ^^^^^ unknown field
    |
    = note: to `.await` a `Future`, switch to Rust 2018 or later
    = help: pass `--edition 2021` to `rustc`
diff --git a/tests/ui/binding/match-arm-statics.rs b/tests/ui/binding/match-arm-statics.rs
index e6d17def147..5f7e357eeb2 100644
--- a/tests/ui/binding/match-arm-statics.rs
+++ b/tests/ui/binding/match-arm-statics.rs
@@ -1,7 +1,6 @@
 // run-pass
 #![allow(dead_code)]
 // compile-flags: -g
-// ignore-asmjs wasm2js does not support source maps yet
 
 #[derive(PartialEq, Eq)]
 struct NewBool(bool);
diff --git a/tests/ui/cfg/conditional-compile-arch.rs b/tests/ui/cfg/conditional-compile-arch.rs
index e59e06f801b..c6ecf480736 100644
--- a/tests/ui/cfg/conditional-compile-arch.rs
+++ b/tests/ui/cfg/conditional-compile-arch.rs
@@ -28,9 +28,6 @@ pub fn main() { }
 #[cfg(target_arch = "s390x")]
 pub fn main() { }
 
-#[cfg(target_arch = "asmjs")]
-pub fn main() { }
-
 #[cfg(target_arch = "wasm32")]
 pub fn main() { }
 
diff --git a/tests/ui/consts/const_in_pattern/issue-34784-match-on-non-int-raw-ptr.rs b/tests/ui/consts/const_in_pattern/issue-34784-match-on-non-int-raw-ptr.rs
index 2491071d1e1..6285427f59c 100644
--- a/tests/ui/consts/const_in_pattern/issue-34784-match-on-non-int-raw-ptr.rs
+++ b/tests/ui/consts/const_in_pattern/issue-34784-match-on-non-int-raw-ptr.rs
@@ -23,10 +23,18 @@ fn foo2(x: *const u8) {
 
 const D: *const [u8; 4] = b"abcd";
 
+const STR: *const str = "abcd";
+
 fn main() {
     match D {
         D => {} //~ERROR: behave unpredictably
         //~| previously accepted
         _ => {}
     }
+
+    match STR {
+        STR => {} //~ERROR: behave unpredictably
+        //~| previously accepted
+        _ => {}
+    }
 }
diff --git a/tests/ui/consts/const_in_pattern/issue-34784-match-on-non-int-raw-ptr.stderr b/tests/ui/consts/const_in_pattern/issue-34784-match-on-non-int-raw-ptr.stderr
index ab53346b5ee..1546f23908c 100644
--- a/tests/ui/consts/const_in_pattern/issue-34784-match-on-non-int-raw-ptr.stderr
+++ b/tests/ui/consts/const_in_pattern/issue-34784-match-on-non-int-raw-ptr.stderr
@@ -22,7 +22,7 @@ LL |         C_INNER => {}
    = note: for more information, see issue #62411 <https://github.com/rust-lang/rust/issues/70861>
 
 error: function pointers and raw pointers not derived from integers in patterns behave unpredictably and should not be relied upon. See https://github.com/rust-lang/rust/issues/70861 for details.
-  --> $DIR/issue-34784-match-on-non-int-raw-ptr.rs:28:9
+  --> $DIR/issue-34784-match-on-non-int-raw-ptr.rs:30:9
    |
 LL |         D => {}
    |         ^
@@ -30,5 +30,14 @@ LL |         D => {}
    = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
    = note: for more information, see issue #62411 <https://github.com/rust-lang/rust/issues/70861>
 
-error: aborting due to 3 previous errors
+error: function pointers and raw pointers not derived from integers in patterns behave unpredictably and should not be relied upon. See https://github.com/rust-lang/rust/issues/70861 for details.
+  --> $DIR/issue-34784-match-on-non-int-raw-ptr.rs:36:9
+   |
+LL |         STR => {}
+   |         ^^^
+   |
+   = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
+   = note: for more information, see issue #62411 <https://github.com/rust-lang/rust/issues/70861>
+
+error: aborting due to 4 previous errors
 
diff --git a/tests/ui/consts/effect_param.rs b/tests/ui/consts/effect_param.rs
index f11ec739fce..bfe0a519037 100644
--- a/tests/ui/consts/effect_param.rs
+++ b/tests/ui/consts/effect_param.rs
@@ -3,9 +3,13 @@
 fn main() {
     i8::checked_sub::<true>(42, 43);
     //~^ ERROR: method takes 0 generic arguments but 1 generic argument was supplied
+    i8::checked_sub::<false>(42, 43);
+    //~^ ERROR: method takes 0 generic arguments but 1 generic argument was supplied
 }
 
 const FOO: () = {
     i8::checked_sub::<false>(42, 43);
     //~^ ERROR: method takes 0 generic arguments but 1 generic argument was supplied
+    i8::checked_sub::<true>(42, 43);
+    //~^ ERROR: method takes 0 generic arguments but 1 generic argument was supplied
 };
diff --git a/tests/ui/consts/effect_param.stderr b/tests/ui/consts/effect_param.stderr
index f8c4bfc02e5..dba5d49b792 100644
--- a/tests/ui/consts/effect_param.stderr
+++ b/tests/ui/consts/effect_param.stderr
@@ -1,5 +1,5 @@
 error[E0107]: method takes 0 generic arguments but 1 generic argument was supplied
-  --> $DIR/effect_param.rs:9:9
+  --> $DIR/effect_param.rs:11:9
    |
 LL |     i8::checked_sub::<false>(42, 43);
    |         ^^^^^^^^^^^--------- help: remove these generics
@@ -7,6 +7,14 @@ LL |     i8::checked_sub::<false>(42, 43);
    |         expected 0 generic arguments
 
 error[E0107]: method takes 0 generic arguments but 1 generic argument was supplied
+  --> $DIR/effect_param.rs:13:9
+   |
+LL |     i8::checked_sub::<true>(42, 43);
+   |         ^^^^^^^^^^^-------- help: remove these generics
+   |         |
+   |         expected 0 generic arguments
+
+error[E0107]: method takes 0 generic arguments but 1 generic argument was supplied
   --> $DIR/effect_param.rs:4:9
    |
 LL |     i8::checked_sub::<true>(42, 43);
@@ -14,6 +22,14 @@ LL |     i8::checked_sub::<true>(42, 43);
    |         |
    |         expected 0 generic arguments
 
-error: aborting due to 2 previous errors
+error[E0107]: method takes 0 generic arguments but 1 generic argument was supplied
+  --> $DIR/effect_param.rs:6:9
+   |
+LL |     i8::checked_sub::<false>(42, 43);
+   |         ^^^^^^^^^^^--------- help: remove these generics
+   |         |
+   |         expected 0 generic arguments
+
+error: aborting due to 4 previous errors
 
 For more information about this error, try `rustc --explain E0107`.
diff --git a/tests/ui/coroutine/issue-58888.rs b/tests/ui/coroutine/issue-58888.rs
index af8e60ce460..9c699c7bb82 100644
--- a/tests/ui/coroutine/issue-58888.rs
+++ b/tests/ui/coroutine/issue-58888.rs
@@ -1,6 +1,5 @@
 // run-pass
 // compile-flags: -g
-// ignore-asmjs wasm2js does not support source maps yet
 
 #![feature(coroutines, coroutine_trait)]
 
diff --git a/tests/ui/coroutine/size-moved-locals.rs b/tests/ui/coroutine/size-moved-locals.rs
index cfbbb9c1b31..10f988cc066 100644
--- a/tests/ui/coroutine/size-moved-locals.rs
+++ b/tests/ui/coroutine/size-moved-locals.rs
@@ -11,7 +11,6 @@
 
 // edition:2018
 // ignore-wasm32 issue #62807
-// ignore-asmjs issue #62807
 // needs-unwind Size of Closures change on panic=abort
 
 #![feature(coroutines, coroutine_trait)]
diff --git a/tests/ui/derived-errors/issue-30580.stderr b/tests/ui/derived-errors/issue-30580.stderr
index 7bd0eaf77a9..4e60368c387 100644
--- a/tests/ui/derived-errors/issue-30580.stderr
+++ b/tests/ui/derived-errors/issue-30580.stderr
@@ -2,7 +2,12 @@ error[E0609]: no field `c` on type `&Foo`
   --> $DIR/issue-30580.rs:12:11
    |
 LL |         b.c;
-   |           ^ help: a field with a similar name exists: `a`
+   |           ^ unknown field
+   |
+help: a field with a similar name exists
+   |
+LL |         b.a;
+   |           ~
 
 error: aborting due to previous error
 
diff --git a/tests/ui/diagnostic_namespace/on_unimplemented/ignore_unsupported_options_and_continue_to_use_fallback.rs b/tests/ui/diagnostic_namespace/on_unimplemented/ignore_unsupported_options_and_continue_to_use_fallback.rs
index 8410b3eb105..0893f29c4a3 100644
--- a/tests/ui/diagnostic_namespace/on_unimplemented/ignore_unsupported_options_and_continue_to_use_fallback.rs
+++ b/tests/ui/diagnostic_namespace/on_unimplemented/ignore_unsupported_options_and_continue_to_use_fallback.rs
@@ -8,6 +8,8 @@
     note = "custom note"
 )]
 #[diagnostic::on_unimplemented(message = "fallback!!")]
+//~^ `message` is ignored due to previous definition of `message`
+//~| `message` is ignored due to previous definition of `message`
 #[diagnostic::on_unimplemented(label = "fallback label")]
 #[diagnostic::on_unimplemented(note = "fallback note")]
 trait Foo {}
diff --git a/tests/ui/diagnostic_namespace/on_unimplemented/ignore_unsupported_options_and_continue_to_use_fallback.stderr b/tests/ui/diagnostic_namespace/on_unimplemented/ignore_unsupported_options_and_continue_to_use_fallback.stderr
index 906472beb49..fc4aa8ef7d8 100644
--- a/tests/ui/diagnostic_namespace/on_unimplemented/ignore_unsupported_options_and_continue_to_use_fallback.stderr
+++ b/tests/ui/diagnostic_namespace/on_unimplemented/ignore_unsupported_options_and_continue_to_use_fallback.stderr
@@ -7,6 +7,15 @@ LL |     if(Self = "()"),
    = help: only `message`, `note` and `label` are allowed as options
    = note: `#[warn(unknown_or_malformed_diagnostic_attributes)]` on by default
 
+warning: `message` is ignored due to previous definition of `message`
+  --> $DIR/ignore_unsupported_options_and_continue_to_use_fallback.rs:10:32
+   |
+LL |     message = "custom message",
+   |     -------------------------- `message` is first declared here
+...
+LL | #[diagnostic::on_unimplemented(message = "fallback!!")]
+   |                                ^^^^^^^^^^^^^^^^^^^^^^ `message` is already declared here
+
 warning: malformed `on_unimplemented` attribute
   --> $DIR/ignore_unsupported_options_and_continue_to_use_fallback.rs:4:5
    |
@@ -16,8 +25,19 @@ LL |     if(Self = "()"),
    = help: only `message`, `note` and `label` are allowed as options
    = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
 
+warning: `message` is ignored due to previous definition of `message`
+  --> $DIR/ignore_unsupported_options_and_continue_to_use_fallback.rs:10:32
+   |
+LL |     message = "custom message",
+   |     -------------------------- `message` is first declared here
+...
+LL | #[diagnostic::on_unimplemented(message = "fallback!!")]
+   |                                ^^^^^^^^^^^^^^^^^^^^^^ `message` is already declared here
+   |
+   = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
+
 error[E0277]: custom message
-  --> $DIR/ignore_unsupported_options_and_continue_to_use_fallback.rs:18:15
+  --> $DIR/ignore_unsupported_options_and_continue_to_use_fallback.rs:20:15
    |
 LL |     takes_foo(());
    |     --------- ^^ fallback label
@@ -28,16 +48,16 @@ LL |     takes_foo(());
    = note: custom note
    = note: fallback note
 help: this trait has no implementations, consider adding one
-  --> $DIR/ignore_unsupported_options_and_continue_to_use_fallback.rs:13:1
+  --> $DIR/ignore_unsupported_options_and_continue_to_use_fallback.rs:15:1
    |
 LL | trait Foo {}
    | ^^^^^^^^^
 note: required by a bound in `takes_foo`
-  --> $DIR/ignore_unsupported_options_and_continue_to_use_fallback.rs:15:22
+  --> $DIR/ignore_unsupported_options_and_continue_to_use_fallback.rs:17:22
    |
 LL | fn takes_foo(_: impl Foo) {}
    |                      ^^^ required by this bound in `takes_foo`
 
-error: aborting due to previous error; 2 warnings emitted
+error: aborting due to previous error; 4 warnings emitted
 
 For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/diagnostic_namespace/on_unimplemented/report_warning_on_duplicated_options.rs b/tests/ui/diagnostic_namespace/on_unimplemented/report_warning_on_duplicated_options.rs
new file mode 100644
index 00000000000..a7becd2f88f
--- /dev/null
+++ b/tests/ui/diagnostic_namespace/on_unimplemented/report_warning_on_duplicated_options.rs
@@ -0,0 +1,25 @@
+#![feature(diagnostic_namespace)]
+
+#[diagnostic::on_unimplemented(
+    message = "first message",
+    label = "first label",
+    note = "custom note"
+)]
+#[diagnostic::on_unimplemented(
+    message = "second message",
+    //~^WARN `message` is ignored due to previous definition of `message`
+    //~|WARN `message` is ignored due to previous definition of `message`
+    label = "second label",
+    //~^WARN `label` is ignored due to previous definition of `label`
+    //~|WARN `label` is ignored due to previous definition of `label`
+    note = "second note"
+)]
+trait Foo {}
+
+
+fn takes_foo(_: impl Foo) {}
+
+fn main() {
+    takes_foo(());
+    //~^ERROR first message
+}
diff --git a/tests/ui/diagnostic_namespace/on_unimplemented/report_warning_on_duplicated_options.stderr b/tests/ui/diagnostic_namespace/on_unimplemented/report_warning_on_duplicated_options.stderr
new file mode 100644
index 00000000000..f9395ae85bc
--- /dev/null
+++ b/tests/ui/diagnostic_namespace/on_unimplemented/report_warning_on_duplicated_options.stderr
@@ -0,0 +1,67 @@
+warning: `message` is ignored due to previous definition of `message`
+  --> $DIR/report_warning_on_duplicated_options.rs:9:5
+   |
+LL |     message = "first message",
+   |     ------------------------- `message` is first declared here
+...
+LL |     message = "second message",
+   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^ `message` is already declared here
+   |
+   = note: `#[warn(unknown_or_malformed_diagnostic_attributes)]` on by default
+
+warning: `label` is ignored due to previous definition of `label`
+  --> $DIR/report_warning_on_duplicated_options.rs:12:5
+   |
+LL |     label = "first label",
+   |     --------------------- `label` is first declared here
+...
+LL |     label = "second label",
+   |     ^^^^^^^^^^^^^^^^^^^^^^ `label` is already declared here
+
+warning: `message` is ignored due to previous definition of `message`
+  --> $DIR/report_warning_on_duplicated_options.rs:9:5
+   |
+LL |     message = "first message",
+   |     ------------------------- `message` is first declared here
+...
+LL |     message = "second message",
+   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^ `message` is already declared here
+   |
+   = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
+
+warning: `label` is ignored due to previous definition of `label`
+  --> $DIR/report_warning_on_duplicated_options.rs:12:5
+   |
+LL |     label = "first label",
+   |     --------------------- `label` is first declared here
+...
+LL |     label = "second label",
+   |     ^^^^^^^^^^^^^^^^^^^^^^ `label` is already declared here
+   |
+   = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
+
+error[E0277]: first message
+  --> $DIR/report_warning_on_duplicated_options.rs:23:15
+   |
+LL |     takes_foo(());
+   |     --------- ^^ first label
+   |     |
+   |     required by a bound introduced by this call
+   |
+   = help: the trait `Foo` is not implemented for `()`
+   = note: custom note
+   = note: second note
+help: this trait has no implementations, consider adding one
+  --> $DIR/report_warning_on_duplicated_options.rs:17:1
+   |
+LL | trait Foo {}
+   | ^^^^^^^^^
+note: required by a bound in `takes_foo`
+  --> $DIR/report_warning_on_duplicated_options.rs:20:22
+   |
+LL | fn takes_foo(_: impl Foo) {}
+   |                      ^^^ required by this bound in `takes_foo`
+
+error: aborting due to previous error; 4 warnings emitted
+
+For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/did_you_mean/dont-suggest-doc-hidden-fields.rs b/tests/ui/did_you_mean/dont-suggest-doc-hidden-fields.rs
index 6040f3f30a7..ffc37b260a6 100644
--- a/tests/ui/did_you_mean/dont-suggest-doc-hidden-fields.rs
+++ b/tests/ui/did_you_mean/dont-suggest-doc-hidden-fields.rs
@@ -29,7 +29,7 @@ fn main() {
     doc_hidden_fields::B::default().hey;
     //~^ ERROR no field `hey` on type `B`
     //~| NOTE unknown field
-    //~| NOTE available fields are: `bye`
+    //~| NOTE available field is: `bye`
 
     C::default().hey;
     //~^ ERROR no field `hey` on type `C`
diff --git a/tests/ui/did_you_mean/dont-suggest-doc-hidden-fields.stderr b/tests/ui/did_you_mean/dont-suggest-doc-hidden-fields.stderr
index b7fe3b79b47..55f6d0fa323 100644
--- a/tests/ui/did_you_mean/dont-suggest-doc-hidden-fields.stderr
+++ b/tests/ui/did_you_mean/dont-suggest-doc-hidden-fields.stderr
@@ -12,7 +12,7 @@ error[E0609]: no field `hey` on type `B`
 LL |     doc_hidden_fields::B::default().hey;
    |                                     ^^^ unknown field
    |
-   = note: available fields are: `bye`
+   = note: available field is: `bye`
 
 error[E0609]: no field `hey` on type `C`
   --> $DIR/dont-suggest-doc-hidden-fields.rs:34:18
diff --git a/tests/ui/did_you_mean/dont-suggest-hygienic-fields.stderr b/tests/ui/did_you_mean/dont-suggest-hygienic-fields.stderr
index 7066d29760e..473c9a339fc 100644
--- a/tests/ui/did_you_mean/dont-suggest-hygienic-fields.stderr
+++ b/tests/ui/did_you_mean/dont-suggest-hygienic-fields.stderr
@@ -5,9 +5,13 @@ LL | environment!();
    | -------------- in this macro invocation
 ...
 LL |     const CRATE: Crate = Crate { fiel: () };
-   |                                  ^^^^ help: a field with a similar name exists: `field`
+   |                                  ^^^^ unknown field
    |
    = note: this error originates in the macro `environment` (in Nightly builds, run with -Z macro-backtrace for more info)
+help: a field with a similar name exists
+   |
+LL |     const CRATE: Crate = Crate { field: () };
+   |                                  ~~~~~
 
 error[E0609]: no field `field` on type `Compound`
   --> $DIR/dont-suggest-hygienic-fields.rs:24:16
diff --git a/tests/ui/did_you_mean/issue-36798.stderr b/tests/ui/did_you_mean/issue-36798.stderr
index 98876e305ca..9f82d4c44cf 100644
--- a/tests/ui/did_you_mean/issue-36798.stderr
+++ b/tests/ui/did_you_mean/issue-36798.stderr
@@ -2,7 +2,12 @@ error[E0609]: no field `baz` on type `Foo`
   --> $DIR/issue-36798.rs:7:7
    |
 LL |     f.baz;
-   |       ^^^ help: a field with a similar name exists: `bar`
+   |       ^^^ unknown field
+   |
+help: a field with a similar name exists
+   |
+LL |     f.bar;
+   |       ~~~
 
 error: aborting due to previous error
 
diff --git a/tests/ui/did_you_mean/issue-36798_unknown_field.stderr b/tests/ui/did_you_mean/issue-36798_unknown_field.stderr
index 2ed0a092400..4f216568979 100644
--- a/tests/ui/did_you_mean/issue-36798_unknown_field.stderr
+++ b/tests/ui/did_you_mean/issue-36798_unknown_field.stderr
@@ -4,7 +4,7 @@ error[E0609]: no field `zz` on type `Foo`
 LL |     f.zz;
    |       ^^ unknown field
    |
-   = note: available fields are: `bar`
+   = note: available field is: `bar`
 
 error: aborting due to previous error
 
diff --git a/tests/ui/did_you_mean/issue-42599_available_fields_note.stderr b/tests/ui/did_you_mean/issue-42599_available_fields_note.stderr
index c20bbce3f24..d60db01a465 100644
--- a/tests/ui/did_you_mean/issue-42599_available_fields_note.stderr
+++ b/tests/ui/did_you_mean/issue-42599_available_fields_note.stderr
@@ -2,7 +2,12 @@ error[E0560]: struct `Demo` has no field named `inocently_mispellable`
   --> $DIR/issue-42599_available_fields_note.rs:16:39
    |
 LL |             Self { secret_integer: 2, inocently_mispellable: () }
-   |                                       ^^^^^^^^^^^^^^^^^^^^^ help: a field with a similar name exists: `innocently_misspellable`
+   |                                       ^^^^^^^^^^^^^^^^^^^^^ unknown field
+   |
+help: a field with a similar name exists
+   |
+LL |             Self { secret_integer: 2, innocently_misspellable: () }
+   |                                       ~~~~~~~~~~~~~~~~~~~~~~~
 
 error[E0560]: struct `Demo` has no field named `egregiously_nonexistent_field`
   --> $DIR/issue-42599_available_fields_note.rs:21:39
@@ -16,7 +21,12 @@ error[E0609]: no field `inocently_mispellable` on type `Demo`
   --> $DIR/issue-42599_available_fields_note.rs:32:41
    |
 LL |     let innocent_field_misaccess = demo.inocently_mispellable;
-   |                                         ^^^^^^^^^^^^^^^^^^^^^ help: a field with a similar name exists: `innocently_misspellable`
+   |                                         ^^^^^^^^^^^^^^^^^^^^^ unknown field
+   |
+help: a field with a similar name exists
+   |
+LL |     let innocent_field_misaccess = demo.innocently_misspellable;
+   |                                         ~~~~~~~~~~~~~~~~~~~~~~~
 
 error[E0609]: no field `egregiously_nonexistent_field` on type `Demo`
   --> $DIR/issue-42599_available_fields_note.rs:35:42
diff --git a/tests/ui/error-codes/E0609.stderr b/tests/ui/error-codes/E0609.stderr
index 797e95d02dd..cad857553da 100644
--- a/tests/ui/error-codes/E0609.stderr
+++ b/tests/ui/error-codes/E0609.stderr
@@ -4,7 +4,7 @@ error[E0609]: no field `foo` on type `Foo`
 LL |     let _ = x.foo;
    |               ^^^ unknown field
    |
-   = note: available fields are: `x`
+   = note: available field is: `x`
 
 error[E0609]: no field `1` on type `Bar`
   --> $DIR/E0609.rs:11:7
diff --git a/tests/ui/error-codes/ex-E0612.stderr b/tests/ui/error-codes/ex-E0612.stderr
index b21b6fdfcf1..4dd9848cf07 100644
--- a/tests/ui/error-codes/ex-E0612.stderr
+++ b/tests/ui/error-codes/ex-E0612.stderr
@@ -2,7 +2,12 @@ error[E0609]: no field `1` on type `Foo`
   --> $DIR/ex-E0612.rs:5:6
    |
 LL |    y.1;
-   |      ^ help: a field with a similar name exists: `0`
+   |      ^ unknown field
+   |
+help: a field with a similar name exists
+   |
+LL |    y.0;
+   |      ~
 
 error: aborting due to previous error
 
diff --git a/tests/ui/extern/extern-const.fixed b/tests/ui/extern/extern-const.fixed
index 9d96b4f63fb..248efc93d00 100644
--- a/tests/ui/extern/extern-const.fixed
+++ b/tests/ui/extern/extern-const.fixed
@@ -6,7 +6,6 @@
 
 // run-rustfix
 // ignore-wasm32-bare no external library to link to.
-// ignore-asmjs wasm2js does not support source maps yet
 // compile-flags: -g
 #![feature(rustc_private)]
 extern crate libc;
diff --git a/tests/ui/extern/extern-const.rs b/tests/ui/extern/extern-const.rs
index 7cef5b3497b..d3b3bef6dae 100644
--- a/tests/ui/extern/extern-const.rs
+++ b/tests/ui/extern/extern-const.rs
@@ -6,7 +6,6 @@
 
 // run-rustfix
 // ignore-wasm32-bare no external library to link to.
-// ignore-asmjs wasm2js does not support source maps yet
 // compile-flags: -g
 #![feature(rustc_private)]
 extern crate libc;
diff --git a/tests/ui/extern/extern-const.stderr b/tests/ui/extern/extern-const.stderr
index 7f67adbdb19..a296751994e 100644
--- a/tests/ui/extern/extern-const.stderr
+++ b/tests/ui/extern/extern-const.stderr
@@ -1,5 +1,5 @@
 error: extern items cannot be `const`
-  --> $DIR/extern-const.rs:16:11
+  --> $DIR/extern-const.rs:15:11
    |
 LL |     const rust_dbg_static_mut: libc::c_int;
    |     ------^^^^^^^^^^^^^^^^^^^
diff --git a/tests/ui/hygiene/extern-prelude-from-opaque-fail-2018.stderr b/tests/ui/hygiene/extern-prelude-from-opaque-fail-2018.stderr
index 7ed15e89caa..78e6376bca2 100644
--- a/tests/ui/hygiene/extern-prelude-from-opaque-fail-2018.stderr
+++ b/tests/ui/hygiene/extern-prelude-from-opaque-fail-2018.stderr
@@ -25,8 +25,8 @@ LL | a!();
    | ---- in this macro invocation
    |
    = help: consider importing one of these items:
-           std::mem
            core::mem
+           std::mem
    = note: this error originates in the macro `a` (in Nightly builds, run with -Z macro-backtrace for more info)
 
 error[E0433]: failed to resolve: use of undeclared crate or module `my_core`
diff --git a/tests/ui/issues/issue-11004.stderr b/tests/ui/issues/issue-11004.stderr
index b5831e42e39..ea141e61df8 100644
--- a/tests/ui/issues/issue-11004.stderr
+++ b/tests/ui/issues/issue-11004.stderr
@@ -3,7 +3,8 @@ error[E0609]: no field `x` on type `*mut A`
    |
 LL |     let x : i32 = n.x;
    |                   --^
-   |                   |
+   |                   | |
+   |                   | unknown field
    |                   help: `n` is a raw pointer; try dereferencing it: `(*n).x`
 
 error[E0609]: no field `y` on type `*mut A`
@@ -11,7 +12,8 @@ error[E0609]: no field `y` on type `*mut A`
    |
 LL |     let y : f64 = n.y;
    |                   --^
-   |                   |
+   |                   | |
+   |                   | unknown field
    |                   help: `n` is a raw pointer; try dereferencing it: `(*n).y`
 
 error: aborting due to 2 previous errors
diff --git a/tests/ui/issues/issue-13847.stderr b/tests/ui/issues/issue-13847.stderr
index 52b8dc04970..ded927693b2 100644
--- a/tests/ui/issues/issue-13847.stderr
+++ b/tests/ui/issues/issue-13847.stderr
@@ -2,7 +2,7 @@ error[E0609]: no field `is_failure` on type `!`
   --> $DIR/issue-13847.rs:2:12
    |
 LL |     return.is_failure
-   |            ^^^^^^^^^^
+   |            ^^^^^^^^^^ unknown field
 
 error: aborting due to previous error
 
diff --git a/tests/ui/issues/issue-14721.stderr b/tests/ui/issues/issue-14721.stderr
index 49ebb2976e8..f07bc7ad4f1 100644
--- a/tests/ui/issues/issue-14721.stderr
+++ b/tests/ui/issues/issue-14721.stderr
@@ -2,7 +2,7 @@ error[E0609]: no field `desc` on type `&str`
   --> $DIR/issue-14721.rs:3:24
    |
 LL |     println!("{}", foo.desc);
-   |                        ^^^^
+   |                        ^^^^ unknown field
 
 error: aborting due to previous error
 
diff --git a/tests/ui/issues/issue-18804/main.rs b/tests/ui/issues/issue-18804/main.rs
index c36048ea545..47c3f13d23c 100644
--- a/tests/ui/issues/issue-18804/main.rs
+++ b/tests/ui/issues/issue-18804/main.rs
@@ -2,7 +2,6 @@
 // Test for issue #18804, #[linkage] does not propagate through generic
 // functions. Failure results in a linker error.
 
-// ignore-asmjs no weak symbol support
 // ignore-emscripten no weak symbol support
 // ignore-windows no extern_weak linkage
 // ignore-macos no extern_weak linkage
diff --git a/tests/ui/issues/issue-19244-1.stderr b/tests/ui/issues/issue-19244-1.stderr
index 1eb530542c0..3358cac82e0 100644
--- a/tests/ui/issues/issue-19244-1.stderr
+++ b/tests/ui/issues/issue-19244-1.stderr
@@ -2,7 +2,7 @@ error[E0609]: no field `1` on type `(usize,)`
   --> $DIR/issue-19244-1.rs:4:24
    |
 LL |     let a: [isize; TUP.1];
-   |                        ^
+   |                        ^ unknown field
 
 error: aborting due to previous error
 
diff --git a/tests/ui/issues/issue-19244-2.stderr b/tests/ui/issues/issue-19244-2.stderr
index 54529fdf5ba..71655457f90 100644
--- a/tests/ui/issues/issue-19244-2.stderr
+++ b/tests/ui/issues/issue-19244-2.stderr
@@ -4,7 +4,7 @@ error[E0609]: no field `nonexistent_field` on type `MyStruct`
 LL |     let a: [isize; STRUCT.nonexistent_field];
    |                           ^^^^^^^^^^^^^^^^^ unknown field
    |
-   = note: available fields are: `field`
+   = note: available field is: `field`
 
 error: aborting due to previous error
 
diff --git a/tests/ui/issues/issue-22468.stderr b/tests/ui/issues/issue-22468.stderr
index 3fff91acbc2..fb2b9b42859 100644
--- a/tests/ui/issues/issue-22468.stderr
+++ b/tests/ui/issues/issue-22468.stderr
@@ -7,6 +7,9 @@ LL |     let x = foo("baz");
    |             ^^^-------
    |             |
    |             call expression requires function
+...
+LL | fn foo(file: &str) -> bool {
+   | -------------------------- this function of the same name is available here, but it's shadowed by the local binding
 
 error: aborting due to previous error
 
diff --git a/tests/ui/issues/issue-23253.stderr b/tests/ui/issues/issue-23253.stderr
index be5714cd91a..44f01c1c167 100644
--- a/tests/ui/issues/issue-23253.stderr
+++ b/tests/ui/issues/issue-23253.stderr
@@ -2,7 +2,7 @@ error[E0609]: no field `a` on type `Foo`
   --> $DIR/issue-23253.rs:4:14
    |
 LL |     Foo::Bar.a;
-   |              ^
+   |              ^ unknown field
 
 error: aborting due to previous error
 
diff --git a/tests/ui/issues/issue-23477.rs b/tests/ui/issues/issue-23477.rs
index 988ebe03ccf..1ce05ba390d 100644
--- a/tests/ui/issues/issue-23477.rs
+++ b/tests/ui/issues/issue-23477.rs
@@ -1,5 +1,4 @@
 // build-pass
-// ignore-asmjs wasm2js does not support source maps yet
 // compile-flags: -g
 
 pub struct Dst {
diff --git a/tests/ui/issues/issue-24365.stderr b/tests/ui/issues/issue-24365.stderr
index f9eead8a4f2..3f6ed0231d8 100644
--- a/tests/ui/issues/issue-24365.stderr
+++ b/tests/ui/issues/issue-24365.stderr
@@ -2,19 +2,19 @@ error[E0609]: no field `b` on type `Foo`
   --> $DIR/issue-24365.rs:10:22
    |
 LL |     println!("{}", a.b);
-   |                      ^
+   |                      ^ unknown field
 
 error[E0609]: no field `attr_name_idx` on type `&Attribute`
   --> $DIR/issue-24365.rs:17:18
    |
 LL |     let z = (&x).attr_name_idx;
-   |                  ^^^^^^^^^^^^^
+   |                  ^^^^^^^^^^^^^ unknown field
 
 error[E0609]: no field `attr_name_idx` on type `Attribute`
   --> $DIR/issue-24365.rs:18:15
    |
 LL |     let y = x.attr_name_idx;
-   |               ^^^^^^^^^^^^^
+   |               ^^^^^^^^^^^^^ unknown field
 
 error: aborting due to 3 previous errors
 
diff --git a/tests/ui/issues/issue-24687-embed-debuginfo/main.rs b/tests/ui/issues/issue-24687-embed-debuginfo/main.rs
index f08bcdfe6d1..773792c7a3f 100644
--- a/tests/ui/issues/issue-24687-embed-debuginfo/main.rs
+++ b/tests/ui/issues/issue-24687-embed-debuginfo/main.rs
@@ -1,7 +1,6 @@
 // run-pass
 // aux-build:issue-24687-lib.rs
 // compile-flags:-g
-// ignore-asmjs wasm2js does not support source maps yet
 
 extern crate issue_24687_lib as d;
 
diff --git a/tests/ui/issues/issue-24945-repeat-dash-opts.rs b/tests/ui/issues/issue-24945-repeat-dash-opts.rs
index 0f92fc2f7f3..cf3834952c6 100644
--- a/tests/ui/issues/issue-24945-repeat-dash-opts.rs
+++ b/tests/ui/issues/issue-24945-repeat-dash-opts.rs
@@ -3,7 +3,6 @@
 // as options to the compiler.
 
 // compile-flags:-g -g -O -O
-// ignore-asmjs wasm2js does not support source maps yet
 
 fn main() {
     assert_eq!(1, 1);
diff --git a/tests/ui/issues/issue-26484.rs b/tests/ui/issues/issue-26484.rs
index 2a8750d3e43..3b40b3dd8f0 100644
--- a/tests/ui/issues/issue-26484.rs
+++ b/tests/ui/issues/issue-26484.rs
@@ -1,6 +1,5 @@
 // run-pass
 // compile-flags:-g
-// ignore-asmjs wasm2js does not support source maps yet
 
 fn helper<F: FnOnce(usize) -> bool>(_f: F) {
     print!("");
diff --git a/tests/ui/issues/issue-31011.stderr b/tests/ui/issues/issue-31011.stderr
index 58c170409fd..4971e3357b4 100644
--- a/tests/ui/issues/issue-31011.stderr
+++ b/tests/ui/issues/issue-31011.stderr
@@ -2,7 +2,7 @@ error[E0609]: no field `trace` on type `&T`
   --> $DIR/issue-31011.rs:3:17
    |
 LL |         if $ctx.trace {
-   |                 ^^^^^
+   |                 ^^^^^ unknown field
 ...
 LL | fn wrap<T>(context: &T) -> ()
    |         - type parameter 'T' declared here
diff --git a/tests/ui/issues/issue-33096.rs b/tests/ui/issues/issue-33096.rs
index 2501e1430b3..f0b472e2fe8 100644
--- a/tests/ui/issues/issue-33096.rs
+++ b/tests/ui/issues/issue-33096.rs
@@ -1,6 +1,5 @@
 // run-pass
 // compile-flags: -g
-// ignore-asmjs wasm2js does not support source maps yet
 
 use std::ops::Deref;
 
diff --git a/tests/ui/issues/issue-33525.stderr b/tests/ui/issues/issue-33525.stderr
index f8d703dc3b1..ee9f4d4c301 100644
--- a/tests/ui/issues/issue-33525.stderr
+++ b/tests/ui/issues/issue-33525.stderr
@@ -8,13 +8,13 @@ error[E0609]: no field `lorem` on type `&'static str`
   --> $DIR/issue-33525.rs:3:8
    |
 LL |     "".lorem;
-   |        ^^^^^
+   |        ^^^^^ unknown field
 
 error[E0609]: no field `ipsum` on type `&'static str`
   --> $DIR/issue-33525.rs:4:8
    |
 LL |     "".ipsum;
-   |        ^^^^^
+   |        ^^^^^ unknown field
 
 error: aborting due to 3 previous errors
 
diff --git a/tests/ui/issues/issue-34569.rs b/tests/ui/issues/issue-34569.rs
index 88dcdd41138..1f68560509e 100644
--- a/tests/ui/issues/issue-34569.rs
+++ b/tests/ui/issues/issue-34569.rs
@@ -1,6 +1,5 @@
 // run-pass
 // compile-flags:-g
-// ignore-asmjs wasm2js does not support source maps yet
 
 // In this test we just want to make sure that the code below does not lead to
 // a debuginfo verification assertion during compilation. This was caused by the
diff --git a/tests/ui/issues/issue-36856.rs b/tests/ui/issues/issue-36856.rs
index 5657ba69f94..f2dfaf3dd36 100644
--- a/tests/ui/issues/issue-36856.rs
+++ b/tests/ui/issues/issue-36856.rs
@@ -2,7 +2,6 @@
 // Regression test for #36856.
 
 // compile-flags:-g
-// ignore-asmjs wasm2js does not support source maps yet
 
 fn g() -> bool {
     false
diff --git a/tests/ui/issues/issue-42210.rs b/tests/ui/issues/issue-42210.rs
index 01a5d563639..318e3099f98 100644
--- a/tests/ui/issues/issue-42210.rs
+++ b/tests/ui/issues/issue-42210.rs
@@ -2,7 +2,6 @@
 // Regression test for #42210.
 
 // compile-flags: -g
-// ignore-asmjs wasm2js does not support source maps yet
 
 trait Foo {
     fn foo() { }
diff --git a/tests/ui/issues/issue-45731.rs b/tests/ui/issues/issue-45731.rs
index 5c5ac59873a..d20c07276a8 100644
--- a/tests/ui/issues/issue-45731.rs
+++ b/tests/ui/issues/issue-45731.rs
@@ -1,7 +1,6 @@
 // run-pass
 #![allow(unused_variables)]
 // compile-flags:--test -g
-// ignore-asmjs wasm2js does not support source maps yet
 
 #[cfg(target_os = "macos")]
 #[test]
diff --git a/tests/ui/issues/issue-47073-zero-padded-tuple-struct-indices.stderr b/tests/ui/issues/issue-47073-zero-padded-tuple-struct-indices.stderr
index 5e1b816defd..0aa1ae7222f 100644
--- a/tests/ui/issues/issue-47073-zero-padded-tuple-struct-indices.stderr
+++ b/tests/ui/issues/issue-47073-zero-padded-tuple-struct-indices.stderr
@@ -2,7 +2,12 @@ error[E0609]: no field `00` on type `Verdict`
   --> $DIR/issue-47073-zero-padded-tuple-struct-indices.rs:8:30
    |
 LL |     let _condemned = justice.00;
-   |                              ^^ help: a field with a similar name exists: `0`
+   |                              ^^ unknown field
+   |
+help: a field with a similar name exists
+   |
+LL |     let _condemned = justice.0;
+   |                              ~
 
 error[E0609]: no field `001` on type `Verdict`
   --> $DIR/issue-47073-zero-padded-tuple-struct-indices.rs:10:31
diff --git a/tests/ui/issues/issue-58463.rs b/tests/ui/issues/issue-58463.rs
index af93f76221d..9573c9b703a 100644
--- a/tests/ui/issues/issue-58463.rs
+++ b/tests/ui/issues/issue-58463.rs
@@ -1,6 +1,5 @@
 // run-pass
 // compile-flags:-C debuginfo=2
-// ignore-asmjs wasm2js does not support source maps yet
 
 fn foo() -> impl Copy {
     foo
diff --git a/tests/ui/lint/unused/must_use-pin.rs b/tests/ui/lint/unused/must_use-pin.rs
new file mode 100644
index 00000000000..b08515428b1
--- /dev/null
+++ b/tests/ui/lint/unused/must_use-pin.rs
@@ -0,0 +1,45 @@
+#![deny(unused_must_use)]
+
+use std::{ops::Deref, pin::Pin};
+
+#[must_use]
+struct MustUse;
+
+#[must_use]
+struct MustUsePtr<'a, T>(&'a T);
+
+impl<'a, T> Deref for MustUsePtr<'a, T> {
+    type Target = T;
+
+    fn deref(&self) -> &Self::Target {
+        self.0
+    }
+}
+
+fn pin_ref() -> Pin<&'static ()> {
+    Pin::new(&())
+}
+
+fn pin_ref_mut() -> Pin<&'static mut ()> {
+    Pin::new(unimplemented!())
+}
+
+fn pin_must_use_ptr() -> Pin<MustUsePtr<'static, ()>> {
+    Pin::new(MustUsePtr(&()))
+}
+
+fn pin_box() -> Pin<Box<()>> {
+    Box::pin(())
+}
+
+fn pin_box_must_use() -> Pin<Box<MustUse>> {
+    Box::pin(MustUse)
+}
+
+fn main() {
+    pin_ref();
+    pin_ref_mut();
+    pin_must_use_ptr(); //~ ERROR unused pinned `MustUsePtr` that must be used
+    pin_box();
+    pin_box_must_use(); //~ ERROR unused pinned boxed `MustUse` that must be used
+}
diff --git a/tests/ui/lint/unused/must_use-pin.stderr b/tests/ui/lint/unused/must_use-pin.stderr
new file mode 100644
index 00000000000..c04f8fef487
--- /dev/null
+++ b/tests/ui/lint/unused/must_use-pin.stderr
@@ -0,0 +1,20 @@
+error: unused pinned `MustUsePtr` that must be used
+  --> $DIR/must_use-pin.rs:42:5
+   |
+LL |     pin_must_use_ptr();
+   |     ^^^^^^^^^^^^^^^^^^
+   |
+note: the lint level is defined here
+  --> $DIR/must_use-pin.rs:1:9
+   |
+LL | #![deny(unused_must_use)]
+   |         ^^^^^^^^^^^^^^^
+
+error: unused pinned boxed `MustUse` that must be used
+  --> $DIR/must_use-pin.rs:44:5
+   |
+LL |     pin_box_must_use();
+   |     ^^^^^^^^^^^^^^^^^^
+
+error: aborting due to 2 previous errors
+
diff --git a/tests/ui/lto/debuginfo-lto.rs b/tests/ui/lto/debuginfo-lto.rs
index 43f75b0344b..e4beee9e737 100644
--- a/tests/ui/lto/debuginfo-lto.rs
+++ b/tests/ui/lto/debuginfo-lto.rs
@@ -7,7 +7,6 @@
 // aux-build:debuginfo-lto-aux.rs
 // compile-flags: -C lto -g
 // no-prefer-dynamic
-// ignore-asmjs wasm2js does not support source maps yet
 
 extern crate debuginfo_lto_aux;
 
diff --git a/tests/ui/mismatched_types/cast-rfc0401.stderr b/tests/ui/mismatched_types/cast-rfc0401.stderr
index d63cec48917..142a52aef13 100644
--- a/tests/ui/mismatched_types/cast-rfc0401.stderr
+++ b/tests/ui/mismatched_types/cast-rfc0401.stderr
@@ -18,7 +18,7 @@ error[E0609]: no field `f` on type `fn() {main}`
   --> $DIR/cast-rfc0401.rs:65:18
    |
 LL |     let _ = main.f as *const u32;
-   |                  ^
+   |                  ^ unknown field
 
 error[E0605]: non-primitive cast: `*const u8` as `&u8`
   --> $DIR/cast-rfc0401.rs:29:13
diff --git a/tests/ui/offset-of/offset-of-self.stderr b/tests/ui/offset-of/offset-of-self.stderr
index df555463f98..2dc17189a70 100644
--- a/tests/ui/offset-of/offset-of-self.stderr
+++ b/tests/ui/offset-of/offset-of-self.stderr
@@ -54,6 +54,8 @@ error[E0609]: no field `Self` on type `S`
    |
 LL |         offset_of!(S, Self);
    |                       ^^^^
+   |
+   = note: available fields are: `v`, `w`
 
 error[E0616]: field `v` of struct `T` is private
   --> $DIR/offset-of-self.rs:41:30
@@ -66,6 +68,8 @@ error[E0609]: no field `self` on type `S`
    |
 LL |     offset_of!(S, self);
    |                   ^^^^
+   |
+   = note: available fields are: `v`, `w`
 
 error[E0609]: no field `self` on type `u8`
   --> $DIR/offset-of-self.rs:56:21
diff --git a/tests/ui/parser/bad-pointer-type.stderr b/tests/ui/parser/bad-pointer-type.stderr
index b7225ca887d..e843c49886b 100644
--- a/tests/ui/parser/bad-pointer-type.stderr
+++ b/tests/ui/parser/bad-pointer-type.stderr
@@ -6,10 +6,10 @@ LL | fn foo(_: *()) {
    |
 help: add `mut` or `const` here
    |
-LL | fn foo(_: *const ()) {
-   |            +++++
 LL | fn foo(_: *mut ()) {
    |            +++
+LL | fn foo(_: *const ()) {
+   |            +++++
 
 error: aborting due to previous error
 
diff --git a/tests/ui/parser/double-pointer.stderr b/tests/ui/parser/double-pointer.stderr
index 28037f93265..10aedbb92a1 100644
--- a/tests/ui/parser/double-pointer.stderr
+++ b/tests/ui/parser/double-pointer.stderr
@@ -6,10 +6,10 @@ LL |     let dptr: **const i32 = &ptr;
    |
 help: add `mut` or `const` here
    |
-LL |     let dptr: *const *const i32 = &ptr;
-   |                +++++
 LL |     let dptr: *mut *const i32 = &ptr;
    |                +++
+LL |     let dptr: *const *const i32 = &ptr;
+   |                +++++
 
 error: aborting due to previous error
 
diff --git a/tests/ui/parser/float-field.stderr b/tests/ui/parser/float-field.stderr
index 7090efc5014..d67d270ef7b 100644
--- a/tests/ui/parser/float-field.stderr
+++ b/tests/ui/parser/float-field.stderr
@@ -274,7 +274,7 @@ error[E0609]: no field `1e1` on type `(u8, u8)`
   --> $DIR/float-field.rs:9:9
    |
 LL |     s.1.1e1;
-   |         ^^^
+   |         ^^^ unknown field
 
 error[E0609]: no field `0x1e1` on type `S`
   --> $DIR/float-field.rs:24:7
@@ -336,13 +336,13 @@ error[E0609]: no field `f32` on type `(u8, u8)`
   --> $DIR/float-field.rs:44:9
    |
 LL |     s.1.f32;
-   |         ^^^
+   |         ^^^ unknown field
 
 error[E0609]: no field `1e1` on type `(u8, u8)`
   --> $DIR/float-field.rs:46:7
    |
 LL |     s.1.1e1f32;
-   |       ^^^^^^^^
+   |       ^^^^^^^^ unknown field
 
 error: aborting due to 55 previous errors
 
diff --git a/tests/ui/parser/issues/issue-48508.rs b/tests/ui/parser/issues/issue-48508.rs
index 1e7db9df814..b66e09620f4 100644
--- a/tests/ui/parser/issues/issue-48508.rs
+++ b/tests/ui/parser/issues/issue-48508.rs
@@ -7,7 +7,6 @@
 // issue-48508-aux.rs
 
 // compile-flags:-g
-// ignore-asmjs wasm2js does not support source maps yet
 
 #![allow(uncommon_codepoints)]
 
diff --git a/tests/ui/privacy/suggest-box-new.fixed b/tests/ui/privacy/suggest-box-new.fixed
deleted file mode 100644
index f5ae5c2abfd..00000000000
--- a/tests/ui/privacy/suggest-box-new.fixed
+++ /dev/null
@@ -1,15 +0,0 @@
-// run-rustfix
-#![allow(dead_code)]
-struct U <T> {
-    wtf: Option<Box<U<T>>>,
-    x: T,
-}
-fn main() {
-    U {
-        wtf: Some(Box::new(U { //~ ERROR cannot initialize a tuple struct which contains private fields
-            wtf: None,
-            x: (),
-        })),
-        x: ()
-    };
-}
diff --git a/tests/ui/privacy/suggest-box-new.rs b/tests/ui/privacy/suggest-box-new.rs
index 2e18dba8b9f..7125285fc77 100644
--- a/tests/ui/privacy/suggest-box-new.rs
+++ b/tests/ui/privacy/suggest-box-new.rs
@@ -1,4 +1,3 @@
-// run-rustfix
 #![allow(dead_code)]
 struct U <T> {
     wtf: Option<Box<U<T>>>,
@@ -12,4 +11,9 @@ fn main() {
         })),
         x: ()
     };
+    let _ = std::collections::HashMap();
+    //~^ ERROR expected function, tuple struct or tuple variant, found struct `std::collections::HashMap`
+    let _ = std::collections::HashMap {};
+    //~^ ERROR cannot construct `HashMap<_, _, _>` with struct literal syntax due to private fields
+    let _ = Box {}; //~ ERROR cannot construct `Box<_, _>` with struct literal syntax due to private fields
 }
diff --git a/tests/ui/privacy/suggest-box-new.stderr b/tests/ui/privacy/suggest-box-new.stderr
index ed7fa036408..2224f1c60d6 100644
--- a/tests/ui/privacy/suggest-box-new.stderr
+++ b/tests/ui/privacy/suggest-box-new.stderr
@@ -1,5 +1,29 @@
+error[E0423]: expected function, tuple struct or tuple variant, found struct `std::collections::HashMap`
+  --> $DIR/suggest-box-new.rs:14:13
+   |
+LL |     let _ = std::collections::HashMap();
+   |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  --> $SRC_DIR/std/src/collections/hash/map.rs:LL:COL
+   |
+   = note: `std::collections::HashMap` defined here
+   |
+help: you might have meant to use an associated function to build this type
+   |
+LL |     let _ = std::collections::HashMap::new();
+   |                                      ~~~~~~~
+LL |     let _ = std::collections::HashMap::with_capacity(_);
+   |                                      ~~~~~~~~~~~~~~~~~~
+LL |     let _ = std::collections::HashMap::with_hasher(_);
+   |                                      ~~~~~~~~~~~~~~~~
+LL |     let _ = std::collections::HashMap::with_capacity_and_hasher(_, _);
+   |                                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+help: consider using the `Default` trait
+   |
+LL |     let _ = <std::collections::HashMap as std::default::Default>::default();
+   |             +                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
 error[E0423]: cannot initialize a tuple struct which contains private fields
-  --> $DIR/suggest-box-new.rs:9:19
+  --> $DIR/suggest-box-new.rs:8:19
    |
 LL |         wtf: Some(Box(U {
    |                   ^^^
@@ -10,11 +34,67 @@ note: constructor is not visible here due to private fields
    = note: private field
    |
    = note: private field
-help: you might have meant to use the `new` associated function
+help: you might have meant to use an associated function to build this type
+   |
+LL |         wtf: Some(Box::new(_)),
+   |                      ~~~~~~~~
+LL |         wtf: Some(Box::new_uninit()),
+   |                      ~~~~~~~~~~~~~~
+LL |         wtf: Some(Box::new_zeroed()),
+   |                      ~~~~~~~~~~~~~~
+LL |         wtf: Some(Box::new_in(_, _)),
+   |                      ~~~~~~~~~~~~~~
+     and 10 other candidates
+help: consider using the `Default` trait
+   |
+LL |         wtf: Some(<Box as std::default::Default>::default()),
+   |                   +    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+error: cannot construct `HashMap<_, _, _>` with struct literal syntax due to private fields
+  --> $DIR/suggest-box-new.rs:16:13
+   |
+LL |     let _ = std::collections::HashMap {};
+   |             ^^^^^^^^^^^^^^^^^^^^^^^^^
+   |
+   = note: ... and other private field `base` that was not provided
+help: you might have meant to use an associated function to build this type
+   |
+LL |     let _ = std::collections::HashMap::new();
+   |                                      ~~~~~~~
+LL |     let _ = std::collections::HashMap::with_capacity(_);
+   |                                      ~~~~~~~~~~~~~~~~~~
+LL |     let _ = std::collections::HashMap::with_hasher(_);
+   |                                      ~~~~~~~~~~~~~~~~
+LL |     let _ = std::collections::HashMap::with_capacity_and_hasher(_, _);
+   |                                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+help: consider using the `Default` trait
+   |
+LL |     let _ = <std::collections::HashMap as std::default::Default>::default();
+   |             +                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+error: cannot construct `Box<_, _>` with struct literal syntax due to private fields
+  --> $DIR/suggest-box-new.rs:18:13
+   |
+LL |     let _ = Box {};
+   |             ^^^
+   |
+   = note: ... and other private fields `0` and `1` that were not provided
+help: you might have meant to use an associated function to build this type
+   |
+LL |     let _ = Box::new(_);
+   |                ~~~~~~~~
+LL |     let _ = Box::new_uninit();
+   |                ~~~~~~~~~~~~~~
+LL |     let _ = Box::new_zeroed();
+   |                ~~~~~~~~~~~~~~
+LL |     let _ = Box::new_in(_, _);
+   |                ~~~~~~~~~~~~~~
+     and 10 other candidates
+help: consider using the `Default` trait
    |
-LL |         wtf: Some(Box::new(U {
-   |                      +++++
+LL |     let _ = <Box as std::default::Default>::default();
+   |             +    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-error: aborting due to previous error
+error: aborting due to 4 previous errors
 
 For more information about this error, try `rustc --explain E0423`.
diff --git a/tests/ui/rmeta/rmeta_meta_main.stderr b/tests/ui/rmeta/rmeta_meta_main.stderr
index 0c6ed9afd35..a4af319e339 100644
--- a/tests/ui/rmeta/rmeta_meta_main.stderr
+++ b/tests/ui/rmeta/rmeta_meta_main.stderr
@@ -2,7 +2,12 @@ error[E0560]: struct `Foo` has no field named `field2`
   --> $DIR/rmeta_meta_main.rs:13:19
    |
 LL |     let _ = Foo { field2: 42 };
-   |                   ^^^^^^ help: a field with a similar name exists: `field`
+   |                   ^^^^^^ unknown field
+   |
+help: a field with a similar name exists
+   |
+LL |     let _ = Foo { field: 42 };
+   |                   ~~~~~
 
 error: aborting due to previous error
 
diff --git a/tests/ui/sepcomp/sepcomp-lib-lto.rs b/tests/ui/sepcomp/sepcomp-lib-lto.rs
index 51a572899f8..164ae79c254 100644
--- a/tests/ui/sepcomp/sepcomp-lib-lto.rs
+++ b/tests/ui/sepcomp/sepcomp-lib-lto.rs
@@ -4,7 +4,6 @@
 
 // aux-build:sepcomp_lib.rs
 // compile-flags: -C lto -g
-// ignore-asmjs wasm2js does not support source maps yet
 // no-prefer-dynamic
 
 extern crate sepcomp_lib;
diff --git a/tests/ui/structs/struct-fields-hints-no-dupe.stderr b/tests/ui/structs/struct-fields-hints-no-dupe.stderr
index 1a88f269347..e109980e0bb 100644
--- a/tests/ui/structs/struct-fields-hints-no-dupe.stderr
+++ b/tests/ui/structs/struct-fields-hints-no-dupe.stderr
@@ -2,7 +2,12 @@ error[E0560]: struct `A` has no field named `bar`
   --> $DIR/struct-fields-hints-no-dupe.rs:10:9
    |
 LL |         bar : 42,
-   |         ^^^ help: a field with a similar name exists: `barr`
+   |         ^^^ unknown field
+   |
+help: a field with a similar name exists
+   |
+LL |         barr : 42,
+   |         ~~~~
 
 error: aborting due to previous error
 
diff --git a/tests/ui/structs/struct-fields-hints.stderr b/tests/ui/structs/struct-fields-hints.stderr
index 3b8a2b5c7ba..ed3650e5298 100644
--- a/tests/ui/structs/struct-fields-hints.stderr
+++ b/tests/ui/structs/struct-fields-hints.stderr
@@ -2,7 +2,12 @@ error[E0560]: struct `A` has no field named `bar`
   --> $DIR/struct-fields-hints.rs:10:9
    |
 LL |         bar : 42,
-   |         ^^^ help: a field with a similar name exists: `car`
+   |         ^^^ unknown field
+   |
+help: a field with a similar name exists
+   |
+LL |         car : 42,
+   |         ~~~
 
 error: aborting due to previous error
 
diff --git a/tests/ui/structs/struct-fields-typo.stderr b/tests/ui/structs/struct-fields-typo.stderr
index 6949a0a4a68..aef0e0e8e5c 100644
--- a/tests/ui/structs/struct-fields-typo.stderr
+++ b/tests/ui/structs/struct-fields-typo.stderr
@@ -2,7 +2,12 @@ error[E0609]: no field `baa` on type `BuildData`
   --> $DIR/struct-fields-typo.rs:11:17
    |
 LL |     let x = foo.baa;
-   |                 ^^^ help: a field with a similar name exists: `bar`
+   |                 ^^^ unknown field
+   |
+help: a field with a similar name exists
+   |
+LL |     let x = foo.bar;
+   |                 ~~~
 
 error: aborting due to previous error
 
diff --git a/tests/ui/structs/struct-pat-derived-error.stderr b/tests/ui/structs/struct-pat-derived-error.stderr
index a91e47657ab..78bb018cb4b 100644
--- a/tests/ui/structs/struct-pat-derived-error.stderr
+++ b/tests/ui/structs/struct-pat-derived-error.stderr
@@ -2,7 +2,12 @@ error[E0609]: no field `d` on type `&A`
   --> $DIR/struct-pat-derived-error.rs:8:31
    |
 LL |         let A { x, y } = self.d;
-   |                               ^ help: a field with a similar name exists: `b`
+   |                               ^ unknown field
+   |
+help: a field with a similar name exists
+   |
+LL |         let A { x, y } = self.b;
+   |                               ~
 
 error[E0026]: struct `A` does not have fields named `x`, `y`
   --> $DIR/struct-pat-derived-error.rs:8:17
diff --git a/tests/ui/structs/suggest-private-fields.stderr b/tests/ui/structs/suggest-private-fields.stderr
index d628bd16208..f67a4ed78e2 100644
--- a/tests/ui/structs/suggest-private-fields.stderr
+++ b/tests/ui/structs/suggest-private-fields.stderr
@@ -2,7 +2,12 @@ error[E0560]: struct `B` has no field named `aa`
   --> $DIR/suggest-private-fields.rs:15:9
    |
 LL |         aa: 20,
-   |         ^^ help: a field with a similar name exists: `a`
+   |         ^^ unknown field
+   |
+help: a field with a similar name exists
+   |
+LL |         a: 20,
+   |         ~
 
 error[E0560]: struct `B` has no field named `bb`
   --> $DIR/suggest-private-fields.rs:17:9
@@ -16,13 +21,23 @@ error[E0560]: struct `A` has no field named `aa`
   --> $DIR/suggest-private-fields.rs:22:9
    |
 LL |         aa: 20,
-   |         ^^ help: a field with a similar name exists: `a`
+   |         ^^ unknown field
+   |
+help: a field with a similar name exists
+   |
+LL |         a: 20,
+   |         ~
 
 error[E0560]: struct `A` has no field named `bb`
   --> $DIR/suggest-private-fields.rs:24:9
    |
 LL |         bb: 20,
-   |         ^^ help: a field with a similar name exists: `b`
+   |         ^^ unknown field
+   |
+help: a field with a similar name exists
+   |
+LL |         b: 20,
+   |         ~
 
 error: aborting due to 4 previous errors
 
diff --git a/tests/ui/suggestions/call-on-missing.stderr b/tests/ui/suggestions/call-on-missing.stderr
index ca9abc7e906..1bab075dc9c 100644
--- a/tests/ui/suggestions/call-on-missing.stderr
+++ b/tests/ui/suggestions/call-on-missing.stderr
@@ -13,7 +13,7 @@ error[E0609]: no field `i` on type `fn() -> Foo {foo}`
   --> $DIR/call-on-missing.rs:16:9
    |
 LL |     foo.i;
-   |         ^
+   |         ^ unknown field
    |
 help: use parentheses to call this function
    |
@@ -62,7 +62,7 @@ LL | fn type_param<T: Fn() -> Foo>(t: T) {
    |               - type parameter 'T' declared here
 ...
 LL |     t.i;
-   |       ^
+   |       ^ unknown field
    |
 help: use parentheses to call this type parameter
    |
diff --git a/tests/ui/suggestions/crate-or-module-typo.rs b/tests/ui/suggestions/crate-or-module-typo.rs
index 2471b11c61e..b12ad495e9f 100644
--- a/tests/ui/suggestions/crate-or-module-typo.rs
+++ b/tests/ui/suggestions/crate-or-module-typo.rs
@@ -3,7 +3,7 @@
 use st::cell::Cell; //~ ERROR failed to resolve: use of undeclared crate or module `st`
 
 mod bar {
-    pub fn bar() { bar::baz(); } //~ ERROR failed to resolve: use of undeclared crate or module `bar`
+    pub fn bar() { bar::baz(); } //~ ERROR failed to resolve: function `bar` is not a crate or module
 
     fn baz() {}
 }
diff --git a/tests/ui/suggestions/crate-or-module-typo.stderr b/tests/ui/suggestions/crate-or-module-typo.stderr
index 9ece31e76f0..457d7790646 100644
--- a/tests/ui/suggestions/crate-or-module-typo.stderr
+++ b/tests/ui/suggestions/crate-or-module-typo.stderr
@@ -42,11 +42,11 @@ LL -     bar: st::cell::Cell<bool>
 LL +     bar: cell::Cell<bool>
    |
 
-error[E0433]: failed to resolve: use of undeclared crate or module `bar`
+error[E0433]: failed to resolve: function `bar` is not a crate or module
   --> $DIR/crate-or-module-typo.rs:6:20
    |
 LL |     pub fn bar() { bar::baz(); }
-   |                    ^^^ use of undeclared crate or module `bar`
+   |                    ^^^ function `bar` is not a crate or module
 
 error: aborting due to 4 previous errors
 
diff --git a/tests/ui/suggestions/non-existent-field-present-in-subfield.stderr b/tests/ui/suggestions/non-existent-field-present-in-subfield.stderr
index cc991b915d3..65353ed923e 100644
--- a/tests/ui/suggestions/non-existent-field-present-in-subfield.stderr
+++ b/tests/ui/suggestions/non-existent-field-present-in-subfield.stderr
@@ -4,7 +4,6 @@ error[E0609]: no field `c` on type `Foo`
 LL |     let _test = &fooer.c;
    |                        ^ unknown field
    |
-   = note: available fields are: `first`, `_second`, `_third`
 help: one of the expressions' fields has a field of the same name
    |
 LL |     let _test = &fooer.first.bar.c;
@@ -16,7 +15,6 @@ error[E0609]: no field `test` on type `Foo`
 LL |     let _test2 = fooer.test;
    |                        ^^^^ unknown field
    |
-   = note: available fields are: `first`, `_second`, `_third`
 help: one of the expressions' fields has a field of the same name
    |
 LL |     let _test2 = fooer.first.bar.c.test;
diff --git a/tests/ui/suggestions/parenthesized-deref-suggestion.stderr b/tests/ui/suggestions/parenthesized-deref-suggestion.stderr
index cafddbe2624..9f185f5dd52 100644
--- a/tests/ui/suggestions/parenthesized-deref-suggestion.stderr
+++ b/tests/ui/suggestions/parenthesized-deref-suggestion.stderr
@@ -2,7 +2,7 @@ error[E0609]: no field `opts` on type `*const Session`
   --> $DIR/parenthesized-deref-suggestion.rs:7:30
    |
 LL |     (sess as *const Session).opts;
-   |                              ^^^^
+   |                              ^^^^ unknown field
    |
 help: `(sess as *const Session)` is a raw pointer; try dereferencing it
    |
@@ -14,7 +14,8 @@ error[E0609]: no field `0` on type `[u32; 1]`
    |
 LL |     (x as [u32; 1]).0;
    |     ----------------^
-   |     |
+   |     |               |
+   |     |               unknown field
    |     help: instead of using tuple indexing, use array indexing: `(x as [u32; 1])[0]`
 
 error: aborting due to 2 previous errors
diff --git a/tests/ui/suggestions/private-field.stderr b/tests/ui/suggestions/private-field.stderr
index c38c795e07a..0db426588bd 100644
--- a/tests/ui/suggestions/private-field.stderr
+++ b/tests/ui/suggestions/private-field.stderr
@@ -4,7 +4,7 @@ error[E0609]: no field `cap` on type `S`
 LL |     dbg!(s.cap)
    |            ^^^ unknown field
    |
-   = note: available fields are: `val`
+   = note: available field is: `val`
 
 error: aborting due to previous error
 
diff --git a/tests/ui/suggestions/suggest-field-through-deref.fixed b/tests/ui/suggestions/suggest-field-through-deref.fixed
new file mode 100644
index 00000000000..07ba3aa911f
--- /dev/null
+++ b/tests/ui/suggestions/suggest-field-through-deref.fixed
@@ -0,0 +1,21 @@
+// run-rustfix
+#![allow(dead_code)]
+use std::sync::Arc;
+struct S {
+    long_name: (),
+    foo: (),
+}
+fn main() {
+    let x = Arc::new(S { long_name: (), foo: () });
+    let _ = x.long_name; //~ ERROR no field `longname`
+    let y = S { long_name: (), foo: () };
+    let _ = y.long_name; //~ ERROR no field `longname`
+    let a = Some(Arc::new(S { long_name: (), foo: () }));
+    let _ = a.unwrap().long_name; //~ ERROR no field `longname`
+    let b = Some(S { long_name: (), foo: () });
+    let _ = b.unwrap().long_name; //~ ERROR no field `long_name`
+    let c = Ok::<_, ()>(Arc::new(S { long_name: (), foo: () }));
+    let _ = c.unwrap().long_name; //~ ERROR no field `longname`
+    let d = Ok::<_, ()>(S { long_name: (), foo: () });
+    let _ = d.unwrap().long_name; //~ ERROR no field `long_name`
+}
diff --git a/tests/ui/suggestions/suggest-field-through-deref.rs b/tests/ui/suggestions/suggest-field-through-deref.rs
new file mode 100644
index 00000000000..6e24b425e95
--- /dev/null
+++ b/tests/ui/suggestions/suggest-field-through-deref.rs
@@ -0,0 +1,21 @@
+// run-rustfix
+#![allow(dead_code)]
+use std::sync::Arc;
+struct S {
+    long_name: (),
+    foo: (),
+}
+fn main() {
+    let x = Arc::new(S { long_name: (), foo: () });
+    let _ = x.longname; //~ ERROR no field `longname`
+    let y = S { long_name: (), foo: () };
+    let _ = y.longname; //~ ERROR no field `longname`
+    let a = Some(Arc::new(S { long_name: (), foo: () }));
+    let _ = a.longname; //~ ERROR no field `longname`
+    let b = Some(S { long_name: (), foo: () });
+    let _ = b.long_name; //~ ERROR no field `long_name`
+    let c = Ok::<_, ()>(Arc::new(S { long_name: (), foo: () }));
+    let _ = c.longname; //~ ERROR no field `longname`
+    let d = Ok::<_, ()>(S { long_name: (), foo: () });
+    let _ = d.long_name; //~ ERROR no field `long_name`
+}
diff --git a/tests/ui/suggestions/suggest-field-through-deref.stderr b/tests/ui/suggestions/suggest-field-through-deref.stderr
new file mode 100644
index 00000000000..cc9fe2044c9
--- /dev/null
+++ b/tests/ui/suggestions/suggest-field-through-deref.stderr
@@ -0,0 +1,69 @@
+error[E0609]: no field `longname` on type `Arc<S>`
+  --> $DIR/suggest-field-through-deref.rs:10:15
+   |
+LL |     let _ = x.longname;
+   |               ^^^^^^^^ unknown field
+   |
+help: a field with a similar name exists
+   |
+LL |     let _ = x.long_name;
+   |               ~~~~~~~~~
+
+error[E0609]: no field `longname` on type `S`
+  --> $DIR/suggest-field-through-deref.rs:12:15
+   |
+LL |     let _ = y.longname;
+   |               ^^^^^^^^ unknown field
+   |
+help: a field with a similar name exists
+   |
+LL |     let _ = y.long_name;
+   |               ~~~~~~~~~
+
+error[E0609]: no field `longname` on type `Option<Arc<S>>`
+  --> $DIR/suggest-field-through-deref.rs:14:15
+   |
+LL |     let _ = a.longname;
+   |               ^^^^^^^^ unknown field
+   |
+help: a field with a similar name exists
+   |
+LL |     let _ = a.unwrap().long_name;
+   |               ~~~~~~~~~~~~~~~~~~
+
+error[E0609]: no field `long_name` on type `Option<S>`
+  --> $DIR/suggest-field-through-deref.rs:16:15
+   |
+LL |     let _ = b.long_name;
+   |               ^^^^^^^^^ unknown field
+   |
+help: one of the expressions' fields has a field of the same name
+   |
+LL |     let _ = b.unwrap().long_name;
+   |               +++++++++
+
+error[E0609]: no field `longname` on type `Result<Arc<S>, ()>`
+  --> $DIR/suggest-field-through-deref.rs:18:15
+   |
+LL |     let _ = c.longname;
+   |               ^^^^^^^^ unknown field
+   |
+help: a field with a similar name exists
+   |
+LL |     let _ = c.unwrap().long_name;
+   |               ~~~~~~~~~~~~~~~~~~
+
+error[E0609]: no field `long_name` on type `Result<S, ()>`
+  --> $DIR/suggest-field-through-deref.rs:20:15
+   |
+LL |     let _ = d.long_name;
+   |               ^^^^^^^^^ unknown field
+   |
+help: one of the expressions' fields has a field of the same name
+   |
+LL |     let _ = d.unwrap().long_name;
+   |               +++++++++
+
+error: aborting due to 6 previous errors
+
+For more information about this error, try `rustc --explain E0609`.
diff --git a/tests/ui/suggestions/suggest-tryinto-edition-change.stderr b/tests/ui/suggestions/suggest-tryinto-edition-change.stderr
index 671f5efddd9..057e37dbe10 100644
--- a/tests/ui/suggestions/suggest-tryinto-edition-change.stderr
+++ b/tests/ui/suggestions/suggest-tryinto-edition-change.stderr
@@ -4,8 +4,8 @@ error[E0433]: failed to resolve: use of undeclared type `TryFrom`
 LL |     let _i: i16 = TryFrom::try_from(0_i32).unwrap();
    |                   ^^^^^^^ use of undeclared type `TryFrom`
    |
-   = note: 'std::convert::TryFrom' is included in the prelude starting in Edition 2021
    = note: 'core::convert::TryFrom' is included in the prelude starting in Edition 2021
+   = note: 'std::convert::TryFrom' is included in the prelude starting in Edition 2021
 help: consider importing one of these items
    |
 LL + use core::convert::TryFrom;
@@ -19,8 +19,8 @@ error[E0433]: failed to resolve: use of undeclared type `TryInto`
 LL |     let _i: i16 = TryInto::try_into(0_i32).unwrap();
    |                   ^^^^^^^ use of undeclared type `TryInto`
    |
-   = note: 'std::convert::TryInto' is included in the prelude starting in Edition 2021
    = note: 'core::convert::TryInto' is included in the prelude starting in Edition 2021
+   = note: 'std::convert::TryInto' is included in the prelude starting in Edition 2021
 help: consider importing one of these items
    |
 LL + use core::convert::TryInto;
@@ -34,8 +34,8 @@ error[E0433]: failed to resolve: use of undeclared type `FromIterator`
 LL |     let _v: Vec<_> = FromIterator::from_iter(&[1]);
    |                      ^^^^^^^^^^^^ use of undeclared type `FromIterator`
    |
-   = note: 'std::iter::FromIterator' is included in the prelude starting in Edition 2021
    = note: 'core::iter::FromIterator' is included in the prelude starting in Edition 2021
+   = note: 'std::iter::FromIterator' is included in the prelude starting in Edition 2021
 help: a trait with a similar name exists
    |
 LL |     let _v: Vec<_> = IntoIterator::from_iter(&[1]);
diff --git a/tests/ui/suggestions/too-many-field-suggestions.stderr b/tests/ui/suggestions/too-many-field-suggestions.stderr
index 63ad6fdb169..ac5c8cb60cc 100644
--- a/tests/ui/suggestions/too-many-field-suggestions.stderr
+++ b/tests/ui/suggestions/too-many-field-suggestions.stderr
@@ -25,7 +25,6 @@ error[E0609]: no field `field` on type `Thing`
 LL |     t.field;
    |       ^^^^^ unknown field
    |
-   = note: available fields are: `a0`, `a1`, `a2`, `a3`, `a4` ... and 5 others
 help: some of the expressions' fields have a field of the same name
    |
 LL |     t.a0.field;
diff --git a/tests/ui/suggestions/type-mismatch-struct-field-shorthand-2.stderr b/tests/ui/suggestions/type-mismatch-struct-field-shorthand-2.stderr
index 12466868f00..fb3573ee2a4 100644
--- a/tests/ui/suggestions/type-mismatch-struct-field-shorthand-2.stderr
+++ b/tests/ui/suggestions/type-mismatch-struct-field-shorthand-2.stderr
@@ -24,7 +24,12 @@ error[E0560]: struct `RGB` has no field named `c`
   --> $DIR/type-mismatch-struct-field-shorthand-2.rs:5:25
    |
 LL |     let _ = RGB { r, g, c };
-   |                         ^ help: a field with a similar name exists: `b`
+   |                         ^ unknown field
+   |
+help: a field with a similar name exists
+   |
+LL |     let _ = RGB { r, g, b };
+   |                         ~
 
 error: aborting due to 3 previous errors
 
diff --git a/tests/ui/tuple/index-invalid.stderr b/tests/ui/tuple/index-invalid.stderr
index 8d22f458a6c..ae2c275f52c 100644
--- a/tests/ui/tuple/index-invalid.stderr
+++ b/tests/ui/tuple/index-invalid.stderr
@@ -2,19 +2,19 @@ error[E0609]: no field `1` on type `(((),),)`
   --> $DIR/index-invalid.rs:2:22
    |
 LL |     let _ = (((),),).1.0;
-   |                      ^
+   |                      ^ unknown field
 
 error[E0609]: no field `1` on type `((),)`
   --> $DIR/index-invalid.rs:4:24
    |
 LL |     let _ = (((),),).0.1;
-   |                        ^
+   |                        ^ unknown field
 
 error[E0609]: no field `000` on type `(((),),)`
   --> $DIR/index-invalid.rs:6:22
    |
 LL |     let _ = (((),),).000.000;
-   |                      ^^^
+   |                      ^^^ unknown field
 
 error: aborting due to 3 previous errors
 
diff --git a/tests/ui/tuple/tuple-index-not-tuple.stderr b/tests/ui/tuple/tuple-index-not-tuple.stderr
index a1bcdfaedbc..a267e41b1bc 100644
--- a/tests/ui/tuple/tuple-index-not-tuple.stderr
+++ b/tests/ui/tuple/tuple-index-not-tuple.stderr
@@ -2,7 +2,12 @@ error[E0609]: no field `0` on type `Point`
   --> $DIR/tuple-index-not-tuple.rs:6:12
    |
 LL |     origin.0;
-   |            ^ help: a field with a similar name exists: `x`
+   |            ^ unknown field
+   |
+help: a field with a similar name exists
+   |
+LL |     origin.x;
+   |            ~
 
 error[E0609]: no field `0` on type `Empty`
   --> $DIR/tuple-index-not-tuple.rs:8:11
diff --git a/tests/ui/tuple/tuple-index-out-of-bounds.stderr b/tests/ui/tuple/tuple-index-out-of-bounds.stderr
index 7d7c5cd7892..96090435d06 100644
--- a/tests/ui/tuple/tuple-index-out-of-bounds.stderr
+++ b/tests/ui/tuple/tuple-index-out-of-bounds.stderr
@@ -2,13 +2,18 @@ error[E0609]: no field `2` on type `Point`
   --> $DIR/tuple-index-out-of-bounds.rs:7:12
    |
 LL |     origin.2;
-   |            ^ help: a field with a similar name exists: `0`
+   |            ^ unknown field
+   |
+help: a field with a similar name exists
+   |
+LL |     origin.0;
+   |            ~
 
 error[E0609]: no field `2` on type `({integer}, {integer})`
   --> $DIR/tuple-index-out-of-bounds.rs:12:11
    |
 LL |     tuple.2;
-   |           ^
+   |           ^ unknown field
 
 error: aborting due to 2 previous errors
 
diff --git a/tests/ui/typeck/issue-52082-type-param-shadows-existing-type.stderr b/tests/ui/typeck/issue-52082-type-param-shadows-existing-type.stderr
index 4be4c91dfc2..e1091c8f5ca 100644
--- a/tests/ui/typeck/issue-52082-type-param-shadows-existing-type.stderr
+++ b/tests/ui/typeck/issue-52082-type-param-shadows-existing-type.stderr
@@ -5,7 +5,7 @@ LL |     fn equals_ref<Point>(a: &Point, b: &Point) -> bool
    |                   ----- type parameter 'Point' declared here
 LL |     {
 LL |         a.x == b.x && a.y == b.y
-   |           ^
+   |           ^ unknown field
 
 error[E0609]: no field `x` on type `&Point`
   --> $DIR/issue-52082-type-param-shadows-existing-type.rs:31:18
@@ -14,7 +14,7 @@ LL |     fn equals_ref<Point>(a: &Point, b: &Point) -> bool
    |                   ----- type parameter 'Point' declared here
 LL |     {
 LL |         a.x == b.x && a.y == b.y
-   |                  ^
+   |                  ^ unknown field
 
 error[E0609]: no field `y` on type `&Point`
   --> $DIR/issue-52082-type-param-shadows-existing-type.rs:31:25
@@ -23,7 +23,7 @@ LL |     fn equals_ref<Point>(a: &Point, b: &Point) -> bool
    |                   ----- type parameter 'Point' declared here
 LL |     {
 LL |         a.x == b.x && a.y == b.y
-   |                         ^
+   |                         ^ unknown field
 
 error[E0609]: no field `y` on type `&Point`
   --> $DIR/issue-52082-type-param-shadows-existing-type.rs:31:32
@@ -32,7 +32,7 @@ LL |     fn equals_ref<Point>(a: &Point, b: &Point) -> bool
    |                   ----- type parameter 'Point' declared here
 LL |     {
 LL |         a.x == b.x && a.y == b.y
-   |                                ^
+   |                                ^ unknown field
 
 error[E0609]: no field `x` on type `Point`
   --> $DIR/issue-52082-type-param-shadows-existing-type.rs:39:11
@@ -41,7 +41,7 @@ LL |     fn equals_val<Point>(a: Point, b: Point) -> bool
    |                   ----- type parameter 'Point' declared here
 LL |     {
 LL |         a.x == b.x && a.y == b.y
-   |           ^
+   |           ^ unknown field
 
 error[E0609]: no field `x` on type `Point`
   --> $DIR/issue-52082-type-param-shadows-existing-type.rs:39:18
@@ -50,7 +50,7 @@ LL |     fn equals_val<Point>(a: Point, b: Point) -> bool
    |                   ----- type parameter 'Point' declared here
 LL |     {
 LL |         a.x == b.x && a.y == b.y
-   |                  ^
+   |                  ^ unknown field
 
 error[E0609]: no field `y` on type `Point`
   --> $DIR/issue-52082-type-param-shadows-existing-type.rs:39:25
@@ -59,7 +59,7 @@ LL |     fn equals_val<Point>(a: Point, b: Point) -> bool
    |                   ----- type parameter 'Point' declared here
 LL |     {
 LL |         a.x == b.x && a.y == b.y
-   |                         ^
+   |                         ^ unknown field
 
 error[E0609]: no field `y` on type `Point`
   --> $DIR/issue-52082-type-param-shadows-existing-type.rs:39:32
@@ -68,7 +68,7 @@ LL |     fn equals_val<Point>(a: Point, b: Point) -> bool
    |                   ----- type parameter 'Point' declared here
 LL |     {
 LL |         a.x == b.x && a.y == b.y
-   |                                ^
+   |                                ^ unknown field
 
 error: aborting due to 8 previous errors
 
diff --git a/tests/ui/typeck/issue-53712.stderr b/tests/ui/typeck/issue-53712.stderr
index db85919afcb..7ed9cb10379 100644
--- a/tests/ui/typeck/issue-53712.stderr
+++ b/tests/ui/typeck/issue-53712.stderr
@@ -3,7 +3,8 @@ error[E0609]: no field `0` on type `[{integer}; 5]`
    |
 LL |     arr.0;
    |     ----^
-   |     |
+   |     |   |
+   |     |   unknown field
    |     help: instead of using tuple indexing, use array indexing: `arr[0]`
 
 error: aborting due to previous error
diff --git a/tests/ui/typeck/issue-65611.stderr b/tests/ui/typeck/issue-65611.stderr
index 003c630790d..2278450a6d8 100644
--- a/tests/ui/typeck/issue-65611.stderr
+++ b/tests/ui/typeck/issue-65611.stderr
@@ -8,7 +8,7 @@ error[E0609]: no field `0` on type `&_`
   --> $DIR/issue-65611.rs:59:36
    |
 LL |     let x = buffer.last().unwrap().0.clone();
-   |                                    ^
+   |                                    ^ unknown field
 
 error: aborting due to 2 previous errors
 
diff --git a/tests/ui/typeck/issue-87181/tuple-field.stderr b/tests/ui/typeck/issue-87181/tuple-field.stderr
index 0a7d30b615a..16afac4bd6b 100644
--- a/tests/ui/typeck/issue-87181/tuple-field.stderr
+++ b/tests/ui/typeck/issue-87181/tuple-field.stderr
@@ -2,7 +2,7 @@ error[E0609]: no field `0` on type `fn(char, u16) -> Foo {Foo}`
   --> $DIR/tuple-field.rs:12:15
    |
 LL |     thing.bar.0;
-   |               ^
+   |               ^ unknown field
    |
 help: use parentheses to construct this tuple struct
    |
diff --git a/tests/ui/typeck/issue-96738.stderr b/tests/ui/typeck/issue-96738.stderr
index 547cffffa2e..2bc8453dda7 100644
--- a/tests/ui/typeck/issue-96738.stderr
+++ b/tests/ui/typeck/issue-96738.stderr
@@ -8,7 +8,7 @@ error[E0609]: no field `nonexistent_field` on type `fn(_) -> Option<_> {Option::
   --> $DIR/issue-96738.rs:3:10
    |
 LL |     Some.nonexistent_field;
-   |          ^^^^^^^^^^^^^^^^^
+   |          ^^^^^^^^^^^^^^^^^ unknown field
 
 error: aborting due to 2 previous errors
 
diff --git a/tests/ui/typeck/no-type-for-node-ice.stderr b/tests/ui/typeck/no-type-for-node-ice.stderr
index b50241fb1a0..b990b5f951f 100644
--- a/tests/ui/typeck/no-type-for-node-ice.stderr
+++ b/tests/ui/typeck/no-type-for-node-ice.stderr
@@ -2,7 +2,7 @@ error[E0609]: no field `homura` on type `&'static str`
   --> $DIR/no-type-for-node-ice.rs:4:8
    |
 LL |     "".homura[""];
-   |        ^^^^^^
+   |        ^^^^^^ unknown field
 
 error: aborting due to previous error
 
diff --git a/tests/ui/unboxed-closures/unboxed-closures-unique-type-id.rs b/tests/ui/unboxed-closures/unboxed-closures-unique-type-id.rs
index 4b7016def9d..94bb44d2cf5 100644
--- a/tests/ui/unboxed-closures/unboxed-closures-unique-type-id.rs
+++ b/tests/ui/unboxed-closures/unboxed-closures-unique-type-id.rs
@@ -10,7 +10,6 @@
 // This is a regression test for issue #17021.
 //
 // compile-flags: -g
-// ignore-asmjs wasm2js does not support source maps yet
 
 use std::ptr;
 
diff --git a/tests/ui/union/union-suggest-field.mirunsafeck.stderr b/tests/ui/union/union-suggest-field.mirunsafeck.stderr
index 58b1f5cb078..efe4987bd02 100644
--- a/tests/ui/union/union-suggest-field.mirunsafeck.stderr
+++ b/tests/ui/union/union-suggest-field.mirunsafeck.stderr
@@ -2,13 +2,23 @@ error[E0560]: union `U` has no field named `principle`
   --> $DIR/union-suggest-field.rs:13:17
    |
 LL |     let u = U { principle: 0 };
-   |                 ^^^^^^^^^ help: a field with a similar name exists: `principal`
+   |                 ^^^^^^^^^ unknown field
+   |
+help: a field with a similar name exists
+   |
+LL |     let u = U { principal: 0 };
+   |                 ~~~~~~~~~
 
 error[E0609]: no field `principial` on type `U`
   --> $DIR/union-suggest-field.rs:17:15
    |
 LL |     let w = u.principial;
-   |               ^^^^^^^^^^ help: a field with a similar name exists: `principal`
+   |               ^^^^^^^^^^ unknown field
+   |
+help: a field with a similar name exists
+   |
+LL |     let w = u.principal;
+   |               ~~~~~~~~~
 
 error[E0615]: attempted to take value of method `calculate` on type `U`
   --> $DIR/union-suggest-field.rs:21:15
diff --git a/tests/ui/union/union-suggest-field.thirunsafeck.stderr b/tests/ui/union/union-suggest-field.thirunsafeck.stderr
index 58b1f5cb078..efe4987bd02 100644
--- a/tests/ui/union/union-suggest-field.thirunsafeck.stderr
+++ b/tests/ui/union/union-suggest-field.thirunsafeck.stderr
@@ -2,13 +2,23 @@ error[E0560]: union `U` has no field named `principle`
   --> $DIR/union-suggest-field.rs:13:17
    |
 LL |     let u = U { principle: 0 };
-   |                 ^^^^^^^^^ help: a field with a similar name exists: `principal`
+   |                 ^^^^^^^^^ unknown field
+   |
+help: a field with a similar name exists
+   |
+LL |     let u = U { principal: 0 };
+   |                 ~~~~~~~~~
 
 error[E0609]: no field `principial` on type `U`
   --> $DIR/union-suggest-field.rs:17:15
    |
 LL |     let w = u.principial;
-   |               ^^^^^^^^^^ help: a field with a similar name exists: `principal`
+   |               ^^^^^^^^^^ unknown field
+   |
+help: a field with a similar name exists
+   |
+LL |     let w = u.principal;
+   |               ~~~~~~~~~
 
 error[E0615]: attempted to take value of method `calculate` on type `U`
   --> $DIR/union-suggest-field.rs:21:15
diff --git a/tests/ui/unsafe/unsafe-fn-autoderef.stderr b/tests/ui/unsafe/unsafe-fn-autoderef.stderr
index 20a88c35610..f563118e8ac 100644
--- a/tests/ui/unsafe/unsafe-fn-autoderef.stderr
+++ b/tests/ui/unsafe/unsafe-fn-autoderef.stderr
@@ -3,7 +3,8 @@ error[E0609]: no field `f` on type `*const Rec`
    |
 LL |     return p.f;
    |            --^
-   |            |
+   |            | |
+   |            | unknown field
    |            help: `p` is a raw pointer; try dereferencing it: `(*p).f`
 
 error: aborting due to previous error
diff --git a/tests/ui/xcrate/auxiliary/xcrate_unit_struct.rs b/tests/ui/xcrate/auxiliary/xcrate_unit_struct.rs
index 69ed498e7e1..4f8b3508398 100644
--- a/tests/ui/xcrate/auxiliary/xcrate_unit_struct.rs
+++ b/tests/ui/xcrate/auxiliary/xcrate_unit_struct.rs
@@ -18,6 +18,11 @@ pub struct TupleStruct(pub usize, pub &'static str);
 
 #[derive(Copy, Clone)]
 pub struct StructWithFields {
+    pub foo: isize,
+}
+
+#[derive(Copy, Clone)]
+pub struct StructWithPrivFields {
     foo: isize,
 }
 
diff --git a/tests/ui/xcrate/xcrate-unit-struct.rs b/tests/ui/xcrate/xcrate-unit-struct.rs
index c99cf77ce7a..bc14cd8d4c0 100644
--- a/tests/ui/xcrate/xcrate-unit-struct.rs
+++ b/tests/ui/xcrate/xcrate-unit-struct.rs
@@ -8,5 +8,7 @@ extern crate xcrate_unit_struct;
 fn main() {
     let _ = xcrate_unit_struct::StructWithFields;
     //~^ ERROR expected value, found struct `xcrate_unit_struct::StructWithFields`
+    let _ = xcrate_unit_struct::StructWithPrivFields;
+    //~^ ERROR expected value, found struct `xcrate_unit_struct::StructWithPrivFields`
     let _ = xcrate_unit_struct::Struct;
 }
diff --git a/tests/ui/xcrate/xcrate-unit-struct.stderr b/tests/ui/xcrate/xcrate-unit-struct.stderr
index cee31456888..7365170b69e 100644
--- a/tests/ui/xcrate/xcrate-unit-struct.stderr
+++ b/tests/ui/xcrate/xcrate-unit-struct.stderr
@@ -9,6 +9,17 @@ LL |     let _ = xcrate_unit_struct::StructWithFields;
 LL | pub struct StructWithFields {
    | --------------------------- `xcrate_unit_struct::StructWithFields` defined here
 
-error: aborting due to previous error
+error[E0423]: expected value, found struct `xcrate_unit_struct::StructWithPrivFields`
+  --> $DIR/xcrate-unit-struct.rs:11:13
+   |
+LL |     let _ = xcrate_unit_struct::StructWithPrivFields;
+   |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+   |
+  ::: $DIR/auxiliary/xcrate_unit_struct.rs:25:1
+   |
+LL | pub struct StructWithPrivFields {
+   | ------------------------------- `xcrate_unit_struct::StructWithPrivFields` defined here
+
+error: aborting due to 2 previous errors
 
 For more information about this error, try `rustc --explain E0423`.