about summary refs log tree commit diff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/assembly/asm/aarch64-modifiers.rs2
-rw-r--r--tests/assembly/asm/arm-modifiers.rs2
-rw-r--r--tests/assembly/asm/arm-types.rs497
-rw-r--r--tests/assembly/asm/riscv-types.rs55
-rw-r--r--tests/assembly/asm/x86-modifiers.rs2
-rw-r--r--tests/assembly/simd-bitmask.rs2
-rw-r--r--tests/assembly/simd-intrinsic-gather.rs2
-rw-r--r--tests/assembly/simd-intrinsic-mask-load.rs2
-rw-r--r--tests/assembly/simd-intrinsic-mask-reduce.rs2
-rw-r--r--tests/assembly/simd-intrinsic-mask-store.rs2
-rw-r--r--tests/assembly/simd-intrinsic-scatter.rs2
-rw-r--r--tests/assembly/simd-intrinsic-select.rs2
-rw-r--r--tests/assembly/targets/targets-elf.rs9
-rw-r--r--tests/assembly/wasm_exceptions.rs6
-rw-r--r--tests/codegen/align-byval-alignment-mismatch.rs4
-rw-r--r--tests/codegen/array-repeat.rs15
-rw-r--r--tests/codegen/avr/avr-func-addrspace.rs2
-rw-r--r--tests/codegen/catch-unwind.rs1
-rw-r--r--tests/codegen/cffi/c-variadic.rs1
-rw-r--r--tests/codegen/checked_math.rs14
-rw-r--r--tests/codegen/debuginfo-inline-callsite-location.rs2
-rw-r--r--tests/codegen/force-frame-pointers.rs16
-rw-r--r--tests/codegen/issues/issue-112509-slice-get-andthen-get.rs6
-rw-r--r--tests/codegen/riscv-abi/riscv64-lp64-lp64f-lp64d-abi.rs2
-rw-r--r--tests/codegen/unwind-abis/aapcs-unwind-abi.rs2
-rw-r--r--tests/codegen/unwind-abis/c-unwind-abi-panic-abort.rs1
-rw-r--r--tests/codegen/unwind-abis/c-unwind-abi.rs1
-rw-r--r--tests/codegen/unwind-abis/cdecl-unwind-abi.rs1
-rw-r--r--tests/codegen/unwind-abis/fastcall-unwind-abi.rs2
-rw-r--r--tests/codegen/unwind-abis/nounwind-on-stable-panic-unwind.rs17
-rw-r--r--tests/codegen/unwind-abis/nounwind.rs1
-rw-r--r--tests/codegen/unwind-abis/stdcall-unwind-abi.rs2
-rw-r--r--tests/codegen/unwind-abis/system-unwind-abi.rs1
-rw-r--r--tests/codegen/unwind-abis/sysv64-unwind-abi.rs2
-rw-r--r--tests/codegen/unwind-abis/thiscall-unwind-abi.rs2
-rw-r--r--tests/codegen/unwind-abis/vectorcall-unwind-abi.rs2
-rw-r--r--tests/codegen/unwind-abis/win64-unwind-abi.rs2
-rw-r--r--tests/codegen/unwind-and-panic-abort.rs1
-rw-r--r--tests/codegen/unwind-extern-exports.rs1
-rw-r--r--tests/codegen/unwind-extern-imports.rs1
-rw-r--r--tests/codegen/wasm_exceptions.rs6
-rw-r--r--tests/coverage/abort.cov-map8
-rw-r--r--tests/coverage/abort.coverage1
-rw-r--r--tests/coverage/abort.rs1
-rw-r--r--tests/coverage/closure_macro.cov-map8
-rw-r--r--tests/coverage/closure_macro_async.cov-map8
-rw-r--r--tests/coverage/mcdc_non_control_flow.cov-map204
-rw-r--r--tests/coverage/mcdc_non_control_flow.coverage202
-rw-r--r--tests/coverage/mcdc_non_control_flow.rs72
-rw-r--r--tests/crashes/120503.rs10
-rw-r--r--tests/crashes/121536.rs20
-rw-r--r--tests/crashes/122044.rs38
-rw-r--r--tests/crashes/122587-1.rs5
-rw-r--r--tests/crashes/123255.rs13
-rw-r--r--tests/crashes/123893.rs4
-rw-r--r--tests/crashes/126521.rs11
-rw-r--r--tests/incremental/const-generics/issue-64087.rs2
-rw-r--r--tests/incremental/unrecoverable_query.rs40
-rw-r--r--tests/mir-opt/dataflow-const-prop/default_boxed_slice.main.GVN.32bit.panic-abort.diff2
-rw-r--r--tests/mir-opt/dataflow-const-prop/default_boxed_slice.main.GVN.32bit.panic-unwind.diff2
-rw-r--r--tests/mir-opt/dataflow-const-prop/default_boxed_slice.main.GVN.64bit.panic-abort.diff2
-rw-r--r--tests/mir-opt/dataflow-const-prop/default_boxed_slice.main.GVN.64bit.panic-unwind.diff2
-rw-r--r--tests/mir-opt/gvn.array_len.GVN.panic-abort.diff31
-rw-r--r--tests/mir-opt/gvn.array_len.GVN.panic-unwind.diff31
-rw-r--r--tests/mir-opt/gvn.fn_pointers.GVN.panic-abort.diff18
-rw-r--r--tests/mir-opt/gvn.fn_pointers.GVN.panic-unwind.diff18
-rw-r--r--tests/mir-opt/gvn.generic_cast_metadata.GVN.panic-abort.diff38
-rw-r--r--tests/mir-opt/gvn.generic_cast_metadata.GVN.panic-unwind.diff38
-rw-r--r--tests/mir-opt/gvn.manual_slice_mut_len.GVN.panic-abort.diff41
-rw-r--r--tests/mir-opt/gvn.manual_slice_mut_len.GVN.panic-unwind.diff41
-rw-r--r--tests/mir-opt/gvn.rs70
-rw-r--r--tests/mir-opt/instsimplify/casts.roundtrip.InstSimplify.diff2
-rw-r--r--tests/mir-opt/instsimplify/casts.rs2
-rw-r--r--tests/mir-opt/issue_76432.rs3
-rw-r--r--tests/mir-opt/lower_array_len.array_bound.GVN.panic-abort.diff (renamed from tests/mir-opt/lower_array_len.array_bound.NormalizeArrayLen.panic-abort.diff)21
-rw-r--r--tests/mir-opt/lower_array_len.array_bound.GVN.panic-unwind.diff (renamed from tests/mir-opt/lower_array_len.array_bound.NormalizeArrayLen.panic-unwind.diff)21
-rw-r--r--tests/mir-opt/lower_array_len.array_bound_mut.GVN.panic-abort.diff (renamed from tests/mir-opt/lower_array_len.array_bound_mut.NormalizeArrayLen.panic-abort.diff)33
-rw-r--r--tests/mir-opt/lower_array_len.array_bound_mut.GVN.panic-unwind.diff (renamed from tests/mir-opt/lower_array_len.array_bound_mut.NormalizeArrayLen.panic-unwind.diff)33
-rw-r--r--tests/mir-opt/lower_array_len.array_len.GVN.panic-abort.diff (renamed from tests/mir-opt/lower_array_len.array_len.NormalizeArrayLen.panic-abort.diff)6
-rw-r--r--tests/mir-opt/lower_array_len.array_len.GVN.panic-unwind.diff (renamed from tests/mir-opt/lower_array_len.array_len.NormalizeArrayLen.panic-unwind.diff)6
-rw-r--r--tests/mir-opt/lower_array_len.array_len_by_value.GVN.panic-abort.diff (renamed from tests/mir-opt/lower_array_len.array_len_by_value.NormalizeArrayLen.panic-abort.diff)6
-rw-r--r--tests/mir-opt/lower_array_len.array_len_by_value.GVN.panic-unwind.diff (renamed from tests/mir-opt/lower_array_len.array_len_by_value.NormalizeArrayLen.panic-unwind.diff)6
-rw-r--r--tests/mir-opt/lower_array_len.array_len_raw.GVN.panic-abort.diff (renamed from tests/mir-opt/lower_array_len.array_len_raw.NormalizeArrayLen.panic-abort.diff)12
-rw-r--r--tests/mir-opt/lower_array_len.array_len_raw.GVN.panic-unwind.diff (renamed from tests/mir-opt/lower_array_len.array_len_raw.NormalizeArrayLen.panic-unwind.diff)12
-rw-r--r--tests/mir-opt/lower_array_len.array_len_reborrow.GVN.panic-abort.diff (renamed from tests/mir-opt/lower_array_len.array_len_reborrow.NormalizeArrayLen.panic-abort.diff)12
-rw-r--r--tests/mir-opt/lower_array_len.array_len_reborrow.GVN.panic-unwind.diff (renamed from tests/mir-opt/lower_array_len.array_len_reborrow.NormalizeArrayLen.panic-unwind.diff)12
-rw-r--r--tests/mir-opt/lower_array_len.rs18
-rw-r--r--tests/mir-opt/lower_slice_len.bound.LowerSliceLenCalls.panic-abort.diff2
-rw-r--r--tests/mir-opt/lower_slice_len.bound.LowerSliceLenCalls.panic-unwind.diff2
-rw-r--r--tests/mir-opt/or_pattern.rs24
-rw-r--r--tests/mir-opt/or_pattern.shortcut_second_or.SimplifyCfg-initial.after.mir100
-rw-r--r--tests/mir-opt/or_pattern.single_switchint.SimplifyCfg-initial.after.mir75
-rw-r--r--tests/mir-opt/pre-codegen/checked_ops.step_forward.PreCodegen.after.panic-abort.mir72
-rw-r--r--tests/mir-opt/pre-codegen/checked_ops.step_forward.PreCodegen.after.panic-unwind.mir72
-rw-r--r--tests/mir-opt/pre-codegen/loops.mapped.PreCodegen.after.mir79
-rw-r--r--tests/mir-opt/pre-codegen/slice_index.rs2
-rw-r--r--tests/mir-opt/pre-codegen/slice_index.slice_get_mut_usize.PreCodegen.after.panic-abort.mir2
-rw-r--r--tests/mir-opt/pre-codegen/slice_index.slice_get_mut_usize.PreCodegen.after.panic-unwind.mir2
-rw-r--r--tests/mir-opt/pre-codegen/slice_index.slice_get_unchecked_mut_range.PreCodegen.after.panic-abort.mir40
-rw-r--r--tests/mir-opt/pre-codegen/slice_index.slice_get_unchecked_mut_range.PreCodegen.after.panic-unwind.mir40
-rw-r--r--tests/mir-opt/pre-codegen/slice_iter.enumerated_loop.PreCodegen.after.panic-abort.mir97
-rw-r--r--tests/mir-opt/pre-codegen/slice_iter.enumerated_loop.PreCodegen.after.panic-unwind.mir4
-rw-r--r--tests/mir-opt/pre-codegen/slice_iter.forward_loop.PreCodegen.after.panic-abort.mir4
-rw-r--r--tests/mir-opt/pre-codegen/slice_iter.forward_loop.PreCodegen.after.panic-unwind.mir4
-rw-r--r--tests/mir-opt/pre-codegen/slice_iter.range_loop.PreCodegen.after.panic-abort.mir2
-rw-r--r--tests/mir-opt/pre-codegen/slice_iter.range_loop.PreCodegen.after.panic-unwind.mir2
-rw-r--r--tests/mir-opt/pre-codegen/slice_iter.reverse_loop.PreCodegen.after.panic-abort.mir4
-rw-r--r--tests/mir-opt/pre-codegen/slice_iter.reverse_loop.PreCodegen.after.panic-unwind.mir4
-rw-r--r--tests/mir-opt/retag.array_casts.SimplifyCfg-pre-optimizations.after.panic-abort.mir4
-rw-r--r--tests/mir-opt/retag.array_casts.SimplifyCfg-pre-optimizations.after.panic-unwind.mir4
-rw-r--r--tests/run-make/bin-emit-no-symbols/app.rs (renamed from tests/run-make/issue-51671/app.rs)0
-rw-r--r--tests/run-make/bin-emit-no-symbols/rmake.rs16
-rw-r--r--tests/run-make/branch-protection-check-IBT/Makefile6
-rw-r--r--tests/run-make/branch-protection-check-IBT/_rmake.rs31
-rw-r--r--tests/run-make/comment-section/Makefile18
-rw-r--r--tests/run-make/comment-section/rmake.rs47
-rw-r--r--tests/run-make/compressed-debuginfo/Makefile14
-rw-r--r--tests/run-make/compressed-debuginfo/rmake.rs36
-rw-r--r--tests/run-make/crate-name-priority/Makefile12
-rw-r--r--tests/run-make/crate-name-priority/rmake.rs18
-rw-r--r--tests/run-make/debugger-visualizer-dep-info/Makefile9
-rw-r--r--tests/run-make/debugger-visualizer-dep-info/rmake.rs11
-rw-r--r--tests/run-make/error-writing-dependencies/Makefile8
-rw-r--r--tests/run-make/error-writing-dependencies/rmake.rs17
-rw-r--r--tests/run-make/extern-flag-rename-transitive/Makefile7
-rw-r--r--tests/run-make/extern-flag-rename-transitive/rmake.rs14
-rw-r--r--tests/run-make/extern-overrides-distribution/Makefile6
-rw-r--r--tests/run-make/extern-overrides-distribution/rmake.rs14
-rw-r--r--tests/run-make/forced-unwind-terminate-pof/Makefile9
-rw-r--r--tests/run-make/forced-unwind-terminate-pof/foo.rs1
-rw-r--r--tests/run-make/forced-unwind-terminate-pof/rmake.rs16
-rw-r--r--tests/run-make/glibc-staticlib-args/Makefile13
-rw-r--r--tests/run-make/glibc-staticlib-args/rmake.rs18
-rw-r--r--tests/run-make/inaccessible-temp-dir/rmake.rs3
-rw-r--r--tests/run-make/inline-always-many-cgu/Makefile8
-rw-r--r--tests/run-make/inline-always-many-cgu/rmake.rs18
-rw-r--r--tests/run-make/issue-51671/Makefile9
-rw-r--r--tests/run-make/link-args-order/Makefile10
-rw-r--r--tests/run-make/link-args-order/rmake.rs30
-rw-r--r--tests/run-make/ls-metadata/Makefile8
-rw-r--r--tests/run-make/ls-metadata/rmake.rs17
-rw-r--r--tests/run-make/lto-readonly-lib/Makefile13
-rw-r--r--tests/run-make/lto-readonly-lib/rmake.rs19
-rw-r--r--tests/run-make/metadata-flag-frobs-symbols/Makefile11
-rw-r--r--tests/run-make/metadata-flag-frobs-symbols/rmake.rs20
-rw-r--r--tests/run-make/relocation-model/Makefile20
-rw-r--r--tests/run-make/relocation-model/rmake.rs24
-rw-r--r--tests/run-make/relro-levels/Makefile22
-rw-r--r--tests/run-make/relro-levels/rmake.rs28
-rw-r--r--tests/run-make/rustdoc-io-error/Makefile20
-rw-r--r--tests/run-make/rustdoc-io-error/rmake.rs31
-rw-r--r--tests/run-make/static-pie/Makefile18
-rwxr-xr-xtests/run-make/static-pie/check_clang_version.sh20
-rwxr-xr-xtests/run-make/static-pie/check_gcc_version.sh20
-rw-r--r--tests/run-make/static-pie/rmake.rs73
-rw-r--r--tests/run-make/symlinked-extern/rmake.rs1
-rw-r--r--tests/run-make/symlinked-libraries/rmake.rs2
-rw-r--r--tests/run-make/symlinked-rlib/rmake.rs1
-rw-r--r--tests/rustdoc/alias-reexport.rs12
-rw-r--r--tests/rustdoc/alias-reexport2.rs8
-rw-r--r--tests/rustdoc/all.rs16
-rw-r--r--tests/rustdoc/anchor-id-duplicate-method-name-25001.rs20
-rw-r--r--tests/rustdoc/anchor-id-trait-method-15169.rs2
-rw-r--r--tests/rustdoc/anchor-id-trait-tymethod-28478.rs26
-rw-r--r--tests/rustdoc/anchors.rs26
-rw-r--r--tests/rustdoc/anonymous-lifetime.rs4
-rw-r--r--tests/rustdoc/anonymous-reexport.rs14
-rw-r--r--tests/rustdoc/array-links.rs16
-rw-r--r--tests/rustdoc/asm-foreign.rs4
-rw-r--r--tests/rustdoc/asm-foreign2.rs2
-rw-r--r--tests/rustdoc/asref-for-and-of-local-82465.rs4
-rw-r--r--tests/rustdoc/assoc-consts-version.rs2
-rw-r--r--tests/rustdoc/assoc-consts.rs72
-rw-r--r--tests/rustdoc/assoc-item-cast.rs4
-rw-r--r--tests/rustdoc/assoc-type-bindings-20646.rs8
-rw-r--r--tests/rustdoc/assoc-types.rs26
-rw-r--r--tests/rustdoc/associated-consts.rs24
-rw-r--r--tests/rustdoc/async-fn-opaque-item.rs8
-rw-r--r--tests/rustdoc/async-fn.rs62
-rw-r--r--tests/rustdoc/async-trait-sig.rs4
-rw-r--r--tests/rustdoc/async-trait.rs2
-rw-r--r--tests/rustdoc/attribute-rendering.rs4
-rw-r--r--tests/rustdoc/attributes.rs6
-rw-r--r--tests/rustdoc/auto-impl-primitive.rs2
-rw-r--r--tests/rustdoc/auto-trait-bounds-by-associated-type-50159.rs10
-rw-r--r--tests/rustdoc/auto-trait-bounds-inference-variables-54705.rs6
-rw-r--r--tests/rustdoc/auto-trait-bounds-where-51236.rs4
-rw-r--r--tests/rustdoc/auto-trait-negative-impl-55321.rs12
-rw-r--r--tests/rustdoc/auto-trait-not-send.rs6
-rw-r--r--tests/rustdoc/auto-traits.rs4
-rw-r--r--tests/rustdoc/auto_aliases.rs2
-rw-r--r--tests/rustdoc/auxiliary/alias-reexport2.rs8
-rw-r--r--tests/rustdoc/auxiliary/rustdoc-ffi.rs2
-rw-r--r--tests/rustdoc/bad-codeblock-syntax.rs24
-rw-r--r--tests/rustdoc/blank-line-in-doc-block-47197.rs2
-rw-r--r--tests/rustdoc/blanket-impl-29503.rs4
-rw-r--r--tests/rustdoc/blanket-impl-78673.rs12
-rw-r--r--tests/rustdoc/blanket-reexport-item.rs2
-rw-r--r--tests/rustdoc/bounds.rs12
-rw-r--r--tests/rustdoc/cap-lints.rs2
-rw-r--r--tests/rustdoc/cfg-doctest.rs4
-rw-r--r--tests/rustdoc/cfg_doc_reexport.rs14
-rw-r--r--tests/rustdoc/check-source-code-urls-to-def-std.rs18
-rw-r--r--tests/rustdoc/check-source-code-urls-to-def.rs34
-rw-r--r--tests/rustdoc/check-styled-link.rs2
-rw-r--r--tests/rustdoc/check.rs4
-rw-r--r--tests/rustdoc/codeblock-title.rs8
-rw-r--r--tests/rustdoc/compiler-derive-proc-macro.rs12
-rw-r--r--tests/rustdoc/const-display.rs48
-rw-r--r--tests/rustdoc/const-doc.rs4
-rw-r--r--tests/rustdoc/const-effect-param.rs5
-rw-r--r--tests/rustdoc/const-fn-76501.rs4
-rw-r--r--tests/rustdoc/const-fn-effects.rs9
-rw-r--r--tests/rustdoc/const-fn.rs8
-rw-r--r--tests/rustdoc/const-generics/add-impl.rs4
-rw-r--r--tests/rustdoc/const-generics/const-generic-defaults.rs2
-rw-r--r--tests/rustdoc/const-generics/const-generic-slice.rs4
-rw-r--r--tests/rustdoc/const-generics/const-generics-docs.rs62
-rw-r--r--tests/rustdoc/const-generics/const-impl.rs12
-rw-r--r--tests/rustdoc/const-generics/generic_const_exprs.rs2
-rw-r--r--tests/rustdoc/const-generics/lazy_normalization_consts/const-equate-pred.rs4
-rw-r--r--tests/rustdoc/const-generics/type-alias.rs2
-rw-r--r--tests/rustdoc/const-intrinsic.rs12
-rw-r--r--tests/rustdoc/const-rendering-macros-33302.rs26
-rw-r--r--tests/rustdoc/const-underscore.rs2
-rw-r--r--tests/rustdoc/const-value-display.rs8
-rw-r--r--tests/rustdoc/const.rs2
-rw-r--r--tests/rustdoc/constructor-imports.rs4
-rw-r--r--tests/rustdoc/crate-version-escape.rs2
-rw-r--r--tests/rustdoc/crate-version-extra.rs4
-rw-r--r--tests/rustdoc/crate-version.rs2
-rw-r--r--tests/rustdoc/cross-crate-hidden-assoc-trait-items.rs16
-rw-r--r--tests/rustdoc/cross-crate-hidden-impl-parameter.rs8
-rw-r--r--tests/rustdoc/cross-crate-links.rs26
-rw-r--r--tests/rustdoc/cross-crate-primitive-doc.rs4
-rw-r--r--tests/rustdoc/custom_code_classes.rs8
-rw-r--r--tests/rustdoc/decl-line-wrapping-empty-arg-list.rs4
-rw-r--r--tests/rustdoc/decl-trailing-whitespace.rs4
-rw-r--r--tests/rustdoc/decl_macro.rs32
-rw-r--r--tests/rustdoc/decl_macro_priv.rs14
-rw-r--r--tests/rustdoc/deduplicate-glob-import-impl-21474.rs2
-rw-r--r--tests/rustdoc/default-theme.rs6
-rw-r--r--tests/rustdoc/default-trait-method-link.rs4
-rw-r--r--tests/rustdoc/default-trait-method.rs40
-rw-r--r--tests/rustdoc/deprecated-future-staged-api.rs8
-rw-r--r--tests/rustdoc/deprecated-future.rs4
-rw-r--r--tests/rustdoc/deprecated-impls.rs70
-rw-r--r--tests/rustdoc/deprecated.rs16
-rw-r--r--tests/rustdoc/deref-methods-19190-foreign-type.rs6
-rw-r--r--tests/rustdoc/deref-methods-19190-inline.rs18
-rw-r--r--tests/rustdoc/deref-methods-19190.rs10
-rw-r--r--tests/rustdoc/deref-mut-35169-2.rs30
-rw-r--r--tests/rustdoc/deref-mut-35169.rs30
-rw-r--r--tests/rustdoc/deref/deref-const-fn.rs14
-rw-r--r--tests/rustdoc/deref/deref-multiple-impl-blocks.rs10
-rw-r--r--tests/rustdoc/deref/deref-mut-methods.rs4
-rw-r--r--tests/rustdoc/deref/deref-recursive-pathbuf.rs18
-rw-r--r--tests/rustdoc/deref/deref-recursive.rs18
-rw-r--r--tests/rustdoc/deref/deref-slice-core.rs6
-rw-r--r--tests/rustdoc/deref/deref-to-primitive.rs6
-rw-r--r--tests/rustdoc/deref/deref-typedef.rs22
-rw-r--r--tests/rustdoc/deref/escape-deref-methods.rs4
-rw-r--r--tests/rustdoc/deref/issue-100679-sidebar-links-deref.rs6
-rw-r--r--tests/rustdoc/deref/recursive-deref-sidebar.rs4
-rw-r--r--tests/rustdoc/deref/recursive-deref.rs30
-rw-r--r--tests/rustdoc/description.rs12
-rw-r--r--tests/rustdoc/description_default.rs6
-rw-r--r--tests/rustdoc/disambiguate-anchors-32890.rs8
-rw-r--r--tests/rustdoc/disambiguate-anchors-header-29449.rs22
-rw-r--r--tests/rustdoc/display-hidden-items.rs52
-rw-r--r--tests/rustdoc/doc-assoc-item.rs2
-rw-r--r--tests/rustdoc/doc-attr-comment-mix-42760.rs4
-rw-r--r--tests/rustdoc/doc-auto-cfg.rs36
-rw-r--r--tests/rustdoc/doc-cfg-hide.rs22
-rw-r--r--tests/rustdoc/doc-cfg-implicit-gate.rs4
-rw-r--r--tests/rustdoc/doc-cfg-implicit.rs22
-rw-r--r--tests/rustdoc/doc-cfg-inherit-from-module-79201.rs14
-rw-r--r--tests/rustdoc/doc-cfg-simplification.rs138
-rw-r--r--tests/rustdoc/doc-cfg-traits.rs84
-rw-r--r--tests/rustdoc/doc-cfg.rs54
-rw-r--r--tests/rustdoc/doc-hidden-method-13698.rs4
-rw-r--r--tests/rustdoc/doc-hidden-private-67851-both.rs4
-rw-r--r--tests/rustdoc/doc-hidden-private-67851-hidden.rs4
-rw-r--r--tests/rustdoc/doc-hidden-private-67851-neither.rs4
-rw-r--r--tests/rustdoc/doc-hidden-private-67851-private.rs4
-rw-r--r--tests/rustdoc/doc-hidden-trait-implementors-33069.rs4
-rw-r--r--tests/rustdoc/doc_auto_cfg_nested_impl.rs6
-rw-r--r--tests/rustdoc/doctest/doctest-escape-boring-41783.rs16
-rw-r--r--tests/rustdoc/document-hidden-items-15347.rs2
-rw-r--r--tests/rustdoc/double-hyphen-to-dash.rs4
-rw-r--r--tests/rustdoc/double-quote-escape.rs4
-rw-r--r--tests/rustdoc/duplicate-cfg.rs42
-rw-r--r--tests/rustdoc/duplicate-flags.rs2
-rw-r--r--tests/rustdoc/duplicate_impls/issue-33054.rs16
-rw-r--r--tests/rustdoc/duplicated-glob-reexport-60522.rs28
-rw-r--r--tests/rustdoc/duplicated_impl.rs4
-rw-r--r--tests/rustdoc/early-unindent.rs4
-rw-r--r--tests/rustdoc/elided-lifetime.rs24
-rw-r--r--tests/rustdoc/empty-impl-block-private-with-doc.rs4
-rw-r--r--tests/rustdoc/empty-impl-block-private.rs4
-rw-r--r--tests/rustdoc/empty-impl-block.rs12
-rw-r--r--tests/rustdoc/empty-impls.rs8
-rw-r--r--tests/rustdoc/empty-mod-private.rs18
-rw-r--r--tests/rustdoc/empty-mod-public.rs18
-rw-r--r--tests/rustdoc/empty-section.rs4
-rw-r--r--tests/rustdoc/ensure-src-link.rs2
-rw-r--r--tests/rustdoc/enum-headings.rs14
-rw-r--r--tests/rustdoc/enum-variant-doc-hidden-field-88600.rs30
-rw-r--r--tests/rustdoc/enum-variant-fields-heading.rs12
-rw-r--r--tests/rustdoc/enum-variant-private-46767.rs4
-rw-r--r--tests/rustdoc/enum-variant-reexport-35488.rs6
-rw-r--r--tests/rustdoc/enum-variant-value.rs194
-rw-r--r--tests/rustdoc/extern-default-method.rs8
-rw-r--r--tests/rustdoc/extern-fn-22038.rs8
-rw-r--r--tests/rustdoc/extern-html-root-url-precedence.rs4
-rw-r--r--tests/rustdoc/extern-html-root-url.rs6
-rw-r--r--tests/rustdoc/extern-impl-trait.rs4
-rw-r--r--tests/rustdoc/extern-impl.rs20
-rw-r--r--tests/rustdoc/extern-links.rs8
-rw-r--r--tests/rustdoc/extern-method.rs12
-rw-r--r--tests/rustdoc/external-cross.rs4
-rw-r--r--tests/rustdoc/external-doc.rs10
-rw-r--r--tests/rustdoc/external-macro-src.rs6
-rw-r--r--tests/rustdoc/feature-gate-doc_auto_cfg.rs4
-rw-r--r--tests/rustdoc/ffi.rs4
-rw-r--r--tests/rustdoc/files-creation-hidden.rs14
-rw-r--r--tests/rustdoc/files-creation-private.rs14
-rw-r--r--tests/rustdoc/fn-bound.rs2
-rw-r--r--tests/rustdoc/fn-pointer-arg-name.rs4
-rw-r--r--tests/rustdoc/fn-sidebar.rs8
-rw-r--r--tests/rustdoc/fn-type.rs6
-rw-r--r--tests/rustdoc/footnote-definition-without-blank-line-100638.rs14
-rw-r--r--tests/rustdoc/footnote-in-summary.rs12
-rw-r--r--tests/rustdoc/foreign-implementors-js-43701.rs2
-rw-r--r--tests/rustdoc/foreigntype-reexport.rs46
-rw-r--r--tests/rustdoc/foreigntype.rs8
-rw-r--r--tests/rustdoc/generic-associated-types/gats.rs16
-rw-r--r--tests/rustdoc/generic-associated-types/issue-109488.rs6
-rw-r--r--tests/rustdoc/generic-associated-types/issue-94683.rs6
-rw-r--r--tests/rustdoc/generic-const-items.rs14
-rw-r--r--tests/rustdoc/generic-impl.rs6
-rw-r--r--tests/rustdoc/generic_const_exprs.rs4
-rw-r--r--tests/rustdoc/glob-reexport-attribute-merge-120487.rs16
-rw-r--r--tests/rustdoc/glob-reexport-attribute-merge-doc-auto-cfg.rs16
-rw-r--r--tests/rustdoc/glob-shadowing-const.rs6
-rw-r--r--tests/rustdoc/glob-shadowing.rs24
-rw-r--r--tests/rustdoc/heading-levels-89309.rs12
-rw-r--r--tests/rustdoc/hidden-extern-34025.rs6
-rw-r--r--tests/rustdoc/hidden-impls.rs8
-rw-r--r--tests/rustdoc/hidden-line.rs4
-rw-r--r--tests/rustdoc/hidden-methods.rs16
-rw-r--r--tests/rustdoc/hidden-private.rs22
-rw-r--r--tests/rustdoc/hidden-trait-methods-with-document-hidden-items.rs20
-rw-r--r--tests/rustdoc/hidden-trait-methods.rs20
-rw-r--r--tests/rustdoc/hidden-trait-struct-impls.rs10
-rw-r--r--tests/rustdoc/hide-complex-unevaluated-const-arguments.rs10
-rw-r--r--tests/rustdoc/hide-complex-unevaluated-consts.rs14
-rw-r--r--tests/rustdoc/hide-mut-methods-if-no-derefmut-impl-74083.rs4
-rw-r--r--tests/rustdoc/hide-unstable-trait.rs4
-rw-r--r--tests/rustdoc/higher-ranked-trait-bounds.rs32
-rw-r--r--tests/rustdoc/highlight-invalid-rust-12834.rs4
-rw-r--r--tests/rustdoc/html-no-source.rs18
-rw-r--r--tests/rustdoc/impl-alias-substituted.rs2
-rw-r--r--tests/rustdoc/impl-assoc-type-21092.rs4
-rw-r--r--tests/rustdoc/impl-blanket-53689.rs6
-rw-r--r--tests/rustdoc/impl-box.rs4
-rw-r--r--tests/rustdoc/impl-disambiguation.rs10
-rw-r--r--tests/rustdoc/impl-everywhere.rs12
-rw-r--r--tests/rustdoc/impl-in-const-block.rs12
-rw-r--r--tests/rustdoc/impl-on-ty-alias-issue-119015.rs12
-rw-r--r--tests/rustdoc/impl-parts-crosscrate.rs8
-rw-r--r--tests/rustdoc/impl-parts.rs4
-rw-r--r--tests/rustdoc/impl-ref-20175.rs2
-rw-r--r--tests/rustdoc/impl-trait-43869.rs24
-rw-r--r--tests/rustdoc/impl-trait-alias.rs4
-rw-r--r--tests/rustdoc/impl-type-parameter-33592.rs4
-rw-r--r--tests/rustdoc/implementor-stable-version.rs4
-rw-r--r--tests/rustdoc/implementors-unstable-75588.rs4
-rw-r--r--tests/rustdoc/impossible-default.rs4
-rw-r--r--tests/rustdoc/include_str_cut.rs4
-rw-r--r--tests/rustdoc/index-page.rs8
-rw-r--r--tests/rustdoc/infinite-redirection-16265-1.rs2
-rw-r--r--tests/rustdoc/infinite-redirection-16265-2.rs2
-rw-r--r--tests/rustdoc/infinite-redirection.rs8
-rw-r--r--tests/rustdoc/inherent-projections.rs16
-rw-r--r--tests/rustdoc/inline-assoc-type-20727-bindings.rs16
-rw-r--r--tests/rustdoc/inline-assoc-type-20727-bounds-deref.rs16
-rw-r--r--tests/rustdoc/inline-assoc-type-20727-bounds-index.rs28
-rw-r--r--tests/rustdoc/inline-assoc-type-20727-bounds.rs16
-rw-r--r--tests/rustdoc/inline-default-methods.rs22
-rw-r--r--tests/rustdoc/inline-private-with-intermediate-doc-hidden.rs10
-rw-r--r--tests/rustdoc/inline-rename-34473.rs8
-rw-r--r--tests/rustdoc/inline_cross/add-docs.rs4
-rw-r--r--tests/rustdoc/inline_cross/assoc-const-equality.rs4
-rw-r--r--tests/rustdoc/inline_cross/assoc-items.rs62
-rw-r--r--tests/rustdoc/inline_cross/assoc_item_trait_bounds.rs48
-rw-r--r--tests/rustdoc/inline_cross/async-fn.rs12
-rw-r--r--tests/rustdoc/inline_cross/attributes.rs4
-rw-r--r--tests/rustdoc/inline_cross/auxiliary/issue-85454.rs4
-rw-r--r--tests/rustdoc/inline_cross/const-effect-param.rs12
-rw-r--r--tests/rustdoc/inline_cross/const-eval-46727.rs4
-rw-r--r--tests/rustdoc/inline_cross/const-fn-27362.rs6
-rw-r--r--tests/rustdoc/inline_cross/cross-glob.rs10
-rw-r--r--tests/rustdoc/inline_cross/deduplicate-inlined-items-23207.rs4
-rw-r--r--tests/rustdoc/inline_cross/default-generic-args.rs100
-rw-r--r--tests/rustdoc/inline_cross/default-trait-method.rs26
-rw-r--r--tests/rustdoc/inline_cross/doc-hidden-extern-trait-impl-29584.rs4
-rw-r--r--tests/rustdoc/inline_cross/dyn_trait.rs160
-rw-r--r--tests/rustdoc/inline_cross/early-late-bound-lifetime-params.rs8
-rw-r--r--tests/rustdoc/inline_cross/fn-type.rs4
-rw-r--r--tests/rustdoc/inline_cross/generic-const-items.rs14
-rw-r--r--tests/rustdoc/inline_cross/hidden-use.rs8
-rw-r--r--tests/rustdoc/inline_cross/impl-inline-without-trait.rs6
-rw-r--r--tests/rustdoc/inline_cross/impl-sized.rs20
-rw-r--r--tests/rustdoc/inline_cross/impl_trait.rs46
-rw-r--r--tests/rustdoc/inline_cross/implementors-js.rs14
-rw-r--r--tests/rustdoc/inline_cross/inline_hidden.rs16
-rw-r--r--tests/rustdoc/inline_cross/issue-24183.rs12
-rw-r--r--tests/rustdoc/inline_cross/issue-28480.rs12
-rw-r--r--tests/rustdoc/inline_cross/issue-31948-1.rs30
-rw-r--r--tests/rustdoc/inline_cross/issue-31948-2.rs22
-rw-r--r--tests/rustdoc/inline_cross/issue-31948.rs34
-rw-r--r--tests/rustdoc/inline_cross/issue-32881.rs6
-rw-r--r--tests/rustdoc/inline_cross/issue-33113.rs6
-rw-r--r--tests/rustdoc/inline_cross/issue-76736-1.rs8
-rw-r--r--tests/rustdoc/inline_cross/issue-76736-2.rs8
-rw-r--r--tests/rustdoc/inline_cross/issue-76736-3.rs8
-rw-r--r--tests/rustdoc/inline_cross/issue-76736-4.rs8
-rw-r--r--tests/rustdoc/inline_cross/macro-vis.rs24
-rw-r--r--tests/rustdoc/inline_cross/macros.rs14
-rw-r--r--tests/rustdoc/inline_cross/non_lifetime_binders.rs8
-rw-r--r--tests/rustdoc/inline_cross/proc_macro.rs40
-rw-r--r--tests/rustdoc/inline_cross/qpath-self-85454.rs8
-rw-r--r--tests/rustdoc/inline_cross/reexport-with-anonymous-lifetime-98697.rs8
-rw-r--r--tests/rustdoc/inline_cross/renamed-via-module.rs28
-rw-r--r--tests/rustdoc/inline_cross/repr.rs32
-rw-r--r--tests/rustdoc/inline_cross/ret-pos-impl-trait-in-trait.rs28
-rw-r--r--tests/rustdoc/inline_cross/sugar-closure-crate-21801.rs4
-rw-r--r--tests/rustdoc/inline_cross/trait-vis.rs4
-rw-r--r--tests/rustdoc/inline_cross/use_crate.rs18
-rw-r--r--tests/rustdoc/inline_local/blanket-impl-reexported-trait-94183.rs8
-rw-r--r--tests/rustdoc/inline_local/enum-variant-reexport-46766.rs2
-rw-r--r--tests/rustdoc/inline_local/glob-extern-document-private-items.rs22
-rw-r--r--tests/rustdoc/inline_local/glob-extern.rs18
-rw-r--r--tests/rustdoc/inline_local/glob-private-document-private-items.rs58
-rw-r--r--tests/rustdoc/inline_local/glob-private.rs50
-rw-r--r--tests/rustdoc/inline_local/hidden-use.rs8
-rw-r--r--tests/rustdoc/inline_local/issue-28537.rs4
-rw-r--r--tests/rustdoc/inline_local/issue-32343.rs18
-rw-r--r--tests/rustdoc/inline_local/macro_by_example.rs12
-rw-r--r--tests/rustdoc/inline_local/please_inline.rs12
-rw-r--r--tests/rustdoc/inline_local/private-reexport-in-public-api-81141-2.rs4
-rw-r--r--tests/rustdoc/inline_local/private-reexport-in-public-api-81141.rs64
-rw-r--r--tests/rustdoc/inline_local/private-reexport-in-public-api-generics-81141.rs4
-rw-r--r--tests/rustdoc/inline_local/private-reexport-in-public-api-hidden-81141.rs4
-rw-r--r--tests/rustdoc/inline_local/private-reexport-in-public-api-private-81141.rs12
-rw-r--r--tests/rustdoc/inline_local/reexported-macro-and-macro-export-sidebar-89852.rs4
-rw-r--r--tests/rustdoc/inline_local/trait-vis.rs6
-rw-r--r--tests/rustdoc/internal.rs10
-rw-r--r--tests/rustdoc/intra-doc-crate/self.rs6
-rw-r--r--tests/rustdoc/intra-doc-link-method-trait-impl-72340.rs2
-rw-r--r--tests/rustdoc/intra-doc/anchors.rs12
-rw-r--r--tests/rustdoc/intra-doc/assoc-reexport-super.rs2
-rw-r--r--tests/rustdoc/intra-doc/associated-defaults.rs8
-rw-r--r--tests/rustdoc/intra-doc/associated-items.rs18
-rw-r--r--tests/rustdoc/intra-doc/basic.rs88
-rw-r--r--tests/rustdoc/intra-doc/builtin-macros.rs4
-rw-r--r--tests/rustdoc/intra-doc/crate-relative-assoc.rs2
-rw-r--r--tests/rustdoc/intra-doc/crate-relative.rs4
-rw-r--r--tests/rustdoc/intra-doc/cross-crate/additional_doc.rs4
-rw-r--r--tests/rustdoc/intra-doc/cross-crate/basic.rs2
-rw-r--r--tests/rustdoc/intra-doc/cross-crate/crate.rs2
-rw-r--r--tests/rustdoc/intra-doc/cross-crate/hidden.rs2
-rw-r--r--tests/rustdoc/intra-doc/cross-crate/macro.rs4
-rw-r--r--tests/rustdoc/intra-doc/cross-crate/module.rs4
-rw-r--r--tests/rustdoc/intra-doc/cross-crate/submodule-inner.rs2
-rw-r--r--tests/rustdoc/intra-doc/cross-crate/submodule-outer.rs4
-rw-r--r--tests/rustdoc/intra-doc/cross-crate/traits.rs4
-rw-r--r--tests/rustdoc/intra-doc/disambiguators-removed.rs34
-rw-r--r--tests/rustdoc/intra-doc/email-address.rs8
-rw-r--r--tests/rustdoc/intra-doc/enum-struct-field.rs2
-rw-r--r--tests/rustdoc/intra-doc/extern-crate-only-used-in-link.rs8
-rw-r--r--tests/rustdoc/intra-doc/extern-type.rs8
-rw-r--r--tests/rustdoc/intra-doc/field.rs4
-rw-r--r--tests/rustdoc/intra-doc/generic-params.rs40
-rw-r--r--tests/rustdoc/intra-doc/generic-trait-impl.rs2
-rw-r--r--tests/rustdoc/intra-doc/inherent-associated-types.rs12
-rw-r--r--tests/rustdoc/intra-doc/issue-108459.rs20
-rw-r--r--tests/rustdoc/intra-doc/issue-66159.rs2
-rw-r--r--tests/rustdoc/intra-doc/issue-82209.rs2
-rw-r--r--tests/rustdoc/intra-doc/macros-disambiguators.rs12
-rw-r--r--tests/rustdoc/intra-doc/mod-ambiguity.rs4
-rw-r--r--tests/rustdoc/intra-doc/mod-relative.rs4
-rw-r--r--tests/rustdoc/intra-doc/module-scope-name-resolution-55364.rs48
-rw-r--r--tests/rustdoc/intra-doc/nested-use.rs6
-rw-r--r--tests/rustdoc/intra-doc/no-doc-primitive.rs2
-rw-r--r--tests/rustdoc/intra-doc/non-path-primitives.rs34
-rw-r--r--tests/rustdoc/intra-doc/prim-assoc.rs2
-rw-r--r--tests/rustdoc/intra-doc/prim-associated-traits.rs36
-rw-r--r--tests/rustdoc/intra-doc/prim-methods-external-core.rs6
-rw-r--r--tests/rustdoc/intra-doc/prim-methods-local.rs6
-rw-r--r--tests/rustdoc/intra-doc/prim-methods.rs10
-rw-r--r--tests/rustdoc/intra-doc/prim-precedence.rs8
-rw-r--r--tests/rustdoc/intra-doc/prim-self.rs8
-rw-r--r--tests/rustdoc/intra-doc/primitive-disambiguators.rs4
-rw-r--r--tests/rustdoc/intra-doc/primitive-non-default-impl.rs26
-rw-r--r--tests/rustdoc/intra-doc/private.rs6
-rw-r--r--tests/rustdoc/intra-doc/proc-macro.rs18
-rw-r--r--tests/rustdoc/intra-doc/pub-use.rs10
-rw-r--r--tests/rustdoc/intra-doc/raw-ident-self.rs4
-rw-r--r--tests/rustdoc/intra-doc/reexport-additional-docs.rs10
-rw-r--r--tests/rustdoc/intra-doc/self-cache.rs4
-rw-r--r--tests/rustdoc/intra-doc/self.rs28
-rw-r--r--tests/rustdoc/intra-doc/trait-impl.rs6
-rw-r--r--tests/rustdoc/intra-doc/trait-item.rs4
-rw-r--r--tests/rustdoc/intra-doc/true-false.rs6
-rw-r--r--tests/rustdoc/intra-doc/type-alias.rs4
-rw-r--r--tests/rustdoc/issue-100204-inline-impl-through-glob-import.rs4
-rw-r--r--tests/rustdoc/issue-101743-bold-tag.rs2
-rw-r--r--tests/rustdoc/issue-105735-overlapping-reexport-2.rs12
-rw-r--r--tests/rustdoc/issue-105735-overlapping-reexport.rs12
-rw-r--r--tests/rustdoc/issue-105952.rs4
-rw-r--r--tests/rustdoc/issue-106142.rs4
-rw-r--r--tests/rustdoc/issue-106421-not-internal.rs2
-rw-r--r--tests/rustdoc/issue-106421.rs2
-rw-r--r--tests/rustdoc/issue-107350.rs2
-rw-r--r--tests/rustdoc/issue-107995.rs18
-rw-r--r--tests/rustdoc/issue-108231.rs6
-rw-r--r--tests/rustdoc/issue-108281.rs8
-rw-r--r--tests/rustdoc/issue-108679-reexport-of-reexport.rs24
-rw-r--r--tests/rustdoc/issue-108925.rs8
-rw-r--r--tests/rustdoc/issue-108931-anonymous-reexport.rs12
-rw-r--r--tests/rustdoc/issue-109258-missing-private-inlining.rs24
-rw-r--r--tests/rustdoc/issue-109449-doc-hidden-reexports.rs100
-rw-r--r--tests/rustdoc/issue-109695-crate-doc-hidden.rs4
-rw-r--r--tests/rustdoc/issue-110422-inner-private.rs48
-rw-r--r--tests/rustdoc/issue-110629-private-type-cycle.rs4
-rw-r--r--tests/rustdoc/issue-111064-reexport-trait-from-hidden-2.rs24
-rw-r--r--tests/rustdoc/issue-111064-reexport-trait-from-hidden.rs8
-rw-r--r--tests/rustdoc/issue-111249-file-creation.rs28
-rw-r--r--tests/rustdoc/issue-113982-doc_auto_cfg-reexport-foreign.rs8
-rw-r--r--tests/rustdoc/issue-115295-macro-const-display.rs18
-rw-r--r--tests/rustdoc/issue-118180-empty-tuple-struct.rs8
-rw-r--r--tests/rustdoc/issue-99221-multiple-macro-rules-w-same-name.rs2
-rw-r--r--tests/rustdoc/issue-99221-multiple-structs-w-same-name.rs2
-rw-r--r--tests/rustdoc/issue-99734-multiple-foreigns-w-same-name.rs2
-rw-r--r--tests/rustdoc/issue-99734-multiple-mods-w-same-name.rs2
-rw-r--r--tests/rustdoc/item-desc-list-at-start.rs8
-rw-r--r--tests/rustdoc/jump-to-def-doc-links-calls.rs10
-rw-r--r--tests/rustdoc/jump-to-def-doc-links.rs18
-rw-r--r--tests/rustdoc/jump-to-def-macro.rs4
-rw-r--r--tests/rustdoc/jump-to-non-local-method.rs24
-rw-r--r--tests/rustdoc/keyword.rs24
-rw-r--r--tests/rustdoc/legacy-const-generic.rs8
-rw-r--r--tests/rustdoc/lifetime-name.rs4
-rw-r--r--tests/rustdoc/line-breaks.rs6
-rw-r--r--tests/rustdoc/link-assoc-const.rs4
-rw-r--r--tests/rustdoc/link-extern-crate-33178.rs8
-rw-r--r--tests/rustdoc/link-extern-crate-item-30109.rs2
-rw-r--r--tests/rustdoc/link-extern-crate-title-33178.rs6
-rw-r--r--tests/rustdoc/link-title-escape.rs2
-rw-r--r--tests/rustdoc/links-in-headings.rs8
-rw-r--r--tests/rustdoc/local-reexport-doc.rs4
-rw-r--r--tests/rustdoc/logo-class-default.rs4
-rw-r--r--tests/rustdoc/logo-class-rust.rs2
-rw-r--r--tests/rustdoc/logo-class.rs4
-rw-r--r--tests/rustdoc/macro-doc-comment-23812.rs20
-rw-r--r--tests/rustdoc/macro-document-private-duplicate.rs8
-rw-r--r--tests/rustdoc/macro-document-private.rs4
-rw-r--r--tests/rustdoc/macro-generated-macro.rs16
-rw-r--r--tests/rustdoc/macro-higher-kinded-function.rs10
-rw-r--r--tests/rustdoc/macro-indirect-use.rs4
-rw-r--r--tests/rustdoc/macro-private-not-documented.rs8
-rw-r--r--tests/rustdoc/macro_pub_in_module.rs52
-rw-r--r--tests/rustdoc/macro_rules-matchers.rs38
-rw-r--r--tests/rustdoc/macros.rs16
-rw-r--r--tests/rustdoc/manual_impl.rs42
-rw-r--r--tests/rustdoc/markdown-table-escape-pipe-27862.rs2
-rw-r--r--tests/rustdoc/masked.rs16
-rw-r--r--tests/rustdoc/method-anchor-in-blanket-impl-86620.rs4
-rw-r--r--tests/rustdoc/method-link-foreign-trait-impl-17476.rs2
-rw-r--r--tests/rustdoc/method-list.rs6
-rw-r--r--tests/rustdoc/mixing-doc-comments-and-attrs.rs12
-rw-r--r--tests/rustdoc/module-impls.rs2
-rw-r--r--tests/rustdoc/multiple-import-levels.rs12
-rw-r--r--tests/rustdoc/multiple-macro-rules-w-same-name-submodule-99221.rs2
-rw-r--r--tests/rustdoc/multiple-mods-w-same-name-doc-inline-83375.rs4
-rw-r--r--tests/rustdoc/multiple-mods-w-same-name-doc-inline-last-item-83375.rs4
-rw-r--r--tests/rustdoc/must_implement_one_of.rs2
-rw-r--r--tests/rustdoc/mut-params.rs8
-rw-r--r--tests/rustdoc/namespaces.rs8
-rw-r--r--tests/rustdoc/negative-impl-sidebar.rs6
-rw-r--r--tests/rustdoc/negative-impl.rs8
-rw-r--r--tests/rustdoc/nested-items-issue-111415.rs24
-rw-r--r--tests/rustdoc/nested-modules.rs32
-rw-r--r--tests/rustdoc/no-compiler-reexport.rs4
-rw-r--r--tests/rustdoc/no-unit-struct-field.rs8
-rw-r--r--tests/rustdoc/no_std-primitive.rs4
-rw-r--r--tests/rustdoc/non_lifetime_binders.rs2
-rw-r--r--tests/rustdoc/normalize-assoc-item.rs20
-rw-r--r--tests/rustdoc/notable-trait/doc-notable_trait-mut_t_is_not_an_iterator.rs4
-rw-r--r--tests/rustdoc/notable-trait/doc-notable_trait-mut_t_is_not_ref_t.rs4
-rw-r--r--tests/rustdoc/notable-trait/doc-notable_trait-negative.rs8
-rw-r--r--tests/rustdoc/notable-trait/doc-notable_trait-slice.rs12
-rw-r--r--tests/rustdoc/notable-trait/doc-notable_trait.rs18
-rw-r--r--tests/rustdoc/notable-trait/doc-notable_trait_box_is_not_an_iterator.rs4
-rw-r--r--tests/rustdoc/notable-trait/notable-trait-generics.rs8
-rw-r--r--tests/rustdoc/notable-trait/spotlight-from-dependency.rs6
-rw-r--r--tests/rustdoc/nul-error.rs2
-rw-r--r--tests/rustdoc/playground-arg.rs2
-rw-r--r--tests/rustdoc/playground-empty.rs2
-rw-r--r--tests/rustdoc/playground-none.rs2
-rw-r--r--tests/rustdoc/playground-syntax-error.rs6
-rw-r--r--tests/rustdoc/playground.rs6
-rw-r--r--tests/rustdoc/primitive-link.rs10
-rw-r--r--tests/rustdoc/primitive-raw-pointer-dox-15318-3.rs2
-rw-r--r--tests/rustdoc/primitive-raw-pointer-link-15318.rs2
-rw-r--r--tests/rustdoc/primitive-raw-pointer-link-no-inlined-15318-2.rs2
-rw-r--r--tests/rustdoc/primitive-reexport.rs30
-rw-r--r--tests/rustdoc/primitive-reference.rs22
-rw-r--r--tests/rustdoc/primitive-slice-auto-trait.rs12
-rw-r--r--tests/rustdoc/primitive-tuple-auto-trait.rs14
-rw-r--r--tests/rustdoc/primitive-tuple-variadic.rs8
-rw-r--r--tests/rustdoc/primitive-unit-auto-trait.rs12
-rw-r--r--tests/rustdoc/primitive/no_std.rs4
-rw-r--r--tests/rustdoc/primitive/primitive-generic-impl.rs2
-rw-r--r--tests/rustdoc/primitive/primitive.rs24
-rw-r--r--tests/rustdoc/private-fields-tuple-struct.rs12
-rw-r--r--tests/rustdoc/private-non-local-fields-2.rs2
-rw-r--r--tests/rustdoc/private-non-local-fields.rs2
-rw-r--r--tests/rustdoc/private-type-alias.rs8
-rw-r--r--tests/rustdoc/private-use-decl-macro-47038.rs8
-rw-r--r--tests/rustdoc/proc-macro.rs66
-rw-r--r--tests/rustdoc/pub-extern-crate.rs10
-rw-r--r--tests/rustdoc/pub-method.rs10
-rw-r--r--tests/rustdoc/pub-reexport-of-pub-reexport-46506.rs18
-rw-r--r--tests/rustdoc/pub-use-extern-macros.rs12
-rw-r--r--tests/rustdoc/pub-use-root-path-95873.rs2
-rw-r--r--tests/rustdoc/public-impl-mention-private-generic-46380-2.rs4
-rw-r--r--tests/rustdoc/range-arg-pattern.rs4
-rw-r--r--tests/rustdoc/raw-ident-eliminate-r-hashtag.rs8
-rw-r--r--tests/rustdoc/read-more-unneeded.rs8
-rw-r--r--tests/rustdoc/redirect-const.rs8
-rw-r--r--tests/rustdoc/redirect-map-empty.rs2
-rw-r--r--tests/rustdoc/redirect-map.rs6
-rw-r--r--tests/rustdoc/redirect-rename.rs26
-rw-r--r--tests/rustdoc/redirect.rs36
-rw-r--r--tests/rustdoc/reexport-attr-merge.rs12
-rw-r--r--tests/rustdoc/reexport-cfg.rs10
-rw-r--r--tests/rustdoc/reexport-check.rs12
-rw-r--r--tests/rustdoc/reexport-dep-foreign-fn.rs4
-rw-r--r--tests/rustdoc/reexport-doc-hidden-inside-private.rs6
-rw-r--r--tests/rustdoc/reexport-doc-hidden.rs8
-rw-r--r--tests/rustdoc/reexport-doc.rs4
-rw-r--r--tests/rustdoc/reexport-hidden-macro.rs10
-rw-r--r--tests/rustdoc/reexport-macro.rs10
-rw-r--r--tests/rustdoc/reexport-of-doc-hidden.rs24
-rw-r--r--tests/rustdoc/reexport-stability-tags-deprecated-and-portability.rs32
-rw-r--r--tests/rustdoc/reexport-stability-tags-unstable-and-portability.rs32
-rw-r--r--tests/rustdoc/reexports-of-same-name.rs14
-rw-r--r--tests/rustdoc/reexports-priv.rs110
-rw-r--r--tests/rustdoc/reexports.rs108
-rw-r--r--tests/rustdoc/remove-duplicates.rs2
-rw-r--r--tests/rustdoc/remove-url-from-headings.rs10
-rw-r--r--tests/rustdoc/render-enum-variant-structlike-32395.rs16
-rw-r--r--tests/rustdoc/repr.rs12
-rw-r--r--tests/rustdoc/return-impl-trait.rs2
-rw-r--r--tests/rustdoc/rfc-2632-const-trait-impl.rs63
-rw-r--r--tests/rustdoc/rustc-incoherent-impls.rs8
-rw-r--r--tests/rustdoc/safe-intrinsic.rs12
-rw-r--r--tests/rustdoc/same-crate-hidden-impl-parameter.rs8
-rw-r--r--tests/rustdoc/search-index-primitive-inherent-method-23511.rs2
-rw-r--r--tests/rustdoc/search-index-summaries.rs6
-rw-r--r--tests/rustdoc/search-index.rs10
-rw-r--r--tests/rustdoc/short-docblock-codeblock.rs2
-rw-r--r--tests/rustdoc/short-docblock.rs18
-rw-r--r--tests/rustdoc/show-const-contents.rs50
-rw-r--r--tests/rustdoc/sidebar-all-page.rs22
-rw-r--r--tests/rustdoc/sidebar-items.rs60
-rw-r--r--tests/rustdoc/sidebar-link-generation.rs2
-rw-r--r--tests/rustdoc/sidebar-links-to-foreign-impl.rs14
-rw-r--r--tests/rustdoc/sidebar-trait-impl-disambiguate-78701.rs6
-rw-r--r--tests/rustdoc/sized_trait.rs12
-rw-r--r--tests/rustdoc/slice-links.rs16
-rw-r--r--tests/rustdoc/smart-punct.rs12
-rw-r--r--tests/rustdoc/smoke.rs14
-rw-r--r--tests/rustdoc/sort-53812.rs12
-rw-r--r--tests/rustdoc/sort-modules-by-appearance.rs4
-rw-r--r--tests/rustdoc/source-code-highlight.rs16
-rw-r--r--tests/rustdoc/source-file.rs2
-rw-r--r--tests/rustdoc/source-version-separator.rs14
-rw-r--r--tests/rustdoc/src-link-external-macro-26606.rs6
-rw-r--r--tests/rustdoc/src-links-auto-impls.rs14
-rw-r--r--tests/rustdoc/src-links-external.rs4
-rw-r--r--tests/rustdoc/src-links-implementor-43893.rs6
-rw-r--r--tests/rustdoc/src-links-inlined-34274.rs2
-rw-r--r--tests/rustdoc/src-links.rs40
-rw-r--r--tests/rustdoc/src-mod-path-absolute-26995.rs4
-rw-r--r--tests/rustdoc/stability.rs12
-rw-r--r--tests/rustdoc/staged-api-deprecated-unstable-32374.rs24
-rw-r--r--tests/rustdoc/staged-api-feature-issue-27759.rs8
-rw-r--r--tests/rustdoc/static-root-path.rs26
-rw-r--r--tests/rustdoc/static.rs6
-rw-r--r--tests/rustdoc/strip-block-doc-comments-stars.rs4
-rw-r--r--tests/rustdoc/strip-enum-variant.rs10
-rw-r--r--tests/rustdoc/strip-priv-imports-pass-27104.rs8
-rw-r--r--tests/rustdoc/struct-arg-pattern.rs2
-rw-r--r--tests/rustdoc/struct-field.rs6
-rw-r--r--tests/rustdoc/struct-implementations-title.rs4
-rw-r--r--tests/rustdoc/structfields.rs32
-rw-r--r--tests/rustdoc/summary-codeblock-31899.rs10
-rw-r--r--tests/rustdoc/summary-header-46377.rs2
-rw-r--r--tests/rustdoc/summary-reference-link-30366.rs2
-rw-r--r--tests/rustdoc/synthetic_auto/auto-trait-lifetimes-56822.rs4
-rw-r--r--tests/rustdoc/synthetic_auto/basic.rs10
-rw-r--r--tests/rustdoc/synthetic_auto/bounds.rs4
-rw-r--r--tests/rustdoc/synthetic_auto/complex.rs4
-rw-r--r--tests/rustdoc/synthetic_auto/crate-local.rs8
-rw-r--r--tests/rustdoc/synthetic_auto/lifetimes.rs6
-rw-r--r--tests/rustdoc/synthetic_auto/manual.rs10
-rw-r--r--tests/rustdoc/synthetic_auto/negative.rs6
-rw-r--r--tests/rustdoc/synthetic_auto/nested.rs6
-rw-r--r--tests/rustdoc/synthetic_auto/no-redundancy.rs4
-rw-r--r--tests/rustdoc/synthetic_auto/normalize-auto-trait-80233.rs4
-rw-r--r--tests/rustdoc/synthetic_auto/overflow.rs4
-rw-r--r--tests/rustdoc/synthetic_auto/project.rs6
-rw-r--r--tests/rustdoc/synthetic_auto/self-referential.rs4
-rw-r--r--tests/rustdoc/synthetic_auto/send-impl-conditional-60726.rs6
-rw-r--r--tests/rustdoc/synthetic_auto/static-region.rs4
-rw-r--r--tests/rustdoc/synthetic_auto/supertrait-bounds.rs4
-rw-r--r--tests/rustdoc/tab_title.rs24
-rw-r--r--tests/rustdoc/table-in-docblock.rs6
-rw-r--r--tests/rustdoc/task-lists.rs8
-rw-r--r--tests/rustdoc/test-lists.rs20
-rw-r--r--tests/rustdoc/test-parens.rs4
-rw-r--r--tests/rustdoc/test-strikethrough.rs8
-rw-r--r--tests/rustdoc/thread-local-src.rs4
-rw-r--r--tests/rustdoc/titles.rs40
-rw-r--r--tests/rustdoc/toggle-item-contents.rs68
-rw-r--r--tests/rustdoc/toggle-method.rs8
-rw-r--r--tests/rustdoc/toggle-trait-fn.rs18
-rw-r--r--tests/rustdoc/trait-alias-mention.rs2
-rw-r--r--tests/rustdoc/trait-impl-items-links-and-anchors.rs58
-rw-r--r--tests/rustdoc/trait-impl.rs26
-rw-r--r--tests/rustdoc/trait-implementations-duplicate-self-45584.rs12
-rw-r--r--tests/rustdoc/trait-item-info.rs6
-rw-r--r--tests/rustdoc/trait-object-safe.rs24
-rw-r--r--tests/rustdoc/trait-self-link.rs2
-rw-r--r--tests/rustdoc/trait-src-link.rs12
-rw-r--r--tests/rustdoc/trait-visibility.rs2
-rw-r--r--tests/rustdoc/trait_alias.rs28
-rw-r--r--tests/rustdoc/traits-in-bodies-private.rs4
-rw-r--r--tests/rustdoc/traits-in-bodies.rs12
-rw-r--r--tests/rustdoc/tuple-struct-fields-doc.rs36
-rw-r--r--tests/rustdoc/tuple-struct-where-clause-34928.rs2
-rw-r--r--tests/rustdoc/tuples.rs24
-rw-r--r--tests/rustdoc/type-alias/cross-crate-115718.rs12
-rw-r--r--tests/rustdoc/type-alias/deref-32077.rs38
-rw-r--r--tests/rustdoc/type-alias/primitive-local-link-121106.rs10
-rw-r--r--tests/rustdoc/type-alias/same-crate-115718.rs8
-rw-r--r--tests/rustdoc/type-layout-flag-required.rs2
-rw-r--r--tests/rustdoc/type-layout.rs76
-rw-r--r--tests/rustdoc/typedef-inner-variants-lazy_type_alias.rs32
-rw-r--r--tests/rustdoc/typedef-inner-variants.rs112
-rw-r--r--tests/rustdoc/typedef.rs14
-rw-r--r--tests/rustdoc/underscore-import-61592.rs16
-rw-r--r--tests/rustdoc/unindent.rs28
-rw-r--r--tests/rustdoc/union-fields-html.rs6
-rw-r--r--tests/rustdoc/union.rs8
-rw-r--r--tests/rustdoc/unit-return.rs8
-rw-r--r--tests/rustdoc/universal-impl-trait.rs40
-rw-r--r--tests/rustdoc/unneeded-trait-implementations-title.rs2
-rw-r--r--tests/rustdoc/unsafe-extern-blocks.rs30
-rw-r--r--tests/rustdoc/use-attr.rs4
-rw-r--r--tests/rustdoc/useless_lifetime_bound.rs8
-rw-r--r--tests/rustdoc/variadic.rs2
-rw-r--r--tests/rustdoc/version-separator-without-source.rs16
-rw-r--r--tests/rustdoc/viewpath-rename.rs12
-rw-r--r--tests/rustdoc/viewpath-self.rs12
-rw-r--r--tests/rustdoc/visibility.rs120
-rw-r--r--tests/rustdoc/where-clause-order.rs6
-rw-r--r--tests/rustdoc/where-sized.rs6
-rw-r--r--tests/rustdoc/where.rs36
-rw-r--r--tests/rustdoc/whitespace-after-where-clause.rs32
-rw-r--r--tests/rustdoc/without-redirect.rs10
-rw-r--r--tests/rustdoc/wrapping.rs4
-rw-r--r--tests/ui-fulldeps/stable-mir/check_abi.rs23
-rw-r--r--tests/ui/abi/abi-typo-unstable.stderr2
-rw-r--r--tests/ui/abi/riscv-discoverability-guidance.riscv32.stderr4
-rw-r--r--tests/ui/abi/riscv-discoverability-guidance.riscv64.stderr4
-rw-r--r--tests/ui/abi/variadic-ffi.rs8
-rw-r--r--tests/ui/asm/aarch64/may_unwind.rs2
-rw-r--r--tests/ui/asm/arm-low-dreg.rs33
-rw-r--r--tests/ui/asm/x86_64/may_unwind.rs2
-rw-r--r--tests/ui/async-await/async-is-unwindsafe.stderr5
-rw-r--r--tests/ui/attributes/dump-preds.rs20
-rw-r--r--tests/ui/attributes/dump-preds.stderr39
-rw-r--r--tests/ui/attributes/unsafe/double-unsafe-attributes.stderr12
-rw-r--r--tests/ui/c-variadic/issue-86053-1.stderr2
-rw-r--r--tests/ui/check-cfg/mix.stderr2
-rw-r--r--tests/ui/check-cfg/well-known-values.stderr2
-rw-r--r--tests/ui/closures/2229_closure_analysis/migrations/auto_traits.stderr4
-rw-r--r--tests/ui/closures/2229_closure_analysis/migrations/multi_diagnostics.stderr2
-rw-r--r--tests/ui/codegen/issue-82833-slice-miscompile.rs2
-rw-r--r--tests/ui/codemap_tests/unicode.normal.stderr2
-rw-r--r--tests/ui/coherence/occurs-check/associated-type.next.stderr8
-rw-r--r--tests/ui/coherence/occurs-check/associated-type.old.stderr16
-rw-r--r--tests/ui/const-generics/const_trait_fn-issue-88433.rs2
-rw-r--r--tests/ui/const-generics/const_trait_fn-issue-88433.stderr11
-rw-r--r--tests/ui/const-generics/defaults/doesnt_infer.rs1
-rw-r--r--tests/ui/const-generics/defaults/doesnt_infer.stderr31
-rw-r--r--tests/ui/const-generics/defaults/rp_impl_trait_fail.stderr9
-rw-r--r--tests/ui/const-generics/generic_arg_infer/issue-91614.rs1
-rw-r--r--tests/ui/const-generics/generic_arg_infer/issue-91614.stderr30
-rw-r--r--tests/ui/const-generics/generic_const_exprs/issue-62504.full.stderr33
-rw-r--r--tests/ui/const-generics/generic_const_exprs/issue-62504.min.stderr33
-rw-r--r--tests/ui/const-generics/generic_const_exprs/issue-62504.rs1
-rw-r--r--tests/ui/const-generics/generic_const_exprs/object-safety-ok-infer-err.rs1
-rw-r--r--tests/ui/const-generics/generic_const_exprs/object-safety-ok-infer-err.stderr29
-rw-r--r--tests/ui/const-generics/infer/cannot-infer-const-args.stderr9
-rw-r--r--tests/ui/const-generics/infer/issue-77092.rs5
-rw-r--r--tests/ui/const-generics/infer/issue-77092.stderr29
-rw-r--r--tests/ui/const-generics/infer/method-chain.stderr9
-rw-r--r--tests/ui/const-generics/infer/one-param-uninferred.stderr9
-rw-r--r--tests/ui/const-generics/infer/uninferred-consts.rs1
-rw-r--r--tests/ui/const-generics/infer/uninferred-consts.stderr27
-rw-r--r--tests/ui/const-generics/mistyped_const_in_pat.rs (renamed from tests/crashes/125799.rs)4
-rw-r--r--tests/ui/const-generics/mistyped_const_in_pat.stderr12
-rw-r--r--tests/ui/const-generics/parent_generics_of_encoding_impl_trait.stderr6
-rw-r--r--tests/ui/const-generics/type_mismatch.stderr4
-rw-r--r--tests/ui/const-generics/unify_with_nested_expr.stderr9
-rw-r--r--tests/ui/consts/auxiliary/closure-in-foreign-crate.rs2
-rw-r--r--tests/ui/consts/const-block-const-bound.stderr8
-rw-r--r--tests/ui/consts/const-blocks/fn-call-in-non-const.stderr8
-rw-r--r--tests/ui/consts/const-blocks/trait-error.stderr11
-rw-r--r--tests/ui/consts/const-eval/issue-91827-extern-types-field-offset.stderr2
-rw-r--r--tests/ui/consts/const-eval/unwind-abort.rs2
-rw-r--r--tests/ui/consts/const-eval/validation-ice-extern-type-field.rs15
-rw-r--r--tests/ui/consts/const-eval/validation-ice-extern-type-field.stderr9
-rw-r--r--tests/ui/consts/const-float-classify.rs3
-rw-r--r--tests/ui/consts/const-float-classify.stderr223
-rw-r--r--tests/ui/consts/const-fn-in-vec.stderr33
-rw-r--r--tests/ui/consts/const_cmp_type_id.stderr31
-rw-r--r--tests/ui/consts/const_in_pattern/f16-f128-const-reassign.rs14
-rw-r--r--tests/ui/consts/fn_trait_refs.stderr32
-rw-r--r--tests/ui/consts/rustc-impl-const-stability.stderr11
-rw-r--r--tests/ui/consts/unwind-abort.rs2
-rw-r--r--tests/ui/coverage-attr/bad-syntax.rs39
-rw-r--r--tests/ui/coverage-attr/bad-syntax.stderr137
-rw-r--r--tests/ui/coverage-attr/name-value.rs69
-rw-r--r--tests/ui/coverage-attr/name-value.stderr277
-rw-r--r--tests/ui/coverage-attr/no-coverage.rs30
-rw-r--r--tests/ui/coverage-attr/no-coverage.stderr103
-rw-r--r--tests/ui/coverage-attr/subword.rs19
-rw-r--r--tests/ui/coverage-attr/subword.stderr54
-rw-r--r--tests/ui/coverage-attr/word-only.rs69
-rw-r--r--tests/ui/coverage-attr/word-only.stderr277
-rw-r--r--tests/ui/delegation/glob-traitless-qpath.rs11
-rw-r--r--tests/ui/delegation/glob-traitless-qpath.stderr14
-rw-r--r--tests/ui/deprecation/deprecated_inline_threshold.rs4
-rw-r--r--tests/ui/deprecation/deprecated_inline_threshold.stderr2
-rw-r--r--tests/ui/deriving/deriving-smart-pointer.rs55
-rw-r--r--tests/ui/error-codes/E0116.stderr2
-rw-r--r--tests/ui/error-codes/E0519.stderr2
-rw-r--r--tests/ui/feature-gates/feature-gate-derive-smart-pointer.rs9
-rw-r--r--tests/ui/feature-gates/feature-gate-derive-smart-pointer.stderr33
-rw-r--r--tests/ui/feature-gates/feature-gate-unsafe-extern-blocks.rs8
-rw-r--r--tests/ui/feature-gates/feature-gate-unsafe-extern-blocks.stderr13
-rw-r--r--tests/ui/feature-gates/issue-43106-gating-of-builtin-attrs.stderr4
-rw-r--r--tests/ui/half-open-range-patterns/half-open-range-pats-semantics.rs78
-rw-r--r--tests/ui/half-open-range-patterns/half-open-range-pats-thir-lower-empty.rs1
-rw-r--r--tests/ui/half-open-range-patterns/half-open-range-pats-thir-lower-empty.stderr6
-rw-r--r--tests/ui/higher-ranked/structually-relate-aliases.stderr4
-rw-r--r--tests/ui/higher-ranked/trait-bounds/normalize-under-binder/norm-before-method-resolution-opaque-type.next.stderr9
-rw-r--r--tests/ui/higher-ranked/trait-bounds/normalize-under-binder/norm-before-method-resolution-opaque-type.old.stderr36
-rw-r--r--tests/ui/higher-ranked/trait-bounds/normalize-under-binder/norm-before-method-resolution-opaque-type.rs29
-rw-r--r--tests/ui/higher-ranked/trait-bounds/normalize-under-binder/norm-before-method-resolution.rs12
-rw-r--r--tests/ui/impl-trait/lazy_subtyping_of_opaques.rs67
-rw-r--r--tests/ui/impl-trait/lazy_subtyping_of_opaques.stderr21
-rw-r--r--tests/ui/impl-trait/normalize-tait-in-const.stderr8
-rw-r--r--tests/ui/impl-trait/upvar_captures.rs16
-rw-r--r--tests/ui/impl-trait/upvar_captures.stderr14
-rw-r--r--tests/ui/imports/issue-59764.stderr2
-rw-r--r--tests/ui/incoherent-inherent-impls/no-attr-empty-impl.stderr8
-rw-r--r--tests/ui/inference/issue-83606.stderr11
-rw-r--r--tests/ui/instrument-coverage/mcdc-condition-limit.bad.stderr2
-rw-r--r--tests/ui/instrument-coverage/mcdc-condition-limit.rs2
-rw-r--r--tests/ui/intrinsics/not-overridden.rs2
-rw-r--r--tests/ui/intrinsics/safe-intrinsic-mismatch.rs4
-rw-r--r--tests/ui/intrinsics/safe-intrinsic-mismatch.stderr11
-rw-r--r--tests/ui/issues/issue-22644.stderr2
-rw-r--r--tests/ui/issues/issue-57271.stderr2
-rw-r--r--tests/ui/issues/issue-98299.rs2
-rw-r--r--tests/ui/issues/issue-98299.stderr55
-rw-r--r--tests/ui/let-else/let-else-if.stderr2
-rw-r--r--tests/ui/lifetimes/no_lending_iterators.stderr2
-rw-r--r--tests/ui/lifetimes/tail-expr-lock-poisoning.rs1
-rw-r--r--tests/ui/lint/dead-code/tuple-struct-field.rs31
-rw-r--r--tests/ui/lint/dead-code/tuple-struct-field.stderr37
-rw-r--r--tests/ui/lint/dead-code/unused-variant.rs15
-rw-r--r--tests/ui/lint/dead-code/unused-variant.stderr22
-rw-r--r--tests/ui/lint/expect-future_breakage-crash-issue-126521.rs23
-rw-r--r--tests/ui/lint/expect-future_breakage-crash-issue-126521.stderr23
-rw-r--r--tests/ui/lint/lint-attr-everywhere-late.stderr22
-rw-r--r--tests/ui/lint/lint-enum-intrinsics-non-enums.stderr18
-rw-r--r--tests/ui/lint/non-local-defs/cargo-update.stderr2
-rw-r--r--tests/ui/lint/non-local-defs/consts.stderr8
-rw-r--r--tests/ui/lint/suggestions.stderr5
-rw-r--r--tests/ui/loops/loop-else-break-with-value.stderr2
-rw-r--r--tests/ui/macros/auxiliary/expr_2021_implicit.rs9
-rw-r--r--tests/ui/macros/expr_2021_implicit_in_2024.rs12
-rw-r--r--tests/ui/macros/expr_2021_old_edition.rs13
-rw-r--r--tests/ui/macros/expr_2021_old_edition.stderr26
-rw-r--r--tests/ui/match/match-float.rs45
-rw-r--r--tests/ui/mir/issue-83499-input-output-iteration-ice.rs2
-rw-r--r--tests/ui/mir/issue-83499-input-output-iteration-ice.stderr2
-rw-r--r--tests/ui/mismatched_types/mismatched-types-issue-126222.fixed34
-rw-r--r--tests/ui/mismatched_types/mismatched-types-issue-126222.rs34
-rw-r--r--tests/ui/mismatched_types/mismatched-types-issue-126222.stderr51
-rw-r--r--tests/ui/moves/nested-loop-moved-value-wrong-continue.stderr4
-rw-r--r--tests/ui/object-safety/assoc_type_bounds_sized_unnecessary.stderr2
-rw-r--r--tests/ui/or-patterns/bindings-runpass-2.rs1
-rw-r--r--tests/ui/or-patterns/inner-or-pat.or3.stderr2
-rw-r--r--tests/ui/or-patterns/inner-or-pat.or4.stderr2
-rw-r--r--tests/ui/or-patterns/inner-or-pat.rs4
-rw-r--r--tests/ui/or-patterns/issue-70413-no-unreachable-pat-and-guard.rs21
-rw-r--r--tests/ui/or-patterns/search-via-bindings.rs22
-rw-r--r--tests/ui/or-patterns/simplification_subtleties.rs11
-rw-r--r--tests/ui/panics/abort-on-panic.rs1
-rw-r--r--tests/ui/panics/panic-in-ffi.rs1
-rw-r--r--tests/ui/panics/panic-in-ffi.run.stderr2
-rw-r--r--tests/ui/parser/attribute/attr-stmt-expr-attr-bad.rs4
-rw-r--r--tests/ui/parser/attribute/attr-stmt-expr-attr-bad.stderr8
-rw-r--r--tests/ui/parser/diff-markers/enum-2.stderr19
-rw-r--r--tests/ui/parser/diff-markers/enum.stderr17
-rw-r--r--tests/ui/parser/diff-markers/fn-arg.stderr17
-rw-r--r--tests/ui/parser/diff-markers/item-with-attr.stderr17
-rw-r--r--tests/ui/parser/diff-markers/item.stderr17
-rw-r--r--tests/ui/parser/diff-markers/statement.stderr17
-rw-r--r--tests/ui/parser/diff-markers/struct-expr.stderr17
-rw-r--r--tests/ui/parser/diff-markers/struct.stderr17
-rw-r--r--tests/ui/parser/diff-markers/trait-item.stderr17
-rw-r--r--tests/ui/parser/diff-markers/tuple-struct.stderr17
-rw-r--r--tests/ui/parser/diff-markers/unclosed-delims-in-macro.stderr17
-rw-r--r--tests/ui/parser/diff-markers/unclosed-delims.rs10
-rw-r--r--tests/ui/parser/diff-markers/unclosed-delims.stderr17
-rw-r--r--tests/ui/parser/diff-markers/use-statement.stderr17
-rw-r--r--tests/ui/parser/fn-header-semantic-fail.stderr18
-rw-r--r--tests/ui/parser/impls-nested-within-fns-semantic-1.rs2
-rw-r--r--tests/ui/parser/impls-nested-within-fns-semantic-1.stderr11
-rw-r--r--tests/ui/parser/issues/issue-8537.stderr2
-rw-r--r--tests/ui/parser/no-const-fn-in-extern-block.stderr12
-rw-r--r--tests/ui/parser/recover/recover-labeled-non-block-expr.stderr2
-rw-r--r--tests/ui/parser/variadic-ffi-semantic-restrictions.rs42
-rw-r--r--tests/ui/parser/variadic-ffi-semantic-restrictions.stderr42
-rw-r--r--tests/ui/pattern/usefulness/floats.rs48
-rw-r--r--tests/ui/pattern/usefulness/floats.stderr72
-rw-r--r--tests/ui/proc-macro/expr-stmt-nonterminal-tokens.stdout27
-rw-r--r--tests/ui/resolve/path-attr-in-const-block.rs9
-rw-r--r--tests/ui/resolve/path-attr-in-const-block.stderr8
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/assoc-type-const-bound-usage-0.qualified.stderr11
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/assoc-type-const-bound-usage-0.rs2
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/assoc-type-const-bound-usage-0.unqualified.stderr11
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/assoc-type.rs2
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/assoc-type.stderr11
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/auxiliary/cross-crate.rs2
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/auxiliary/staged-api.rs2
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/call-const-trait-method-fail.rs2
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/call-const-trait-method-fail.stderr11
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-in-impl.rs3
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-in-impl.stderr8
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-chain.rs3
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-chain.stderr71
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-dup-bound.rs3
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-dup-bound.stderr85
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-fail.rs6
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-fail.stderr15
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-nonconst.rs2
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-nonconst.stderr11
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-pass.rs3
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-pass.stderr65
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/const-and-non-const-impl.stderr18
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/const-bounds-non-const-trait.rs2
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/const-bounds-non-const-trait.stderr11
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/const-check-fns-in-const-impl.rs2
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/const-check-fns-in-const-impl.stderr11
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/const-default-method-bodies.rs2
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/const-default-method-bodies.stderr11
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/const-drop-bound.stderr20
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/const-drop-fail-2.stderr8
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/const-drop-fail.precise.stderr8
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/const-drop-fail.stock.stderr8
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/const-drop.precise.stderr8
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/const-drop.stock.stderr8
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/const-fns-are-early-bound.rs2
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/const-fns-are-early-bound.stderr11
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/const-impl-requires-const-trait.stderr11
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/const-impl-trait.stderr256
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/const-trait-bounds-trait-objects.rs2
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/const-trait-bounds-trait-objects.stderr11
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/const_derives/derive-const-non-const-type.stderr11
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/const_derives/derive-const-use.stderr111
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/const_derives/derive-const-with-params.rs3
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/const_derives/derive-const-with-params.stderr49
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/cross-crate-default-method-body-is-const.rs2
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/cross-crate-default-method-body-is-const.stderr11
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/cross-crate.gated.stderr11
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/cross-crate.gatednc.stderr13
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/cross-crate.rs1
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/cross-crate.stock.stderr2
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/cross-crate.stocknc.stderr4
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/default-method-body-is-const-same-trait-ck.rs2
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/default-method-body-is-const-same-trait-ck.stderr11
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/do-not-const-check-override.rs2
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/do-not-const-check-override.stderr11
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/effects/auxiliary/cross-crate.rs2
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/effects/effect-param-infer.rs2
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/effects/effect-param-infer.stderr11
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/effects/fallback.rs2
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/effects/fallback.stderr11
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/effects/helloworld.rs7
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/effects/helloworld.stderr11
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/effects/ice-112822-expected-type-for-param.rs5
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/effects/ice-112822-expected-type-for-param.stderr56
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/effects/infer-fallback.rs2
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/effects/infer-fallback.stderr11
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/effects/minicore.rs4
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/effects/minicore.stderr18
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/effects/no-explicit-const-params.rs2
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/effects/no-explicit-const-params.stderr11
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/effects/project.stderr11
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/effects/span-bug-issue-121418.rs2
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/effects/span-bug-issue-121418.stderr11
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/effects/spec-effectvar-ice.rs2
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/effects/spec-effectvar-ice.stderr11
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/effects/trait-fn-const.rs2
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/effects/trait-fn-const.stderr11
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/hir-const-check.rs2
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/hir-const-check.stderr11
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/ice-120503-async-const-method.rs18
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/ice-120503-async-const-method.stderr101
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/ice-121536-const-method.rs17
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/ice-121536-const-method.stderr28
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/issue-79450.rs2
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/issue-79450.stderr11
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/issue-92111.stderr8
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/specialization/const-default-const-specialized.rs2
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/specialization/const-default-const-specialized.stderr11
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/specialization/const-default-impl-non-const-specialized-impl.rs2
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/specialization/const-default-impl-non-const-specialized-impl.stderr11
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/specialization/non-const-default-const-specialized.stderr11
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/specializing-constness-2.stderr11
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/specializing-constness.rs2
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/specializing-constness.stderr11
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/staged-api.rs2
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/staged-api.stable.stderr11
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/staged-api.unstable.stderr11
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-2.nn.stderr11
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-2.ny.stderr11
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-2.rs2
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-2.yn.stderr11
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-2.yy.stderr11
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-3.nn.stderr11
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-3.ny.stderr11
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-3.rs2
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-3.yn.stderr11
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-3.yy.stderr11
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits.rs2
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits.stderr11
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/tilde-const-assoc-fn-in-trait-impl.rs2
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/tilde-const-assoc-fn-in-trait-impl.stderr11
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/tilde-const-inherent-assoc-const-fn.rs2
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/tilde-const-inherent-assoc-const-fn.stderr11
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/tilde-const-trait-assoc-tys.rs2
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/tilde-const-trait-assoc-tys.stderr11
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/trait-default-body-stability.stderr101
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/trait-where-clause-const.stderr11
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/trait-where-clause-run.rs2
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/trait-where-clause-run.stderr11
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/trait-where-clause-self-referential.rs2
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/trait-where-clause-self-referential.stderr11
-rw-r--r--tests/ui/rust-2024/safe-outside-extern.gated.stderr32
-rw-r--r--tests/ui/rust-2024/safe-outside-extern.rs28
-rw-r--r--tests/ui/rust-2024/safe-outside-extern.ungated.stderr83
-rw-r--r--tests/ui/rust-2024/unsafe-attributes/in_2024_compatibility.rs9
-rw-r--r--tests/ui/rust-2024/unsafe-attributes/in_2024_compatibility.stderr21
-rw-r--r--tests/ui/rust-2024/unsafe-attributes/unsafe-attribute-marked.rs12
-rw-r--r--tests/ui/rust-2024/unsafe-attributes/unsafe-attributes-fix.fixed61
-rw-r--r--tests/ui/rust-2024/unsafe-attributes/unsafe-attributes-fix.rs61
-rw-r--r--tests/ui/rust-2024/unsafe-attributes/unsafe-attributes-fix.stderr93
-rw-r--r--tests/ui/rust-2024/unsafe-attributes/unsafe-attributes.edition2024.stderr13
-rw-r--r--tests/ui/rust-2024/unsafe-attributes/unsafe-attributes.rs12
-rw-r--r--tests/ui/sized/ensure-overriding-bindings-in-pattern-with-ty-err-doesnt-ice.rs1
-rw-r--r--tests/ui/sized/ensure-overriding-bindings-in-pattern-with-ty-err-doesnt-ice.stderr15
-rw-r--r--tests/ui/sized/stack-overflow-trait-infer-98842.32bit.stderr6
-rw-r--r--tests/ui/sized/stack-overflow-trait-infer-98842.64bit.stderr6
-rw-r--r--tests/ui/sized/stack-overflow-trait-infer-98842.rs2
-rw-r--r--tests/ui/sized/stack-overflow-trait-infer-98842.stderr25
-rw-r--r--tests/ui/span/recursive-type-field.stderr2
-rw-r--r--tests/ui/specialization/default-proj-ty-as-type-of-const-issue-125757.stderr4
-rw-r--r--tests/ui/stability-attribute/missing-const-stability.rs2
-rw-r--r--tests/ui/stability-attribute/missing-const-stability.stderr11
-rw-r--r--tests/ui/suggestions/abi-typo.stderr2
-rw-r--r--tests/ui/suggestions/issue-68049-2.stderr2
-rw-r--r--tests/ui/tool-attributes/duplicate-diagnostic.stderr8
-rw-r--r--tests/ui/traits/item-privacy.stderr15
-rw-r--r--tests/ui/traits/next-solver/canonical/effect-var.rs2
-rw-r--r--tests/ui/traits/next-solver/canonical/effect-var.stderr11
-rw-r--r--tests/ui/traits/next-solver/issue-118950-root-region.stderr8
-rw-r--r--tests/ui/traits/trait-or-new-type-instead.stderr2
-rw-r--r--tests/ui/transmutability/issue-101739-1.stderr2
-rw-r--r--tests/ui/try-trait/try-operator-on-main.stderr2
-rw-r--r--tests/ui/type-alias-impl-trait/different_args_considered_equal.rs14
-rw-r--r--tests/ui/type-alias-impl-trait/different_args_considered_equal.stderr15
-rw-r--r--tests/ui/type-alias-impl-trait/different_args_considered_equal2.rs14
-rw-r--r--tests/ui/type-alias-impl-trait/different_args_considered_equal2.stderr20
-rw-r--r--tests/ui/type-alias-impl-trait/different_args_considered_equal3.rs22
-rw-r--r--tests/ui/type-alias-impl-trait/different_args_considered_equal3.stderr10
-rw-r--r--tests/ui/type-alias-impl-trait/lazy_subtyping_of_opaques.rs3
-rw-r--r--tests/ui/type-alias-impl-trait/lazy_subtyping_of_opaques.stderr31
-rw-r--r--tests/ui/ufcs/ufcs-qpath-self-mismatch.stderr26
-rw-r--r--tests/ui/unboxed-closures/unboxed-closure-sugar-lifetime-elision.stderr2
-rw-r--r--tests/ui/unwind-abis/feature-gate-c_unwind.rs4
-rw-r--r--tests/ui/where-clauses/normalization-of-unknown-type.rs (renamed from tests/crashes/123276.rs)8
-rw-r--r--tests/ui/where-clauses/normalization-of-unknown-type.stderr9
1125 files changed, 11969 insertions, 6228 deletions
diff --git a/tests/assembly/asm/aarch64-modifiers.rs b/tests/assembly/asm/aarch64-modifiers.rs
index ffba06ae47b..b7ef1d77ea0 100644
--- a/tests/assembly/asm/aarch64-modifiers.rs
+++ b/tests/assembly/asm/aarch64-modifiers.rs
@@ -1,5 +1,5 @@
 //@ assembly-output: emit-asm
-//@ compile-flags: -O
+//@ compile-flags: -O -C panic=abort
 //@ compile-flags: --target aarch64-unknown-linux-gnu
 //@ needs-llvm-components: aarch64
 
diff --git a/tests/assembly/asm/arm-modifiers.rs b/tests/assembly/asm/arm-modifiers.rs
index fa2e75eb35b..0674e169d72 100644
--- a/tests/assembly/asm/arm-modifiers.rs
+++ b/tests/assembly/asm/arm-modifiers.rs
@@ -1,5 +1,5 @@
 //@ assembly-output: emit-asm
-//@ compile-flags: -O
+//@ compile-flags: -O -C panic=abort
 //@ compile-flags: --target armv7-unknown-linux-gnueabihf
 //@ compile-flags: -C target-feature=+neon
 //@ needs-llvm-components: arm
diff --git a/tests/assembly/asm/arm-types.rs b/tests/assembly/asm/arm-types.rs
index 280b6d4a228..eeff1a070b4 100644
--- a/tests/assembly/asm/arm-types.rs
+++ b/tests/assembly/asm/arm-types.rs
@@ -1,10 +1,13 @@
+//@ revisions: base d32 neon
 //@ assembly-output: emit-asm
 //@ compile-flags: --target armv7-unknown-linux-gnueabihf
-//@ compile-flags: -C target-feature=+neon
 //@ compile-flags: -C opt-level=0
+//@[d32] compile-flags: -C target-feature=+d32
+//@[neon] compile-flags: -C target-feature=+neon --cfg d32
+//@[neon] filecheck-flags: --check-prefix d32
 //@ needs-llvm-components: arm
 
-#![feature(no_core, lang_items, rustc_attrs, repr_simd)]
+#![feature(no_core, lang_items, rustc_attrs, repr_simd, f16)]
 #![crate_type = "rlib"]
 #![no_core]
 #![allow(asm_sub_register, non_camel_case_types)]
@@ -38,6 +41,8 @@ pub struct i32x2(i32, i32);
 #[repr(simd)]
 pub struct i64x1(i64);
 #[repr(simd)]
+pub struct f16x4(f16, f16, f16, f16);
+#[repr(simd)]
 pub struct f32x2(f32, f32);
 #[repr(simd)]
 pub struct i8x16(i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8);
@@ -48,11 +53,14 @@ pub struct i32x4(i32, i32, i32, i32);
 #[repr(simd)]
 pub struct i64x2(i64, i64);
 #[repr(simd)]
+pub struct f16x8(f16, f16, f16, f16, f16, f16, f16, f16);
+#[repr(simd)]
 pub struct f32x4(f32, f32, f32, f32);
 
 impl Copy for i8 {}
 impl Copy for i16 {}
 impl Copy for i32 {}
+impl Copy for f16 {}
 impl Copy for f32 {}
 impl Copy for i64 {}
 impl Copy for f64 {}
@@ -61,11 +69,13 @@ impl Copy for i8x8 {}
 impl Copy for i16x4 {}
 impl Copy for i32x2 {}
 impl Copy for i64x1 {}
+impl Copy for f16x4 {}
 impl Copy for f32x2 {}
 impl Copy for i8x16 {}
 impl Copy for i16x8 {}
 impl Copy for i32x4 {}
 impl Copy for i64x2 {}
+impl Copy for f16x8 {}
 impl Copy for f32x4 {}
 
 extern "C" {
@@ -152,6 +162,12 @@ check!(reg_i16 i16 reg "mov");
 // CHECK: @NO_APP
 check!(reg_i32 i32 reg "mov");
 
+// CHECK-LABEL: reg_f16:
+// CHECK: @APP
+// CHECK: mov {{[a-z0-9]+}}, {{[a-z0-9]+}}
+// CHECK: @NO_APP
+check!(reg_f16 f16 reg "mov");
+
 // CHECK-LABEL: reg_f32:
 // CHECK: @APP
 // CHECK: mov {{[a-z0-9]+}}, {{[a-z0-9]+}}
@@ -170,6 +186,12 @@ check!(reg_ptr ptr reg "mov");
 // CHECK: @NO_APP
 check!(sreg_i32 i32 sreg "vmov.f32");
 
+// CHECK-LABEL: sreg_f16:
+// CHECK: @APP
+// CHECK: vmov.f32 s{{[0-9]+}}, s{{[0-9]+}}
+// CHECK: @NO_APP
+check!(sreg_f16 f16 sreg "vmov.f32");
+
 // CHECK-LABEL: sreg_f32:
 // CHECK: @APP
 // CHECK: vmov.f32 s{{[0-9]+}}, s{{[0-9]+}}
@@ -188,52 +210,72 @@ check!(sreg_ptr ptr sreg "vmov.f32");
 // CHECK: @NO_APP
 check!(sreg_low16_i32 i32 sreg_low16 "vmov.f32");
 
-// CHECK-LABEL: sreg_low16_f32:
+// CHECK-LABEL: sreg_low16_f16:
 // CHECK: @APP
 // CHECK: vmov.f32 s{{[0-9]+}}, s{{[0-9]+}}
 // CHECK: @NO_APP
-check!(sreg_low16_f32 f32 sreg_low16 "vmov.f32");
+check!(sreg_low16_f16 f16 sreg_low16 "vmov.f32");
 
-// CHECK-LABEL: dreg_i64:
+// CHECK-LABEL: sreg_low16_f32:
 // CHECK: @APP
-// CHECK: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
+// CHECK: vmov.f32 s{{[0-9]+}}, s{{[0-9]+}}
 // CHECK: @NO_APP
+check!(sreg_low16_f32 f32 sreg_low16 "vmov.f32");
+
+// d32-LABEL: dreg_i64:
+// d32: @APP
+// d32: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
+// d32: @NO_APP
+#[cfg(d32)]
 check!(dreg_i64 i64 dreg "vmov.f64");
 
-// CHECK-LABEL: dreg_f64:
-// CHECK: @APP
-// CHECK: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
-// CHECK: @NO_APP
+// d32-LABEL: dreg_f64:
+// d32: @APP
+// d32: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
+// d32: @NO_APP
+#[cfg(d32)]
 check!(dreg_f64 f64 dreg "vmov.f64");
 
-// CHECK-LABEL: dreg_i8x8:
-// CHECK: @APP
-// CHECK: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
-// CHECK: @NO_APP
+// neon-LABEL: dreg_i8x8:
+// neon: @APP
+// neon: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
+// neon: @NO_APP
+#[cfg(neon)]
 check!(dreg_i8x8 i8x8 dreg "vmov.f64");
 
-// CHECK-LABEL: dreg_i16x4:
-// CHECK: @APP
-// CHECK: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
-// CHECK: @NO_APP
+// neon-LABEL: dreg_i16x4:
+// neon: @APP
+// neon: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
+// neon: @NO_APP
+#[cfg(neon)]
 check!(dreg_i16x4 i16x4 dreg "vmov.f64");
 
-// CHECK-LABEL: dreg_i32x2:
-// CHECK: @APP
-// CHECK: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
-// CHECK: @NO_APP
+// neon-LABEL: dreg_i32x2:
+// neon: @APP
+// neon: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
+// neon: @NO_APP
+#[cfg(neon)]
 check!(dreg_i32x2 i32x2 dreg "vmov.f64");
 
-// CHECK-LABEL: dreg_i64x1:
-// CHECK: @APP
-// CHECK: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
-// CHECK: @NO_APP
+// neon-LABEL: dreg_i64x1:
+// neon: @APP
+// neon: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
+// neon: @NO_APP
+#[cfg(neon)]
 check!(dreg_i64x1 i64x1 dreg "vmov.f64");
 
-// CHECK-LABEL: dreg_f32x2:
-// CHECK: @APP
-// CHECK: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
-// CHECK: @NO_APP
+// neon-LABEL: dreg_f16x4:
+// neon: @APP
+// neon: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
+// neon: @NO_APP
+#[cfg(neon)]
+check!(dreg_f16x4 f16x4 dreg "vmov.f64");
+
+// neon-LABEL: dreg_f32x2:
+// neon: @APP
+// neon: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
+// neon: @NO_APP
+#[cfg(neon)]
 check!(dreg_f32x2 f32x2 dreg "vmov.f64");
 
 // CHECK-LABEL: dreg_low16_i64:
@@ -248,34 +290,46 @@ check!(dreg_low16_i64 i64 dreg_low16 "vmov.f64");
 // CHECK: @NO_APP
 check!(dreg_low16_f64 f64 dreg_low16 "vmov.f64");
 
-// CHECK-LABEL: dreg_low16_i8x8:
-// CHECK: @APP
-// CHECK: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
-// CHECK: @NO_APP
+// neon-LABEL: dreg_low16_i8x8:
+// neon: @APP
+// neon: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
+// neon: @NO_APP
+#[cfg(neon)]
 check!(dreg_low16_i8x8 i8x8 dreg_low16 "vmov.f64");
 
-// CHECK-LABEL: dreg_low16_i16x4:
-// CHECK: @APP
-// CHECK: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
-// CHECK: @NO_APP
+// neon-LABEL: dreg_low16_i16x4:
+// neon: @APP
+// neon: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
+// neon: @NO_APP
+#[cfg(neon)]
 check!(dreg_low16_i16x4 i16x4 dreg_low16 "vmov.f64");
 
-// CHECK-LABEL: dreg_low16_i32x2:
-// CHECK: @APP
-// CHECK: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
-// CHECK: @NO_APP
+// neon-LABEL: dreg_low16_i32x2:
+// neon: @APP
+// neon: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
+// neon: @NO_APP
+#[cfg(neon)]
 check!(dreg_low16_i32x2 i32x2 dreg_low16 "vmov.f64");
 
-// CHECK-LABEL: dreg_low16_i64x1:
-// CHECK: @APP
-// CHECK: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
-// CHECK: @NO_APP
+// neon-LABEL: dreg_low16_i64x1:
+// neon: @APP
+// neon: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
+// neon: @NO_APP
+#[cfg(neon)]
 check!(dreg_low16_i64x1 i64x1 dreg_low16 "vmov.f64");
 
-// CHECK-LABEL: dreg_low16_f32x2:
-// CHECK: @APP
-// CHECK: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
-// CHECK: @NO_APP
+// neon-LABEL: dreg_low16_f16x4:
+// neon: @APP
+// neon: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
+// neon: @NO_APP
+#[cfg(neon)]
+check!(dreg_low16_f16x4 f16x4 dreg_low16 "vmov.f64");
+
+// neon-LABEL: dreg_low16_f32x2:
+// neon: @APP
+// neon: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
+// neon: @NO_APP
+#[cfg(neon)]
 check!(dreg_low16_f32x2 f32x2 dreg_low16 "vmov.f64");
 
 // CHECK-LABEL: dreg_low8_i64:
@@ -290,124 +344,172 @@ check!(dreg_low8_i64 i64 dreg_low8 "vmov.f64");
 // CHECK: @NO_APP
 check!(dreg_low8_f64 f64 dreg_low8 "vmov.f64");
 
-// CHECK-LABEL: dreg_low8_i8x8:
-// CHECK: @APP
-// CHECK: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
-// CHECK: @NO_APP
+// neon-LABEL: dreg_low8_i8x8:
+// neon: @APP
+// neon: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
+// neon: @NO_APP
+#[cfg(neon)]
 check!(dreg_low8_i8x8 i8x8 dreg_low8 "vmov.f64");
 
-// CHECK-LABEL: dreg_low8_i16x4:
-// CHECK: @APP
-// CHECK: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
-// CHECK: @NO_APP
+// neon-LABEL: dreg_low8_i16x4:
+// neon: @APP
+// neon: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
+// neon: @NO_APP
+#[cfg(neon)]
 check!(dreg_low8_i16x4 i16x4 dreg_low8 "vmov.f64");
 
-// CHECK-LABEL: dreg_low8_i32x2:
-// CHECK: @APP
-// CHECK: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
-// CHECK: @NO_APP
+// neon-LABEL: dreg_low8_i32x2:
+// neon: @APP
+// neon: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
+// neon: @NO_APP
+#[cfg(neon)]
 check!(dreg_low8_i32x2 i32x2 dreg_low8 "vmov.f64");
 
-// CHECK-LABEL: dreg_low8_i64x1:
-// CHECK: @APP
-// CHECK: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
-// CHECK: @NO_APP
+// neon-LABEL: dreg_low8_i64x1:
+// neon: @APP
+// neon: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
+// neon: @NO_APP
+#[cfg(neon)]
 check!(dreg_low8_i64x1 i64x1 dreg_low8 "vmov.f64");
 
-// CHECK-LABEL: dreg_low8_f32x2:
-// CHECK: @APP
-// CHECK: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
-// CHECK: @NO_APP
+// neon-LABEL: dreg_low8_f16x4:
+// neon: @APP
+// neon: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
+// neon: @NO_APP
+#[cfg(neon)]
+check!(dreg_low8_f16x4 f16x4 dreg_low8 "vmov.f64");
+
+// neon-LABEL: dreg_low8_f32x2:
+// neon: @APP
+// neon: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
+// neon: @NO_APP
+#[cfg(neon)]
 check!(dreg_low8_f32x2 f32x2 dreg_low8 "vmov.f64");
 
-// CHECK-LABEL: qreg_i8x16:
-// CHECK: @APP
-// CHECK: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
-// CHECK: @NO_APP
+// neon-LABEL: qreg_i8x16:
+// neon: @APP
+// neon: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
+// neon: @NO_APP
+#[cfg(neon)]
 check!(qreg_i8x16 i8x16 qreg "vmov");
 
-// CHECK-LABEL: qreg_i16x8:
-// CHECK: @APP
-// CHECK: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
-// CHECK: @NO_APP
+// neon-LABEL: qreg_i16x8:
+// neon: @APP
+// neon: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
+// neon: @NO_APP
+#[cfg(neon)]
 check!(qreg_i16x8 i16x8 qreg "vmov");
 
-// CHECK-LABEL: qreg_i32x4:
-// CHECK: @APP
-// CHECK: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
-// CHECK: @NO_APP
+// neon-LABEL: qreg_i32x4:
+// neon: @APP
+// neon: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
+// neon: @NO_APP
+#[cfg(neon)]
 check!(qreg_i32x4 i32x4 qreg "vmov");
 
-// CHECK-LABEL: qreg_i64x2:
-// CHECK: @APP
-// CHECK: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
-// CHECK: @NO_APP
+// neon-LABEL: qreg_i64x2:
+// neon: @APP
+// neon: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
+// neon: @NO_APP
+#[cfg(neon)]
 check!(qreg_i64x2 i64x2 qreg "vmov");
 
-// CHECK-LABEL: qreg_f32x4:
-// CHECK: @APP
-// CHECK: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
-// CHECK: @NO_APP
+// neon-LABEL: qreg_f16x8:
+// neon: @APP
+// neon: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
+// neon: @NO_APP
+#[cfg(neon)]
+check!(qreg_f16x8 f16x8 qreg "vmov");
+
+// neon-LABEL: qreg_f32x4:
+// neon: @APP
+// neon: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
+// neon: @NO_APP
+#[cfg(neon)]
 check!(qreg_f32x4 f32x4 qreg "vmov");
 
-// CHECK-LABEL: qreg_low8_i8x16:
-// CHECK: @APP
-// CHECK: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
-// CHECK: @NO_APP
+// neon-LABEL: qreg_low8_i8x16:
+// neon: @APP
+// neon: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
+// neon: @NO_APP
+#[cfg(neon)]
 check!(qreg_low8_i8x16 i8x16 qreg_low8 "vmov");
 
-// CHECK-LABEL: qreg_low8_i16x8:
-// CHECK: @APP
-// CHECK: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
-// CHECK: @NO_APP
+// neon-LABEL: qreg_low8_i16x8:
+// neon: @APP
+// neon: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
+// neon: @NO_APP
+#[cfg(neon)]
 check!(qreg_low8_i16x8 i16x8 qreg_low8 "vmov");
 
-// CHECK-LABEL: qreg_low8_i32x4:
-// CHECK: @APP
-// CHECK: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
-// CHECK: @NO_APP
+// neon-LABEL: qreg_low8_i32x4:
+// neon: @APP
+// neon: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
+// neon: @NO_APP
+#[cfg(neon)]
 check!(qreg_low8_i32x4 i32x4 qreg_low8 "vmov");
 
-// CHECK-LABEL: qreg_low8_i64x2:
-// CHECK: @APP
-// CHECK: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
-// CHECK: @NO_APP
+// neon-LABEL: qreg_low8_i64x2:
+// neon: @APP
+// neon: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
+// neon: @NO_APP
+#[cfg(neon)]
 check!(qreg_low8_i64x2 i64x2 qreg_low8 "vmov");
 
-// CHECK-LABEL: qreg_low8_f32x4:
-// CHECK: @APP
-// CHECK: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
-// CHECK: @NO_APP
+// neon-LABEL: qreg_low8_f16x8:
+// neon: @APP
+// neon: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
+// neon: @NO_APP
+#[cfg(neon)]
+check!(qreg_low8_f16x8 f16x8 qreg_low8 "vmov");
+
+// neon-LABEL: qreg_low8_f32x4:
+// neon: @APP
+// neon: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
+// neon: @NO_APP
+#[cfg(neon)]
 check!(qreg_low8_f32x4 f32x4 qreg_low8 "vmov");
 
-// CHECK-LABEL: qreg_low4_i8x16:
-// CHECK: @APP
-// CHECK: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
-// CHECK: @NO_APP
+// neon-LABEL: qreg_low4_i8x16:
+// neon: @APP
+// neon: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
+// neon: @NO_APP
+#[cfg(neon)]
 check!(qreg_low4_i8x16 i8x16 qreg_low4 "vmov");
 
-// CHECK-LABEL: qreg_low4_i16x8:
-// CHECK: @APP
-// CHECK: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
-// CHECK: @NO_APP
+// neon-LABEL: qreg_low4_i16x8:
+// neon: @APP
+// neon: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
+// neon: @NO_APP
+#[cfg(neon)]
 check!(qreg_low4_i16x8 i16x8 qreg_low4 "vmov");
 
-// CHECK-LABEL: qreg_low4_i32x4:
-// CHECK: @APP
-// CHECK: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
-// CHECK: @NO_APP
+// neon-LABEL: qreg_low4_i32x4:
+// neon: @APP
+// neon: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
+// neon: @NO_APP
+#[cfg(neon)]
 check!(qreg_low4_i32x4 i32x4 qreg_low4 "vmov");
 
-// CHECK-LABEL: qreg_low4_i64x2:
-// CHECK: @APP
-// CHECK: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
-// CHECK: @NO_APP
+// neon-LABEL: qreg_low4_i64x2:
+// neon: @APP
+// neon: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
+// neon: @NO_APP
+#[cfg(neon)]
 check!(qreg_low4_i64x2 i64x2 qreg_low4 "vmov");
 
-// CHECK-LABEL: qreg_low4_f32x4:
-// CHECK: @APP
-// CHECK: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
-// CHECK: @NO_APP
+// neon-LABEL: qreg_low4_f16x8:
+// neon: @APP
+// neon: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
+// neon: @NO_APP
+#[cfg(neon)]
+check!(qreg_low4_f16x8 f16x8 qreg_low4 "vmov");
+
+// neon-LABEL: qreg_low4_f32x4:
+// neon: @APP
+// neon: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
+// neon: @NO_APP
+#[cfg(neon)]
 check!(qreg_low4_f32x4 f32x4 qreg_low4 "vmov");
 
 // CHECK-LABEL: r0_i8:
@@ -428,6 +530,12 @@ check_reg!(r0_i16 i16 "r0" "mov");
 // CHECK: @NO_APP
 check_reg!(r0_i32 i32 "r0" "mov");
 
+// CHECK-LABEL: r0_f16:
+// CHECK: @APP
+// CHECK: mov r0, r0
+// CHECK: @NO_APP
+check_reg!(r0_f16 f16 "r0" "mov");
+
 // CHECK-LABEL: r0_f32:
 // CHECK: @APP
 // CHECK: mov r0, r0
@@ -446,6 +554,12 @@ check_reg!(r0_ptr ptr "r0" "mov");
 // CHECK: @NO_APP
 check_reg!(s0_i32 i32 "s0" "vmov.f32");
 
+// CHECK-LABEL: s0_f16:
+// CHECK: @APP
+// CHECK: vmov.f32 s0, s0
+// CHECK: @NO_APP
+check_reg!(s0_f16 f16 "s0" "vmov.f32");
+
 // CHECK-LABEL: s0_f32:
 // CHECK: @APP
 // CHECK: vmov.f32 s0, s0
@@ -458,74 +572,101 @@ check_reg!(s0_f32 f32 "s0" "vmov.f32");
 // CHECK: @NO_APP
 check_reg!(s0_ptr ptr "s0" "vmov.f32");
 
-// CHECK-LABEL: d0_i64:
-// CHECK: @APP
-// CHECK: vmov.f64 d0, d0
-// CHECK: @NO_APP
+// FIXME(#126797): "d0" should work with `i64` and `f64` even when `d32` is disabled.
+// d32-LABEL: d0_i64:
+// d32: @APP
+// d32: vmov.f64 d0, d0
+// d32: @NO_APP
+#[cfg(d32)]
 check_reg!(d0_i64 i64 "d0" "vmov.f64");
 
-// CHECK-LABEL: d0_f64:
-// CHECK: @APP
-// CHECK: vmov.f64 d0, d0
-// CHECK: @NO_APP
+// d32-LABEL: d0_f64:
+// d32: @APP
+// d32: vmov.f64 d0, d0
+// d32: @NO_APP
+#[cfg(d32)]
 check_reg!(d0_f64 f64 "d0" "vmov.f64");
 
-// CHECK-LABEL: d0_i8x8:
-// CHECK: @APP
-// CHECK: vmov.f64 d0, d0
-// CHECK: @NO_APP
+// neon-LABEL: d0_i8x8:
+// neon: @APP
+// neon: vmov.f64 d0, d0
+// neon: @NO_APP
+#[cfg(neon)]
 check_reg!(d0_i8x8 i8x8 "d0" "vmov.f64");
 
-// CHECK-LABEL: d0_i16x4:
-// CHECK: @APP
-// CHECK: vmov.f64 d0, d0
-// CHECK: @NO_APP
+// neon-LABEL: d0_i16x4:
+// neon: @APP
+// neon: vmov.f64 d0, d0
+// neon: @NO_APP
+#[cfg(neon)]
 check_reg!(d0_i16x4 i16x4 "d0" "vmov.f64");
 
-// CHECK-LABEL: d0_i32x2:
-// CHECK: @APP
-// CHECK: vmov.f64 d0, d0
-// CHECK: @NO_APP
+// neon-LABEL: d0_i32x2:
+// neon: @APP
+// neon: vmov.f64 d0, d0
+// neon: @NO_APP
+#[cfg(neon)]
 check_reg!(d0_i32x2 i32x2 "d0" "vmov.f64");
 
-// CHECK-LABEL: d0_i64x1:
-// CHECK: @APP
-// CHECK: vmov.f64 d0, d0
-// CHECK: @NO_APP
+// neon-LABEL: d0_i64x1:
+// neon: @APP
+// neon: vmov.f64 d0, d0
+// neon: @NO_APP
+#[cfg(neon)]
 check_reg!(d0_i64x1 i64x1 "d0" "vmov.f64");
 
-// CHECK-LABEL: d0_f32x2:
-// CHECK: @APP
-// CHECK: vmov.f64 d0, d0
-// CHECK: @NO_APP
+// neon-LABEL: d0_f16x4:
+// neon: @APP
+// neon: vmov.f64 d0, d0
+// neon: @NO_APP
+#[cfg(neon)]
+check_reg!(d0_f16x4 f16x4 "d0" "vmov.f64");
+
+// neon-LABEL: d0_f32x2:
+// neon: @APP
+// neon: vmov.f64 d0, d0
+// neon: @NO_APP
+#[cfg(neon)]
 check_reg!(d0_f32x2 f32x2 "d0" "vmov.f64");
 
-// CHECK-LABEL: q0_i8x16:
-// CHECK: @APP
-// CHECK: vorr q0, q0, q0
-// CHECK: @NO_APP
+// neon-LABEL: q0_i8x16:
+// neon: @APP
+// neon: vorr q0, q0, q0
+// neon: @NO_APP
+#[cfg(neon)]
 check_reg!(q0_i8x16 i8x16 "q0" "vmov");
 
-// CHECK-LABEL: q0_i16x8:
-// CHECK: @APP
-// CHECK: vorr q0, q0, q0
-// CHECK: @NO_APP
+// neon-LABEL: q0_i16x8:
+// neon: @APP
+// neon: vorr q0, q0, q0
+// neon: @NO_APP
+#[cfg(neon)]
 check_reg!(q0_i16x8 i16x8 "q0" "vmov");
 
-// CHECK-LABEL: q0_i32x4:
-// CHECK: @APP
-// CHECK: vorr q0, q0, q0
-// CHECK: @NO_APP
+// neon-LABEL: q0_i32x4:
+// neon: @APP
+// neon: vorr q0, q0, q0
+// neon: @NO_APP
+#[cfg(neon)]
 check_reg!(q0_i32x4 i32x4 "q0" "vmov");
 
-// CHECK-LABEL: q0_i64x2:
-// CHECK: @APP
-// CHECK: vorr q0, q0, q0
-// CHECK: @NO_APP
+// neon-LABEL: q0_i64x2:
+// neon: @APP
+// neon: vorr q0, q0, q0
+// neon: @NO_APP
+#[cfg(neon)]
 check_reg!(q0_i64x2 i64x2 "q0" "vmov");
 
-// CHECK-LABEL: q0_f32x4:
-// CHECK: @APP
-// CHECK: vorr q0, q0, q0
-// CHECK: @NO_APP
+// neon-LABEL: q0_f16x8:
+// neon: @APP
+// neon: vorr q0, q0, q0
+// neon: @NO_APP
+#[cfg(neon)]
+check_reg!(q0_f16x8 f16x8 "q0" "vmov");
+
+// neon-LABEL: q0_f32x4:
+// neon: @APP
+// neon: vorr q0, q0, q0
+// neon: @NO_APP
+#[cfg(neon)]
 check_reg!(q0_f32x4 f32x4 "q0" "vmov");
diff --git a/tests/assembly/asm/riscv-types.rs b/tests/assembly/asm/riscv-types.rs
index 0d1f8305d37..51b3aaf99d9 100644
--- a/tests/assembly/asm/riscv-types.rs
+++ b/tests/assembly/asm/riscv-types.rs
@@ -1,12 +1,34 @@
-//@ revisions: riscv64 riscv32
+//@ revisions: riscv64 riscv32 riscv64-zfhmin riscv32-zfhmin riscv64-zfh riscv32-zfh
 //@ assembly-output: emit-asm
+
 //@[riscv64] compile-flags: --target riscv64imac-unknown-none-elf
 //@[riscv64] needs-llvm-components: riscv
+
 //@[riscv32] compile-flags: --target riscv32imac-unknown-none-elf
 //@[riscv32] needs-llvm-components: riscv
+
+//@[riscv64-zfhmin] compile-flags: --target riscv64imac-unknown-none-elf --cfg riscv64
+//@[riscv64-zfhmin] needs-llvm-components: riscv
+//@[riscv64-zfhmin] compile-flags: -C target-feature=+zfhmin
+//@[riscv64-zfhmin] filecheck-flags: --check-prefix riscv64
+
+//@[riscv32-zfhmin] compile-flags: --target riscv32imac-unknown-none-elf
+//@[riscv32-zfhmin] needs-llvm-components: riscv
+//@[riscv32-zfhmin] compile-flags: -C target-feature=+zfhmin
+
+//@[riscv64-zfh] compile-flags: --target riscv64imac-unknown-none-elf --cfg riscv64
+//@[riscv64-zfh] needs-llvm-components: riscv
+//@[riscv64-zfh] compile-flags: -C target-feature=+zfh
+//@[riscv64-zfh] filecheck-flags: --check-prefix riscv64 --check-prefix zfhmin
+
+//@[riscv32-zfh] compile-flags: --target riscv32imac-unknown-none-elf
+//@[riscv32-zfh] needs-llvm-components: riscv
+//@[riscv32-zfh] compile-flags: -C target-feature=+zfh
+//@[riscv32-zfh] filecheck-flags: --check-prefix zfhmin
+
 //@ compile-flags: -C target-feature=+d
 
-#![feature(no_core, lang_items, rustc_attrs)]
+#![feature(no_core, lang_items, rustc_attrs, f16)]
 #![crate_type = "rlib"]
 #![no_core]
 #![allow(asm_sub_register)]
@@ -33,6 +55,7 @@ type ptr = *mut u8;
 
 impl Copy for i8 {}
 impl Copy for i16 {}
+impl Copy for f16 {}
 impl Copy for i32 {}
 impl Copy for f32 {}
 impl Copy for i64 {}
@@ -103,6 +126,12 @@ macro_rules! check_reg {
 // CHECK: #NO_APP
 check!(reg_i8 i8 reg "mv");
 
+// CHECK-LABEL: reg_f16:
+// CHECK: #APP
+// CHECK: mv {{[a-z0-9]+}}, {{[a-z0-9]+}}
+// CHECK: #NO_APP
+check!(reg_f16 f16 reg "mv");
+
 // CHECK-LABEL: reg_i16:
 // CHECK: #APP
 // CHECK: mv {{[a-z0-9]+}}, {{[a-z0-9]+}}
@@ -141,6 +170,14 @@ check!(reg_f64 f64 reg "mv");
 // CHECK: #NO_APP
 check!(reg_ptr ptr reg "mv");
 
+// CHECK-LABEL: freg_f16:
+// zfhmin-NOT: or
+// CHECK: #APP
+// CHECK: fmv.s f{{[a-z0-9]+}}, f{{[a-z0-9]+}}
+// CHECK: #NO_APP
+// zfhmin-NOT: or
+check!(freg_f16 f16 freg "fmv.s");
+
 // CHECK-LABEL: freg_f32:
 // CHECK: #APP
 // CHECK: fmv.s f{{[a-z0-9]+}}, f{{[a-z0-9]+}}
@@ -165,6 +202,12 @@ check_reg!(a0_i8 i8 "a0" "mv");
 // CHECK: #NO_APP
 check_reg!(a0_i16 i16 "a0" "mv");
 
+// CHECK-LABEL: a0_f16:
+// CHECK: #APP
+// CHECK: mv a0, a0
+// CHECK: #NO_APP
+check_reg!(a0_f16 f16 "a0" "mv");
+
 // CHECK-LABEL: a0_i32:
 // CHECK: #APP
 // CHECK: mv a0, a0
@@ -197,6 +240,14 @@ check_reg!(a0_f64 f64 "a0" "mv");
 // CHECK: #NO_APP
 check_reg!(a0_ptr ptr "a0" "mv");
 
+// CHECK-LABEL: fa0_f16:
+// zfhmin-NOT: or
+// CHECK: #APP
+// CHECK: fmv.s fa0, fa0
+// CHECK: #NO_APP
+// zfhmin-NOT: or
+check_reg!(fa0_f16 f16 "fa0" "fmv.s");
+
 // CHECK-LABEL: fa0_f32:
 // CHECK: #APP
 // CHECK: fmv.s fa0, fa0
diff --git a/tests/assembly/asm/x86-modifiers.rs b/tests/assembly/asm/x86-modifiers.rs
index 1a92585298d..c5e393b1056 100644
--- a/tests/assembly/asm/x86-modifiers.rs
+++ b/tests/assembly/asm/x86-modifiers.rs
@@ -1,6 +1,6 @@
 //@ revisions: x86_64 i686
 //@ assembly-output: emit-asm
-//@ compile-flags: -O
+//@ compile-flags: -O -C panic=abort
 //@[x86_64] compile-flags: --target x86_64-unknown-linux-gnu
 //@[x86_64] needs-llvm-components: x86
 //@[i686] compile-flags: --target i686-unknown-linux-gnu
diff --git a/tests/assembly/simd-bitmask.rs b/tests/assembly/simd-bitmask.rs
index 8264a706852..cd22ca06706 100644
--- a/tests/assembly/simd-bitmask.rs
+++ b/tests/assembly/simd-bitmask.rs
@@ -11,7 +11,7 @@
 //@ [aarch64] needs-llvm-components: aarch64
 //@ [aarch64] min-llvm-version: 18.0
 //@ assembly-output: emit-asm
-//@ compile-flags: --crate-type=lib -O
+//@ compile-flags: --crate-type=lib -O -C panic=abort
 
 #![feature(no_core, lang_items, repr_simd, intrinsics)]
 #![no_core]
diff --git a/tests/assembly/simd-intrinsic-gather.rs b/tests/assembly/simd-intrinsic-gather.rs
index ef6b597c25f..83015f05ab3 100644
--- a/tests/assembly/simd-intrinsic-gather.rs
+++ b/tests/assembly/simd-intrinsic-gather.rs
@@ -4,7 +4,7 @@
 //@ [x86-avx512] needs-llvm-components: x86
 //@ [x86-avx512] min-llvm-version: 18.0
 //@ assembly-output: emit-asm
-//@ compile-flags: --crate-type=lib -O
+//@ compile-flags: --crate-type=lib -O -C panic=abort
 
 #![feature(no_core, lang_items, repr_simd, intrinsics)]
 #![no_core]
diff --git a/tests/assembly/simd-intrinsic-mask-load.rs b/tests/assembly/simd-intrinsic-mask-load.rs
index 49d231c45f8..d537c143d36 100644
--- a/tests/assembly/simd-intrinsic-mask-load.rs
+++ b/tests/assembly/simd-intrinsic-mask-load.rs
@@ -6,7 +6,7 @@
 //@ [x86-avx512] compile-flags: -C target-feature=+avx512f,+avx512vl,+avx512bw,+avx512dq
 //@ [x86-avx512] needs-llvm-components: x86
 //@ assembly-output: emit-asm
-//@ compile-flags: --crate-type=lib -O
+//@ compile-flags: --crate-type=lib -O -C panic=abort
 
 #![feature(no_core, lang_items, repr_simd, intrinsics)]
 #![no_core]
diff --git a/tests/assembly/simd-intrinsic-mask-reduce.rs b/tests/assembly/simd-intrinsic-mask-reduce.rs
index 72c3f6376e8..dd4dbaeda76 100644
--- a/tests/assembly/simd-intrinsic-mask-reduce.rs
+++ b/tests/assembly/simd-intrinsic-mask-reduce.rs
@@ -8,7 +8,7 @@
 //@ [aarch64] needs-llvm-components: aarch64
 //@ [aarch64] min-llvm-version: 18.0
 //@ assembly-output: emit-asm
-//@ compile-flags: --crate-type=lib -O
+//@ compile-flags: --crate-type=lib -O -C panic=abort
 
 #![feature(no_core, lang_items, repr_simd, intrinsics)]
 #![no_core]
diff --git a/tests/assembly/simd-intrinsic-mask-store.rs b/tests/assembly/simd-intrinsic-mask-store.rs
index a6611e1c23d..5d4c00c3823 100644
--- a/tests/assembly/simd-intrinsic-mask-store.rs
+++ b/tests/assembly/simd-intrinsic-mask-store.rs
@@ -6,7 +6,7 @@
 //@ [x86-avx512] compile-flags: -C target-feature=+avx512f,+avx512vl,+avx512bw,+avx512dq
 //@ [x86-avx512] needs-llvm-components: x86
 //@ assembly-output: emit-asm
-//@ compile-flags: --crate-type=lib -O
+//@ compile-flags: --crate-type=lib -O -C panic=abort
 
 #![feature(no_core, lang_items, repr_simd, intrinsics)]
 #![no_core]
diff --git a/tests/assembly/simd-intrinsic-scatter.rs b/tests/assembly/simd-intrinsic-scatter.rs
index 6ffefb0801a..55095e4cb68 100644
--- a/tests/assembly/simd-intrinsic-scatter.rs
+++ b/tests/assembly/simd-intrinsic-scatter.rs
@@ -4,7 +4,7 @@
 //@ [x86-avx512] needs-llvm-components: x86
 //@ [x86-avx512] min-llvm-version: 18.0
 //@ assembly-output: emit-asm
-//@ compile-flags: --crate-type=lib -O
+//@ compile-flags: --crate-type=lib -O -C panic=abort
 
 #![feature(no_core, lang_items, repr_simd, intrinsics)]
 #![no_core]
diff --git a/tests/assembly/simd-intrinsic-select.rs b/tests/assembly/simd-intrinsic-select.rs
index 3f36402e3d0..4dfc2f9ed1f 100644
--- a/tests/assembly/simd-intrinsic-select.rs
+++ b/tests/assembly/simd-intrinsic-select.rs
@@ -9,7 +9,7 @@
 //@ [aarch64] needs-llvm-components: aarch64
 //@ [aarch64] min-llvm-version: 18.0
 //@ assembly-output: emit-asm
-//@ compile-flags: --crate-type=lib -O
+//@ compile-flags: --crate-type=lib -O -C panic=abort
 
 #![feature(no_core, lang_items, repr_simd, intrinsics)]
 #![no_core]
diff --git a/tests/assembly/targets/targets-elf.rs b/tests/assembly/targets/targets-elf.rs
index b069e667bf5..32cce3839dc 100644
--- a/tests/assembly/targets/targets-elf.rs
+++ b/tests/assembly/targets/targets-elf.rs
@@ -581,12 +581,21 @@
     revisions: xtensa_esp32_none_elf
     [xtensa_esp32_none_elf] compile-flags: --target xtensa-esp32-none-elf
     [xtensa_esp32_none_elf] needs-llvm-components: xtensa
+    revisions: xtensa_esp32_espidf
+    [xtensa_esp32_espidf] compile-flags: --target xtensa-esp32s2-espidf
+    [xtensa_esp32_espidf] needs-llvm-components: xtensa
     revisions: xtensa_esp32s2_none_elf
     [xtensa_esp32s2_none_elf] compile-flags: --target xtensa-esp32s2-none-elf
     [xtensa_esp32s2_none_elf] needs-llvm-components: xtensa
+    revisions: xtensa_esp32s2_espidf
+    [xtensa_esp32s2_espidf] compile-flags: --target xtensa-esp32s2-espidf
+    [xtensa_esp32s2_espidf] needs-llvm-components: xtensa
     revisions: xtensa_esp32s3_none_elf
     [xtensa_esp32s3_none_elf] compile-flags: --target xtensa-esp32s3-none-elf
     [xtensa_esp32s3_none_elf] needs-llvm-components: xtensa
+    revisions: xtensa_esp32s3_espidf
+    [xtensa_esp32s3_espidf] compile-flags: --target xtensa-esp32s3-espidf
+    [xtensa_esp32s3_espidf] needs-llvm-components: xtensa
 */
 // Sanity-check that each target can produce assembly code.
 
diff --git a/tests/assembly/wasm_exceptions.rs b/tests/assembly/wasm_exceptions.rs
index 7bdf7f1287c..f05ccfadc58 100644
--- a/tests/assembly/wasm_exceptions.rs
+++ b/tests/assembly/wasm_exceptions.rs
@@ -6,12 +6,12 @@
 
 #![crate_type = "lib"]
 #![feature(core_intrinsics)]
-#![feature(rustc_attrs)]
 
-extern "C" {
+extern "C-unwind" {
     fn may_panic();
+}
 
-    #[rustc_nounwind]
+extern "C" {
     fn log_number(number: usize);
 }
 
diff --git a/tests/codegen/align-byval-alignment-mismatch.rs b/tests/codegen/align-byval-alignment-mismatch.rs
index 71f2dd42ec2..835cc7393e5 100644
--- a/tests/codegen/align-byval-alignment-mismatch.rs
+++ b/tests/codegen/align-byval-alignment-mismatch.rs
@@ -1,9 +1,9 @@
 // ignore-tidy-linelength
 //@ revisions:i686-linux x86_64-linux
 
-//@[i686-linux] compile-flags: --target i686-unknown-linux-gnu
+//@[i686-linux] compile-flags: --target i686-unknown-linux-gnu -C panic=abort
 //@[i686-linux] needs-llvm-components: x86
-//@[x86_64-linux] compile-flags: --target x86_64-unknown-linux-gnu
+//@[x86_64-linux] compile-flags: --target x86_64-unknown-linux-gnu -C panic=abort
 //@[x86_64-linux] needs-llvm-components: x86
 
 // Tests that we correctly copy arguments into allocas when the alignment of the byval argument
diff --git a/tests/codegen/array-repeat.rs b/tests/codegen/array-repeat.rs
new file mode 100644
index 00000000000..b6f3b2e83d3
--- /dev/null
+++ b/tests/codegen/array-repeat.rs
@@ -0,0 +1,15 @@
+//@ compile-flags: -O
+
+#![crate_type = "lib"]
+#![feature(array_repeat)]
+
+use std::array::repeat;
+
+// CHECK-LABEL: @byte_repeat
+#[no_mangle]
+fn byte_repeat(b: u8) -> [u8; 1024] {
+    // CHECK-NOT: alloca
+    // CHECK-NOT: store
+    // CHECK: memset
+    repeat(b)
+}
diff --git a/tests/codegen/avr/avr-func-addrspace.rs b/tests/codegen/avr/avr-func-addrspace.rs
index 2d9efb52c7c..70834707564 100644
--- a/tests/codegen/avr/avr-func-addrspace.rs
+++ b/tests/codegen/avr/avr-func-addrspace.rs
@@ -1,4 +1,4 @@
-//@ compile-flags: -O --target=avr-unknown-gnu-atmega328 --crate-type=rlib
+//@ compile-flags: -O --target=avr-unknown-gnu-atmega328 --crate-type=rlib -C panic=abort
 //@ needs-llvm-components: avr
 
 // This test validates that function pointers can be stored in global variables
diff --git a/tests/codegen/catch-unwind.rs b/tests/codegen/catch-unwind.rs
index 4e1f9a88e95..48ad486fa03 100644
--- a/tests/codegen/catch-unwind.rs
+++ b/tests/codegen/catch-unwind.rs
@@ -14,7 +14,6 @@
 //@ ignore-loongarch64 FIXME
 
 #![crate_type = "lib"]
-#![feature(c_unwind)]
 
 extern "C" {
     fn bar();
diff --git a/tests/codegen/cffi/c-variadic.rs b/tests/codegen/cffi/c-variadic.rs
index 914d1623ed2..140d2f37f46 100644
--- a/tests/codegen/cffi/c-variadic.rs
+++ b/tests/codegen/cffi/c-variadic.rs
@@ -4,7 +4,6 @@
 
 #![crate_type = "lib"]
 #![feature(c_variadic)]
-#![feature(c_unwind)]
 #![no_std]
 use core::ffi::VaList;
 
diff --git a/tests/codegen/checked_math.rs b/tests/codegen/checked_math.rs
index 41016e3b7be..75df5866d6e 100644
--- a/tests/codegen/checked_math.rs
+++ b/tests/codegen/checked_math.rs
@@ -84,3 +84,17 @@ pub fn checked_shr_signed(a: i32, b: u32) -> Option<i32> {
     // CHECK: ret { i32, i32 } %[[R1]]
     a.checked_shr(b)
 }
+
+// CHECK-LABEL: @checked_add_one_unwrap_unsigned
+// CHECK-SAME: (i32 noundef %x)
+#[no_mangle]
+pub fn checked_add_one_unwrap_unsigned(x: u32) -> u32 {
+    // CHECK: %[[IS_MAX:.+]] = icmp eq i32 %x, -1
+    // CHECK: br i1 %[[IS_MAX]], label %[[NONE_BB:.+]], label %[[SOME_BB:.+]]
+    // CHECK: [[SOME_BB]]:
+    // CHECK: %[[R:.+]] = add nuw i32 %x, 1
+    // CHECK: ret i32 %[[R]]
+    // CHECK: [[NONE_BB]]:
+    // CHECK: call {{.+}}unwrap_failed
+    x.checked_add(1).unwrap()
+}
diff --git a/tests/codegen/debuginfo-inline-callsite-location.rs b/tests/codegen/debuginfo-inline-callsite-location.rs
index f690c9c0937..aee07b4eb8c 100644
--- a/tests/codegen/debuginfo-inline-callsite-location.rs
+++ b/tests/codegen/debuginfo-inline-callsite-location.rs
@@ -1,4 +1,4 @@
-//@ compile-flags: -g -O
+//@ compile-flags: -g -O -C panic=abort
 
 // Check that each inline call site for the same function uses the same "sub-program" so that LLVM
 // can correctly merge the debug info if it merges the inlined code (e.g., for merging of tail
diff --git a/tests/codegen/force-frame-pointers.rs b/tests/codegen/force-frame-pointers.rs
index 84e0bcb39ad..88c918945d6 100644
--- a/tests/codegen/force-frame-pointers.rs
+++ b/tests/codegen/force-frame-pointers.rs
@@ -1,6 +1,18 @@
-//@ compile-flags: -C no-prepopulate-passes -C force-frame-pointers=y -Copt-level=0
+//@ revisions: Always NonLeaf
+//@ [Always] compile-flags: -Cforce-frame-pointers=yes
+//@ [NonLeaf] compile-flags: -Cforce-frame-pointers=non-leaf
+//@ compile-flags: -Zunstable-options
+//@ compile-flags: -C no-prepopulate-passes -Copt-level=0
+//@ [NonLeaf] ignore-illumos
+//@ [NonLeaf] ignore-openbsd
+//@ [NonLeaf] ignore-x86
+//@ [NonLeaf] ignore-x86_64-apple-darwin
+//@ [NonLeaf] ignore-windows-gnu
+//@ [NonLeaf] ignore-thumb
+// result is platform-dependent based on platform's frame pointer settings
 
 #![crate_type = "lib"]
 
-// CHECK: attributes #{{.*}} "frame-pointer"="all"
+// Always: attributes #{{.*}} "frame-pointer"="all"
+// NonLeaf: attributes #{{.*}} "frame-pointer"="non-leaf"
 pub fn foo() {}
diff --git a/tests/codegen/issues/issue-112509-slice-get-andthen-get.rs b/tests/codegen/issues/issue-112509-slice-get-andthen-get.rs
index ae02c3fb79e..aee2edd8dfa 100644
--- a/tests/codegen/issues/issue-112509-slice-get-andthen-get.rs
+++ b/tests/codegen/issues/issue-112509-slice-get-andthen-get.rs
@@ -3,8 +3,12 @@
 
 // CHECK-LABEL: @write_u8_variant_a
 // CHECK-NEXT: {{.*}}:
-// CHECK-NEXT: getelementptr
 // CHECK-NEXT: icmp ugt
+// CHECK-NEXT: getelementptr
+// CHECK-NEXT: select i1 {{.+}} null
+// CHECK-NEXT: insertvalue
+// CHECK-NEXT: insertvalue
+// CHECK-NEXT: ret
 #[no_mangle]
 pub fn write_u8_variant_a(bytes: &mut [u8], buf: u8, offset: usize) -> Option<&mut [u8]> {
     let buf = buf.to_le_bytes();
diff --git a/tests/codegen/riscv-abi/riscv64-lp64-lp64f-lp64d-abi.rs b/tests/codegen/riscv-abi/riscv64-lp64-lp64f-lp64d-abi.rs
index 977749ad578..ed0af90aaaf 100644
--- a/tests/codegen/riscv-abi/riscv64-lp64-lp64f-lp64d-abi.rs
+++ b/tests/codegen/riscv-abi/riscv64-lp64-lp64f-lp64d-abi.rs
@@ -1,4 +1,4 @@
-//@ compile-flags: --target riscv64gc-unknown-linux-gnu -O -C no-prepopulate-passes
+//@ compile-flags: --target riscv64gc-unknown-linux-gnu -O -C no-prepopulate-passes -C panic=abort
 //@ needs-llvm-components: riscv
 
 #![crate_type = "lib"]
diff --git a/tests/codegen/unwind-abis/aapcs-unwind-abi.rs b/tests/codegen/unwind-abis/aapcs-unwind-abi.rs
index 48c7ecf7824..0d9c7757883 100644
--- a/tests/codegen/unwind-abis/aapcs-unwind-abi.rs
+++ b/tests/codegen/unwind-abis/aapcs-unwind-abi.rs
@@ -1,7 +1,7 @@
 //@ needs-llvm-components: arm
 //@ compile-flags: --target=armv7-unknown-linux-gnueabihf --crate-type=rlib -Cno-prepopulate-passes
 #![no_core]
-#![feature(no_core, lang_items, c_unwind)]
+#![feature(no_core, lang_items)]
 #[lang = "sized"]
 trait Sized {}
 
diff --git a/tests/codegen/unwind-abis/c-unwind-abi-panic-abort.rs b/tests/codegen/unwind-abis/c-unwind-abi-panic-abort.rs
index 8bb2122946f..8d2745ba2f7 100644
--- a/tests/codegen/unwind-abis/c-unwind-abi-panic-abort.rs
+++ b/tests/codegen/unwind-abis/c-unwind-abi-panic-abort.rs
@@ -4,7 +4,6 @@
 // when the code is compiled with `panic=abort`.
 
 #![crate_type = "lib"]
-#![feature(c_unwind)]
 
 // CHECK: @rust_item_that_can_unwind() unnamed_addr [[ATTR0:#[0-9]+]]
 #[no_mangle]
diff --git a/tests/codegen/unwind-abis/c-unwind-abi.rs b/tests/codegen/unwind-abis/c-unwind-abi.rs
index 99763943a6a..46c08b5fc4f 100644
--- a/tests/codegen/unwind-abis/c-unwind-abi.rs
+++ b/tests/codegen/unwind-abis/c-unwind-abi.rs
@@ -6,7 +6,6 @@
 // to prevent LLVM from inferring the attribute.
 
 #![crate_type = "lib"]
-#![feature(c_unwind)]
 
 // CHECK: @rust_item_that_cannot_unwind() unnamed_addr #0 {
 #[no_mangle]
diff --git a/tests/codegen/unwind-abis/cdecl-unwind-abi.rs b/tests/codegen/unwind-abis/cdecl-unwind-abi.rs
index 78dbb55b35a..8e643d6ce49 100644
--- a/tests/codegen/unwind-abis/cdecl-unwind-abi.rs
+++ b/tests/codegen/unwind-abis/cdecl-unwind-abi.rs
@@ -6,7 +6,6 @@
 // disable optimizations above to prevent LLVM from inferring the attribute.
 
 #![crate_type = "lib"]
-#![feature(c_unwind)]
 
 // CHECK: @rust_item_that_cannot_unwind() unnamed_addr #0 {
 #[no_mangle]
diff --git a/tests/codegen/unwind-abis/fastcall-unwind-abi.rs b/tests/codegen/unwind-abis/fastcall-unwind-abi.rs
index 3cbeaf51d96..4c7b2856e2e 100644
--- a/tests/codegen/unwind-abis/fastcall-unwind-abi.rs
+++ b/tests/codegen/unwind-abis/fastcall-unwind-abi.rs
@@ -1,7 +1,7 @@
 //@ needs-llvm-components: x86
 //@ compile-flags: --target=i686-pc-windows-msvc --crate-type=rlib -Cno-prepopulate-passes
 #![no_core]
-#![feature(no_core, lang_items, c_unwind)]
+#![feature(no_core, lang_items)]
 #[lang = "sized"]
 trait Sized {}
 
diff --git a/tests/codegen/unwind-abis/nounwind-on-stable-panic-unwind.rs b/tests/codegen/unwind-abis/nounwind-on-stable-panic-unwind.rs
deleted file mode 100644
index a7f7f2fb77f..00000000000
--- a/tests/codegen/unwind-abis/nounwind-on-stable-panic-unwind.rs
+++ /dev/null
@@ -1,17 +0,0 @@
-//@ compile-flags: -C opt-level=0
-//@ needs-unwind
-
-#![crate_type = "lib"]
-
-// We disable optimizations to prevent LLVM from inferring the attribute.
-
-extern "C" {
-    fn bar();
-}
-
-// CHECK-NOT: Function Attrs:{{.*}}nounwind
-pub unsafe extern "C" fn foo() {
-    bar();
-}
-
-// Note that this test will get removed when `C-unwind` is fully stabilized
diff --git a/tests/codegen/unwind-abis/nounwind.rs b/tests/codegen/unwind-abis/nounwind.rs
index 80bf8d67091..e40ed48ca73 100644
--- a/tests/codegen/unwind-abis/nounwind.rs
+++ b/tests/codegen/unwind-abis/nounwind.rs
@@ -2,7 +2,6 @@
 //@ needs-unwind
 
 #![crate_type = "lib"]
-#![feature(c_unwind)]
 
 // We disable optimizations to prevent LLVM from inferring the attribute.
 
diff --git a/tests/codegen/unwind-abis/stdcall-unwind-abi.rs b/tests/codegen/unwind-abis/stdcall-unwind-abi.rs
index ffb235cd116..ffc11d1faef 100644
--- a/tests/codegen/unwind-abis/stdcall-unwind-abi.rs
+++ b/tests/codegen/unwind-abis/stdcall-unwind-abi.rs
@@ -1,7 +1,7 @@
 //@ needs-llvm-components: x86
 //@ compile-flags: --target=i686-pc-windows-msvc --crate-type=rlib -Cno-prepopulate-passes
 #![no_core]
-#![feature(no_core, lang_items, c_unwind)]
+#![feature(no_core, lang_items)]
 #[lang = "sized"]
 trait Sized {}
 
diff --git a/tests/codegen/unwind-abis/system-unwind-abi.rs b/tests/codegen/unwind-abis/system-unwind-abi.rs
index 1dd0e9bbbec..5f910248346 100644
--- a/tests/codegen/unwind-abis/system-unwind-abi.rs
+++ b/tests/codegen/unwind-abis/system-unwind-abi.rs
@@ -6,7 +6,6 @@
 // optimizations above to prevent LLVM from inferring the attribute.
 
 #![crate_type = "lib"]
-#![feature(c_unwind)]
 
 // CHECK: @rust_item_that_cannot_unwind() unnamed_addr #0 {
 #[no_mangle]
diff --git a/tests/codegen/unwind-abis/sysv64-unwind-abi.rs b/tests/codegen/unwind-abis/sysv64-unwind-abi.rs
index 9824009dc55..c869ca7e2b8 100644
--- a/tests/codegen/unwind-abis/sysv64-unwind-abi.rs
+++ b/tests/codegen/unwind-abis/sysv64-unwind-abi.rs
@@ -1,7 +1,7 @@
 //@ needs-llvm-components: x86
 //@ compile-flags: --target=x86_64-unknown-linux-gnu --crate-type=rlib -Cno-prepopulate-passes
 #![no_core]
-#![feature(no_core, lang_items, c_unwind)]
+#![feature(no_core, lang_items)]
 #[lang = "sized"]
 trait Sized {}
 
diff --git a/tests/codegen/unwind-abis/thiscall-unwind-abi.rs b/tests/codegen/unwind-abis/thiscall-unwind-abi.rs
index a96f4d5a350..19b23ee47ba 100644
--- a/tests/codegen/unwind-abis/thiscall-unwind-abi.rs
+++ b/tests/codegen/unwind-abis/thiscall-unwind-abi.rs
@@ -1,7 +1,7 @@
 //@ needs-llvm-components: x86
 //@ compile-flags: --target=i686-pc-windows-msvc --crate-type=rlib -Cno-prepopulate-passes
 #![no_core]
-#![feature(no_core, lang_items, c_unwind)]
+#![feature(no_core, lang_items)]
 #[lang = "sized"]
 trait Sized {}
 
diff --git a/tests/codegen/unwind-abis/vectorcall-unwind-abi.rs b/tests/codegen/unwind-abis/vectorcall-unwind-abi.rs
index 9929e3e3703..b420f67ca9b 100644
--- a/tests/codegen/unwind-abis/vectorcall-unwind-abi.rs
+++ b/tests/codegen/unwind-abis/vectorcall-unwind-abi.rs
@@ -1,7 +1,7 @@
 //@ needs-llvm-components: x86
 //@ compile-flags: --target=i686-pc-windows-msvc --crate-type=rlib -Cno-prepopulate-passes
 #![no_core]
-#![feature(no_core, lang_items, c_unwind, abi_vectorcall)]
+#![feature(no_core, lang_items, abi_vectorcall)]
 #[lang = "sized"]
 trait Sized {}
 
diff --git a/tests/codegen/unwind-abis/win64-unwind-abi.rs b/tests/codegen/unwind-abis/win64-unwind-abi.rs
index a45a94f628d..2697d3cbcd6 100644
--- a/tests/codegen/unwind-abis/win64-unwind-abi.rs
+++ b/tests/codegen/unwind-abis/win64-unwind-abi.rs
@@ -1,7 +1,7 @@
 //@ needs-llvm-components: x86
 //@ compile-flags: --target=x86_64-unknown-linux-gnu --crate-type=rlib -Cno-prepopulate-passes
 #![no_core]
-#![feature(no_core, lang_items, c_unwind)]
+#![feature(no_core, lang_items)]
 #[lang = "sized"]
 trait Sized {}
 
diff --git a/tests/codegen/unwind-and-panic-abort.rs b/tests/codegen/unwind-and-panic-abort.rs
index 430502308cf..8efa140058a 100644
--- a/tests/codegen/unwind-and-panic-abort.rs
+++ b/tests/codegen/unwind-and-panic-abort.rs
@@ -1,7 +1,6 @@
 //@ compile-flags: -C panic=abort
 
 #![crate_type = "lib"]
-#![feature(c_unwind)]
 
 extern "C-unwind" {
     fn bar();
diff --git a/tests/codegen/unwind-extern-exports.rs b/tests/codegen/unwind-extern-exports.rs
index ea59748b3bc..e692fd1a547 100644
--- a/tests/codegen/unwind-extern-exports.rs
+++ b/tests/codegen/unwind-extern-exports.rs
@@ -2,7 +2,6 @@
 //@ needs-unwind
 
 #![crate_type = "lib"]
-#![feature(c_unwind)]
 
 // Make sure these all do *not* get the attribute.
 // We disable optimizations to prevent LLVM from inferring the attribute.
diff --git a/tests/codegen/unwind-extern-imports.rs b/tests/codegen/unwind-extern-imports.rs
index 790e4def8b3..dfae8aae64a 100644
--- a/tests/codegen/unwind-extern-imports.rs
+++ b/tests/codegen/unwind-extern-imports.rs
@@ -2,7 +2,6 @@
 //@ needs-unwind
 
 #![crate_type = "lib"]
-#![feature(c_unwind)]
 
 extern "C" {
     // CHECK: Function Attrs:{{.*}}nounwind
diff --git a/tests/codegen/wasm_exceptions.rs b/tests/codegen/wasm_exceptions.rs
index 3910850e03a..719499dd8ea 100644
--- a/tests/codegen/wasm_exceptions.rs
+++ b/tests/codegen/wasm_exceptions.rs
@@ -3,12 +3,12 @@
 
 #![crate_type = "lib"]
 #![feature(core_intrinsics)]
-#![feature(rustc_attrs)]
 
-extern "C" {
+extern "C-unwind" {
     fn may_panic();
+}
 
-    #[rustc_nounwind]
+extern "C" {
     fn log_number(number: usize);
 }
 
diff --git a/tests/coverage/abort.cov-map b/tests/coverage/abort.cov-map
index 5673fa98ca6..15156ec9811 100644
--- a/tests/coverage/abort.cov-map
+++ b/tests/coverage/abort.cov-map
@@ -1,5 +1,5 @@
 Function name: abort::main
-Raw bytes (89): 0x[01, 01, 0a, 01, 27, 05, 09, 03, 0d, 22, 11, 03, 0d, 03, 0d, 22, 15, 03, 0d, 03, 0d, 05, 09, 0d, 01, 0e, 01, 01, 1b, 03, 02, 0b, 00, 18, 22, 01, 0c, 00, 19, 11, 00, 1a, 02, 0a, 0e, 02, 0a, 00, 0b, 22, 02, 0c, 00, 19, 15, 00, 1a, 00, 31, 1a, 00, 31, 00, 32, 22, 04, 0c, 00, 19, 05, 00, 1a, 00, 31, 09, 00, 31, 00, 32, 27, 01, 09, 00, 17, 0d, 02, 05, 01, 02]
+Raw bytes (89): 0x[01, 01, 0a, 01, 27, 05, 09, 03, 0d, 22, 11, 03, 0d, 03, 0d, 22, 15, 03, 0d, 03, 0d, 05, 09, 0d, 01, 0d, 01, 01, 1b, 03, 02, 0b, 00, 18, 22, 01, 0c, 00, 19, 11, 00, 1a, 02, 0a, 0e, 02, 0a, 00, 0b, 22, 02, 0c, 00, 19, 15, 00, 1a, 00, 31, 1a, 00, 31, 00, 32, 22, 04, 0c, 00, 19, 05, 00, 1a, 00, 31, 09, 00, 31, 00, 32, 27, 01, 09, 00, 17, 0d, 02, 05, 01, 02]
 Number of files: 1
 - file 0 => global file 1
 Number of expressions: 10
@@ -14,7 +14,7 @@ Number of expressions: 10
 - expression 8 operands: lhs = Expression(0, Add), rhs = Counter(3)
 - expression 9 operands: lhs = Counter(1), rhs = Counter(2)
 Number of file 0 mappings: 13
-- Code(Counter(0)) at (prev + 14, 1) to (start + 1, 27)
+- Code(Counter(0)) at (prev + 13, 1) to (start + 1, 27)
 - Code(Expression(0, Add)) at (prev + 2, 11) to (start + 0, 24)
     = (c0 + (c1 + c2))
 - Code(Expression(8, Sub)) at (prev + 1, 12) to (start + 0, 25)
@@ -36,13 +36,13 @@ Number of file 0 mappings: 13
 - Code(Counter(3)) at (prev + 2, 5) to (start + 1, 2)
 
 Function name: abort::might_abort
-Raw bytes (21): 0x[01, 01, 01, 01, 05, 03, 01, 04, 01, 01, 14, 05, 02, 09, 01, 24, 02, 02, 0c, 03, 02]
+Raw bytes (21): 0x[01, 01, 01, 01, 05, 03, 01, 03, 01, 01, 14, 05, 02, 09, 01, 24, 02, 02, 0c, 03, 02]
 Number of files: 1
 - file 0 => global file 1
 Number of expressions: 1
 - expression 0 operands: lhs = Counter(0), rhs = Counter(1)
 Number of file 0 mappings: 3
-- Code(Counter(0)) at (prev + 4, 1) to (start + 1, 20)
+- Code(Counter(0)) at (prev + 3, 1) to (start + 1, 20)
 - Code(Counter(1)) at (prev + 2, 9) to (start + 1, 36)
 - Code(Expression(0, Sub)) at (prev + 2, 12) to (start + 3, 2)
     = (c0 - c1)
diff --git a/tests/coverage/abort.coverage b/tests/coverage/abort.coverage
index b658a656259..29e3ad5eda7 100644
--- a/tests/coverage/abort.coverage
+++ b/tests/coverage/abort.coverage
@@ -1,4 +1,3 @@
-   LL|       |#![feature(c_unwind)]
    LL|       |#![allow(unused_assignments)]
    LL|       |
    LL|     12|extern "C" fn might_abort(should_abort: bool) {
diff --git a/tests/coverage/abort.rs b/tests/coverage/abort.rs
index 649e8e52a49..6c06a3f9d87 100644
--- a/tests/coverage/abort.rs
+++ b/tests/coverage/abort.rs
@@ -1,4 +1,3 @@
-#![feature(c_unwind)]
 #![allow(unused_assignments)]
 
 extern "C" fn might_abort(should_abort: bool) {
diff --git a/tests/coverage/closure_macro.cov-map b/tests/coverage/closure_macro.cov-map
index 156947f4e21..21fad22f58f 100644
--- a/tests/coverage/closure_macro.cov-map
+++ b/tests/coverage/closure_macro.cov-map
@@ -22,19 +22,19 @@ Number of file 0 mappings: 5
 - Code(Counter(0)) at (prev + 3, 1) to (start + 0, 2)
 
 Function name: closure_macro::main::{closure#0}
-Raw bytes (35): 0x[01, 01, 03, 01, 05, 05, 0b, 09, 00, 05, 01, 10, 1c, 03, 21, 05, 04, 11, 01, 27, 02, 03, 11, 00, 16, 00, 00, 17, 00, 1e, 07, 02, 09, 00, 0a]
+Raw bytes (35): 0x[01, 01, 03, 01, 05, 05, 0b, 09, 0d, 05, 01, 10, 1c, 03, 21, 05, 04, 11, 01, 27, 02, 03, 11, 00, 16, 0d, 00, 17, 00, 1e, 07, 02, 09, 00, 0a]
 Number of files: 1
 - file 0 => global file 1
 Number of expressions: 3
 - expression 0 operands: lhs = Counter(0), rhs = Counter(1)
 - expression 1 operands: lhs = Counter(1), rhs = Expression(2, Add)
-- expression 2 operands: lhs = Counter(2), rhs = Zero
+- expression 2 operands: lhs = Counter(2), rhs = Counter(3)
 Number of file 0 mappings: 5
 - Code(Counter(0)) at (prev + 16, 28) to (start + 3, 33)
 - Code(Counter(1)) at (prev + 4, 17) to (start + 1, 39)
 - Code(Expression(0, Sub)) at (prev + 3, 17) to (start + 0, 22)
     = (c0 - c1)
-- Code(Zero) at (prev + 0, 23) to (start + 0, 30)
+- Code(Counter(3)) at (prev + 0, 23) to (start + 0, 30)
 - Code(Expression(1, Add)) at (prev + 2, 9) to (start + 0, 10)
-    = (c1 + (c2 + Zero))
+    = (c1 + (c2 + c3))
 
diff --git a/tests/coverage/closure_macro_async.cov-map b/tests/coverage/closure_macro_async.cov-map
index 0f2b4e01748..f2efd550591 100644
--- a/tests/coverage/closure_macro_async.cov-map
+++ b/tests/coverage/closure_macro_async.cov-map
@@ -30,19 +30,19 @@ Number of file 0 mappings: 5
 - Code(Counter(0)) at (prev + 3, 1) to (start + 0, 2)
 
 Function name: closure_macro_async::test::{closure#0}::{closure#0}
-Raw bytes (35): 0x[01, 01, 03, 01, 05, 05, 0b, 09, 00, 05, 01, 12, 1c, 03, 21, 05, 04, 11, 01, 27, 02, 03, 11, 00, 16, 00, 00, 17, 00, 1e, 07, 02, 09, 00, 0a]
+Raw bytes (35): 0x[01, 01, 03, 01, 05, 05, 0b, 09, 0d, 05, 01, 12, 1c, 03, 21, 05, 04, 11, 01, 27, 02, 03, 11, 00, 16, 0d, 00, 17, 00, 1e, 07, 02, 09, 00, 0a]
 Number of files: 1
 - file 0 => global file 1
 Number of expressions: 3
 - expression 0 operands: lhs = Counter(0), rhs = Counter(1)
 - expression 1 operands: lhs = Counter(1), rhs = Expression(2, Add)
-- expression 2 operands: lhs = Counter(2), rhs = Zero
+- expression 2 operands: lhs = Counter(2), rhs = Counter(3)
 Number of file 0 mappings: 5
 - Code(Counter(0)) at (prev + 18, 28) to (start + 3, 33)
 - Code(Counter(1)) at (prev + 4, 17) to (start + 1, 39)
 - Code(Expression(0, Sub)) at (prev + 3, 17) to (start + 0, 22)
     = (c0 - c1)
-- Code(Zero) at (prev + 0, 23) to (start + 0, 30)
+- Code(Counter(3)) at (prev + 0, 23) to (start + 0, 30)
 - Code(Expression(1, Add)) at (prev + 2, 9) to (start + 0, 10)
-    = (c1 + (c2 + Zero))
+    = (c1 + (c2 + c3))
 
diff --git a/tests/coverage/mcdc_non_control_flow.cov-map b/tests/coverage/mcdc_non_control_flow.cov-map
new file mode 100644
index 00000000000..937c36e1f16
--- /dev/null
+++ b/tests/coverage/mcdc_non_control_flow.cov-map
@@ -0,0 +1,204 @@
+Function name: mcdc_non_control_flow::assign_3
+Raw bytes (89): 0x[01, 01, 09, 05, 07, 0b, 11, 09, 0d, 01, 05, 01, 05, 22, 11, 01, 05, 22, 11, 01, 05, 0a, 01, 16, 01, 00, 28, 03, 01, 09, 00, 0a, 01, 00, 0d, 00, 0e, 28, 00, 03, 00, 0d, 00, 18, 30, 05, 22, 01, 00, 02, 00, 0d, 00, 0e, 22, 00, 12, 00, 13, 30, 1e, 11, 02, 03, 00, 00, 12, 00, 13, 1e, 00, 17, 00, 18, 30, 09, 0d, 03, 00, 00, 00, 17, 00, 18, 03, 01, 05, 01, 02]
+Number of files: 1
+- file 0 => global file 1
+Number of expressions: 9
+- expression 0 operands: lhs = Counter(1), rhs = Expression(1, Add)
+- expression 1 operands: lhs = Expression(2, Add), rhs = Counter(4)
+- expression 2 operands: lhs = Counter(2), rhs = Counter(3)
+- expression 3 operands: lhs = Counter(0), rhs = Counter(1)
+- expression 4 operands: lhs = Counter(0), rhs = Counter(1)
+- expression 5 operands: lhs = Expression(8, Sub), rhs = Counter(4)
+- expression 6 operands: lhs = Counter(0), rhs = Counter(1)
+- expression 7 operands: lhs = Expression(8, Sub), rhs = Counter(4)
+- expression 8 operands: lhs = Counter(0), rhs = Counter(1)
+Number of file 0 mappings: 10
+- Code(Counter(0)) at (prev + 22, 1) to (start + 0, 40)
+- Code(Expression(0, Add)) at (prev + 1, 9) to (start + 0, 10)
+    = (c1 + ((c2 + c3) + c4))
+- Code(Counter(0)) at (prev + 0, 13) to (start + 0, 14)
+- MCDCDecision { bitmap_idx: 0, conditions_num: 3 } at (prev + 0, 13) to (start + 0, 24)
+- MCDCBranch { true: Counter(1), false: Expression(8, Sub), condition_id: 1, true_next_id: 0, false_next_id: 2 } at (prev + 0, 13) to (start + 0, 14)
+    true  = c1
+    false = (c0 - c1)
+- Code(Expression(8, Sub)) at (prev + 0, 18) to (start + 0, 19)
+    = (c0 - c1)
+- MCDCBranch { true: Expression(7, Sub), false: Counter(4), condition_id: 2, true_next_id: 3, false_next_id: 0 } at (prev + 0, 18) to (start + 0, 19)
+    true  = ((c0 - c1) - c4)
+    false = c4
+- Code(Expression(7, Sub)) at (prev + 0, 23) to (start + 0, 24)
+    = ((c0 - c1) - c4)
+- MCDCBranch { true: Counter(2), false: Counter(3), condition_id: 3, true_next_id: 0, false_next_id: 0 } at (prev + 0, 23) to (start + 0, 24)
+    true  = c2
+    false = c3
+- Code(Expression(0, Add)) at (prev + 1, 5) to (start + 1, 2)
+    = (c1 + ((c2 + c3) + c4))
+
+Function name: mcdc_non_control_flow::assign_3_bis
+Raw bytes (85): 0x[01, 01, 07, 07, 11, 09, 0d, 01, 05, 05, 09, 16, 1a, 05, 09, 01, 05, 0a, 01, 1b, 01, 00, 2c, 03, 01, 09, 00, 0a, 01, 00, 0d, 00, 0e, 28, 00, 03, 00, 0d, 00, 18, 30, 05, 1a, 01, 03, 02, 00, 0d, 00, 0e, 05, 00, 12, 00, 13, 30, 09, 16, 03, 00, 02, 00, 12, 00, 13, 13, 00, 17, 00, 18, 30, 0d, 11, 02, 00, 00, 00, 17, 00, 18, 03, 01, 05, 01, 02]
+Number of files: 1
+- file 0 => global file 1
+Number of expressions: 7
+- expression 0 operands: lhs = Expression(1, Add), rhs = Counter(4)
+- expression 1 operands: lhs = Counter(2), rhs = Counter(3)
+- expression 2 operands: lhs = Counter(0), rhs = Counter(1)
+- expression 3 operands: lhs = Counter(1), rhs = Counter(2)
+- expression 4 operands: lhs = Expression(5, Sub), rhs = Expression(6, Sub)
+- expression 5 operands: lhs = Counter(1), rhs = Counter(2)
+- expression 6 operands: lhs = Counter(0), rhs = Counter(1)
+Number of file 0 mappings: 10
+- Code(Counter(0)) at (prev + 27, 1) to (start + 0, 44)
+- Code(Expression(0, Add)) at (prev + 1, 9) to (start + 0, 10)
+    = ((c2 + c3) + c4)
+- Code(Counter(0)) at (prev + 0, 13) to (start + 0, 14)
+- MCDCDecision { bitmap_idx: 0, conditions_num: 3 } at (prev + 0, 13) to (start + 0, 24)
+- MCDCBranch { true: Counter(1), false: Expression(6, Sub), condition_id: 1, true_next_id: 3, false_next_id: 2 } at (prev + 0, 13) to (start + 0, 14)
+    true  = c1
+    false = (c0 - c1)
+- Code(Counter(1)) at (prev + 0, 18) to (start + 0, 19)
+- MCDCBranch { true: Counter(2), false: Expression(5, Sub), condition_id: 3, true_next_id: 0, false_next_id: 2 } at (prev + 0, 18) to (start + 0, 19)
+    true  = c2
+    false = (c1 - c2)
+- Code(Expression(4, Add)) at (prev + 0, 23) to (start + 0, 24)
+    = ((c1 - c2) + (c0 - c1))
+- MCDCBranch { true: Counter(3), false: Counter(4), condition_id: 2, true_next_id: 0, false_next_id: 0 } at (prev + 0, 23) to (start + 0, 24)
+    true  = c3
+    false = c4
+- Code(Expression(0, Add)) at (prev + 1, 5) to (start + 1, 2)
+    = ((c2 + c3) + c4)
+
+Function name: mcdc_non_control_flow::assign_and
+Raw bytes (64): 0x[01, 01, 04, 07, 0e, 09, 0d, 01, 05, 01, 05, 08, 01, 0c, 01, 00, 21, 03, 01, 09, 00, 0a, 01, 00, 0d, 00, 0e, 28, 00, 02, 00, 0d, 00, 13, 30, 05, 0e, 01, 02, 00, 00, 0d, 00, 0e, 05, 00, 12, 00, 13, 30, 09, 0d, 02, 00, 00, 00, 12, 00, 13, 03, 01, 05, 01, 02]
+Number of files: 1
+- file 0 => global file 1
+Number of expressions: 4
+- expression 0 operands: lhs = Expression(1, Add), rhs = Expression(3, Sub)
+- expression 1 operands: lhs = Counter(2), rhs = Counter(3)
+- expression 2 operands: lhs = Counter(0), rhs = Counter(1)
+- expression 3 operands: lhs = Counter(0), rhs = Counter(1)
+Number of file 0 mappings: 8
+- Code(Counter(0)) at (prev + 12, 1) to (start + 0, 33)
+- Code(Expression(0, Add)) at (prev + 1, 9) to (start + 0, 10)
+    = ((c2 + c3) + (c0 - c1))
+- Code(Counter(0)) at (prev + 0, 13) to (start + 0, 14)
+- MCDCDecision { bitmap_idx: 0, conditions_num: 2 } at (prev + 0, 13) to (start + 0, 19)
+- MCDCBranch { true: Counter(1), false: Expression(3, Sub), condition_id: 1, true_next_id: 2, false_next_id: 0 } at (prev + 0, 13) to (start + 0, 14)
+    true  = c1
+    false = (c0 - c1)
+- Code(Counter(1)) at (prev + 0, 18) to (start + 0, 19)
+- MCDCBranch { true: Counter(2), false: Counter(3), condition_id: 2, true_next_id: 0, false_next_id: 0 } at (prev + 0, 18) to (start + 0, 19)
+    true  = c2
+    false = c3
+- Code(Expression(0, Add)) at (prev + 1, 5) to (start + 1, 2)
+    = ((c2 + c3) + (c0 - c1))
+
+Function name: mcdc_non_control_flow::assign_or
+Raw bytes (64): 0x[01, 01, 04, 07, 0d, 05, 09, 01, 05, 01, 05, 08, 01, 11, 01, 00, 20, 03, 01, 09, 00, 0a, 01, 00, 0d, 00, 0e, 28, 00, 02, 00, 0d, 00, 13, 30, 05, 0e, 01, 00, 02, 00, 0d, 00, 0e, 0e, 00, 12, 00, 13, 30, 09, 0d, 02, 00, 00, 00, 12, 00, 13, 03, 01, 05, 01, 02]
+Number of files: 1
+- file 0 => global file 1
+Number of expressions: 4
+- expression 0 operands: lhs = Expression(1, Add), rhs = Counter(3)
+- expression 1 operands: lhs = Counter(1), rhs = Counter(2)
+- expression 2 operands: lhs = Counter(0), rhs = Counter(1)
+- expression 3 operands: lhs = Counter(0), rhs = Counter(1)
+Number of file 0 mappings: 8
+- Code(Counter(0)) at (prev + 17, 1) to (start + 0, 32)
+- Code(Expression(0, Add)) at (prev + 1, 9) to (start + 0, 10)
+    = ((c1 + c2) + c3)
+- Code(Counter(0)) at (prev + 0, 13) to (start + 0, 14)
+- MCDCDecision { bitmap_idx: 0, conditions_num: 2 } at (prev + 0, 13) to (start + 0, 19)
+- MCDCBranch { true: Counter(1), false: Expression(3, Sub), condition_id: 1, true_next_id: 0, false_next_id: 2 } at (prev + 0, 13) to (start + 0, 14)
+    true  = c1
+    false = (c0 - c1)
+- Code(Expression(3, Sub)) at (prev + 0, 18) to (start + 0, 19)
+    = (c0 - c1)
+- MCDCBranch { true: Counter(2), false: Counter(3), condition_id: 2, true_next_id: 0, false_next_id: 0 } at (prev + 0, 18) to (start + 0, 19)
+    true  = c2
+    false = c3
+- Code(Expression(0, Add)) at (prev + 1, 5) to (start + 1, 2)
+    = ((c1 + c2) + c3)
+
+Function name: mcdc_non_control_flow::foo
+Raw bytes (9): 0x[01, 01, 00, 01, 01, 25, 01, 02, 02]
+Number of files: 1
+- file 0 => global file 1
+Number of expressions: 0
+Number of file 0 mappings: 1
+- Code(Counter(0)) at (prev + 37, 1) to (start + 2, 2)
+
+Function name: mcdc_non_control_flow::func_call
+Raw bytes (52): 0x[01, 01, 03, 01, 05, 0b, 02, 09, 0d, 06, 01, 29, 01, 01, 0a, 28, 00, 02, 01, 09, 00, 0f, 30, 05, 02, 01, 02, 00, 00, 09, 00, 0a, 05, 00, 0e, 00, 0f, 30, 09, 0d, 02, 00, 00, 00, 0e, 00, 0f, 07, 01, 01, 00, 02]
+Number of files: 1
+- file 0 => global file 1
+Number of expressions: 3
+- expression 0 operands: lhs = Counter(0), rhs = Counter(1)
+- expression 1 operands: lhs = Expression(2, Add), rhs = Expression(0, Sub)
+- expression 2 operands: lhs = Counter(2), rhs = Counter(3)
+Number of file 0 mappings: 6
+- Code(Counter(0)) at (prev + 41, 1) to (start + 1, 10)
+- MCDCDecision { bitmap_idx: 0, conditions_num: 2 } at (prev + 1, 9) to (start + 0, 15)
+- MCDCBranch { true: Counter(1), false: Expression(0, Sub), condition_id: 1, true_next_id: 2, false_next_id: 0 } at (prev + 0, 9) to (start + 0, 10)
+    true  = c1
+    false = (c0 - c1)
+- Code(Counter(1)) at (prev + 0, 14) to (start + 0, 15)
+- MCDCBranch { true: Counter(2), false: Counter(3), condition_id: 2, true_next_id: 0, false_next_id: 0 } at (prev + 0, 14) to (start + 0, 15)
+    true  = c2
+    false = c3
+- Code(Expression(1, Add)) at (prev + 1, 1) to (start + 0, 2)
+    = ((c2 + c3) + (c0 - c1))
+
+Function name: mcdc_non_control_flow::right_comb_tree
+Raw bytes (139): 0x[01, 01, 13, 07, 1a, 0b, 19, 0f, 15, 13, 11, 09, 0d, 01, 05, 01, 05, 05, 19, 05, 19, 4a, 15, 05, 19, 4a, 15, 05, 19, 46, 11, 4a, 15, 05, 19, 46, 11, 4a, 15, 05, 19, 0e, 01, 20, 01, 00, 41, 03, 01, 09, 00, 0a, 01, 00, 0d, 00, 0e, 28, 00, 05, 00, 0d, 00, 2a, 30, 05, 1a, 01, 02, 00, 00, 0d, 00, 0e, 05, 00, 13, 00, 14, 30, 4a, 19, 02, 03, 00, 00, 13, 00, 14, 4a, 00, 19, 00, 1a, 30, 46, 15, 03, 04, 00, 00, 19, 00, 1a, 46, 00, 1f, 00, 20, 30, 42, 11, 04, 05, 00, 00, 1f, 00, 20, 42, 00, 24, 00, 27, 30, 09, 0d, 05, 00, 00, 00, 24, 00, 27, 03, 01, 05, 01, 02]
+Number of files: 1
+- file 0 => global file 1
+Number of expressions: 19
+- expression 0 operands: lhs = Expression(1, Add), rhs = Expression(6, Sub)
+- expression 1 operands: lhs = Expression(2, Add), rhs = Counter(6)
+- expression 2 operands: lhs = Expression(3, Add), rhs = Counter(5)
+- expression 3 operands: lhs = Expression(4, Add), rhs = Counter(4)
+- expression 4 operands: lhs = Counter(2), rhs = Counter(3)
+- expression 5 operands: lhs = Counter(0), rhs = Counter(1)
+- expression 6 operands: lhs = Counter(0), rhs = Counter(1)
+- expression 7 operands: lhs = Counter(1), rhs = Counter(6)
+- expression 8 operands: lhs = Counter(1), rhs = Counter(6)
+- expression 9 operands: lhs = Expression(18, Sub), rhs = Counter(5)
+- expression 10 operands: lhs = Counter(1), rhs = Counter(6)
+- expression 11 operands: lhs = Expression(18, Sub), rhs = Counter(5)
+- expression 12 operands: lhs = Counter(1), rhs = Counter(6)
+- expression 13 operands: lhs = Expression(17, Sub), rhs = Counter(4)
+- expression 14 operands: lhs = Expression(18, Sub), rhs = Counter(5)
+- expression 15 operands: lhs = Counter(1), rhs = Counter(6)
+- expression 16 operands: lhs = Expression(17, Sub), rhs = Counter(4)
+- expression 17 operands: lhs = Expression(18, Sub), rhs = Counter(5)
+- expression 18 operands: lhs = Counter(1), rhs = Counter(6)
+Number of file 0 mappings: 14
+- Code(Counter(0)) at (prev + 32, 1) to (start + 0, 65)
+- Code(Expression(0, Add)) at (prev + 1, 9) to (start + 0, 10)
+    = (((((c2 + c3) + c4) + c5) + c6) + (c0 - c1))
+- Code(Counter(0)) at (prev + 0, 13) to (start + 0, 14)
+- MCDCDecision { bitmap_idx: 0, conditions_num: 5 } at (prev + 0, 13) to (start + 0, 42)
+- MCDCBranch { true: Counter(1), false: Expression(6, Sub), condition_id: 1, true_next_id: 2, false_next_id: 0 } at (prev + 0, 13) to (start + 0, 14)
+    true  = c1
+    false = (c0 - c1)
+- Code(Counter(1)) at (prev + 0, 19) to (start + 0, 20)
+- MCDCBranch { true: Expression(18, Sub), false: Counter(6), condition_id: 2, true_next_id: 3, false_next_id: 0 } at (prev + 0, 19) to (start + 0, 20)
+    true  = (c1 - c6)
+    false = c6
+- Code(Expression(18, Sub)) at (prev + 0, 25) to (start + 0, 26)
+    = (c1 - c6)
+- MCDCBranch { true: Expression(17, Sub), false: Counter(5), condition_id: 3, true_next_id: 4, false_next_id: 0 } at (prev + 0, 25) to (start + 0, 26)
+    true  = ((c1 - c6) - c5)
+    false = c5
+- Code(Expression(17, Sub)) at (prev + 0, 31) to (start + 0, 32)
+    = ((c1 - c6) - c5)
+- MCDCBranch { true: Expression(16, Sub), false: Counter(4), condition_id: 4, true_next_id: 5, false_next_id: 0 } at (prev + 0, 31) to (start + 0, 32)
+    true  = (((c1 - c6) - c5) - c4)
+    false = c4
+- Code(Expression(16, Sub)) at (prev + 0, 36) to (start + 0, 39)
+    = (((c1 - c6) - c5) - c4)
+- MCDCBranch { true: Counter(2), false: Counter(3), condition_id: 5, true_next_id: 0, false_next_id: 0 } at (prev + 0, 36) to (start + 0, 39)
+    true  = c2
+    false = c3
+- Code(Expression(0, Add)) at (prev + 1, 5) to (start + 1, 2)
+    = (((((c2 + c3) + c4) + c5) + c6) + (c0 - c1))
+
diff --git a/tests/coverage/mcdc_non_control_flow.coverage b/tests/coverage/mcdc_non_control_flow.coverage
new file mode 100644
index 00000000000..cd733885a98
--- /dev/null
+++ b/tests/coverage/mcdc_non_control_flow.coverage
@@ -0,0 +1,202 @@
+   LL|       |#![feature(coverage_attribute)]
+   LL|       |//@ edition: 2021
+   LL|       |//@ min-llvm-version: 18
+   LL|       |//@ compile-flags: -Zcoverage-options=mcdc
+   LL|       |//@ llvm-cov-flags: --show-mcdc
+   LL|       |
+   LL|       |// This test ensures that boolean expressions that are not inside control flow
+   LL|       |// decisions are correctly instrumented.
+   LL|       |
+   LL|       |use core::hint::black_box;
+   LL|       |
+   LL|      3|fn assign_and(a: bool, b: bool) {
+   LL|      3|    let x = a && b;
+                               ^2
+  ------------------
+  |---> MC/DC Decision Region (LL:13) to (LL:19)
+  |
+  |  Number of Conditions: 2
+  |     Condition C1 --> (LL:13)
+  |     Condition C2 --> (LL:18)
+  |
+  |  Executed MC/DC Test Vectors:
+  |
+  |     C1, C2    Result
+  |  1 { F,  -  = F      }
+  |  2 { T,  F  = F      }
+  |  3 { T,  T  = T      }
+  |
+  |  C1-Pair: covered: (1,3)
+  |  C2-Pair: covered: (2,3)
+  |  MC/DC Coverage for Decision: 100.00%
+  |
+  ------------------
+   LL|      3|    black_box(x);
+   LL|      3|}
+   LL|       |
+   LL|      3|fn assign_or(a: bool, b: bool) {
+   LL|      3|    let x = a || b;
+                               ^1
+  ------------------
+  |---> MC/DC Decision Region (LL:13) to (LL:19)
+  |
+  |  Number of Conditions: 2
+  |     Condition C1 --> (LL:13)
+  |     Condition C2 --> (LL:18)
+  |
+  |  Executed MC/DC Test Vectors:
+  |
+  |     C1, C2    Result
+  |  1 { F,  F  = F      }
+  |  2 { T,  -  = T      }
+  |
+  |  C1-Pair: covered: (1,2)
+  |  C2-Pair: not covered
+  |  MC/DC Coverage for Decision: 50.00%
+  |
+  ------------------
+   LL|      3|    black_box(x);
+   LL|      3|}
+   LL|       |
+   LL|      4|fn assign_3(a: bool, b: bool, c: bool) {
+   LL|      4|    let x = a || b && c;
+                               ^2   ^1
+  ------------------
+  |---> MC/DC Decision Region (LL:13) to (LL:24)
+  |
+  |  Number of Conditions: 3
+  |     Condition C1 --> (LL:13)
+  |     Condition C2 --> (LL:18)
+  |     Condition C3 --> (LL:23)
+  |
+  |  Executed MC/DC Test Vectors:
+  |
+  |     C1, C2, C3    Result
+  |  1 { F,  F,  -  = F      }
+  |  2 { T,  -,  -  = T      }
+  |  3 { F,  T,  T  = T      }
+  |
+  |  C1-Pair: covered: (1,2)
+  |  C2-Pair: covered: (1,3)
+  |  C3-Pair: not covered
+  |  MC/DC Coverage for Decision: 66.67%
+  |
+  ------------------
+   LL|      4|    black_box(x);
+   LL|      4|}
+   LL|       |
+   LL|      4|fn assign_3_bis(a: bool, b: bool, c: bool) {
+   LL|      4|    let x = a && b || c;
+                               ^2   ^3
+  ------------------
+  |---> MC/DC Decision Region (LL:13) to (LL:24)
+  |
+  |  Number of Conditions: 3
+  |     Condition C1 --> (LL:13)
+  |     Condition C2 --> (LL:18)
+  |     Condition C3 --> (LL:23)
+  |
+  |  Executed MC/DC Test Vectors:
+  |
+  |     C1, C2, C3    Result
+  |  1 { T,  F,  F  = F      }
+  |  2 { F,  -,  T  = T      }
+  |  3 { T,  T,  -  = T      }
+  |
+  |  C1-Pair: not covered
+  |  C2-Pair: covered: (1,3)
+  |  C3-Pair: not covered
+  |  MC/DC Coverage for Decision: 33.33%
+  |
+  ------------------
+   LL|      4|    black_box(x);
+   LL|      4|}
+   LL|       |
+   LL|      3|fn right_comb_tree(a: bool, b: bool, c: bool, d: bool, e: bool) {
+   LL|      3|    let x = a && (b && (c && (d && (e))));
+                                ^2    ^1    ^1   ^1
+  ------------------
+  |---> MC/DC Decision Region (LL:13) to (LL:42)
+  |
+  |  Number of Conditions: 5
+  |     Condition C1 --> (LL:13)
+  |     Condition C2 --> (LL:19)
+  |     Condition C3 --> (LL:25)
+  |     Condition C4 --> (LL:31)
+  |     Condition C5 --> (LL:36)
+  |
+  |  Executed MC/DC Test Vectors:
+  |
+  |     C1, C2, C3, C4, C5    Result
+  |  1 { F,  -,  -,  -,  -  = F      }
+  |  2 { T,  F,  -,  -,  -  = F      }
+  |  3 { T,  T,  T,  T,  T  = T      }
+  |
+  |  C1-Pair: covered: (1,3)
+  |  C2-Pair: covered: (2,3)
+  |  C3-Pair: not covered
+  |  C4-Pair: not covered
+  |  C5-Pair: not covered
+  |  MC/DC Coverage for Decision: 40.00%
+  |
+  ------------------
+   LL|      3|    black_box(x);
+   LL|      3|}
+   LL|       |
+   LL|      3|fn foo(a: bool) -> bool {
+   LL|      3|    black_box(a)
+   LL|      3|}
+   LL|       |
+   LL|      3|fn func_call(a: bool, b: bool) {
+   LL|      3|    foo(a && b);
+                           ^2
+  ------------------
+  |---> MC/DC Decision Region (LL:9) to (LL:15)
+  |
+  |  Number of Conditions: 2
+  |     Condition C1 --> (LL:9)
+  |     Condition C2 --> (LL:14)
+  |
+  |  Executed MC/DC Test Vectors:
+  |
+  |     C1, C2    Result
+  |  1 { F,  -  = F      }
+  |  2 { T,  F  = F      }
+  |  3 { T,  T  = T      }
+  |
+  |  C1-Pair: covered: (1,3)
+  |  C2-Pair: covered: (2,3)
+  |  MC/DC Coverage for Decision: 100.00%
+  |
+  ------------------
+   LL|      3|}
+   LL|       |
+   LL|       |#[coverage(off)]
+   LL|       |fn main() {
+   LL|       |    assign_and(true, false);
+   LL|       |    assign_and(true, true);
+   LL|       |    assign_and(false, false);
+   LL|       |
+   LL|       |    assign_or(true, false);
+   LL|       |    assign_or(true, true);
+   LL|       |    assign_or(false, false);
+   LL|       |
+   LL|       |    assign_3(true, false, false);
+   LL|       |    assign_3(true, true, false);
+   LL|       |    assign_3(false, false, true);
+   LL|       |    assign_3(false, true, true);
+   LL|       |
+   LL|       |    assign_3_bis(true, false, false);
+   LL|       |    assign_3_bis(true, true, false);
+   LL|       |    assign_3_bis(false, false, true);
+   LL|       |    assign_3_bis(false, true, true);
+   LL|       |
+   LL|       |    right_comb_tree(false, false, false, true, true);
+   LL|       |    right_comb_tree(true, false, false, true, true);
+   LL|       |    right_comb_tree(true, true, true, true, true);
+   LL|       |
+   LL|       |    func_call(true, false);
+   LL|       |    func_call(true, true);
+   LL|       |    func_call(false, false);
+   LL|       |}
+
diff --git a/tests/coverage/mcdc_non_control_flow.rs b/tests/coverage/mcdc_non_control_flow.rs
new file mode 100644
index 00000000000..85c0a6c6ae5
--- /dev/null
+++ b/tests/coverage/mcdc_non_control_flow.rs
@@ -0,0 +1,72 @@
+#![feature(coverage_attribute)]
+//@ edition: 2021
+//@ min-llvm-version: 18
+//@ compile-flags: -Zcoverage-options=mcdc
+//@ llvm-cov-flags: --show-mcdc
+
+// This test ensures that boolean expressions that are not inside control flow
+// decisions are correctly instrumented.
+
+use core::hint::black_box;
+
+fn assign_and(a: bool, b: bool) {
+    let x = a && b;
+    black_box(x);
+}
+
+fn assign_or(a: bool, b: bool) {
+    let x = a || b;
+    black_box(x);
+}
+
+fn assign_3(a: bool, b: bool, c: bool) {
+    let x = a || b && c;
+    black_box(x);
+}
+
+fn assign_3_bis(a: bool, b: bool, c: bool) {
+    let x = a && b || c;
+    black_box(x);
+}
+
+fn right_comb_tree(a: bool, b: bool, c: bool, d: bool, e: bool) {
+    let x = a && (b && (c && (d && (e))));
+    black_box(x);
+}
+
+fn foo(a: bool) -> bool {
+    black_box(a)
+}
+
+fn func_call(a: bool, b: bool) {
+    foo(a && b);
+}
+
+#[coverage(off)]
+fn main() {
+    assign_and(true, false);
+    assign_and(true, true);
+    assign_and(false, false);
+
+    assign_or(true, false);
+    assign_or(true, true);
+    assign_or(false, false);
+
+    assign_3(true, false, false);
+    assign_3(true, true, false);
+    assign_3(false, false, true);
+    assign_3(false, true, true);
+
+    assign_3_bis(true, false, false);
+    assign_3_bis(true, true, false);
+    assign_3_bis(false, false, true);
+    assign_3_bis(false, true, true);
+
+    right_comb_tree(false, false, false, true, true);
+    right_comb_tree(true, false, false, true, true);
+    right_comb_tree(true, true, true, true, true);
+
+    func_call(true, false);
+    func_call(true, true);
+    func_call(false, false);
+}
diff --git a/tests/crashes/120503.rs b/tests/crashes/120503.rs
deleted file mode 100644
index 28f1e3dfd94..00000000000
--- a/tests/crashes/120503.rs
+++ /dev/null
@@ -1,10 +0,0 @@
-//@ known-bug: #120503
-#![feature(effects)]
-
-trait MyTrait {}
-
-impl MyTrait for i32 {
-    async const fn bar(&self) {
-        main8().await;
-    }
-}
diff --git a/tests/crashes/121536.rs b/tests/crashes/121536.rs
deleted file mode 100644
index 000e7cb15eb..00000000000
--- a/tests/crashes/121536.rs
+++ /dev/null
@@ -1,20 +0,0 @@
-//@ known-bug: #121536
-#![feature(effects)]
-
-#[derive(Debug, Clone, Copy)]
-pub struct Vec3 {
-    pub x: f32,
-    pub y: f32,
-    pub z: f32,
-}
-
-impl std::ops::Add<Vec3> for Vec3 {
-    type Output = Vec3;
-    const fn add(self, b: Vec3) -> Self::Output {
-        Vec3 {
-            x: self.x + b.x,
-            y: self.y + b.y,
-            z: self.z + b.z,
-        }
-    }
-}
diff --git a/tests/crashes/122044.rs b/tests/crashes/122044.rs
deleted file mode 100644
index 4c1d0de5719..00000000000
--- a/tests/crashes/122044.rs
+++ /dev/null
@@ -1,38 +0,0 @@
-//@ known-bug: #122044
-use std::hint::black_box;
-
-trait Func {
-    type Ret: Id;
-}
-
-trait Id {
-    type Assoc;
-}
-impl Id for u32 {}
-impl Id for u32 {}
-
-impl<F: FnOnce() -> R, R: Id> Func for F {
-    type Ret = R;
-}
-
-fn bar() -> impl Copy + Id {
-    0u32
-}
-
-struct Foo<T: Func> {
-    _func: T,
-    value: Option<<<T as Func>::Ret as Id>::Assoc>,
-}
-
-fn main() {
-    let mut fn_def = black_box(Foo {
-        _func: bar,
-        value: None,
-    });
-    let fn_ptr = black_box(Foo {
-        _func: bar as fn() -> _,
-        value: None,
-    });
-
-    fn_def.value = fn_ptr.value;
-}
diff --git a/tests/crashes/122587-1.rs b/tests/crashes/122587-1.rs
deleted file mode 100644
index ea0e843a10c..00000000000
--- a/tests/crashes/122587-1.rs
+++ /dev/null
@@ -1,5 +0,0 @@
-//@ known-bug: #122587
-const b: f16 = 0.0f16;
-pub fn main() {
-   let b = 0.0f16;
-}
diff --git a/tests/crashes/123255.rs b/tests/crashes/123255.rs
deleted file mode 100644
index a94a2a0422e..00000000000
--- a/tests/crashes/123255.rs
+++ /dev/null
@@ -1,13 +0,0 @@
-//@ known-bug: rust-lang/rust#123255
-//@ edition:2021
-#![crate_type = "lib"]
-
-pub fn a() {}
-
-mod handlers {
-    pub struct C(&());
-    pub fn c() -> impl Fn() -> C {
-        let a1 = ();
-        || C((crate::a(), a1).into())
-    }
-}
diff --git a/tests/crashes/123893.rs b/tests/crashes/123893.rs
index 137ae783511..05237d002b8 100644
--- a/tests/crashes/123893.rs
+++ b/tests/crashes/123893.rs
@@ -11,6 +11,7 @@ fn generic_impl<T>() {
     impl<T> MagicTrait for T {
         const IS_BIG: bool = true;
     }
+    more_cost();
     if T::IS_BIG {
         big_impl::<i32>();
     }
@@ -18,3 +19,6 @@ fn generic_impl<T>() {
 
 #[inline(never)]
 fn big_impl<T>() {}
+
+#[inline(never)]
+fn more_cost() {}
diff --git a/tests/crashes/126521.rs b/tests/crashes/126521.rs
deleted file mode 100644
index 0a025aabcf2..00000000000
--- a/tests/crashes/126521.rs
+++ /dev/null
@@ -1,11 +0,0 @@
-//@ known-bug: rust-lang/rust#126521
-macro_rules! foo {
-    ($val:ident) => {
-        true;
-    };
-}
-
-fn main() {
-    #[expect(semicolon_in_expressions_from_macros)]
-    let _ = foo!(x);
-}
diff --git a/tests/incremental/const-generics/issue-64087.rs b/tests/incremental/const-generics/issue-64087.rs
index 97f212b3fbb..787f2af8aa3 100644
--- a/tests/incremental/const-generics/issue-64087.rs
+++ b/tests/incremental/const-generics/issue-64087.rs
@@ -6,4 +6,6 @@ fn combinator<T, const S: usize>() -> [T; S] {}
 fn main() {
     combinator().into_iter();
     //[cfail1]~^ ERROR type annotations needed
+    //[cfail1]~| ERROR type annotations needed
+    //[cfail1]~| ERROR type annotations needed
 }
diff --git a/tests/incremental/unrecoverable_query.rs b/tests/incremental/unrecoverable_query.rs
new file mode 100644
index 00000000000..e17236bebd2
--- /dev/null
+++ b/tests/incremental/unrecoverable_query.rs
@@ -0,0 +1,40 @@
+// If it is impossible to find query arguments just from the hash
+// compiler should treat the node as red
+
+// In this test prior to fixing compiler was having problems figuring out
+// drop impl for T inside of m
+
+//@ revisions:cfail1 cfail2
+//@ compile-flags: --crate-type=lib
+//@ build-pass
+
+pub trait P {
+    type A;
+}
+
+struct S;
+
+impl P for S {
+    type A = C;
+}
+
+struct T<D: P>(D::A, Z<D>);
+
+struct Z<D: P>(D::A, String);
+
+impl<D: P> T<D> {
+    pub fn i() -> Self {
+        loop {}
+    }
+}
+
+enum C {
+    #[cfg(cfail1)]
+    Up(()),
+    #[cfg(cfail2)]
+    Lorry(()),
+}
+
+pub fn m() {
+    T::<S>::i();
+}
diff --git a/tests/mir-opt/dataflow-const-prop/default_boxed_slice.main.GVN.32bit.panic-abort.diff b/tests/mir-opt/dataflow-const-prop/default_boxed_slice.main.GVN.32bit.panic-abort.diff
index ca445046279..06011f9d759 100644
--- a/tests/mir-opt/dataflow-const-prop/default_boxed_slice.main.GVN.32bit.panic-abort.diff
+++ b/tests/mir-opt/dataflow-const-prop/default_boxed_slice.main.GVN.32bit.panic-abort.diff
@@ -80,7 +80,7 @@
   
       bb4: {
           StorageDead(_8);
--         _11 = _6 as *const [bool; 0] (PointerCoercion(MutToConstPointer));
+-         _11 = _6 as *const [bool; 0] (PtrToPtr);
 -         _5 = NonNull::<[bool; 0]> { pointer: _11 };
 +         _11 = const {0x1 as *const [bool; 0]};
 +         _5 = const NonNull::<[bool; 0]> {{ pointer: {0x1 as *const [bool; 0]} }};
diff --git a/tests/mir-opt/dataflow-const-prop/default_boxed_slice.main.GVN.32bit.panic-unwind.diff b/tests/mir-opt/dataflow-const-prop/default_boxed_slice.main.GVN.32bit.panic-unwind.diff
index 1f498c65fa7..eb4a3ffd91d 100644
--- a/tests/mir-opt/dataflow-const-prop/default_boxed_slice.main.GVN.32bit.panic-unwind.diff
+++ b/tests/mir-opt/dataflow-const-prop/default_boxed_slice.main.GVN.32bit.panic-unwind.diff
@@ -84,7 +84,7 @@
   
       bb5: {
           StorageDead(_8);
--         _11 = _6 as *const [bool; 0] (PointerCoercion(MutToConstPointer));
+-         _11 = _6 as *const [bool; 0] (PtrToPtr);
 -         _5 = NonNull::<[bool; 0]> { pointer: _11 };
 +         _11 = const {0x1 as *const [bool; 0]};
 +         _5 = const NonNull::<[bool; 0]> {{ pointer: {0x1 as *const [bool; 0]} }};
diff --git a/tests/mir-opt/dataflow-const-prop/default_boxed_slice.main.GVN.64bit.panic-abort.diff b/tests/mir-opt/dataflow-const-prop/default_boxed_slice.main.GVN.64bit.panic-abort.diff
index da72e581496..a7cc243e548 100644
--- a/tests/mir-opt/dataflow-const-prop/default_boxed_slice.main.GVN.64bit.panic-abort.diff
+++ b/tests/mir-opt/dataflow-const-prop/default_boxed_slice.main.GVN.64bit.panic-abort.diff
@@ -80,7 +80,7 @@
   
       bb4: {
           StorageDead(_8);
--         _11 = _6 as *const [bool; 0] (PointerCoercion(MutToConstPointer));
+-         _11 = _6 as *const [bool; 0] (PtrToPtr);
 -         _5 = NonNull::<[bool; 0]> { pointer: _11 };
 +         _11 = const {0x1 as *const [bool; 0]};
 +         _5 = const NonNull::<[bool; 0]> {{ pointer: {0x1 as *const [bool; 0]} }};
diff --git a/tests/mir-opt/dataflow-const-prop/default_boxed_slice.main.GVN.64bit.panic-unwind.diff b/tests/mir-opt/dataflow-const-prop/default_boxed_slice.main.GVN.64bit.panic-unwind.diff
index 920e66452e3..c905a48862c 100644
--- a/tests/mir-opt/dataflow-const-prop/default_boxed_slice.main.GVN.64bit.panic-unwind.diff
+++ b/tests/mir-opt/dataflow-const-prop/default_boxed_slice.main.GVN.64bit.panic-unwind.diff
@@ -84,7 +84,7 @@
   
       bb5: {
           StorageDead(_8);
--         _11 = _6 as *const [bool; 0] (PointerCoercion(MutToConstPointer));
+-         _11 = _6 as *const [bool; 0] (PtrToPtr);
 -         _5 = NonNull::<[bool; 0]> { pointer: _11 };
 +         _11 = const {0x1 as *const [bool; 0]};
 +         _5 = const NonNull::<[bool; 0]> {{ pointer: {0x1 as *const [bool; 0]} }};
diff --git a/tests/mir-opt/gvn.array_len.GVN.panic-abort.diff b/tests/mir-opt/gvn.array_len.GVN.panic-abort.diff
new file mode 100644
index 00000000000..90654e05662
--- /dev/null
+++ b/tests/mir-opt/gvn.array_len.GVN.panic-abort.diff
@@ -0,0 +1,31 @@
+- // MIR for `array_len` before GVN
++ // MIR for `array_len` after GVN
+  
+  fn array_len(_1: &mut [i32; 42]) -> usize {
+      debug x => _1;
+      let mut _0: usize;
+      let _2: &[i32];
+      let mut _3: &[i32; 42];
+      let mut _4: *const [i32];
+      scope 1 {
+          debug x => _2;
+      }
+  
+      bb0: {
+-         StorageLive(_2);
++         nop;
+          StorageLive(_3);
+          _3 = &(*_1);
+          _2 = move _3 as &[i32] (PointerCoercion(Unsize));
+          StorageDead(_3);
+          StorageLive(_4);
+          _4 = &raw const (*_2);
+-         _0 = PtrMetadata(move _4);
++         _0 = const 42_usize;
+          StorageDead(_4);
+-         StorageDead(_2);
++         nop;
+          return;
+      }
+  }
+  
diff --git a/tests/mir-opt/gvn.array_len.GVN.panic-unwind.diff b/tests/mir-opt/gvn.array_len.GVN.panic-unwind.diff
new file mode 100644
index 00000000000..90654e05662
--- /dev/null
+++ b/tests/mir-opt/gvn.array_len.GVN.panic-unwind.diff
@@ -0,0 +1,31 @@
+- // MIR for `array_len` before GVN
++ // MIR for `array_len` after GVN
+  
+  fn array_len(_1: &mut [i32; 42]) -> usize {
+      debug x => _1;
+      let mut _0: usize;
+      let _2: &[i32];
+      let mut _3: &[i32; 42];
+      let mut _4: *const [i32];
+      scope 1 {
+          debug x => _2;
+      }
+  
+      bb0: {
+-         StorageLive(_2);
++         nop;
+          StorageLive(_3);
+          _3 = &(*_1);
+          _2 = move _3 as &[i32] (PointerCoercion(Unsize));
+          StorageDead(_3);
+          StorageLive(_4);
+          _4 = &raw const (*_2);
+-         _0 = PtrMetadata(move _4);
++         _0 = const 42_usize;
+          StorageDead(_4);
+-         StorageDead(_2);
++         nop;
+          return;
+      }
+  }
+  
diff --git a/tests/mir-opt/gvn.fn_pointers.GVN.panic-abort.diff b/tests/mir-opt/gvn.fn_pointers.GVN.panic-abort.diff
index 25d0e5ccf49..0c49e706c9e 100644
--- a/tests/mir-opt/gvn.fn_pointers.GVN.panic-abort.diff
+++ b/tests/mir-opt/gvn.fn_pointers.GVN.panic-abort.diff
@@ -8,10 +8,10 @@
       let mut _3: fn(u8) -> u8;
       let _5: ();
       let mut _6: fn(u8) -> u8;
-      let mut _9: {closure@$DIR/gvn.rs:612:19: 612:21};
+      let mut _9: {closure@$DIR/gvn.rs:614:19: 614:21};
       let _10: ();
       let mut _11: fn();
-      let mut _13: {closure@$DIR/gvn.rs:612:19: 612:21};
+      let mut _13: {closure@$DIR/gvn.rs:614:19: 614:21};
       let _14: ();
       let mut _15: fn();
       scope 1 {
@@ -19,7 +19,7 @@
           let _4: fn(u8) -> u8;
           scope 2 {
               debug g => _4;
-              let _7: {closure@$DIR/gvn.rs:612:19: 612:21};
+              let _7: {closure@$DIR/gvn.rs:614:19: 614:21};
               scope 3 {
                   debug closure => _7;
                   let _8: fn();
@@ -62,16 +62,16 @@
           StorageDead(_6);
           StorageDead(_5);
 -         StorageLive(_7);
--         _7 = {closure@$DIR/gvn.rs:612:19: 612:21};
+-         _7 = {closure@$DIR/gvn.rs:614:19: 614:21};
 -         StorageLive(_8);
 +         nop;
-+         _7 = const ZeroSized: {closure@$DIR/gvn.rs:612:19: 612:21};
++         _7 = const ZeroSized: {closure@$DIR/gvn.rs:614:19: 614:21};
 +         nop;
           StorageLive(_9);
 -         _9 = _7;
 -         _8 = move _9 as fn() (PointerCoercion(ClosureFnPointer(Safe)));
-+         _9 = const ZeroSized: {closure@$DIR/gvn.rs:612:19: 612:21};
-+         _8 = const ZeroSized: {closure@$DIR/gvn.rs:612:19: 612:21} as fn() (PointerCoercion(ClosureFnPointer(Safe)));
++         _9 = const ZeroSized: {closure@$DIR/gvn.rs:614:19: 614:21};
++         _8 = const ZeroSized: {closure@$DIR/gvn.rs:614:19: 614:21} as fn() (PointerCoercion(ClosureFnPointer(Safe)));
           StorageDead(_9);
           StorageLive(_10);
           StorageLive(_11);
@@ -88,8 +88,8 @@
           StorageLive(_13);
 -         _13 = _7;
 -         _12 = move _13 as fn() (PointerCoercion(ClosureFnPointer(Safe)));
-+         _13 = const ZeroSized: {closure@$DIR/gvn.rs:612:19: 612:21};
-+         _12 = const ZeroSized: {closure@$DIR/gvn.rs:612:19: 612:21} as fn() (PointerCoercion(ClosureFnPointer(Safe)));
++         _13 = const ZeroSized: {closure@$DIR/gvn.rs:614:19: 614:21};
++         _12 = const ZeroSized: {closure@$DIR/gvn.rs:614:19: 614:21} as fn() (PointerCoercion(ClosureFnPointer(Safe)));
           StorageDead(_13);
           StorageLive(_14);
           StorageLive(_15);
diff --git a/tests/mir-opt/gvn.fn_pointers.GVN.panic-unwind.diff b/tests/mir-opt/gvn.fn_pointers.GVN.panic-unwind.diff
index 3c5fd944d6b..e5f865b74b9 100644
--- a/tests/mir-opt/gvn.fn_pointers.GVN.panic-unwind.diff
+++ b/tests/mir-opt/gvn.fn_pointers.GVN.panic-unwind.diff
@@ -8,10 +8,10 @@
       let mut _3: fn(u8) -> u8;
       let _5: ();
       let mut _6: fn(u8) -> u8;
-      let mut _9: {closure@$DIR/gvn.rs:612:19: 612:21};
+      let mut _9: {closure@$DIR/gvn.rs:614:19: 614:21};
       let _10: ();
       let mut _11: fn();
-      let mut _13: {closure@$DIR/gvn.rs:612:19: 612:21};
+      let mut _13: {closure@$DIR/gvn.rs:614:19: 614:21};
       let _14: ();
       let mut _15: fn();
       scope 1 {
@@ -19,7 +19,7 @@
           let _4: fn(u8) -> u8;
           scope 2 {
               debug g => _4;
-              let _7: {closure@$DIR/gvn.rs:612:19: 612:21};
+              let _7: {closure@$DIR/gvn.rs:614:19: 614:21};
               scope 3 {
                   debug closure => _7;
                   let _8: fn();
@@ -62,16 +62,16 @@
           StorageDead(_6);
           StorageDead(_5);
 -         StorageLive(_7);
--         _7 = {closure@$DIR/gvn.rs:612:19: 612:21};
+-         _7 = {closure@$DIR/gvn.rs:614:19: 614:21};
 -         StorageLive(_8);
 +         nop;
-+         _7 = const ZeroSized: {closure@$DIR/gvn.rs:612:19: 612:21};
++         _7 = const ZeroSized: {closure@$DIR/gvn.rs:614:19: 614:21};
 +         nop;
           StorageLive(_9);
 -         _9 = _7;
 -         _8 = move _9 as fn() (PointerCoercion(ClosureFnPointer(Safe)));
-+         _9 = const ZeroSized: {closure@$DIR/gvn.rs:612:19: 612:21};
-+         _8 = const ZeroSized: {closure@$DIR/gvn.rs:612:19: 612:21} as fn() (PointerCoercion(ClosureFnPointer(Safe)));
++         _9 = const ZeroSized: {closure@$DIR/gvn.rs:614:19: 614:21};
++         _8 = const ZeroSized: {closure@$DIR/gvn.rs:614:19: 614:21} as fn() (PointerCoercion(ClosureFnPointer(Safe)));
           StorageDead(_9);
           StorageLive(_10);
           StorageLive(_11);
@@ -88,8 +88,8 @@
           StorageLive(_13);
 -         _13 = _7;
 -         _12 = move _13 as fn() (PointerCoercion(ClosureFnPointer(Safe)));
-+         _13 = const ZeroSized: {closure@$DIR/gvn.rs:612:19: 612:21};
-+         _12 = const ZeroSized: {closure@$DIR/gvn.rs:612:19: 612:21} as fn() (PointerCoercion(ClosureFnPointer(Safe)));
++         _13 = const ZeroSized: {closure@$DIR/gvn.rs:614:19: 614:21};
++         _12 = const ZeroSized: {closure@$DIR/gvn.rs:614:19: 614:21} as fn() (PointerCoercion(ClosureFnPointer(Safe)));
           StorageDead(_13);
           StorageLive(_14);
           StorageLive(_15);
diff --git a/tests/mir-opt/gvn.generic_cast_metadata.GVN.panic-abort.diff b/tests/mir-opt/gvn.generic_cast_metadata.GVN.panic-abort.diff
new file mode 100644
index 00000000000..1d462a8a23c
--- /dev/null
+++ b/tests/mir-opt/gvn.generic_cast_metadata.GVN.panic-abort.diff
@@ -0,0 +1,38 @@
+- // MIR for `generic_cast_metadata` before GVN
++ // MIR for `generic_cast_metadata` after GVN
+  
+  fn generic_cast_metadata(_1: *const [T], _2: *const A, _3: *const B) -> () {
+      let mut _0: ();
+      let mut _4: *const T;
+      let mut _5: ();
+      let mut _6: *const (&A, [T]);
+      let mut _7: usize;
+      let mut _8: *const (T, B);
+      let mut _9: <B as std::ptr::Pointee>::Metadata;
+      let mut _10: *const (T, A);
+      let mut _11: <A as std::ptr::Pointee>::Metadata;
+      let mut _12: *mut A;
+      let mut _13: <A as std::ptr::Pointee>::Metadata;
+      let mut _14: *mut B;
+      let mut _15: <B as std::ptr::Pointee>::Metadata;
+  
+      bb0: {
+          _4 = _1 as *const T (PtrToPtr);
+          _5 = PtrMetadata(_4);
+          _6 = _1 as *const (&A, [T]) (PtrToPtr);
+-         _7 = PtrMetadata(_6);
++         _7 = PtrMetadata(_1);
+          _8 = _2 as *const (T, B) (PtrToPtr);
+          _9 = PtrMetadata(_8);
+          _10 = _2 as *const (T, A) (PtrToPtr);
+-         _11 = PtrMetadata(_10);
++         _11 = PtrMetadata(_2);
+          _12 = _3 as *mut A (PtrToPtr);
+          _13 = PtrMetadata(_12);
+          _14 = _3 as *mut B (PtrToPtr);
+-         _15 = PtrMetadata(_14);
++         _15 = PtrMetadata(_3);
+          return;
+      }
+  }
+  
diff --git a/tests/mir-opt/gvn.generic_cast_metadata.GVN.panic-unwind.diff b/tests/mir-opt/gvn.generic_cast_metadata.GVN.panic-unwind.diff
new file mode 100644
index 00000000000..1d462a8a23c
--- /dev/null
+++ b/tests/mir-opt/gvn.generic_cast_metadata.GVN.panic-unwind.diff
@@ -0,0 +1,38 @@
+- // MIR for `generic_cast_metadata` before GVN
++ // MIR for `generic_cast_metadata` after GVN
+  
+  fn generic_cast_metadata(_1: *const [T], _2: *const A, _3: *const B) -> () {
+      let mut _0: ();
+      let mut _4: *const T;
+      let mut _5: ();
+      let mut _6: *const (&A, [T]);
+      let mut _7: usize;
+      let mut _8: *const (T, B);
+      let mut _9: <B as std::ptr::Pointee>::Metadata;
+      let mut _10: *const (T, A);
+      let mut _11: <A as std::ptr::Pointee>::Metadata;
+      let mut _12: *mut A;
+      let mut _13: <A as std::ptr::Pointee>::Metadata;
+      let mut _14: *mut B;
+      let mut _15: <B as std::ptr::Pointee>::Metadata;
+  
+      bb0: {
+          _4 = _1 as *const T (PtrToPtr);
+          _5 = PtrMetadata(_4);
+          _6 = _1 as *const (&A, [T]) (PtrToPtr);
+-         _7 = PtrMetadata(_6);
++         _7 = PtrMetadata(_1);
+          _8 = _2 as *const (T, B) (PtrToPtr);
+          _9 = PtrMetadata(_8);
+          _10 = _2 as *const (T, A) (PtrToPtr);
+-         _11 = PtrMetadata(_10);
++         _11 = PtrMetadata(_2);
+          _12 = _3 as *mut A (PtrToPtr);
+          _13 = PtrMetadata(_12);
+          _14 = _3 as *mut B (PtrToPtr);
+-         _15 = PtrMetadata(_14);
++         _15 = PtrMetadata(_3);
+          return;
+      }
+  }
+  
diff --git a/tests/mir-opt/gvn.manual_slice_mut_len.GVN.panic-abort.diff b/tests/mir-opt/gvn.manual_slice_mut_len.GVN.panic-abort.diff
new file mode 100644
index 00000000000..c877d8a3c0e
--- /dev/null
+++ b/tests/mir-opt/gvn.manual_slice_mut_len.GVN.panic-abort.diff
@@ -0,0 +1,41 @@
+- // MIR for `manual_slice_mut_len` before GVN
++ // MIR for `manual_slice_mut_len` after GVN
+  
+  fn manual_slice_mut_len(_1: &mut [i32]) -> usize {
+      debug x => _1;
+      let mut _0: usize;
+      let _2: *mut [i32];
+      let mut _4: *mut [i32];
+      let mut _5: *const [i32];
+      scope 1 {
+          debug x => _2;
+          let _3: *const [i32];
+          scope 2 {
+              debug x => _3;
+          }
+      }
+  
+      bb0: {
+-         StorageLive(_2);
++         nop;
+          _2 = &raw mut (*_1);
+-         StorageLive(_3);
++         nop;
+          StorageLive(_4);
+          _4 = _2;
+-         _3 = move _4 as *const [i32] (PtrToPtr);
++         _3 = _2 as *const [i32] (PtrToPtr);
+          StorageDead(_4);
+          StorageLive(_5);
+          _5 = _3;
+-         _0 = PtrMetadata(move _5);
++         _0 = PtrMetadata(_1);
+          StorageDead(_5);
+-         StorageDead(_3);
+-         StorageDead(_2);
++         nop;
++         nop;
+          return;
+      }
+  }
+  
diff --git a/tests/mir-opt/gvn.manual_slice_mut_len.GVN.panic-unwind.diff b/tests/mir-opt/gvn.manual_slice_mut_len.GVN.panic-unwind.diff
new file mode 100644
index 00000000000..c877d8a3c0e
--- /dev/null
+++ b/tests/mir-opt/gvn.manual_slice_mut_len.GVN.panic-unwind.diff
@@ -0,0 +1,41 @@
+- // MIR for `manual_slice_mut_len` before GVN
++ // MIR for `manual_slice_mut_len` after GVN
+  
+  fn manual_slice_mut_len(_1: &mut [i32]) -> usize {
+      debug x => _1;
+      let mut _0: usize;
+      let _2: *mut [i32];
+      let mut _4: *mut [i32];
+      let mut _5: *const [i32];
+      scope 1 {
+          debug x => _2;
+          let _3: *const [i32];
+          scope 2 {
+              debug x => _3;
+          }
+      }
+  
+      bb0: {
+-         StorageLive(_2);
++         nop;
+          _2 = &raw mut (*_1);
+-         StorageLive(_3);
++         nop;
+          StorageLive(_4);
+          _4 = _2;
+-         _3 = move _4 as *const [i32] (PtrToPtr);
++         _3 = _2 as *const [i32] (PtrToPtr);
+          StorageDead(_4);
+          StorageLive(_5);
+          _5 = _3;
+-         _0 = PtrMetadata(move _5);
++         _0 = PtrMetadata(_1);
+          StorageDead(_5);
+-         StorageDead(_3);
+-         StorageDead(_2);
++         nop;
++         nop;
+          return;
+      }
+  }
+  
diff --git a/tests/mir-opt/gvn.rs b/tests/mir-opt/gvn.rs
index 720018f112e..8bc2550b8f5 100644
--- a/tests/mir-opt/gvn.rs
+++ b/tests/mir-opt/gvn.rs
@@ -7,7 +7,9 @@
 #![feature(custom_mir)]
 #![feature(core_intrinsics)]
 #![feature(freeze)]
+#![allow(ambiguous_wide_pointer_comparisons)]
 #![allow(unconditional_panic)]
+#![allow(unused)]
 
 use std::intrinsics::mir::*;
 use std::marker::Freeze;
@@ -816,6 +818,71 @@ fn casts_before_aggregate_raw_ptr(x: *const u32) -> *const [u8] {
     std::intrinsics::aggregate_raw_ptr(x, 4)
 }
 
+fn manual_slice_mut_len(x: &mut [i32]) -> usize {
+    // CHECK-LABEL: fn manual_slice_mut_len
+    // CHECK: _0 = PtrMetadata(_1);
+    let x: *mut [i32] = x;
+    let x: *const [i32] = x;
+    std::intrinsics::ptr_metadata(x)
+}
+
+// `.len()` on arrays ends up being something like this
+fn array_len(x: &mut [i32; 42]) -> usize {
+    // CHECK-LABEL: fn array_len
+    // CHECK: _0 = const 42_usize;
+    let x: &[i32] = x;
+    std::intrinsics::ptr_metadata(x)
+}
+
+#[custom_mir(dialect = "runtime")]
+fn generic_cast_metadata<T, A: ?Sized, B: ?Sized>(ps: *const [T], pa: *const A, pb: *const B) {
+    // CHECK-LABEL: fn generic_cast_metadata
+    mir! {
+        {
+            // These tests check that we correctly do or don't elide casts
+            // when the pointee metadata do or don't match, respectively.
+
+            // Metadata usize -> (), do not optimize.
+            // CHECK: [[T:_.+]] = _1 as
+            // CHECK-NEXT: PtrMetadata([[T]])
+            let t1 = CastPtrToPtr::<_, *const T>(ps);
+            let m1 = PtrMetadata(t1);
+
+            // `(&A, [T])` has `usize` metadata, same as `[T]`, yes optimize.
+            // CHECK: [[T:_.+]] = _1 as
+            // CHECK-NEXT: PtrMetadata(_1)
+            let t2 = CastPtrToPtr::<_, *const (&A, [T])>(ps);
+            let m2 = PtrMetadata(t2);
+
+            // Tail `A` and tail `B`, do not optimize.
+            // CHECK: [[T:_.+]] = _2 as
+            // CHECK-NEXT: PtrMetadata([[T]])
+            let t3 = CastPtrToPtr::<_, *const (T, B)>(pa);
+            let m3 = PtrMetadata(t3);
+
+            // Both have tail `A`, yes optimize.
+            // CHECK: [[T:_.+]] = _2 as
+            // CHECK-NEXT: PtrMetadata(_2)
+            let t4 = CastPtrToPtr::<_, *const (T, A)>(pa);
+            let m4 = PtrMetadata(t4);
+
+            // Tail `B` and tail `A`, do not optimize.
+            // CHECK: [[T:_.+]] = _3 as
+            // CHECK-NEXT: PtrMetadata([[T]])
+            let t5 = CastPtrToPtr::<_, *mut A>(pb);
+            let m5 = PtrMetadata(t5);
+
+            // Both have tail `B`, yes optimize.
+            // CHECK: [[T:_.+]] = _3 as
+            // CHECK-NEXT: PtrMetadata(_3)
+            let t6 = CastPtrToPtr::<_, *mut B>(pb);
+            let m6 = PtrMetadata(t6);
+
+            Return()
+        }
+    }
+}
+
 fn main() {
     subexpression_elimination(2, 4, 5);
     wrap_unwrap(5);
@@ -880,3 +947,6 @@ fn identity<T>(x: T) -> T {
 // EMIT_MIR gvn.meta_of_ref_to_slice.GVN.diff
 // EMIT_MIR gvn.slice_from_raw_parts_as_ptr.GVN.diff
 // EMIT_MIR gvn.casts_before_aggregate_raw_ptr.GVN.diff
+// EMIT_MIR gvn.manual_slice_mut_len.GVN.diff
+// EMIT_MIR gvn.array_len.GVN.diff
+// EMIT_MIR gvn.generic_cast_metadata.GVN.diff
diff --git a/tests/mir-opt/instsimplify/casts.roundtrip.InstSimplify.diff b/tests/mir-opt/instsimplify/casts.roundtrip.InstSimplify.diff
index a6d68cd4e4b..e87ac762dfe 100644
--- a/tests/mir-opt/instsimplify/casts.roundtrip.InstSimplify.diff
+++ b/tests/mir-opt/instsimplify/casts.roundtrip.InstSimplify.diff
@@ -14,7 +14,7 @@
           StorageLive(_4);
           _4 = _1;
           _3 = move _4 as *mut u8 (PtrToPtr);
-          _2 = move _3 as *const u8 (PointerCoercion(MutToConstPointer));
+          _2 = move _3 as *const u8 (PtrToPtr);
           StorageDead(_4);
           StorageDead(_3);
 -         _0 = move _2 as *const u8 (PtrToPtr);
diff --git a/tests/mir-opt/instsimplify/casts.rs b/tests/mir-opt/instsimplify/casts.rs
index a7786fa570f..15ceea76713 100644
--- a/tests/mir-opt/instsimplify/casts.rs
+++ b/tests/mir-opt/instsimplify/casts.rs
@@ -21,7 +21,7 @@ pub fn roundtrip(x: *const u8) -> *const u8 {
     // CHECK-LABEL: fn roundtrip(
     // CHECK: _4 = _1;
     // CHECK: _3 = move _4 as *mut u8 (PtrToPtr);
-    // CHECK: _2 = move _3 as *const u8 (PointerCoercion(MutToConstPointer));
+    // CHECK: _2 = move _3 as *const u8 (PtrToPtr);
     x as *mut u8 as *const u8
 }
 
diff --git a/tests/mir-opt/issue_76432.rs b/tests/mir-opt/issue_76432.rs
index be5ccbd49e2..6d884063caa 100644
--- a/tests/mir-opt/issue_76432.rs
+++ b/tests/mir-opt/issue_76432.rs
@@ -1,11 +1,10 @@
 // skip-filecheck
 // EMIT_MIR_FOR_EACH_PANIC_STRATEGY
-//@ compile-flags: -Zmir-enable-passes=-NormalizeArrayLen
 // Check that we do not insert StorageDead at each target if StorageDead was never seen
 
-// EMIT_MIR issue_76432.test.SimplifyComparisonIntegral.diff
 use std::fmt::Debug;
 
+// EMIT_MIR issue_76432.test.SimplifyComparisonIntegral.diff
 fn test<T: Copy + Debug + PartialEq>(x: T) {
     let v: &[T] = &[x, x, x];
     match v {
diff --git a/tests/mir-opt/lower_array_len.array_bound.NormalizeArrayLen.panic-abort.diff b/tests/mir-opt/lower_array_len.array_bound.GVN.panic-abort.diff
index 5242c5f6afd..6c0c7a1d438 100644
--- a/tests/mir-opt/lower_array_len.array_bound.NormalizeArrayLen.panic-abort.diff
+++ b/tests/mir-opt/lower_array_len.array_bound.GVN.panic-abort.diff
@@ -1,5 +1,5 @@
-- // MIR for `array_bound` before NormalizeArrayLen
-+ // MIR for `array_bound` after NormalizeArrayLen
+- // MIR for `array_bound` before GVN
++ // MIR for `array_bound` after GVN
   
   fn array_bound(_1: usize, _2: &[u8; N]) -> u8 {
       debug index => _1;
@@ -24,14 +24,15 @@
           _7 = &(*_2);
           _6 = move _7 as &[u8] (PointerCoercion(Unsize));
           StorageDead(_7);
--         _5 = Len((*_6));
+-         _5 = PtrMetadata(move _6);
 +         _5 = const N;
           goto -> bb1;
       }
   
       bb1: {
           StorageDead(_6);
-          _3 = Lt(move _4, move _5);
+-         _3 = Lt(move _4, move _5);
++         _3 = Lt(_1, move _5);
           switchInt(move _3) -> [0: bb4, otherwise: bb2];
       }
   
@@ -40,13 +41,17 @@
           StorageDead(_4);
           StorageLive(_8);
           _8 = _1;
-          _9 = Len((*_2));
-          _10 = Lt(_8, _9);
-          assert(move _10, "index out of bounds: the length is {} but the index is {}", move _9, _8) -> [success: bb3, unwind unreachable];
+-         _9 = Len((*_2));
+-         _10 = Lt(_8, _9);
+-         assert(move _10, "index out of bounds: the length is {} but the index is {}", move _9, _8) -> [success: bb3, unwind unreachable];
++         _9 = const N;
++         _10 = Lt(_1, const N);
++         assert(move _10, "index out of bounds: the length is {} but the index is {}", const N, _1) -> [success: bb3, unwind unreachable];
       }
   
       bb3: {
-          _0 = (*_2)[_8];
+-         _0 = (*_2)[_8];
++         _0 = (*_2)[_1];
           StorageDead(_8);
           goto -> bb5;
       }
diff --git a/tests/mir-opt/lower_array_len.array_bound.NormalizeArrayLen.panic-unwind.diff b/tests/mir-opt/lower_array_len.array_bound.GVN.panic-unwind.diff
index a9e99933b12..ed41703c873 100644
--- a/tests/mir-opt/lower_array_len.array_bound.NormalizeArrayLen.panic-unwind.diff
+++ b/tests/mir-opt/lower_array_len.array_bound.GVN.panic-unwind.diff
@@ -1,5 +1,5 @@
-- // MIR for `array_bound` before NormalizeArrayLen
-+ // MIR for `array_bound` after NormalizeArrayLen
+- // MIR for `array_bound` before GVN
++ // MIR for `array_bound` after GVN
   
   fn array_bound(_1: usize, _2: &[u8; N]) -> u8 {
       debug index => _1;
@@ -24,14 +24,15 @@
           _7 = &(*_2);
           _6 = move _7 as &[u8] (PointerCoercion(Unsize));
           StorageDead(_7);
--         _5 = Len((*_6));
+-         _5 = PtrMetadata(move _6);
 +         _5 = const N;
           goto -> bb1;
       }
   
       bb1: {
           StorageDead(_6);
-          _3 = Lt(move _4, move _5);
+-         _3 = Lt(move _4, move _5);
++         _3 = Lt(_1, move _5);
           switchInt(move _3) -> [0: bb4, otherwise: bb2];
       }
   
@@ -40,13 +41,17 @@
           StorageDead(_4);
           StorageLive(_8);
           _8 = _1;
-          _9 = Len((*_2));
-          _10 = Lt(_8, _9);
-          assert(move _10, "index out of bounds: the length is {} but the index is {}", move _9, _8) -> [success: bb3, unwind continue];
+-         _9 = Len((*_2));
+-         _10 = Lt(_8, _9);
+-         assert(move _10, "index out of bounds: the length is {} but the index is {}", move _9, _8) -> [success: bb3, unwind continue];
++         _9 = const N;
++         _10 = Lt(_1, const N);
++         assert(move _10, "index out of bounds: the length is {} but the index is {}", const N, _1) -> [success: bb3, unwind continue];
       }
   
       bb3: {
-          _0 = (*_2)[_8];
+-         _0 = (*_2)[_8];
++         _0 = (*_2)[_1];
           StorageDead(_8);
           goto -> bb5;
       }
diff --git a/tests/mir-opt/lower_array_len.array_bound_mut.NormalizeArrayLen.panic-abort.diff b/tests/mir-opt/lower_array_len.array_bound_mut.GVN.panic-abort.diff
index 7749ba6beca..80e8ea37f41 100644
--- a/tests/mir-opt/lower_array_len.array_bound_mut.NormalizeArrayLen.panic-abort.diff
+++ b/tests/mir-opt/lower_array_len.array_bound_mut.GVN.panic-abort.diff
@@ -1,5 +1,5 @@
-- // MIR for `array_bound_mut` before NormalizeArrayLen
-+ // MIR for `array_bound_mut` after NormalizeArrayLen
+- // MIR for `array_bound_mut` before GVN
++ // MIR for `array_bound_mut` after GVN
   
   fn array_bound_mut(_1: usize, _2: &mut [u8; N]) -> u8 {
       debug index => _1;
@@ -27,14 +27,15 @@
           _7 = &(*_2);
           _6 = move _7 as &[u8] (PointerCoercion(Unsize));
           StorageDead(_7);
--         _5 = Len((*_6));
+-         _5 = PtrMetadata(move _6);
 +         _5 = const N;
           goto -> bb1;
       }
   
       bb1: {
           StorageDead(_6);
-          _3 = Lt(move _4, move _5);
+-         _3 = Lt(move _4, move _5);
++         _3 = Lt(_1, move _5);
           switchInt(move _3) -> [0: bb4, otherwise: bb2];
       }
   
@@ -43,13 +44,17 @@
           StorageDead(_4);
           StorageLive(_8);
           _8 = _1;
-          _9 = Len((*_2));
-          _10 = Lt(_8, _9);
-          assert(move _10, "index out of bounds: the length is {} but the index is {}", move _9, _8) -> [success: bb3, unwind unreachable];
+-         _9 = Len((*_2));
+-         _10 = Lt(_8, _9);
+-         assert(move _10, "index out of bounds: the length is {} but the index is {}", move _9, _8) -> [success: bb3, unwind unreachable];
++         _9 = const N;
++         _10 = Lt(_1, const N);
++         assert(move _10, "index out of bounds: the length is {} but the index is {}", const N, _1) -> [success: bb3, unwind unreachable];
       }
   
       bb3: {
-          _0 = (*_2)[_8];
+-         _0 = (*_2)[_8];
++         _0 = (*_2)[_1];
           StorageDead(_8);
           goto -> bb6;
       }
@@ -59,13 +64,17 @@
           StorageDead(_4);
           StorageLive(_11);
           _11 = const 0_usize;
-          _12 = Len((*_2));
-          _13 = Lt(_11, _12);
-          assert(move _13, "index out of bounds: the length is {} but the index is {}", move _12, _11) -> [success: bb5, unwind unreachable];
+-         _12 = Len((*_2));
+-         _13 = Lt(_11, _12);
+-         assert(move _13, "index out of bounds: the length is {} but the index is {}", move _12, _11) -> [success: bb5, unwind unreachable];
++         _12 = const N;
++         _13 = Lt(const 0_usize, const N);
++         assert(move _13, "index out of bounds: the length is {} but the index is {}", const N, const 0_usize) -> [success: bb5, unwind unreachable];
       }
   
       bb5: {
-          (*_2)[_11] = const 42_u8;
+-         (*_2)[_11] = const 42_u8;
++         (*_2)[0 of 1] = const 42_u8;
           StorageDead(_11);
           _0 = const 42_u8;
           goto -> bb6;
diff --git a/tests/mir-opt/lower_array_len.array_bound_mut.NormalizeArrayLen.panic-unwind.diff b/tests/mir-opt/lower_array_len.array_bound_mut.GVN.panic-unwind.diff
index fcc2c1653dc..6e67a6c17ef 100644
--- a/tests/mir-opt/lower_array_len.array_bound_mut.NormalizeArrayLen.panic-unwind.diff
+++ b/tests/mir-opt/lower_array_len.array_bound_mut.GVN.panic-unwind.diff
@@ -1,5 +1,5 @@
-- // MIR for `array_bound_mut` before NormalizeArrayLen
-+ // MIR for `array_bound_mut` after NormalizeArrayLen
+- // MIR for `array_bound_mut` before GVN
++ // MIR for `array_bound_mut` after GVN
   
   fn array_bound_mut(_1: usize, _2: &mut [u8; N]) -> u8 {
       debug index => _1;
@@ -27,14 +27,15 @@
           _7 = &(*_2);
           _6 = move _7 as &[u8] (PointerCoercion(Unsize));
           StorageDead(_7);
--         _5 = Len((*_6));
+-         _5 = PtrMetadata(move _6);
 +         _5 = const N;
           goto -> bb1;
       }
   
       bb1: {
           StorageDead(_6);
-          _3 = Lt(move _4, move _5);
+-         _3 = Lt(move _4, move _5);
++         _3 = Lt(_1, move _5);
           switchInt(move _3) -> [0: bb4, otherwise: bb2];
       }
   
@@ -43,13 +44,17 @@
           StorageDead(_4);
           StorageLive(_8);
           _8 = _1;
-          _9 = Len((*_2));
-          _10 = Lt(_8, _9);
-          assert(move _10, "index out of bounds: the length is {} but the index is {}", move _9, _8) -> [success: bb3, unwind continue];
+-         _9 = Len((*_2));
+-         _10 = Lt(_8, _9);
+-         assert(move _10, "index out of bounds: the length is {} but the index is {}", move _9, _8) -> [success: bb3, unwind continue];
++         _9 = const N;
++         _10 = Lt(_1, const N);
++         assert(move _10, "index out of bounds: the length is {} but the index is {}", const N, _1) -> [success: bb3, unwind continue];
       }
   
       bb3: {
-          _0 = (*_2)[_8];
+-         _0 = (*_2)[_8];
++         _0 = (*_2)[_1];
           StorageDead(_8);
           goto -> bb6;
       }
@@ -59,13 +64,17 @@
           StorageDead(_4);
           StorageLive(_11);
           _11 = const 0_usize;
-          _12 = Len((*_2));
-          _13 = Lt(_11, _12);
-          assert(move _13, "index out of bounds: the length is {} but the index is {}", move _12, _11) -> [success: bb5, unwind continue];
+-         _12 = Len((*_2));
+-         _13 = Lt(_11, _12);
+-         assert(move _13, "index out of bounds: the length is {} but the index is {}", move _12, _11) -> [success: bb5, unwind continue];
++         _12 = const N;
++         _13 = Lt(const 0_usize, const N);
++         assert(move _13, "index out of bounds: the length is {} but the index is {}", const N, const 0_usize) -> [success: bb5, unwind continue];
       }
   
       bb5: {
-          (*_2)[_11] = const 42_u8;
+-         (*_2)[_11] = const 42_u8;
++         (*_2)[0 of 1] = const 42_u8;
           StorageDead(_11);
           _0 = const 42_u8;
           goto -> bb6;
diff --git a/tests/mir-opt/lower_array_len.array_len.NormalizeArrayLen.panic-abort.diff b/tests/mir-opt/lower_array_len.array_len.GVN.panic-abort.diff
index 1bdc62183c3..9c1b9a708c5 100644
--- a/tests/mir-opt/lower_array_len.array_len.NormalizeArrayLen.panic-abort.diff
+++ b/tests/mir-opt/lower_array_len.array_len.GVN.panic-abort.diff
@@ -1,5 +1,5 @@
-- // MIR for `array_len` before NormalizeArrayLen
-+ // MIR for `array_len` after NormalizeArrayLen
+- // MIR for `array_len` before GVN
++ // MIR for `array_len` after GVN
   
   fn array_len(_1: &[u8; N]) -> usize {
       debug arr => _1;
@@ -13,7 +13,7 @@
           _3 = &(*_1);
           _2 = move _3 as &[u8] (PointerCoercion(Unsize));
           StorageDead(_3);
--         _0 = Len((*_2));
+-         _0 = PtrMetadata(move _2);
 +         _0 = const N;
           goto -> bb1;
       }
diff --git a/tests/mir-opt/lower_array_len.array_len.NormalizeArrayLen.panic-unwind.diff b/tests/mir-opt/lower_array_len.array_len.GVN.panic-unwind.diff
index 1bdc62183c3..9c1b9a708c5 100644
--- a/tests/mir-opt/lower_array_len.array_len.NormalizeArrayLen.panic-unwind.diff
+++ b/tests/mir-opt/lower_array_len.array_len.GVN.panic-unwind.diff
@@ -1,5 +1,5 @@
-- // MIR for `array_len` before NormalizeArrayLen
-+ // MIR for `array_len` after NormalizeArrayLen
+- // MIR for `array_len` before GVN
++ // MIR for `array_len` after GVN
   
   fn array_len(_1: &[u8; N]) -> usize {
       debug arr => _1;
@@ -13,7 +13,7 @@
           _3 = &(*_1);
           _2 = move _3 as &[u8] (PointerCoercion(Unsize));
           StorageDead(_3);
--         _0 = Len((*_2));
+-         _0 = PtrMetadata(move _2);
 +         _0 = const N;
           goto -> bb1;
       }
diff --git a/tests/mir-opt/lower_array_len.array_len_by_value.NormalizeArrayLen.panic-abort.diff b/tests/mir-opt/lower_array_len.array_len_by_value.GVN.panic-abort.diff
index 9862b2fad8e..97fa503ac2e 100644
--- a/tests/mir-opt/lower_array_len.array_len_by_value.NormalizeArrayLen.panic-abort.diff
+++ b/tests/mir-opt/lower_array_len.array_len_by_value.GVN.panic-abort.diff
@@ -1,5 +1,5 @@
-- // MIR for `array_len_by_value` before NormalizeArrayLen
-+ // MIR for `array_len_by_value` after NormalizeArrayLen
+- // MIR for `array_len_by_value` before GVN
++ // MIR for `array_len_by_value` after GVN
   
   fn array_len_by_value(_1: [u8; N]) -> usize {
       debug arr => _1;
@@ -13,7 +13,7 @@
           _3 = &_1;
           _2 = move _3 as &[u8] (PointerCoercion(Unsize));
           StorageDead(_3);
--         _0 = Len((*_2));
+-         _0 = PtrMetadata(move _2);
 +         _0 = const N;
           goto -> bb1;
       }
diff --git a/tests/mir-opt/lower_array_len.array_len_by_value.NormalizeArrayLen.panic-unwind.diff b/tests/mir-opt/lower_array_len.array_len_by_value.GVN.panic-unwind.diff
index 9862b2fad8e..97fa503ac2e 100644
--- a/tests/mir-opt/lower_array_len.array_len_by_value.NormalizeArrayLen.panic-unwind.diff
+++ b/tests/mir-opt/lower_array_len.array_len_by_value.GVN.panic-unwind.diff
@@ -1,5 +1,5 @@
-- // MIR for `array_len_by_value` before NormalizeArrayLen
-+ // MIR for `array_len_by_value` after NormalizeArrayLen
+- // MIR for `array_len_by_value` before GVN
++ // MIR for `array_len_by_value` after GVN
   
   fn array_len_by_value(_1: [u8; N]) -> usize {
       debug arr => _1;
@@ -13,7 +13,7 @@
           _3 = &_1;
           _2 = move _3 as &[u8] (PointerCoercion(Unsize));
           StorageDead(_3);
--         _0 = Len((*_2));
+-         _0 = PtrMetadata(move _2);
 +         _0 = const N;
           goto -> bb1;
       }
diff --git a/tests/mir-opt/lower_array_len.array_len_raw.NormalizeArrayLen.panic-abort.diff b/tests/mir-opt/lower_array_len.array_len_raw.GVN.panic-abort.diff
index 633a344a2ed..b5e8b66813a 100644
--- a/tests/mir-opt/lower_array_len.array_len_raw.NormalizeArrayLen.panic-abort.diff
+++ b/tests/mir-opt/lower_array_len.array_len_raw.GVN.panic-abort.diff
@@ -1,5 +1,5 @@
-- // MIR for `array_len_raw` before NormalizeArrayLen
-+ // MIR for `array_len_raw` after NormalizeArrayLen
+- // MIR for `array_len_raw` before GVN
++ // MIR for `array_len_raw` after GVN
   
   fn array_len_raw(_1: [u8; N]) -> usize {
       debug arr => _1;
@@ -18,7 +18,8 @@
       }
   
       bb0: {
-          StorageLive(_2);
+-         StorageLive(_2);
++         nop;
           StorageLive(_3);
           StorageLive(_4);
           _4 = &_1;
@@ -32,7 +33,7 @@
           StorageLive(_7);
           _7 = &(*_5);
           _6 = &(*_7);
--         _0 = Len((*_6));
+-         _0 = PtrMetadata(move _6);
 +         _0 = const N;
           goto -> bb1;
       }
@@ -40,7 +41,8 @@
       bb1: {
           StorageDead(_6);
           StorageDead(_5);
-          StorageDead(_2);
+-         StorageDead(_2);
++         nop;
           StorageDead(_7);
           return;
       }
diff --git a/tests/mir-opt/lower_array_len.array_len_raw.NormalizeArrayLen.panic-unwind.diff b/tests/mir-opt/lower_array_len.array_len_raw.GVN.panic-unwind.diff
index 633a344a2ed..b5e8b66813a 100644
--- a/tests/mir-opt/lower_array_len.array_len_raw.NormalizeArrayLen.panic-unwind.diff
+++ b/tests/mir-opt/lower_array_len.array_len_raw.GVN.panic-unwind.diff
@@ -1,5 +1,5 @@
-- // MIR for `array_len_raw` before NormalizeArrayLen
-+ // MIR for `array_len_raw` after NormalizeArrayLen
+- // MIR for `array_len_raw` before GVN
++ // MIR for `array_len_raw` after GVN
   
   fn array_len_raw(_1: [u8; N]) -> usize {
       debug arr => _1;
@@ -18,7 +18,8 @@
       }
   
       bb0: {
-          StorageLive(_2);
+-         StorageLive(_2);
++         nop;
           StorageLive(_3);
           StorageLive(_4);
           _4 = &_1;
@@ -32,7 +33,7 @@
           StorageLive(_7);
           _7 = &(*_5);
           _6 = &(*_7);
--         _0 = Len((*_6));
+-         _0 = PtrMetadata(move _6);
 +         _0 = const N;
           goto -> bb1;
       }
@@ -40,7 +41,8 @@
       bb1: {
           StorageDead(_6);
           StorageDead(_5);
-          StorageDead(_2);
+-         StorageDead(_2);
++         nop;
           StorageDead(_7);
           return;
       }
diff --git a/tests/mir-opt/lower_array_len.array_len_reborrow.NormalizeArrayLen.panic-abort.diff b/tests/mir-opt/lower_array_len.array_len_reborrow.GVN.panic-abort.diff
index ecba06a2e4d..0299c6acd80 100644
--- a/tests/mir-opt/lower_array_len.array_len_reborrow.NormalizeArrayLen.panic-abort.diff
+++ b/tests/mir-opt/lower_array_len.array_len_reborrow.GVN.panic-abort.diff
@@ -1,5 +1,5 @@
-- // MIR for `array_len_reborrow` before NormalizeArrayLen
-+ // MIR for `array_len_reborrow` after NormalizeArrayLen
+- // MIR for `array_len_reborrow` before GVN
++ // MIR for `array_len_reborrow` after GVN
   
   fn array_len_reborrow(_1: [u8; N]) -> usize {
       debug arr => _1;
@@ -17,7 +17,8 @@
       }
   
       bb0: {
-          StorageLive(_2);
+-         StorageLive(_2);
++         nop;
           StorageLive(_3);
           StorageLive(_4);
           _4 = &mut _1;
@@ -29,7 +30,7 @@
           _5 = &(*_2);
           StorageLive(_6);
           _6 = &(*_5);
--         _0 = Len((*_6));
+-         _0 = PtrMetadata(move _6);
 +         _0 = const N;
           goto -> bb1;
       }
@@ -37,7 +38,8 @@
       bb1: {
           StorageDead(_6);
           StorageDead(_5);
-          StorageDead(_2);
+-         StorageDead(_2);
++         nop;
           return;
       }
   }
diff --git a/tests/mir-opt/lower_array_len.array_len_reborrow.NormalizeArrayLen.panic-unwind.diff b/tests/mir-opt/lower_array_len.array_len_reborrow.GVN.panic-unwind.diff
index ecba06a2e4d..0299c6acd80 100644
--- a/tests/mir-opt/lower_array_len.array_len_reborrow.NormalizeArrayLen.panic-unwind.diff
+++ b/tests/mir-opt/lower_array_len.array_len_reborrow.GVN.panic-unwind.diff
@@ -1,5 +1,5 @@
-- // MIR for `array_len_reborrow` before NormalizeArrayLen
-+ // MIR for `array_len_reborrow` after NormalizeArrayLen
+- // MIR for `array_len_reborrow` before GVN
++ // MIR for `array_len_reborrow` after GVN
   
   fn array_len_reborrow(_1: [u8; N]) -> usize {
       debug arr => _1;
@@ -17,7 +17,8 @@
       }
   
       bb0: {
-          StorageLive(_2);
+-         StorageLive(_2);
++         nop;
           StorageLive(_3);
           StorageLive(_4);
           _4 = &mut _1;
@@ -29,7 +30,7 @@
           _5 = &(*_2);
           StorageLive(_6);
           _6 = &(*_5);
--         _0 = Len((*_6));
+-         _0 = PtrMetadata(move _6);
 +         _0 = const N;
           goto -> bb1;
       }
@@ -37,7 +38,8 @@
       bb1: {
           StorageDead(_6);
           StorageDead(_5);
-          StorageDead(_2);
+-         StorageDead(_2);
++         nop;
           return;
       }
   }
diff --git a/tests/mir-opt/lower_array_len.rs b/tests/mir-opt/lower_array_len.rs
index 62fc9ef67d6..caa598d067a 100644
--- a/tests/mir-opt/lower_array_len.rs
+++ b/tests/mir-opt/lower_array_len.rs
@@ -1,20 +1,20 @@
 // EMIT_MIR_FOR_EACH_PANIC_STRATEGY
-//@ test-mir-pass: NormalizeArrayLen
+//@ test-mir-pass: GVN
 //@ compile-flags: -Zmir-enable-passes=+LowerSliceLenCalls
 
-// EMIT_MIR lower_array_len.array_bound.NormalizeArrayLen.diff
+// EMIT_MIR lower_array_len.array_bound.GVN.diff
 pub fn array_bound<const N: usize>(index: usize, slice: &[u8; N]) -> u8 {
     // CHECK-LABEL: fn array_bound(
     // CHECK: [[len:_.*]] = const N;
-    // CHECK: Lt(move {{_.*}}, move [[len]]);
+    // CHECK: Lt(_1, move [[len]]);
     if index < slice.len() { slice[index] } else { 42 }
 }
 
-// EMIT_MIR lower_array_len.array_bound_mut.NormalizeArrayLen.diff
+// EMIT_MIR lower_array_len.array_bound_mut.GVN.diff
 pub fn array_bound_mut<const N: usize>(index: usize, slice: &mut [u8; N]) -> u8 {
     // CHECK-LABEL: fn array_bound_mut(
     // CHECK: [[len:_.*]] = const N;
-    // CHECK: Lt(move {{_.*}}, move [[len]]);
+    // CHECK: Lt(_1, move [[len]]);
     if index < slice.len() {
         slice[index]
     } else {
@@ -24,21 +24,21 @@ pub fn array_bound_mut<const N: usize>(index: usize, slice: &mut [u8; N]) -> u8
     }
 }
 
-// EMIT_MIR lower_array_len.array_len.NormalizeArrayLen.diff
+// EMIT_MIR lower_array_len.array_len.GVN.diff
 pub fn array_len<const N: usize>(arr: &[u8; N]) -> usize {
     // CHECK-LABEL: fn array_len(
     // CHECK: _0 = const N;
     arr.len()
 }
 
-// EMIT_MIR lower_array_len.array_len_by_value.NormalizeArrayLen.diff
+// EMIT_MIR lower_array_len.array_len_by_value.GVN.diff
 pub fn array_len_by_value<const N: usize>(arr: [u8; N]) -> usize {
     // CHECK-LABEL: fn array_len_by_value(
     // CHECK: _0 = const N;
     arr.len()
 }
 
-// EMIT_MIR lower_array_len.array_len_reborrow.NormalizeArrayLen.diff
+// EMIT_MIR lower_array_len.array_len_reborrow.GVN.diff
 pub fn array_len_reborrow<const N: usize>(mut arr: [u8; N]) -> usize {
     // CHECK-LABEL: fn array_len_reborrow(
     // CHECK: _0 = const N;
@@ -47,7 +47,7 @@ pub fn array_len_reborrow<const N: usize>(mut arr: [u8; N]) -> usize {
     arr.len()
 }
 
-// EMIT_MIR lower_array_len.array_len_raw.NormalizeArrayLen.diff
+// EMIT_MIR lower_array_len.array_len_raw.GVN.diff
 pub fn array_len_raw<const N: usize>(arr: [u8; N]) -> usize {
     // CHECK-LABEL: fn array_len_raw(
     // CHECK: _0 = const N;
diff --git a/tests/mir-opt/lower_slice_len.bound.LowerSliceLenCalls.panic-abort.diff b/tests/mir-opt/lower_slice_len.bound.LowerSliceLenCalls.panic-abort.diff
index 7f752ca0f5a..a212ee67881 100644
--- a/tests/mir-opt/lower_slice_len.bound.LowerSliceLenCalls.panic-abort.diff
+++ b/tests/mir-opt/lower_slice_len.bound.LowerSliceLenCalls.panic-abort.diff
@@ -21,7 +21,7 @@
           StorageLive(_6);
           _6 = &(*_2);
 -         _5 = core::slice::<impl [u8]>::len(move _6) -> [return: bb1, unwind unreachable];
-+         _5 = Len((*_6));
++         _5 = PtrMetadata(move _6);
 +         goto -> bb1;
       }
   
diff --git a/tests/mir-opt/lower_slice_len.bound.LowerSliceLenCalls.panic-unwind.diff b/tests/mir-opt/lower_slice_len.bound.LowerSliceLenCalls.panic-unwind.diff
index d73b563a0e5..38ec8a5b0c7 100644
--- a/tests/mir-opt/lower_slice_len.bound.LowerSliceLenCalls.panic-unwind.diff
+++ b/tests/mir-opt/lower_slice_len.bound.LowerSliceLenCalls.panic-unwind.diff
@@ -21,7 +21,7 @@
           StorageLive(_6);
           _6 = &(*_2);
 -         _5 = core::slice::<impl [u8]>::len(move _6) -> [return: bb1, unwind continue];
-+         _5 = Len((*_6));
++         _5 = PtrMetadata(move _6);
 +         goto -> bb1;
       }
   
diff --git a/tests/mir-opt/or_pattern.rs b/tests/mir-opt/or_pattern.rs
new file mode 100644
index 00000000000..0ad0ce8ead1
--- /dev/null
+++ b/tests/mir-opt/or_pattern.rs
@@ -0,0 +1,24 @@
+// skip-filecheck
+
+// EMIT_MIR or_pattern.shortcut_second_or.SimplifyCfg-initial.after.mir
+fn shortcut_second_or() {
+    // Check that after matching `0`, failing to match `2 | 3` skips trying to match `(1, 2 | 3)`.
+    match ((0, 0), 0) {
+        (x @ (0, _) | x @ (_, 1), y @ 2 | y @ 3) => {}
+        _ => {}
+    }
+}
+
+// EMIT_MIR or_pattern.single_switchint.SimplifyCfg-initial.after.mir
+fn single_switchint() {
+    // Check how many `SwitchInt`s we do. In theory a single one is necessary.
+    match (1, true) {
+        (1, true) => 1,
+        (2, false) => 2,
+        (1 | 2, true | false) => 3,
+        (3 | 4, true | false) => 4,
+        _ => 5,
+    };
+}
+
+fn main() {}
diff --git a/tests/mir-opt/or_pattern.shortcut_second_or.SimplifyCfg-initial.after.mir b/tests/mir-opt/or_pattern.shortcut_second_or.SimplifyCfg-initial.after.mir
new file mode 100644
index 00000000000..56edd38a6da
--- /dev/null
+++ b/tests/mir-opt/or_pattern.shortcut_second_or.SimplifyCfg-initial.after.mir
@@ -0,0 +1,100 @@
+// MIR for `shortcut_second_or` after SimplifyCfg-initial
+
+fn shortcut_second_or() -> () {
+    let mut _0: ();
+    let mut _1: ((i32, i32), i32);
+    let mut _2: (i32, i32);
+    let _3: (i32, i32);
+    let _4: i32;
+    scope 1 {
+        debug x => _3;
+        debug y => _4;
+    }
+
+    bb0: {
+        StorageLive(_1);
+        StorageLive(_2);
+        _2 = (const 0_i32, const 0_i32);
+        _1 = (move _2, const 0_i32);
+        StorageDead(_2);
+        PlaceMention(_1);
+        switchInt(((_1.0: (i32, i32)).0: i32)) -> [0: bb4, otherwise: bb2];
+    }
+
+    bb1: {
+        _0 = const ();
+        goto -> bb14;
+    }
+
+    bb2: {
+        switchInt(((_1.0: (i32, i32)).1: i32)) -> [1: bb3, otherwise: bb1];
+    }
+
+    bb3: {
+        switchInt((_1.1: i32)) -> [2: bb7, 3: bb8, otherwise: bb1];
+    }
+
+    bb4: {
+        switchInt((_1.1: i32)) -> [2: bb5, 3: bb6, otherwise: bb1];
+    }
+
+    bb5: {
+        falseEdge -> [real: bb10, imaginary: bb6];
+    }
+
+    bb6: {
+        falseEdge -> [real: bb11, imaginary: bb2];
+    }
+
+    bb7: {
+        falseEdge -> [real: bb12, imaginary: bb8];
+    }
+
+    bb8: {
+        falseEdge -> [real: bb13, imaginary: bb1];
+    }
+
+    bb9: {
+        _0 = const ();
+        StorageDead(_4);
+        StorageDead(_3);
+        goto -> bb14;
+    }
+
+    bb10: {
+        StorageLive(_3);
+        _3 = (_1.0: (i32, i32));
+        StorageLive(_4);
+        _4 = (_1.1: i32);
+        goto -> bb9;
+    }
+
+    bb11: {
+        StorageLive(_3);
+        _3 = (_1.0: (i32, i32));
+        StorageLive(_4);
+        _4 = (_1.1: i32);
+        goto -> bb9;
+    }
+
+    bb12: {
+        StorageLive(_3);
+        _3 = (_1.0: (i32, i32));
+        StorageLive(_4);
+        _4 = (_1.1: i32);
+        goto -> bb9;
+    }
+
+    bb13: {
+        StorageLive(_3);
+        _3 = (_1.0: (i32, i32));
+        StorageLive(_4);
+        _4 = (_1.1: i32);
+        goto -> bb9;
+    }
+
+    bb14: {
+        StorageDead(_1);
+        return;
+    }
+}
diff --git a/tests/mir-opt/or_pattern.single_switchint.SimplifyCfg-initial.after.mir b/tests/mir-opt/or_pattern.single_switchint.SimplifyCfg-initial.after.mir
new file mode 100644
index 00000000000..eafe95b4a11
--- /dev/null
+++ b/tests/mir-opt/or_pattern.single_switchint.SimplifyCfg-initial.after.mir
@@ -0,0 +1,75 @@
+// MIR for `single_switchint` after SimplifyCfg-initial
+
+fn single_switchint() -> () {
+    let mut _0: ();
+    let _1: i32;
+    let mut _2: (i32, bool);
+
+    bb0: {
+        StorageLive(_1);
+        StorageLive(_2);
+        _2 = (const 1_i32, const true);
+        PlaceMention(_2);
+        switchInt((_2.0: i32)) -> [1: bb2, 2: bb4, otherwise: bb1];
+    }
+
+    bb1: {
+        switchInt((_2.0: i32)) -> [3: bb8, 4: bb8, otherwise: bb7];
+    }
+
+    bb2: {
+        switchInt((_2.1: bool)) -> [0: bb6, otherwise: bb3];
+    }
+
+    bb3: {
+        falseEdge -> [real: bb9, imaginary: bb4];
+    }
+
+    bb4: {
+        switchInt((_2.1: bool)) -> [0: bb5, otherwise: bb6];
+    }
+
+    bb5: {
+        falseEdge -> [real: bb10, imaginary: bb6];
+    }
+
+    bb6: {
+        falseEdge -> [real: bb11, imaginary: bb1];
+    }
+
+    bb7: {
+        _1 = const 5_i32;
+        goto -> bb13;
+    }
+
+    bb8: {
+        falseEdge -> [real: bb12, imaginary: bb7];
+    }
+
+    bb9: {
+        _1 = const 1_i32;
+        goto -> bb13;
+    }
+
+    bb10: {
+        _1 = const 2_i32;
+        goto -> bb13;
+    }
+
+    bb11: {
+        _1 = const 3_i32;
+        goto -> bb13;
+    }
+
+    bb12: {
+        _1 = const 4_i32;
+        goto -> bb13;
+    }
+
+    bb13: {
+        StorageDead(_2);
+        StorageDead(_1);
+        _0 = const ();
+        return;
+    }
+}
diff --git a/tests/mir-opt/pre-codegen/checked_ops.step_forward.PreCodegen.after.panic-abort.mir b/tests/mir-opt/pre-codegen/checked_ops.step_forward.PreCodegen.after.panic-abort.mir
index cfb9134a1f1..69c11ebcacc 100644
--- a/tests/mir-opt/pre-codegen/checked_ops.step_forward.PreCodegen.after.panic-abort.mir
+++ b/tests/mir-opt/pre-codegen/checked_ops.step_forward.PreCodegen.after.panic-abort.mir
@@ -4,12 +4,82 @@ fn step_forward(_1: u16, _2: usize) -> u16 {
     debug x => _1;
     debug n => _2;
     let mut _0: u16;
+    scope 1 (inlined <u16 as Step>::forward) {
+        let mut _8: u16;
+        scope 2 {
+        }
+        scope 3 (inlined <u16 as Step>::forward_checked) {
+            scope 4 {
+                scope 6 (inlined core::num::<impl u16>::checked_add) {
+                    let mut _5: (u16, bool);
+                    let mut _6: bool;
+                    let mut _7: bool;
+                }
+            }
+            scope 5 (inlined convert::num::ptr_try_from_impls::<impl TryFrom<usize> for u16>::try_from) {
+                let mut _3: bool;
+                let mut _4: u16;
+            }
+        }
+        scope 7 (inlined Option::<u16>::is_none) {
+            scope 8 (inlined Option::<u16>::is_some) {
+            }
+        }
+        scope 9 (inlined core::num::<impl u16>::wrapping_add) {
+        }
+    }
 
     bb0: {
-        _0 = <u16 as Step>::forward(move _1, move _2) -> [return: bb1, unwind unreachable];
+        StorageLive(_4);
+        StorageLive(_3);
+        _3 = Gt(_2, const 65535_usize);
+        switchInt(move _3) -> [0: bb1, otherwise: bb5];
     }
 
     bb1: {
+        _4 = _2 as u16 (IntToInt);
+        StorageDead(_3);
+        StorageLive(_7);
+        StorageLive(_6);
+        StorageLive(_5);
+        _5 = AddWithOverflow(_1, _4);
+        _6 = (_5.1: bool);
+        _7 = unlikely(move _6) -> [return: bb2, unwind unreachable];
+    }
+
+    bb2: {
+        switchInt(move _7) -> [0: bb3, otherwise: bb4];
+    }
+
+    bb3: {
+        StorageDead(_5);
+        StorageDead(_6);
+        StorageDead(_7);
+        goto -> bb7;
+    }
+
+    bb4: {
+        StorageDead(_5);
+        StorageDead(_6);
+        StorageDead(_7);
+        goto -> bb6;
+    }
+
+    bb5: {
+        StorageDead(_3);
+        goto -> bb6;
+    }
+
+    bb6: {
+        assert(!const true, "attempt to compute `{} + {}`, which would overflow", const core::num::<impl u16>::MAX, const 1_u16) -> [success: bb7, unwind unreachable];
+    }
+
+    bb7: {
+        StorageLive(_8);
+        _8 = _2 as u16 (IntToInt);
+        _0 = Add(_1, _8);
+        StorageDead(_8);
+        StorageDead(_4);
         return;
     }
 }
diff --git a/tests/mir-opt/pre-codegen/checked_ops.step_forward.PreCodegen.after.panic-unwind.mir b/tests/mir-opt/pre-codegen/checked_ops.step_forward.PreCodegen.after.panic-unwind.mir
index cacc1224aba..e6ea6c51001 100644
--- a/tests/mir-opt/pre-codegen/checked_ops.step_forward.PreCodegen.after.panic-unwind.mir
+++ b/tests/mir-opt/pre-codegen/checked_ops.step_forward.PreCodegen.after.panic-unwind.mir
@@ -4,12 +4,82 @@ fn step_forward(_1: u16, _2: usize) -> u16 {
     debug x => _1;
     debug n => _2;
     let mut _0: u16;
+    scope 1 (inlined <u16 as Step>::forward) {
+        let mut _8: u16;
+        scope 2 {
+        }
+        scope 3 (inlined <u16 as Step>::forward_checked) {
+            scope 4 {
+                scope 6 (inlined core::num::<impl u16>::checked_add) {
+                    let mut _5: (u16, bool);
+                    let mut _6: bool;
+                    let mut _7: bool;
+                }
+            }
+            scope 5 (inlined convert::num::ptr_try_from_impls::<impl TryFrom<usize> for u16>::try_from) {
+                let mut _3: bool;
+                let mut _4: u16;
+            }
+        }
+        scope 7 (inlined Option::<u16>::is_none) {
+            scope 8 (inlined Option::<u16>::is_some) {
+            }
+        }
+        scope 9 (inlined core::num::<impl u16>::wrapping_add) {
+        }
+    }
 
     bb0: {
-        _0 = <u16 as Step>::forward(move _1, move _2) -> [return: bb1, unwind continue];
+        StorageLive(_4);
+        StorageLive(_3);
+        _3 = Gt(_2, const 65535_usize);
+        switchInt(move _3) -> [0: bb1, otherwise: bb5];
     }
 
     bb1: {
+        _4 = _2 as u16 (IntToInt);
+        StorageDead(_3);
+        StorageLive(_7);
+        StorageLive(_6);
+        StorageLive(_5);
+        _5 = AddWithOverflow(_1, _4);
+        _6 = (_5.1: bool);
+        _7 = unlikely(move _6) -> [return: bb2, unwind unreachable];
+    }
+
+    bb2: {
+        switchInt(move _7) -> [0: bb3, otherwise: bb4];
+    }
+
+    bb3: {
+        StorageDead(_5);
+        StorageDead(_6);
+        StorageDead(_7);
+        goto -> bb7;
+    }
+
+    bb4: {
+        StorageDead(_5);
+        StorageDead(_6);
+        StorageDead(_7);
+        goto -> bb6;
+    }
+
+    bb5: {
+        StorageDead(_3);
+        goto -> bb6;
+    }
+
+    bb6: {
+        assert(!const true, "attempt to compute `{} + {}`, which would overflow", const core::num::<impl u16>::MAX, const 1_u16) -> [success: bb7, unwind continue];
+    }
+
+    bb7: {
+        StorageLive(_8);
+        _8 = _2 as u16 (IntToInt);
+        _0 = Add(_1, _8);
+        StorageDead(_8);
+        StorageDead(_4);
         return;
     }
 }
diff --git a/tests/mir-opt/pre-codegen/loops.mapped.PreCodegen.after.mir b/tests/mir-opt/pre-codegen/loops.mapped.PreCodegen.after.mir
index b800a1be22b..51d41e9ff05 100644
--- a/tests/mir-opt/pre-codegen/loops.mapped.PreCodegen.after.mir
+++ b/tests/mir-opt/pre-codegen/loops.mapped.PreCodegen.after.mir
@@ -7,14 +7,30 @@ fn mapped(_1: impl Iterator<Item = T>, _2: impl Fn(T) -> U) -> () {
     let mut _3: std::iter::Map<impl Iterator<Item = T>, impl Fn(T) -> U>;
     let mut _4: std::iter::Map<impl Iterator<Item = T>, impl Fn(T) -> U>;
     let mut _5: &mut std::iter::Map<impl Iterator<Item = T>, impl Fn(T) -> U>;
-    let mut _6: std::option::Option<U>;
-    let mut _7: isize;
-    let _9: ();
+    let mut _13: std::option::Option<U>;
+    let _15: ();
     scope 1 {
         debug iter => _4;
-        let _8: U;
+        let _14: U;
         scope 2 {
-            debug x => _8;
+            debug x => _14;
+        }
+        scope 4 (inlined <Map<impl Iterator<Item = T>, impl Fn(T) -> U> as Iterator>::next) {
+            debug self => _5;
+            let mut _6: &mut impl Iterator<Item = T>;
+            let mut _7: std::option::Option<T>;
+            let mut _8: &mut impl Fn(T) -> U;
+            scope 5 (inlined Option::<T>::map::<U, &mut impl Fn(T) -> U>) {
+                debug self => _7;
+                debug f => _8;
+                let mut _9: isize;
+                let _10: T;
+                let mut _11: (T,);
+                let mut _12: U;
+                scope 6 {
+                    debug x => _10;
+                }
+            }
         }
     }
     scope 3 (inlined <Map<impl Iterator<Item = T>, impl Fn(T) -> U> as IntoIterator>::into_iter) {
@@ -32,20 +48,30 @@ fn mapped(_1: impl Iterator<Item = T>, _2: impl Fn(T) -> U) -> () {
     }
 
     bb2: {
-        StorageLive(_6);
-        StorageLive(_5);
+        StorageLive(_13);
         _5 = &mut _4;
-        _6 = <Map<impl Iterator<Item = T>, impl Fn(T) -> U> as Iterator>::next(move _5) -> [return: bb3, unwind: bb9];
+        StorageLive(_8);
+        StorageLive(_7);
+        StorageLive(_6);
+        _6 = &mut (_4.0: impl Iterator<Item = T>);
+        _7 = <impl Iterator<Item = T> as Iterator>::next(move _6) -> [return: bb3, unwind: bb10];
     }
 
     bb3: {
-        StorageDead(_5);
-        _7 = discriminant(_6);
-        switchInt(move _7) -> [0: bb4, 1: bb6, otherwise: bb8];
+        StorageDead(_6);
+        _8 = &mut (_4.1: impl Fn(T) -> U);
+        StorageLive(_9);
+        StorageLive(_10);
+        _9 = discriminant(_7);
+        switchInt(move _9) -> [0: bb4, 1: bb6, otherwise: bb9];
     }
 
     bb4: {
-        StorageDead(_6);
+        StorageDead(_10);
+        StorageDead(_9);
+        StorageDead(_7);
+        StorageDead(_8);
+        StorageDead(_13);
         drop(_4) -> [return: bb5, unwind continue];
     }
 
@@ -55,24 +81,39 @@ fn mapped(_1: impl Iterator<Item = T>, _2: impl Fn(T) -> U) -> () {
     }
 
     bb6: {
-        _8 = move ((_6 as Some).0: U);
-        _9 = opaque::<U>(move _8) -> [return: bb7, unwind: bb9];
+        _10 = move ((_7 as Some).0: T);
+        StorageLive(_12);
+        StorageLive(_11);
+        _11 = (_10,);
+        _12 = <&mut impl Fn(T) -> U as FnOnce<(T,)>>::call_once(move _8, move _11) -> [return: bb7, unwind: bb10];
     }
 
     bb7: {
-        StorageDead(_6);
-        goto -> bb2;
+        StorageDead(_11);
+        _13 = Option::<U>::Some(move _12);
+        StorageDead(_12);
+        StorageDead(_10);
+        StorageDead(_9);
+        StorageDead(_7);
+        StorageDead(_8);
+        _14 = move ((_13 as Some).0: U);
+        _15 = opaque::<U>(move _14) -> [return: bb8, unwind: bb10];
     }
 
     bb8: {
-        unreachable;
+        StorageDead(_13);
+        goto -> bb2;
     }
 
-    bb9 (cleanup): {
-        drop(_4) -> [return: bb10, unwind terminate(cleanup)];
+    bb9: {
+        unreachable;
     }
 
     bb10 (cleanup): {
+        drop(_4) -> [return: bb11, unwind terminate(cleanup)];
+    }
+
+    bb11 (cleanup): {
         resume;
     }
 }
diff --git a/tests/mir-opt/pre-codegen/slice_index.rs b/tests/mir-opt/pre-codegen/slice_index.rs
index 886e57a3380..6ddc4ad0220 100644
--- a/tests/mir-opt/pre-codegen/slice_index.rs
+++ b/tests/mir-opt/pre-codegen/slice_index.rs
@@ -19,7 +19,7 @@ pub fn slice_index_usize(slice: &[u32], index: usize) -> u32 {
 // EMIT_MIR slice_index.slice_get_mut_usize.PreCodegen.after.mir
 pub fn slice_get_mut_usize(slice: &mut [u32], index: usize) -> Option<&mut u32> {
     // CHECK-LABEL: slice_get_mut_usize
-    // CHECK: [[LEN:_[0-9]+]] = Len((*_1))
+    // CHECK: [[LEN:_[0-9]+]] = PtrMetadata(_1)
     // CHECK: Lt(_2, move [[LEN]])
     // CHECK-NOT: precondition_check
     slice.get_mut(index)
diff --git a/tests/mir-opt/pre-codegen/slice_index.slice_get_mut_usize.PreCodegen.after.panic-abort.mir b/tests/mir-opt/pre-codegen/slice_index.slice_get_mut_usize.PreCodegen.after.panic-abort.mir
index f2ef2b0cc3c..d7f09fafeeb 100644
--- a/tests/mir-opt/pre-codegen/slice_index.slice_get_mut_usize.PreCodegen.after.panic-abort.mir
+++ b/tests/mir-opt/pre-codegen/slice_index.slice_get_mut_usize.PreCodegen.after.panic-abort.mir
@@ -23,7 +23,7 @@ fn slice_get_mut_usize(_1: &mut [u32], _2: usize) -> Option<&mut u32> {
         StorageLive(_7);
         StorageLive(_4);
         StorageLive(_3);
-        _3 = Len((*_1));
+        _3 = PtrMetadata(_1);
         _4 = Lt(_2, move _3);
         switchInt(move _4) -> [0: bb1, otherwise: bb2];
     }
diff --git a/tests/mir-opt/pre-codegen/slice_index.slice_get_mut_usize.PreCodegen.after.panic-unwind.mir b/tests/mir-opt/pre-codegen/slice_index.slice_get_mut_usize.PreCodegen.after.panic-unwind.mir
index f2ef2b0cc3c..d7f09fafeeb 100644
--- a/tests/mir-opt/pre-codegen/slice_index.slice_get_mut_usize.PreCodegen.after.panic-unwind.mir
+++ b/tests/mir-opt/pre-codegen/slice_index.slice_get_mut_usize.PreCodegen.after.panic-unwind.mir
@@ -23,7 +23,7 @@ fn slice_get_mut_usize(_1: &mut [u32], _2: usize) -> Option<&mut u32> {
         StorageLive(_7);
         StorageLive(_4);
         StorageLive(_3);
-        _3 = Len((*_1));
+        _3 = PtrMetadata(_1);
         _4 = Lt(_2, move _3);
         switchInt(move _4) -> [0: bb1, otherwise: bb2];
     }
diff --git a/tests/mir-opt/pre-codegen/slice_index.slice_get_unchecked_mut_range.PreCodegen.after.panic-abort.mir b/tests/mir-opt/pre-codegen/slice_index.slice_get_unchecked_mut_range.PreCodegen.after.panic-abort.mir
index 5e0398d1114..2f13cfa4dab 100644
--- a/tests/mir-opt/pre-codegen/slice_index.slice_get_unchecked_mut_range.PreCodegen.after.panic-abort.mir
+++ b/tests/mir-opt/pre-codegen/slice_index.slice_get_unchecked_mut_range.PreCodegen.after.panic-abort.mir
@@ -8,25 +8,24 @@ fn slice_get_unchecked_mut_range(_1: &mut [u32], _2: std::ops::Range<usize>) ->
     let mut _4: usize;
     scope 1 (inlined core::slice::<impl [u32]>::get_unchecked_mut::<std::ops::Range<usize>>) {
         let mut _5: *mut [u32];
-        let mut _12: *mut [u32];
+        let mut _11: *mut [u32];
         scope 2 (inlined <std::ops::Range<usize> as SliceIndex<[u32]>>::get_unchecked_mut) {
-            let mut _7: usize;
-            let _8: ();
-            let _9: usize;
+            let mut _6: usize;
+            let _7: ();
+            let _8: usize;
             scope 3 {
                 scope 6 (inlined core::slice::index::get_offset_len_mut_noubcheck::<u32>) {
-                    let _11: *mut u32;
+                    let _10: *mut u32;
                     scope 7 {
                     }
                     scope 8 (inlined core::slice::index::get_mut_noubcheck::<u32>) {
-                        let _10: *mut u32;
+                        let _9: *mut u32;
                         scope 9 {
                         }
                     }
                 }
             }
             scope 4 (inlined std::ptr::mut_ptr::<impl *mut [u32]>::len) {
-                let mut _6: *const [u32];
                 scope 5 (inlined std::ptr::metadata::<[u32]>) {
                 }
             }
@@ -38,28 +37,25 @@ fn slice_get_unchecked_mut_range(_1: &mut [u32], _2: std::ops::Range<usize>) ->
         _4 = move (_2.1: usize);
         StorageLive(_5);
         _5 = &raw mut (*_1);
-        StorageLive(_9);
-        StorageLive(_7);
+        StorageLive(_8);
         StorageLive(_6);
-        _6 = _5 as *const [u32] (PointerCoercion(MutToConstPointer));
-        _7 = PtrMetadata(_6);
-        StorageDead(_6);
-        _8 = <std::ops::Range<usize> as SliceIndex<[T]>>::get_unchecked_mut::precondition_check(_3, _4, move _7) -> [return: bb1, unwind unreachable];
+        _6 = PtrMetadata(_1);
+        _7 = <std::ops::Range<usize> as SliceIndex<[T]>>::get_unchecked_mut::precondition_check(_3, _4, move _6) -> [return: bb1, unwind unreachable];
     }
 
     bb1: {
-        StorageDead(_7);
-        _9 = SubUnchecked(_4, _3);
-        StorageLive(_11);
+        StorageDead(_6);
+        _8 = SubUnchecked(_4, _3);
         StorageLive(_10);
-        _10 = _5 as *mut u32 (PtrToPtr);
-        _11 = Offset(_10, _3);
-        StorageDead(_10);
-        _12 = *mut [u32] from (_11, _9);
-        StorageDead(_11);
+        StorageLive(_9);
+        _9 = _5 as *mut u32 (PtrToPtr);
+        _10 = Offset(_9, _3);
         StorageDead(_9);
+        _11 = *mut [u32] from (_10, _8);
+        StorageDead(_10);
+        StorageDead(_8);
         StorageDead(_5);
-        _0 = &mut (*_12);
+        _0 = &mut (*_11);
         return;
     }
 }
diff --git a/tests/mir-opt/pre-codegen/slice_index.slice_get_unchecked_mut_range.PreCodegen.after.panic-unwind.mir b/tests/mir-opt/pre-codegen/slice_index.slice_get_unchecked_mut_range.PreCodegen.after.panic-unwind.mir
index 5e0398d1114..2f13cfa4dab 100644
--- a/tests/mir-opt/pre-codegen/slice_index.slice_get_unchecked_mut_range.PreCodegen.after.panic-unwind.mir
+++ b/tests/mir-opt/pre-codegen/slice_index.slice_get_unchecked_mut_range.PreCodegen.after.panic-unwind.mir
@@ -8,25 +8,24 @@ fn slice_get_unchecked_mut_range(_1: &mut [u32], _2: std::ops::Range<usize>) ->
     let mut _4: usize;
     scope 1 (inlined core::slice::<impl [u32]>::get_unchecked_mut::<std::ops::Range<usize>>) {
         let mut _5: *mut [u32];
-        let mut _12: *mut [u32];
+        let mut _11: *mut [u32];
         scope 2 (inlined <std::ops::Range<usize> as SliceIndex<[u32]>>::get_unchecked_mut) {
-            let mut _7: usize;
-            let _8: ();
-            let _9: usize;
+            let mut _6: usize;
+            let _7: ();
+            let _8: usize;
             scope 3 {
                 scope 6 (inlined core::slice::index::get_offset_len_mut_noubcheck::<u32>) {
-                    let _11: *mut u32;
+                    let _10: *mut u32;
                     scope 7 {
                     }
                     scope 8 (inlined core::slice::index::get_mut_noubcheck::<u32>) {
-                        let _10: *mut u32;
+                        let _9: *mut u32;
                         scope 9 {
                         }
                     }
                 }
             }
             scope 4 (inlined std::ptr::mut_ptr::<impl *mut [u32]>::len) {
-                let mut _6: *const [u32];
                 scope 5 (inlined std::ptr::metadata::<[u32]>) {
                 }
             }
@@ -38,28 +37,25 @@ fn slice_get_unchecked_mut_range(_1: &mut [u32], _2: std::ops::Range<usize>) ->
         _4 = move (_2.1: usize);
         StorageLive(_5);
         _5 = &raw mut (*_1);
-        StorageLive(_9);
-        StorageLive(_7);
+        StorageLive(_8);
         StorageLive(_6);
-        _6 = _5 as *const [u32] (PointerCoercion(MutToConstPointer));
-        _7 = PtrMetadata(_6);
-        StorageDead(_6);
-        _8 = <std::ops::Range<usize> as SliceIndex<[T]>>::get_unchecked_mut::precondition_check(_3, _4, move _7) -> [return: bb1, unwind unreachable];
+        _6 = PtrMetadata(_1);
+        _7 = <std::ops::Range<usize> as SliceIndex<[T]>>::get_unchecked_mut::precondition_check(_3, _4, move _6) -> [return: bb1, unwind unreachable];
     }
 
     bb1: {
-        StorageDead(_7);
-        _9 = SubUnchecked(_4, _3);
-        StorageLive(_11);
+        StorageDead(_6);
+        _8 = SubUnchecked(_4, _3);
         StorageLive(_10);
-        _10 = _5 as *mut u32 (PtrToPtr);
-        _11 = Offset(_10, _3);
-        StorageDead(_10);
-        _12 = *mut [u32] from (_11, _9);
-        StorageDead(_11);
+        StorageLive(_9);
+        _9 = _5 as *mut u32 (PtrToPtr);
+        _10 = Offset(_9, _3);
         StorageDead(_9);
+        _11 = *mut [u32] from (_10, _8);
+        StorageDead(_10);
+        StorageDead(_8);
         StorageDead(_5);
-        _0 = &mut (*_12);
+        _0 = &mut (*_11);
         return;
     }
 }
diff --git a/tests/mir-opt/pre-codegen/slice_iter.enumerated_loop.PreCodegen.after.panic-abort.mir b/tests/mir-opt/pre-codegen/slice_iter.enumerated_loop.PreCodegen.after.panic-abort.mir
index 8f41fb70925..953e7550479 100644
--- a/tests/mir-opt/pre-codegen/slice_iter.enumerated_loop.PreCodegen.after.panic-abort.mir
+++ b/tests/mir-opt/pre-codegen/slice_iter.enumerated_loop.PreCodegen.after.panic-abort.mir
@@ -7,19 +7,44 @@ fn enumerated_loop(_1: &[T], _2: impl Fn(usize, &T)) -> () {
     let mut _11: std::slice::Iter<'_, T>;
     let mut _12: std::iter::Enumerate<std::slice::Iter<'_, T>>;
     let mut _13: std::iter::Enumerate<std::slice::Iter<'_, T>>;
-    let mut _14: &mut std::iter::Enumerate<std::slice::Iter<'_, T>>;
-    let mut _15: std::option::Option<(usize, &T)>;
-    let mut _16: isize;
-    let mut _19: &impl Fn(usize, &T);
-    let mut _20: (usize, &T);
-    let _21: ();
+    let mut _21: std::option::Option<(usize, &T)>;
+    let mut _24: &impl Fn(usize, &T);
+    let mut _25: (usize, &T);
+    let _26: ();
     scope 1 {
         debug iter => _13;
-        let _17: usize;
-        let _18: &T;
+        let _22: usize;
+        let _23: &T;
         scope 2 {
-            debug i => _17;
-            debug x => _18;
+            debug i => _22;
+            debug x => _23;
+        }
+        scope 17 (inlined <Enumerate<std::slice::Iter<'_, T>> as Iterator>::next) {
+            let mut _14: &mut std::slice::Iter<'_, T>;
+            let mut _15: std::option::Option<&T>;
+            let mut _19: (usize, bool);
+            let mut _20: (usize, &T);
+            scope 18 {
+                let _18: usize;
+                scope 23 {
+                }
+            }
+            scope 19 {
+                scope 20 {
+                    scope 26 (inlined <Option<(usize, &T)> as FromResidual>::from_residual) {
+                    }
+                }
+            }
+            scope 21 {
+                scope 22 {
+                }
+            }
+            scope 24 (inlined <Option<&T> as Try>::branch) {
+                let mut _16: isize;
+                let _17: &T;
+                scope 25 {
+                }
+            }
         }
     }
     scope 3 (inlined core::slice::<impl [T]>::iter) {
@@ -65,7 +90,7 @@ fn enumerated_loop(_1: &[T], _2: impl Fn(usize, &T)) -> () {
         StorageLive(_6);
         StorageLive(_4);
         StorageLive(_5);
-        _3 = Len((*_1));
+        _3 = PtrMetadata(_1);
         _4 = &raw const (*_1);
         _5 = _4 as *const T (PtrToPtr);
         _6 = NonNull::<T> { pointer: _5 };
@@ -79,7 +104,7 @@ fn enumerated_loop(_1: &[T], _2: impl Fn(usize, &T)) -> () {
         _7 = _4 as *mut T (PtrToPtr);
         _8 = Offset(_7, _3);
         StorageDead(_7);
-        _9 = move _8 as *const T (PointerCoercion(MutToConstPointer));
+        _9 = move _8 as *const T (PtrToPtr);
         StorageDead(_8);
         goto -> bb3;
     }
@@ -107,20 +132,28 @@ fn enumerated_loop(_1: &[T], _2: impl Fn(usize, &T)) -> () {
     }
 
     bb4: {
+        StorageLive(_21);
+        StorageLive(_18);
+        StorageLive(_19);
         StorageLive(_15);
         StorageLive(_14);
-        _14 = &mut _13;
-        _15 = <Enumerate<std::slice::Iter<'_, T>> as Iterator>::next(move _14) -> [return: bb5, unwind unreachable];
+        _14 = &mut (_13.0: std::slice::Iter<'_, T>);
+        _15 = <std::slice::Iter<'_, T> as Iterator>::next(move _14) -> [return: bb5, unwind unreachable];
     }
 
     bb5: {
         StorageDead(_14);
+        StorageLive(_16);
         _16 = discriminant(_15);
-        switchInt(move _16) -> [0: bb6, 1: bb8, otherwise: bb10];
+        switchInt(move _16) -> [0: bb6, 1: bb8, otherwise: bb11];
     }
 
     bb6: {
+        StorageDead(_16);
         StorageDead(_15);
+        StorageDead(_19);
+        StorageDead(_18);
+        StorageDead(_21);
         StorageDead(_13);
         drop(_2) -> [return: bb7, unwind unreachable];
     }
@@ -130,23 +163,39 @@ fn enumerated_loop(_1: &[T], _2: impl Fn(usize, &T)) -> () {
     }
 
     bb8: {
-        _17 = (((_15 as Some).0: (usize, &T)).0: usize);
-        _18 = (((_15 as Some).0: (usize, &T)).1: &T);
-        StorageLive(_19);
-        _19 = &_2;
-        StorageLive(_20);
-        _20 = (_17, _18);
-        _21 = <impl Fn(usize, &T) as Fn<(usize, &T)>>::call(move _19, move _20) -> [return: bb9, unwind unreachable];
+        _17 = move ((_15 as Some).0: &T);
+        StorageDead(_16);
+        StorageDead(_15);
+        _18 = (_13.1: usize);
+        _19 = AddWithOverflow((_13.1: usize), const 1_usize);
+        assert(!move (_19.1: bool), "attempt to compute `{} + {}`, which would overflow", (_13.1: usize), const 1_usize) -> [success: bb9, unwind unreachable];
     }
 
     bb9: {
+        (_13.1: usize) = move (_19.0: usize);
+        StorageLive(_20);
+        _20 = (_18, _17);
+        _21 = Option::<(usize, &T)>::Some(move _20);
         StorageDead(_20);
         StorageDead(_19);
-        StorageDead(_15);
-        goto -> bb4;
+        StorageDead(_18);
+        _22 = (((_21 as Some).0: (usize, &T)).0: usize);
+        _23 = (((_21 as Some).0: (usize, &T)).1: &T);
+        StorageLive(_24);
+        _24 = &_2;
+        StorageLive(_25);
+        _25 = (_22, _23);
+        _26 = <impl Fn(usize, &T) as Fn<(usize, &T)>>::call(move _24, move _25) -> [return: bb10, unwind unreachable];
     }
 
     bb10: {
+        StorageDead(_25);
+        StorageDead(_24);
+        StorageDead(_21);
+        goto -> bb4;
+    }
+
+    bb11: {
         unreachable;
     }
 }
diff --git a/tests/mir-opt/pre-codegen/slice_iter.enumerated_loop.PreCodegen.after.panic-unwind.mir b/tests/mir-opt/pre-codegen/slice_iter.enumerated_loop.PreCodegen.after.panic-unwind.mir
index 17cf305468e..d5fdb2e08cc 100644
--- a/tests/mir-opt/pre-codegen/slice_iter.enumerated_loop.PreCodegen.after.panic-unwind.mir
+++ b/tests/mir-opt/pre-codegen/slice_iter.enumerated_loop.PreCodegen.after.panic-unwind.mir
@@ -65,7 +65,7 @@ fn enumerated_loop(_1: &[T], _2: impl Fn(usize, &T)) -> () {
         StorageLive(_6);
         StorageLive(_4);
         StorageLive(_5);
-        _3 = Len((*_1));
+        _3 = PtrMetadata(_1);
         _4 = &raw const (*_1);
         _5 = _4 as *const T (PtrToPtr);
         _6 = NonNull::<T> { pointer: _5 };
@@ -79,7 +79,7 @@ fn enumerated_loop(_1: &[T], _2: impl Fn(usize, &T)) -> () {
         _7 = _4 as *mut T (PtrToPtr);
         _8 = Offset(_7, _3);
         StorageDead(_7);
-        _9 = move _8 as *const T (PointerCoercion(MutToConstPointer));
+        _9 = move _8 as *const T (PtrToPtr);
         StorageDead(_8);
         goto -> bb3;
     }
diff --git a/tests/mir-opt/pre-codegen/slice_iter.forward_loop.PreCodegen.after.panic-abort.mir b/tests/mir-opt/pre-codegen/slice_iter.forward_loop.PreCodegen.after.panic-abort.mir
index 3c1bbdc8742..cc2beac06f2 100644
--- a/tests/mir-opt/pre-codegen/slice_iter.forward_loop.PreCodegen.after.panic-abort.mir
+++ b/tests/mir-opt/pre-codegen/slice_iter.forward_loop.PreCodegen.after.panic-abort.mir
@@ -57,7 +57,7 @@ fn forward_loop(_1: &[T], _2: impl Fn(&T)) -> () {
         StorageLive(_6);
         StorageLive(_4);
         StorageLive(_5);
-        _3 = Len((*_1));
+        _3 = PtrMetadata(_1);
         _4 = &raw const (*_1);
         _5 = _4 as *const T (PtrToPtr);
         _6 = NonNull::<T> { pointer: _5 };
@@ -71,7 +71,7 @@ fn forward_loop(_1: &[T], _2: impl Fn(&T)) -> () {
         _7 = _4 as *mut T (PtrToPtr);
         _8 = Offset(_7, _3);
         StorageDead(_7);
-        _9 = move _8 as *const T (PointerCoercion(MutToConstPointer));
+        _9 = move _8 as *const T (PtrToPtr);
         StorageDead(_8);
         goto -> bb3;
     }
diff --git a/tests/mir-opt/pre-codegen/slice_iter.forward_loop.PreCodegen.after.panic-unwind.mir b/tests/mir-opt/pre-codegen/slice_iter.forward_loop.PreCodegen.after.panic-unwind.mir
index b2ec1ea7b9f..d66edb28570 100644
--- a/tests/mir-opt/pre-codegen/slice_iter.forward_loop.PreCodegen.after.panic-unwind.mir
+++ b/tests/mir-opt/pre-codegen/slice_iter.forward_loop.PreCodegen.after.panic-unwind.mir
@@ -57,7 +57,7 @@ fn forward_loop(_1: &[T], _2: impl Fn(&T)) -> () {
         StorageLive(_6);
         StorageLive(_4);
         StorageLive(_5);
-        _3 = Len((*_1));
+        _3 = PtrMetadata(_1);
         _4 = &raw const (*_1);
         _5 = _4 as *const T (PtrToPtr);
         _6 = NonNull::<T> { pointer: _5 };
@@ -71,7 +71,7 @@ fn forward_loop(_1: &[T], _2: impl Fn(&T)) -> () {
         _7 = _4 as *mut T (PtrToPtr);
         _8 = Offset(_7, _3);
         StorageDead(_7);
-        _9 = move _8 as *const T (PointerCoercion(MutToConstPointer));
+        _9 = move _8 as *const T (PtrToPtr);
         StorageDead(_8);
         goto -> bb3;
     }
diff --git a/tests/mir-opt/pre-codegen/slice_iter.range_loop.PreCodegen.after.panic-abort.mir b/tests/mir-opt/pre-codegen/slice_iter.range_loop.PreCodegen.after.panic-abort.mir
index dbe6f39548c..cea2fcbcdc0 100644
--- a/tests/mir-opt/pre-codegen/slice_iter.range_loop.PreCodegen.after.panic-abort.mir
+++ b/tests/mir-opt/pre-codegen/slice_iter.range_loop.PreCodegen.after.panic-abort.mir
@@ -40,7 +40,7 @@ fn range_loop(_1: &[T], _2: impl Fn(usize, &T)) -> () {
     }
 
     bb0: {
-        _3 = Len((*_1));
+        _3 = PtrMetadata(_1);
         StorageLive(_4);
         _4 = const 0_usize;
         goto -> bb1;
diff --git a/tests/mir-opt/pre-codegen/slice_iter.range_loop.PreCodegen.after.panic-unwind.mir b/tests/mir-opt/pre-codegen/slice_iter.range_loop.PreCodegen.after.panic-unwind.mir
index 5b6441cfb3b..bd658a770ea 100644
--- a/tests/mir-opt/pre-codegen/slice_iter.range_loop.PreCodegen.after.panic-unwind.mir
+++ b/tests/mir-opt/pre-codegen/slice_iter.range_loop.PreCodegen.after.panic-unwind.mir
@@ -40,7 +40,7 @@ fn range_loop(_1: &[T], _2: impl Fn(usize, &T)) -> () {
     }
 
     bb0: {
-        _3 = Len((*_1));
+        _3 = PtrMetadata(_1);
         StorageLive(_4);
         _4 = const 0_usize;
         goto -> bb1;
diff --git a/tests/mir-opt/pre-codegen/slice_iter.reverse_loop.PreCodegen.after.panic-abort.mir b/tests/mir-opt/pre-codegen/slice_iter.reverse_loop.PreCodegen.after.panic-abort.mir
index bf982f076de..fbb887fe76a 100644
--- a/tests/mir-opt/pre-codegen/slice_iter.reverse_loop.PreCodegen.after.panic-abort.mir
+++ b/tests/mir-opt/pre-codegen/slice_iter.reverse_loop.PreCodegen.after.panic-abort.mir
@@ -65,7 +65,7 @@ fn reverse_loop(_1: &[T], _2: impl Fn(&T)) -> () {
         StorageLive(_6);
         StorageLive(_4);
         StorageLive(_5);
-        _3 = Len((*_1));
+        _3 = PtrMetadata(_1);
         _4 = &raw const (*_1);
         _5 = _4 as *const T (PtrToPtr);
         _6 = NonNull::<T> { pointer: _5 };
@@ -79,7 +79,7 @@ fn reverse_loop(_1: &[T], _2: impl Fn(&T)) -> () {
         _7 = _4 as *mut T (PtrToPtr);
         _8 = Offset(_7, _3);
         StorageDead(_7);
-        _9 = move _8 as *const T (PointerCoercion(MutToConstPointer));
+        _9 = move _8 as *const T (PtrToPtr);
         StorageDead(_8);
         goto -> bb3;
     }
diff --git a/tests/mir-opt/pre-codegen/slice_iter.reverse_loop.PreCodegen.after.panic-unwind.mir b/tests/mir-opt/pre-codegen/slice_iter.reverse_loop.PreCodegen.after.panic-unwind.mir
index 532b8162521..db9409f72ab 100644
--- a/tests/mir-opt/pre-codegen/slice_iter.reverse_loop.PreCodegen.after.panic-unwind.mir
+++ b/tests/mir-opt/pre-codegen/slice_iter.reverse_loop.PreCodegen.after.panic-unwind.mir
@@ -65,7 +65,7 @@ fn reverse_loop(_1: &[T], _2: impl Fn(&T)) -> () {
         StorageLive(_6);
         StorageLive(_4);
         StorageLive(_5);
-        _3 = Len((*_1));
+        _3 = PtrMetadata(_1);
         _4 = &raw const (*_1);
         _5 = _4 as *const T (PtrToPtr);
         _6 = NonNull::<T> { pointer: _5 };
@@ -79,7 +79,7 @@ fn reverse_loop(_1: &[T], _2: impl Fn(&T)) -> () {
         _7 = _4 as *mut T (PtrToPtr);
         _8 = Offset(_7, _3);
         StorageDead(_7);
-        _9 = move _8 as *const T (PointerCoercion(MutToConstPointer));
+        _9 = move _8 as *const T (PtrToPtr);
         StorageDead(_8);
         goto -> bb3;
     }
diff --git a/tests/mir-opt/retag.array_casts.SimplifyCfg-pre-optimizations.after.panic-abort.mir b/tests/mir-opt/retag.array_casts.SimplifyCfg-pre-optimizations.after.panic-abort.mir
index f9d58ea60a3..6dba667dd15 100644
--- a/tests/mir-opt/retag.array_casts.SimplifyCfg-pre-optimizations.after.panic-abort.mir
+++ b/tests/mir-opt/retag.array_casts.SimplifyCfg-pre-optimizations.after.panic-abort.mir
@@ -64,7 +64,7 @@ fn array_casts() -> () {
         StorageLive(_4);
         _4 = &mut _1;
         _3 = &raw mut (*_4);
-        _2 = move _3 as *mut usize (PointerCoercion(ArrayToPointer));
+        _2 = move _3 as *mut usize (PtrToPtr);
         StorageDead(_3);
         StorageDead(_4);
         StorageLive(_5);
@@ -87,7 +87,7 @@ fn array_casts() -> () {
         StorageLive(_11);
         _11 = &_8;
         _10 = &raw const (*_11);
-        _9 = move _10 as *const usize (PointerCoercion(ArrayToPointer));
+        _9 = move _10 as *const usize (PtrToPtr);
         StorageDead(_10);
         StorageDead(_11);
         StorageLive(_12);
diff --git a/tests/mir-opt/retag.array_casts.SimplifyCfg-pre-optimizations.after.panic-unwind.mir b/tests/mir-opt/retag.array_casts.SimplifyCfg-pre-optimizations.after.panic-unwind.mir
index b0b70cd5d91..fa812002e26 100644
--- a/tests/mir-opt/retag.array_casts.SimplifyCfg-pre-optimizations.after.panic-unwind.mir
+++ b/tests/mir-opt/retag.array_casts.SimplifyCfg-pre-optimizations.after.panic-unwind.mir
@@ -64,7 +64,7 @@ fn array_casts() -> () {
         StorageLive(_4);
         _4 = &mut _1;
         _3 = &raw mut (*_4);
-        _2 = move _3 as *mut usize (PointerCoercion(ArrayToPointer));
+        _2 = move _3 as *mut usize (PtrToPtr);
         StorageDead(_3);
         StorageDead(_4);
         StorageLive(_5);
@@ -87,7 +87,7 @@ fn array_casts() -> () {
         StorageLive(_11);
         _11 = &_8;
         _10 = &raw const (*_11);
-        _9 = move _10 as *const usize (PointerCoercion(ArrayToPointer));
+        _9 = move _10 as *const usize (PtrToPtr);
         StorageDead(_10);
         StorageDead(_11);
         StorageLive(_12);
diff --git a/tests/run-make/issue-51671/app.rs b/tests/run-make/bin-emit-no-symbols/app.rs
index e9dc1e9744f..e9dc1e9744f 100644
--- a/tests/run-make/issue-51671/app.rs
+++ b/tests/run-make/bin-emit-no-symbols/app.rs
diff --git a/tests/run-make/bin-emit-no-symbols/rmake.rs b/tests/run-make/bin-emit-no-symbols/rmake.rs
new file mode 100644
index 00000000000..5586e53c050
--- /dev/null
+++ b/tests/run-make/bin-emit-no-symbols/rmake.rs
@@ -0,0 +1,16 @@
+// When setting the crate type as a "bin" (in app.rs),
+// this could cause a bug where some symbols would not be
+// emitted in the object files. This has been fixed, and
+// this test checks that the correct symbols have been successfully
+// emitted inside the object files.
+// See https://github.com/rust-lang/rust/issues/51671
+
+use run_make_support::{llvm_readobj, rustc};
+
+fn main() {
+    rustc().emit("obj").input("app.rs").run();
+    let out = llvm_readobj().input("app.o").arg("--symbols").run();
+    out.assert_stdout_contains("rust_begin_unwind");
+    out.assert_stdout_contains("rust_eh_personality");
+    out.assert_stdout_contains("__rg_oom");
+}
diff --git a/tests/run-make/branch-protection-check-IBT/Makefile b/tests/run-make/branch-protection-check-IBT/Makefile
index cabe951e1c5..ee0e034627f 100644
--- a/tests/run-make/branch-protection-check-IBT/Makefile
+++ b/tests/run-make/branch-protection-check-IBT/Makefile
@@ -7,6 +7,12 @@ include ../tools.mk
 
 # only-x86_64
 
+# ignore-test
+# FIXME(jieyouxu): This test never runs because the `ifeq` check on line 17
+# compares `x86` to `x86_64`, which always evaluates to false.
+# When the test does run, the compilation does not include `.note.gnu.property`.
+# See https://github.com/rust-lang/rust/pull/126720 for more information.
+
 all:
 ifeq ($(filter x86,$(LLVM_COMPONENTS)),x86_64)
 	$(RUSTC) --target x86_64-unknown-linux-gnu -Z cf-protection=branch -L$(TMPDIR) -C link-args='-nostartfiles'  -C save-temps  ./main.rs -o $(TMPDIR)/rsmain
diff --git a/tests/run-make/branch-protection-check-IBT/_rmake.rs b/tests/run-make/branch-protection-check-IBT/_rmake.rs
new file mode 100644
index 00000000000..d66ecf9c005
--- /dev/null
+++ b/tests/run-make/branch-protection-check-IBT/_rmake.rs
@@ -0,0 +1,31 @@
+// Check for GNU Property Note
+
+// How to run this
+// python3 x.py test --target x86_64-unknown-linux-gnu  tests/run-make/branch-protection-check-IBT/
+
+//@ only-x86_64
+
+//@ ignore-test
+// FIXME(jieyouxu): see the FIXME in the Makefile
+
+use run_make_support::llvm_readobj;
+use run_make_support::rustc;
+use run_make_support::{cwd, env_var};
+
+fn main() {
+    let llvm_components = env_var("LLVM_COMPONENTS");
+    if !format!(" {llvm_components} ").contains(" x86 ") {
+        return;
+    }
+
+    rustc()
+        .input("main.rs")
+        .target("x86_64-unknown-linux-gnu")
+        .arg("-Zcf-protection=branch")
+        .arg(format!("-L{}", cwd().display()))
+        .arg("-Clink-args=-nostartfiles")
+        .arg("-Csave-temps")
+        .run();
+
+    llvm_readobj().arg("-nW").input("main").run().assert_stdout_contains(".note.gnu.property");
+}
diff --git a/tests/run-make/comment-section/Makefile b/tests/run-make/comment-section/Makefile
deleted file mode 100644
index d0b98176ffe..00000000000
--- a/tests/run-make/comment-section/Makefile
+++ /dev/null
@@ -1,18 +0,0 @@
-# Both GCC and Clang write by default a `.comment` section with compiler information. Rustc received a similar .comment section, so this tests checks that this section properly appears.
-# See https://github.com/rust-lang/rust/commit/74b8d324eb77a8f337b35dc68ac91b0c2c06debc
-
-include ../tools.mk
-
-# only-linux
-
-all:
-	echo 'fn main(){}' | $(RUSTC) - --emit=link,obj -Csave-temps --target=$(TARGET)
-
-	# Check linked output has a `.comment` section with the expected content.
-	readelf -p '.comment' $(TMPDIR)/rust_out | $(CGREP) -F 'rustc version 1.'
-
-	# Check all object files (including temporary outputs) have a `.comment`
-	# section with the expected content.
-	set -e; for f in $(TMPDIR)/*.o; do \
-		readelf -p '.comment' $$f | $(CGREP) -F 'rustc version 1.'; \
-	done
diff --git a/tests/run-make/comment-section/rmake.rs b/tests/run-make/comment-section/rmake.rs
new file mode 100644
index 00000000000..41df04da7a5
--- /dev/null
+++ b/tests/run-make/comment-section/rmake.rs
@@ -0,0 +1,47 @@
+// Both GCC and Clang write by default a `.comment` section with compiler information.
+// Rustc received a similar .comment section, so this tests checks that this section
+// properly appears.
+// See https://github.com/rust-lang/rust/commit/74b8d324eb77a8f337b35dc68ac91b0c2c06debc
+
+//@ only-linux
+// FIXME(jieyouxu): check cross-compile setup
+//@ ignore-cross-compile
+
+use std::path::PathBuf;
+
+use run_make_support::llvm_readobj;
+use run_make_support::rustc;
+use run_make_support::{cwd, env_var, read_dir, run_in_tmpdir};
+
+fn main() {
+    let target = env_var("TARGET");
+
+    rustc()
+        .arg("-")
+        .stdin("fn main() {}")
+        .emit("link,obj")
+        .arg("-Csave-temps")
+        .target(&target)
+        .run();
+
+    // Check linked output has a `.comment` section with the expected content.
+    llvm_readobj()
+        .section(".comment")
+        .input("rust_out")
+        .run()
+        .assert_stdout_contains("rustc version 1.");
+
+    // Check all object files (including temporary outputs) have a `.comment`
+    // section with the expected content.
+    read_dir(cwd(), |f| {
+        if !f.extension().is_some_and(|ext| ext == "o") {
+            return;
+        }
+
+        llvm_readobj()
+            .section(".comment")
+            .input(&f)
+            .run()
+            .assert_stdout_contains("rustc version 1.");
+    });
+}
diff --git a/tests/run-make/compressed-debuginfo/Makefile b/tests/run-make/compressed-debuginfo/Makefile
deleted file mode 100644
index d2f24dde00d..00000000000
--- a/tests/run-make/compressed-debuginfo/Makefile
+++ /dev/null
@@ -1,14 +0,0 @@
-# ignore-cross-compile
-include ../tools.mk
-
-# only-linux
-#
-# This tests debuginfo-compression.
-
-all: zlib zstandard
-
-zlib:
-	test "`$(RUSTC) --crate-name=foo --crate-type=lib --emit=obj -C debuginfo=full -Z debuginfo-compression=zlib foo.rs 2>&1 | sed 's/.*unknown.*zlib.*/missing/' | head -n 1`" = missing || readelf -t $(TMPDIR)/foo.o | grep -q ZLIB
-
-zstandard:
-	test "`$(RUSTC) --crate-name=foo --crate-type=lib --emit=obj -C debuginfo=full -Z debuginfo-compression=zstd foo.rs 2>&1 | sed 's/.*unknown.*zstd.*/missing/' | head -n 1`" = missing || readelf -t $(TMPDIR)/foo.o | grep -q ZST
diff --git a/tests/run-make/compressed-debuginfo/rmake.rs b/tests/run-make/compressed-debuginfo/rmake.rs
new file mode 100644
index 00000000000..9c6d50ab243
--- /dev/null
+++ b/tests/run-make/compressed-debuginfo/rmake.rs
@@ -0,0 +1,36 @@
+// Checks the `debuginfo-compression` option.
+
+//@ only-linux
+//@ ignore-cross-compile
+
+// FIXME: This test isn't comprehensive and isn't covering all possible combinations.
+
+use run_make_support::{assert_contains, cmd, run_in_tmpdir, rustc};
+
+fn check_compression(compression: &str, to_find: &str) {
+    run_in_tmpdir(|| {
+        let out = rustc()
+            .crate_name("foo")
+            .crate_type("lib")
+            .emit("obj")
+            .arg("-Cdebuginfo=full")
+            .arg(&format!("-Zdebuginfo-compression={compression}"))
+            .input("foo.rs")
+            .run();
+        let stderr = out.stderr_utf8();
+        if stderr.is_empty() {
+            // FIXME: `readelf` might need to be replaced with `llvm-readelf`.
+            cmd("readelf").arg("-t").arg("foo.o").run().assert_stdout_contains(to_find);
+        } else {
+            assert_contains(
+                &stderr,
+                &format!("unknown debuginfo compression algorithm {compression}"),
+            );
+        }
+    });
+}
+
+fn main() {
+    check_compression("zlib", "ZLIB");
+    check_compression("zstd", "ZSTD");
+}
diff --git a/tests/run-make/crate-name-priority/Makefile b/tests/run-make/crate-name-priority/Makefile
deleted file mode 100644
index 4adaa75a71c..00000000000
--- a/tests/run-make/crate-name-priority/Makefile
+++ /dev/null
@@ -1,12 +0,0 @@
-# ignore-cross-compile
-include ../tools.mk
-
-all:
-	$(RUSTC) foo.rs
-	rm $(TMPDIR)/$(call BIN,foo)
-	$(RUSTC) foo.rs --crate-name bar
-	rm $(TMPDIR)/$(call BIN,bar)
-	$(RUSTC) foo1.rs
-	rm $(TMPDIR)/$(call BIN,foo)
-	$(RUSTC) foo1.rs -o $(TMPDIR)/$(call BIN,bar1)
-	rm $(TMPDIR)/$(call BIN,bar1)
diff --git a/tests/run-make/crate-name-priority/rmake.rs b/tests/run-make/crate-name-priority/rmake.rs
new file mode 100644
index 00000000000..b7cb2c99711
--- /dev/null
+++ b/tests/run-make/crate-name-priority/rmake.rs
@@ -0,0 +1,18 @@
+// The `crate_name` rustc flag should have higher priority
+// over `#![crate_name = "foo"]` defined inside the source code.
+// This test has a conflict between crate_names defined in the .rs files
+// and the compiler flags, and checks that the flag is favoured each time.
+// See https://github.com/rust-lang/rust/pull/15518
+
+use run_make_support::{bin_name, fs_wrapper, rustc};
+
+fn main() {
+    rustc().input("foo.rs").run();
+    fs_wrapper::remove_file(bin_name("foo"));
+    rustc().input("foo.rs").crate_name("bar").run();
+    fs_wrapper::remove_file(bin_name("bar"));
+    rustc().input("foo1.rs").run();
+    fs_wrapper::remove_file(bin_name("foo"));
+    rustc().input("foo1.rs").output(bin_name("bar1")).run();
+    fs_wrapper::remove_file(bin_name("bar1"));
+}
diff --git a/tests/run-make/debugger-visualizer-dep-info/Makefile b/tests/run-make/debugger-visualizer-dep-info/Makefile
deleted file mode 100644
index 0877998a74f..00000000000
--- a/tests/run-make/debugger-visualizer-dep-info/Makefile
+++ /dev/null
@@ -1,9 +0,0 @@
-include ../tools.mk
-
-# This test makes sure that files referenced via #[debugger_visualizer] are
-# included in `--emit dep-info` output.
-
-all:
-	$(RUSTC) --emit dep-info main.rs
-	$(CGREP) "foo.py" < $(TMPDIR)/main.d
-	$(CGREP) "my_visualizers/bar.natvis" < $(TMPDIR)/main.d
diff --git a/tests/run-make/debugger-visualizer-dep-info/rmake.rs b/tests/run-make/debugger-visualizer-dep-info/rmake.rs
new file mode 100644
index 00000000000..65ffb2373e7
--- /dev/null
+++ b/tests/run-make/debugger-visualizer-dep-info/rmake.rs
@@ -0,0 +1,11 @@
+// This test checks that files referenced via #[debugger_visualizer] are
+// included in `--emit dep-info` output.
+// See https://github.com/rust-lang/rust/pull/111641
+
+use run_make_support::{invalid_utf8_contains, rustc};
+
+fn main() {
+    rustc().emit("dep-info").input("main.rs").run();
+    invalid_utf8_contains("main.d", "foo.py");
+    invalid_utf8_contains("main.d", "my_visualizers/bar.natvis");
+}
diff --git a/tests/run-make/error-writing-dependencies/Makefile b/tests/run-make/error-writing-dependencies/Makefile
deleted file mode 100644
index a5d30a647f8..00000000000
--- a/tests/run-make/error-writing-dependencies/Makefile
+++ /dev/null
@@ -1,8 +0,0 @@
-include ../tools.mk
-
-all:
-	# Let's get a nice error message
-	$(BARE_RUSTC) foo.rs --emit dep-info --out-dir foo/bar/baz 2>&1 | \
-		$(CGREP) "error writing dependencies"
-	# Make sure the filename shows up
-	$(BARE_RUSTC) foo.rs --emit dep-info --out-dir foo/bar/baz 2>&1 | $(CGREP) "baz"
diff --git a/tests/run-make/error-writing-dependencies/rmake.rs b/tests/run-make/error-writing-dependencies/rmake.rs
new file mode 100644
index 00000000000..2227f0a1a7f
--- /dev/null
+++ b/tests/run-make/error-writing-dependencies/rmake.rs
@@ -0,0 +1,17 @@
+// Invalid paths passed to rustc used to cause internal compilation errors
+// alongside an obscure error message. This was turned into a standard error,
+// and this test checks that the cleaner error message is printed instead.
+// See https://github.com/rust-lang/rust/issues/13517
+
+use run_make_support::rustc;
+
+// NOTE: This cannot be a UI test due to the --out-dir flag, which is
+// already present by default in UI testing.
+
+fn main() {
+    let out = rustc().input("foo.rs").emit("dep-info").out_dir("foo/bar/baz").run_fail();
+    // The error message should be informative.
+    out.assert_stderr_contains("error writing dependencies");
+    // The filename should appear.
+    out.assert_stderr_contains("baz");
+}
diff --git a/tests/run-make/extern-flag-rename-transitive/Makefile b/tests/run-make/extern-flag-rename-transitive/Makefile
deleted file mode 100644
index d16a8e20868..00000000000
--- a/tests/run-make/extern-flag-rename-transitive/Makefile
+++ /dev/null
@@ -1,7 +0,0 @@
-include ../tools.mk
-
-all:
-	$(RUSTC) foo.rs
-	$(RUSTC) bar.rs
-	$(RUSTC) baz.rs --extern a=$(TMPDIR)/libfoo.rlib
-
diff --git a/tests/run-make/extern-flag-rename-transitive/rmake.rs b/tests/run-make/extern-flag-rename-transitive/rmake.rs
new file mode 100644
index 00000000000..0090d487f03
--- /dev/null
+++ b/tests/run-make/extern-flag-rename-transitive/rmake.rs
@@ -0,0 +1,14 @@
+// In this test, baz.rs is looking for an extern crate "a" which
+// does not exist, and can only run through the --extern rustc flag
+// defining that the "a" crate is in fact just "foo". This test
+// checks that the --extern flag takes precedence over the extern
+// crate statement in the code.
+// See https://github.com/rust-lang/rust/pull/52723
+
+use run_make_support::{rust_lib_name, rustc};
+
+fn main() {
+    rustc().input("foo.rs").run();
+    rustc().input("bar.rs").run();
+    rustc().input("baz.rs").extern_("a", rust_lib_name("foo")).run();
+}
diff --git a/tests/run-make/extern-overrides-distribution/Makefile b/tests/run-make/extern-overrides-distribution/Makefile
deleted file mode 100644
index bfd0dd6991b..00000000000
--- a/tests/run-make/extern-overrides-distribution/Makefile
+++ /dev/null
@@ -1,6 +0,0 @@
-# ignore-cross-compile
-include ../tools.mk
-
-all:
-	$(RUSTC) libc.rs -Cmetadata=foo
-	$(RUSTC) main.rs --extern libc=$(TMPDIR)/liblibc.rlib
diff --git a/tests/run-make/extern-overrides-distribution/rmake.rs b/tests/run-make/extern-overrides-distribution/rmake.rs
new file mode 100644
index 00000000000..bd2553d4134
--- /dev/null
+++ b/tests/run-make/extern-overrides-distribution/rmake.rs
@@ -0,0 +1,14 @@
+// The --extern flag should override any "crate_type" declarations in the
+// Rust files themselves. In this test, libc is compiled as "lib", but
+// main.rs will only run with an rlib, which checks if the --extern flag
+// is successfully overriding the default behaviour.
+// See https://github.com/rust-lang/rust/pull/21782
+
+//@ ignore-cross-compile
+
+use run_make_support::{rust_lib_name, rustc};
+
+fn main() {
+    rustc().input("libc.rs").metadata("foo").run();
+    rustc().input("main.rs").extern_("libc", rust_lib_name("libc")).run();
+}
diff --git a/tests/run-make/forced-unwind-terminate-pof/Makefile b/tests/run-make/forced-unwind-terminate-pof/Makefile
deleted file mode 100644
index 871621520b9..00000000000
--- a/tests/run-make/forced-unwind-terminate-pof/Makefile
+++ /dev/null
@@ -1,9 +0,0 @@
-# ignore-cross-compile
-# only-linux
-include ../tools.mk
-
-all: foo
-	$(call RUN,foo) | $(CGREP) -v "cannot unwind"
-
-foo: foo.rs
-	$(RUSTC) $<
diff --git a/tests/run-make/forced-unwind-terminate-pof/foo.rs b/tests/run-make/forced-unwind-terminate-pof/foo.rs
index 0a51287313f..3a847846217 100644
--- a/tests/run-make/forced-unwind-terminate-pof/foo.rs
+++ b/tests/run-make/forced-unwind-terminate-pof/foo.rs
@@ -1,6 +1,5 @@
 // Tests that forced unwind through POF Rust frames wouldn't trigger our terminating guards.
 
-#![feature(c_unwind)]
 #![no_main]
 
 extern "C-unwind" {
diff --git a/tests/run-make/forced-unwind-terminate-pof/rmake.rs b/tests/run-make/forced-unwind-terminate-pof/rmake.rs
new file mode 100644
index 00000000000..320ddb172b6
--- /dev/null
+++ b/tests/run-make/forced-unwind-terminate-pof/rmake.rs
@@ -0,0 +1,16 @@
+// During a forced unwind, crossing the non-Plain Old Frame
+// would define the forced unwind as undefined behaviour, and
+// immediately abort the unwinding process. This test checks
+// that the forced unwinding takes precedence.
+// See https://github.com/rust-lang/rust/issues/101469
+
+//@ ignore-cross-compile
+//@ ignore-windows
+//Reason: pthread (POSIX threads) is not available on Windows
+
+use run_make_support::{run, rustc};
+
+fn main() {
+    rustc().input("foo.rs").run();
+    run("foo").assert_stdout_not_contains("cannot unwind");
+}
diff --git a/tests/run-make/glibc-staticlib-args/Makefile b/tests/run-make/glibc-staticlib-args/Makefile
deleted file mode 100644
index cad6c049e45..00000000000
--- a/tests/run-make/glibc-staticlib-args/Makefile
+++ /dev/null
@@ -1,13 +0,0 @@
-# ignore-cross-compile
-# only-gnu
-# only-linux
-
-include ../tools.mk
-
-# This ensures that std::env::args works in a library called from C on glibc Linux.
-
-all:
-	$(RUSTC) --crate-type=staticlib library.rs
-	$(CC) program.c $(call STATICLIB,library) $(call OUT_EXE,program) \
-		$(EXTRACFLAGS) $(EXTRACXXFLAGS)
-	$(call RUN,program)
diff --git a/tests/run-make/glibc-staticlib-args/rmake.rs b/tests/run-make/glibc-staticlib-args/rmake.rs
new file mode 100644
index 00000000000..8ab10419ab9
--- /dev/null
+++ b/tests/run-make/glibc-staticlib-args/rmake.rs
@@ -0,0 +1,18 @@
+// This ensures that std::env::args works in a library called from C on glibc Linux.
+
+//@ only-gnu
+//@ only-linux
+//@ ignore-cross-compile
+
+use run_make_support::{bin_name, cc, extra_c_flags, extra_cxx_flags, run, rustc, static_lib_name};
+
+fn main() {
+    rustc().input("library.rs").crate_type("staticlib").run();
+    cc().input("program.c")
+        .arg(static_lib_name("library"))
+        .out_exe("program")
+        .args(&extra_c_flags())
+        .args(&extra_cxx_flags())
+        .run();
+    run(&bin_name("program"));
+}
diff --git a/tests/run-make/inaccessible-temp-dir/rmake.rs b/tests/run-make/inaccessible-temp-dir/rmake.rs
index be24e47b6de..c6bfae4cc01 100644
--- a/tests/run-make/inaccessible-temp-dir/rmake.rs
+++ b/tests/run-make/inaccessible-temp-dir/rmake.rs
@@ -19,7 +19,7 @@
 // Reason: `set_readonly` has no effect on directories
 // and does not prevent modification.
 
-use run_make_support::{fs_wrapper, rustc, test_while_readonly};
+use run_make_support::{fs_wrapper, rustc, target, test_while_readonly};
 
 fn main() {
     // Create an inaccessible directory.
@@ -28,6 +28,7 @@ fn main() {
         // Run rustc with `-Z temps-dir` set to a directory *inside* the inaccessible one,
         // so that it can't create `tmp`.
         rustc()
+            .target(&target())
             .input("program.rs")
             .arg("-Ztemps-dir=inaccessible/tmp")
             .run_fail()
diff --git a/tests/run-make/inline-always-many-cgu/Makefile b/tests/run-make/inline-always-many-cgu/Makefile
deleted file mode 100644
index 9945821db28..00000000000
--- a/tests/run-make/inline-always-many-cgu/Makefile
+++ /dev/null
@@ -1,8 +0,0 @@
-include ../tools.mk
-
-all:
-	$(RUSTC) foo.rs --emit llvm-ir -C codegen-units=2
-	if cat $(TMPDIR)/*.ll | $(CGREP) -e '\bcall\b'; then \
-		echo "found call instruction when one wasn't expected"; \
-		exit 1; \
-	fi
diff --git a/tests/run-make/inline-always-many-cgu/rmake.rs b/tests/run-make/inline-always-many-cgu/rmake.rs
new file mode 100644
index 00000000000..c55ea69f3b9
--- /dev/null
+++ b/tests/run-make/inline-always-many-cgu/rmake.rs
@@ -0,0 +1,18 @@
+use run_make_support::fs_wrapper::read_to_string;
+use run_make_support::regex::Regex;
+use run_make_support::{read_dir, rustc};
+
+use std::ffi::OsStr;
+
+fn main() {
+    rustc().input("foo.rs").emit("llvm-ir").codegen_units(2).run();
+    let re = Regex::new(r"\bcall\b").unwrap();
+    let mut nb_ll = 0;
+    read_dir(".", |path| {
+        if path.is_file() && path.extension().is_some_and(|ext| ext == OsStr::new("ll")) {
+            assert!(!re.is_match(&read_to_string(path)));
+            nb_ll += 1;
+        }
+    });
+    assert!(nb_ll > 0);
+}
diff --git a/tests/run-make/issue-51671/Makefile b/tests/run-make/issue-51671/Makefile
deleted file mode 100644
index c9364536992..00000000000
--- a/tests/run-make/issue-51671/Makefile
+++ /dev/null
@@ -1,9 +0,0 @@
-include ../tools.mk
-
-# ignore-windows-msvc
-
-all:
-	$(RUSTC) --emit=obj app.rs
-	nm $(TMPDIR)/app.o | $(CGREP) rust_begin_unwind
-	nm $(TMPDIR)/app.o | $(CGREP) rust_eh_personality
-	nm $(TMPDIR)/app.o | $(CGREP) __rg_oom
diff --git a/tests/run-make/link-args-order/Makefile b/tests/run-make/link-args-order/Makefile
deleted file mode 100644
index c562cc1b396..00000000000
--- a/tests/run-make/link-args-order/Makefile
+++ /dev/null
@@ -1,10 +0,0 @@
-# ignore-msvc
-
-include ../tools.mk
-
-RUSTC_FLAGS = -C linker-flavor=ld -C link-arg=a -C link-args="b c" -C link-args="d e" -C link-arg=f
-RUSTC_FLAGS_PRE = -C linker-flavor=ld -Z pre-link-arg=a -Z pre-link-args="b c" -Z pre-link-args="d e" -Z pre-link-arg=f
-
-all:
-	$(RUSTC) $(RUSTC_FLAGS) empty.rs 2>&1 | $(CGREP) '"a" "b" "c" "d" "e" "f"'
-	$(RUSTC) $(RUSTC_FLAGS_PRE) empty.rs 2>&1 | $(CGREP) '"a" "b" "c" "d" "e" "f"'
diff --git a/tests/run-make/link-args-order/rmake.rs b/tests/run-make/link-args-order/rmake.rs
new file mode 100644
index 00000000000..d238ad23f27
--- /dev/null
+++ b/tests/run-make/link-args-order/rmake.rs
@@ -0,0 +1,30 @@
+// Passing linker arguments to the compiler used to be lost or reordered in a messy way
+// as they were passed further to the linker. This was fixed in #70665, and this test
+// checks that linker arguments remain intact and in the order they were originally passed in.
+// See https://github.com/rust-lang/rust/pull/70665
+
+//@ ignore-msvc
+// Reason: the ld linker does not exist on Windows.
+
+use run_make_support::rustc;
+
+fn main() {
+    rustc()
+        .input("empty.rs")
+        .linker_flavor("ld")
+        .link_arg("a")
+        .link_args("b c")
+        .link_args("d e")
+        .link_arg("f")
+        .run_fail()
+        .assert_stderr_contains(r#""a" "b" "c" "d" "e" "f""#);
+    rustc()
+        .input("empty.rs")
+        .linker_flavor("ld")
+        .arg("-Zpre-link-arg=a")
+        .arg("-Zpre-link-args=b c")
+        .arg("-Zpre-link-args=d e")
+        .arg("-Zpre-link-arg=f")
+        .run_fail()
+        .assert_stderr_contains(r#""a" "b" "c" "d" "e" "f""#);
+}
diff --git a/tests/run-make/ls-metadata/Makefile b/tests/run-make/ls-metadata/Makefile
deleted file mode 100644
index f03569baef7..00000000000
--- a/tests/run-make/ls-metadata/Makefile
+++ /dev/null
@@ -1,8 +0,0 @@
-# ignore-cross-compile
-include ../tools.mk
-
-all:
-	$(RUSTC) foo.rs
-	$(RUSTC) -Z ls=root $(TMPDIR)/foo
-	touch $(TMPDIR)/bar
-	$(RUSTC) -Z ls=root $(TMPDIR)/bar
diff --git a/tests/run-make/ls-metadata/rmake.rs b/tests/run-make/ls-metadata/rmake.rs
new file mode 100644
index 00000000000..0e60f2c4678
--- /dev/null
+++ b/tests/run-make/ls-metadata/rmake.rs
@@ -0,0 +1,17 @@
+// Passing invalid files to -Z ls (which lists the symbols
+// defined by a library crate) used to cause a segmentation fault.
+// As this was fixed in #11262, this test checks that no segfault
+// occurs when passing the invalid file `bar` to -Z ls.
+// See https://github.com/rust-lang/rust/issues/11259
+
+//@ ignore-cross-compile
+
+use run_make_support::fs_wrapper;
+use run_make_support::rustc;
+
+fn main() {
+    rustc().input("foo.rs").run();
+    rustc().arg("-Zls=root").input("foo").run();
+    fs_wrapper::create_file("bar");
+    rustc().arg("-Zls=root").input("bar").run();
+}
diff --git a/tests/run-make/lto-readonly-lib/Makefile b/tests/run-make/lto-readonly-lib/Makefile
deleted file mode 100644
index 11d944e3e3d..00000000000
--- a/tests/run-make/lto-readonly-lib/Makefile
+++ /dev/null
@@ -1,13 +0,0 @@
-# ignore-cross-compile
-include ../tools.mk
-
-all:
-	$(RUSTC) lib.rs
-
-	# the compiler needs to copy and modify the rlib file when performing
-	# LTO, so we should ensure that it can cope with the original rlib
-	# being read-only.
-	chmod 444 $(TMPDIR)/*.rlib
-
-	$(RUSTC) main.rs -C lto
-	$(call RUN,main)
diff --git a/tests/run-make/lto-readonly-lib/rmake.rs b/tests/run-make/lto-readonly-lib/rmake.rs
new file mode 100644
index 00000000000..9eb135addd9
--- /dev/null
+++ b/tests/run-make/lto-readonly-lib/rmake.rs
@@ -0,0 +1,19 @@
+// When the compiler is performing link time optimization, it will
+// need to copy the original rlib file, set the copy's permissions to read/write,
+// and modify that copy - even if the original
+// file is read-only. This test creates a read-only rlib, and checks that
+// compilation with LTO succeeds.
+// See https://github.com/rust-lang/rust/pull/17619
+
+//@ ignore-cross-compile
+
+use run_make_support::fs_wrapper;
+use run_make_support::{run, rust_lib_name, rustc, test_while_readonly};
+
+fn main() {
+    rustc().input("lib.rs").run();
+    test_while_readonly(rust_lib_name("lib"), || {
+        rustc().input("main.rs").arg("-Clto").run();
+        run("main");
+    });
+}
diff --git a/tests/run-make/metadata-flag-frobs-symbols/Makefile b/tests/run-make/metadata-flag-frobs-symbols/Makefile
deleted file mode 100644
index 53d7d065769..00000000000
--- a/tests/run-make/metadata-flag-frobs-symbols/Makefile
+++ /dev/null
@@ -1,11 +0,0 @@
-# ignore-cross-compile
-include ../tools.mk
-
-all:
-	$(RUSTC) foo.rs -C metadata=a -C extra-filename=-a
-	$(RUSTC) foo.rs -C metadata=b -C extra-filename=-b
-	$(RUSTC) bar.rs \
-		--extern foo1=$(TMPDIR)/libfoo-a.rlib \
-		--extern foo2=$(TMPDIR)/libfoo-b.rlib \
-		--print link-args
-	$(call RUN,bar)
diff --git a/tests/run-make/metadata-flag-frobs-symbols/rmake.rs b/tests/run-make/metadata-flag-frobs-symbols/rmake.rs
new file mode 100644
index 00000000000..938886957fb
--- /dev/null
+++ b/tests/run-make/metadata-flag-frobs-symbols/rmake.rs
@@ -0,0 +1,20 @@
+// In this test, foo.rs is compiled twice with different hashes tied to its
+// symbols thanks to the metadata flag. bar.rs then ensures that the memory locations
+// of foo's symbols are different even though they came from the same original source code.
+// This checks that the metadata flag is doing its job.
+// See https://github.com/rust-lang/rust/issues/14471
+
+//@ ignore-cross-compile
+
+use run_make_support::{run, rust_lib_name, rustc};
+
+fn main() {
+    rustc().input("foo.rs").metadata("a").extra_filename("-a").run();
+    rustc().input("foo.rs").metadata("b").extra_filename("-b").run();
+    rustc()
+        .input("bar.rs")
+        .extern_("foo1", rust_lib_name("foo-a"))
+        .extern_("foo2", rust_lib_name("foo-b"))
+        .run();
+    run("bar");
+}
diff --git a/tests/run-make/relocation-model/Makefile b/tests/run-make/relocation-model/Makefile
deleted file mode 100644
index 8cc5205ed51..00000000000
--- a/tests/run-make/relocation-model/Makefile
+++ /dev/null
@@ -1,20 +0,0 @@
-# ignore-cross-compile
-include ../tools.mk
-
-all: others
-	$(RUSTC) -C relocation-model=dynamic-no-pic foo.rs
-	$(call RUN,foo)
-
-	$(RUSTC) -C relocation-model=default foo.rs
-	$(call RUN,foo)
-
-	$(RUSTC) -C relocation-model=dynamic-no-pic --crate-type=dylib foo.rs --emit=link,obj
-
-ifdef IS_MSVC
-# FIXME(#28026)
-others:
-else
-others:
-	$(RUSTC) -C relocation-model=static foo.rs
-	$(call RUN,foo)
-endif
diff --git a/tests/run-make/relocation-model/rmake.rs b/tests/run-make/relocation-model/rmake.rs
new file mode 100644
index 00000000000..9cf85d6d730
--- /dev/null
+++ b/tests/run-make/relocation-model/rmake.rs
@@ -0,0 +1,24 @@
+// Generation of position-independent code (PIC) can be altered
+// through use of the -C relocation-model rustc flag. This test
+// uses varied values with this flag and checks that compilation
+// succeeds.
+// See https://github.com/rust-lang/rust/pull/13340
+
+//@ ignore-cross-compile
+
+use run_make_support::{run, rustc};
+
+fn main() {
+    rustc().arg("-Crelocation-model=static").input("foo.rs").run();
+    run("foo");
+    rustc().arg("-Crelocation-model=dynamic-no-pic").input("foo.rs").run();
+    run("foo");
+    rustc().arg("-Crelocation-model=default").input("foo.rs").run();
+    run("foo");
+    rustc()
+        .arg("-Crelocation-model=dynamic-no-pic")
+        .crate_type("dylib")
+        .emit("link,obj")
+        .input("foo.rs")
+        .run();
+}
diff --git a/tests/run-make/relro-levels/Makefile b/tests/run-make/relro-levels/Makefile
deleted file mode 100644
index 94f08bcb494..00000000000
--- a/tests/run-make/relro-levels/Makefile
+++ /dev/null
@@ -1,22 +0,0 @@
-# ignore-cross-compile
-include ../tools.mk
-
-# only-linux
-#
-# This tests the different -Crelro-level values, and makes sure that they work properly.
-
-all:
-	# Ensure that binaries built with the full relro level links them with both
-	# RELRO and BIND_NOW for doing eager symbol resolving.
-	$(RUSTC) -Crelro-level=full hello.rs
-	readelf -l $(TMPDIR)/hello | grep -q GNU_RELRO
-	readelf -d $(TMPDIR)/hello | grep -q BIND_NOW
-
-	$(RUSTC) -Crelro-level=partial hello.rs
-	readelf -l $(TMPDIR)/hello | grep -q GNU_RELRO
-
-	# Ensure that we're *not* built with RELRO when setting it to off.  We do
-	# not want to check for BIND_NOW however, as the linker might have that
-	# enabled by default.
-	$(RUSTC) -Crelro-level=off hello.rs
-	! readelf -l $(TMPDIR)/hello | grep -q GNU_RELRO
diff --git a/tests/run-make/relro-levels/rmake.rs b/tests/run-make/relro-levels/rmake.rs
new file mode 100644
index 00000000000..56545ebc5aa
--- /dev/null
+++ b/tests/run-make/relro-levels/rmake.rs
@@ -0,0 +1,28 @@
+// This tests the different -Crelro-level values, and makes sure that they work properly.
+
+//@ only-linux
+
+use run_make_support::llvm_readobj;
+use run_make_support::rustc;
+
+fn compile(relro_level: &str) {
+    rustc().arg(format!("-Crelro-level={relro_level}")).input("hello.rs").run();
+}
+
+fn main() {
+    // Ensure that binaries built with the full relro level links them with both
+    // RELRO and BIND_NOW for doing eager symbol resolving.
+
+    compile("full");
+    llvm_readobj().program_headers().input("hello").run().assert_stdout_contains("GNU_RELRO");
+    llvm_readobj().dynamic_table().input("hello").run().assert_stdout_contains("BIND_NOW");
+
+    compile("partial");
+    llvm_readobj().program_headers().input("hello").run().assert_stdout_contains("GNU_RELRO");
+
+    // Ensure that we're *not* built with RELRO when setting it to off.  We do
+    // not want to check for BIND_NOW however, as the linker might have that
+    // enabled by default.
+    compile("off");
+    llvm_readobj().program_headers().input("hello").run().assert_stdout_not_contains("GNU_RELRO");
+}
diff --git a/tests/run-make/rustdoc-io-error/Makefile b/tests/run-make/rustdoc-io-error/Makefile
deleted file mode 100644
index 27f5ecf94ab..00000000000
--- a/tests/run-make/rustdoc-io-error/Makefile
+++ /dev/null
@@ -1,20 +0,0 @@
-include ../tools.mk
-
-# This test verifies that rustdoc doesn't ICE when it encounters an IO error
-# while generating files. Ideally this would be a rustdoc-ui test, so we could
-# verify the error message as well.
-
-# ignore-windows
-# The test uses `chmod`.
-
-OUTPUT_DIR := "$(TMPDIR)/rustdoc-io-error"
-
-# This test operates by creating a temporary directory and modifying its
-# permissions so that it is not writable. We have to take special care to set
-# the permissions back to normal so that it's able to be deleted later.
-all:
-	mkdir -p $(OUTPUT_DIR)
-	chmod u-w $(OUTPUT_DIR)
-	-$(shell $(RUSTDOC) -o $(OUTPUT_DIR) foo.rs)
-	chmod u+w $(OUTPUT_DIR)
-	exit $($(.SHELLSTATUS) -eq 1)
diff --git a/tests/run-make/rustdoc-io-error/rmake.rs b/tests/run-make/rustdoc-io-error/rmake.rs
new file mode 100644
index 00000000000..d60e4438e6f
--- /dev/null
+++ b/tests/run-make/rustdoc-io-error/rmake.rs
@@ -0,0 +1,31 @@
+// This test verifies that rustdoc doesn't ICE when it encounters an IO error
+// while generating files. Ideally this would be a rustdoc-ui test, so we could
+// verify the error message as well.
+//
+// It operates by creating a temporary directory and modifying its
+// permissions so that it is not writable. We have to take special care to set
+// the permissions back to normal so that it's able to be deleted later.
+
+//@ ignore-windows - the `set_readonly` functions doesn't work on folders.
+//@ ignore-arm - weird file perms on armhf-gnu
+
+use run_make_support::{path, rustdoc};
+use std::fs;
+
+fn main() {
+    let out_dir = path("rustdoc-io-error");
+    let output = fs::create_dir(&out_dir).unwrap();
+    let mut permissions = fs::metadata(&out_dir).unwrap().permissions();
+    let original_permissions = permissions.clone();
+
+    permissions.set_readonly(true);
+    fs::set_permissions(&out_dir, permissions).unwrap();
+
+    let output = rustdoc().input("foo.rs").output(&out_dir).env("RUST_BACKTRACE", "1").run_fail();
+
+    fs::set_permissions(&out_dir, original_permissions).unwrap();
+
+    output
+        .assert_exit_code(1)
+        .assert_stderr_contains("error: couldn't generate documentation: Permission denied");
+}
diff --git a/tests/run-make/static-pie/Makefile b/tests/run-make/static-pie/Makefile
deleted file mode 100644
index 8379730cc3d..00000000000
--- a/tests/run-make/static-pie/Makefile
+++ /dev/null
@@ -1,18 +0,0 @@
-include ../tools.mk
-
-# only-x86_64
-# only-linux
-# ignore-32bit
-
-# How to manually run this
-# $ ./x.py test --target x86_64-unknown-linux-[musl,gnu] tests/run-make/static-pie
-
-all: test-clang test-gcc
-
-test-%:
-	if ./check_$*_version.sh; then\
-		${RUSTC} -Clinker=$* -Clinker-flavor=gcc --target ${TARGET} -C target-feature=+crt-static test-aslr.rs; \
-		! readelf -l $(call RUN_BINFILE,test-aslr) | $(CGREP) INTERP; \
-		readelf -l $(call RUN_BINFILE,test-aslr) | $(CGREP) DYNAMIC; \
-		$(call RUN,test-aslr) --test-aslr; \
-	fi
diff --git a/tests/run-make/static-pie/check_clang_version.sh b/tests/run-make/static-pie/check_clang_version.sh
deleted file mode 100755
index b8e97c3da7d..00000000000
--- a/tests/run-make/static-pie/check_clang_version.sh
+++ /dev/null
@@ -1,20 +0,0 @@
-#!/bin/bash
-
-set -euo pipefail
-
-if command -v clang > /dev/null
-then
-  CLANG_VERSION=$(echo __clang_major__ | clang -E -x c - | grep -v -e '^#' )
-  echo "clang version $CLANG_VERSION detected"
-  if (( $CLANG_VERSION >= 9 ))
-  then
-    echo "clang supports -static-pie"
-    exit 0
-  else
-    echo "clang too old to support -static-pie, skipping test"
-    exit 1
-  fi
-else
-  echo "No clang version detected"
-  exit 2
-fi
diff --git a/tests/run-make/static-pie/check_gcc_version.sh b/tests/run-make/static-pie/check_gcc_version.sh
deleted file mode 100755
index d07e1d151df..00000000000
--- a/tests/run-make/static-pie/check_gcc_version.sh
+++ /dev/null
@@ -1,20 +0,0 @@
-#!/bin/bash
-
-set -euo pipefail
-
-if command -v gcc > /dev/null
-then
-  GCC_VERSION=$(echo __GNUC__ | gcc -E -x c - | grep -v -e '^#' )
-  echo "gcc version $GCC_VERSION detected"
-  if (( $GCC_VERSION >= 8 ))
-  then
-    echo "gcc supports -static-pie"
-    exit 0
-  else
-    echo "gcc too old to support -static-pie, skipping test"
-    exit 1
-  fi
-else
-  echo "No gcc version detected"
-  exit 2
-fi
diff --git a/tests/run-make/static-pie/rmake.rs b/tests/run-make/static-pie/rmake.rs
new file mode 100644
index 00000000000..77c5e253bc0
--- /dev/null
+++ b/tests/run-make/static-pie/rmake.rs
@@ -0,0 +1,73 @@
+// How to manually run this
+// $ ./x.py test --target x86_64-unknown-linux-[musl,gnu] tests/run-make/static-pie
+
+//@ only-x86_64
+//@ only-linux
+//@ ignore-32bit
+
+use std::process::Command;
+
+use run_make_support::llvm_readobj;
+use run_make_support::regex::Regex;
+use run_make_support::rustc;
+use run_make_support::{cmd, run_with_args, target};
+
+// Minimum major versions supporting -static-pie
+const GCC_VERSION: u32 = 8;
+const CLANG_VERSION: u32 = 9;
+
+// Return `true` if the `compiler` version supports `-static-pie`.
+fn ok_compiler_version(compiler: &str) -> bool {
+    let (trigger, version_threshold) = match compiler {
+        "clang" => ("__clang_major__", CLANG_VERSION),
+        "gcc" => ("__GNUC__", GCC_VERSION),
+        other => panic!("unexpected compiler '{other}', expected 'clang' or 'gcc'"),
+    };
+
+    if Command::new(compiler).spawn().is_err() {
+        eprintln!("No {compiler} version detected");
+        return false;
+    }
+
+    let compiler_output =
+        cmd(compiler).stdin(trigger).arg("-").arg("-E").arg("-x").arg("c").run().stdout_utf8();
+    let re = Regex::new(r"(?m)^(\d+)").unwrap();
+    let version: u32 =
+        re.captures(&compiler_output).unwrap().get(1).unwrap().as_str().parse().unwrap();
+
+    if version >= version_threshold {
+        eprintln!("{compiler} supports -static-pie");
+        true
+    } else {
+        eprintln!("{compiler} too old to support -static-pie, skipping test");
+        false
+    }
+}
+
+fn test(compiler: &str) {
+    if !ok_compiler_version(compiler) {
+        return;
+    }
+
+    rustc()
+        .input("test-aslr.rs")
+        .target(&target())
+        .linker(compiler)
+        .arg("-Clinker-flavor=gcc")
+        .arg("-Ctarget-feature=+crt-static")
+        .run();
+
+    llvm_readobj()
+        .symbols()
+        .input("test-aslr")
+        .run()
+        .assert_stdout_not_contains("INTERP")
+        .assert_stdout_contains("DYNAMIC");
+
+    run_with_args("test-aslr", &["--test-aslr"]);
+}
+
+fn main() {
+    test("clang");
+    test("gcc");
+}
diff --git a/tests/run-make/symlinked-extern/rmake.rs b/tests/run-make/symlinked-extern/rmake.rs
index 98f69aefbe6..9ed5b76edcb 100644
--- a/tests/run-make/symlinked-extern/rmake.rs
+++ b/tests/run-make/symlinked-extern/rmake.rs
@@ -9,6 +9,7 @@
 // can result in successful compilation.
 
 //@ ignore-cross-compile
+//@ needs-symlink
 
 use run_make_support::{create_symlink, cwd, fs_wrapper, rustc};
 
diff --git a/tests/run-make/symlinked-libraries/rmake.rs b/tests/run-make/symlinked-libraries/rmake.rs
index eaf0c44206a..1d1dce5b5cf 100644
--- a/tests/run-make/symlinked-libraries/rmake.rs
+++ b/tests/run-make/symlinked-libraries/rmake.rs
@@ -6,6 +6,8 @@
 // See https://github.com/rust-lang/rust/issues/12459
 
 //@ ignore-cross-compile
+//@ needs-symlink
+
 use run_make_support::{create_symlink, dynamic_lib_name, fs_wrapper, rustc};
 
 fn main() {
diff --git a/tests/run-make/symlinked-rlib/rmake.rs b/tests/run-make/symlinked-rlib/rmake.rs
index 3759ca25928..65ebb191428 100644
--- a/tests/run-make/symlinked-rlib/rmake.rs
+++ b/tests/run-make/symlinked-rlib/rmake.rs
@@ -6,6 +6,7 @@
 // See https://github.com/rust-lang/rust/pull/32828
 
 //@ ignore-cross-compile
+//@ needs-symlink
 
 use run_make_support::{create_symlink, cwd, rustc};
 
diff --git a/tests/rustdoc/alias-reexport.rs b/tests/rustdoc/alias-reexport.rs
index 0f77d8b3f96..41f1f8df0f6 100644
--- a/tests/rustdoc/alias-reexport.rs
+++ b/tests/rustdoc/alias-reexport.rs
@@ -7,11 +7,11 @@
 
 extern crate alias_reexport2;
 
-// @has 'foo/reexport/fn.foo.html'
-// @has - '//*[@class="rust item-decl"]' 'pub fn foo() -> Reexported'
-// @has 'foo/reexport/fn.foo2.html'
-// @has - '//*[@class="rust item-decl"]' 'pub fn foo2() -> Result<Reexported, ()>'
-// @has 'foo/reexport/type.Reexported.html'
-// @has - '//*[@class="rust item-decl"]' 'pub type Reexported = u8;'
+//@ has 'foo/reexport/fn.foo.html'
+//@ has - '//*[@class="rust item-decl"]' 'pub fn foo() -> Reexported'
+//@ has 'foo/reexport/fn.foo2.html'
+//@ has - '//*[@class="rust item-decl"]' 'pub fn foo2() -> Result<Reexported, ()>'
+//@ has 'foo/reexport/type.Reexported.html'
+//@ has - '//*[@class="rust item-decl"]' 'pub type Reexported = u8;'
 #[doc(inline)]
 pub use alias_reexport2 as reexport;
diff --git a/tests/rustdoc/alias-reexport2.rs b/tests/rustdoc/alias-reexport2.rs
index 60b7a5f9b83..2fb69b922c8 100644
--- a/tests/rustdoc/alias-reexport2.rs
+++ b/tests/rustdoc/alias-reexport2.rs
@@ -9,9 +9,9 @@ extern crate alias_reexport;
 
 use alias_reexport::Reexported;
 
-// @has 'foo/fn.foo.html'
-// @has - '//*[@class="rust item-decl"]' 'pub fn foo() -> Reexported'
+//@ has 'foo/fn.foo.html'
+//@ has - '//*[@class="rust item-decl"]' 'pub fn foo() -> Reexported'
 pub fn foo() -> Reexported { 0 }
-// @has 'foo/fn.foo2.html'
-// @has - '//*[@class="rust item-decl"]' 'pub fn foo2() -> Result<Reexported, ()>'
+//@ has 'foo/fn.foo2.html'
+//@ has - '//*[@class="rust item-decl"]' 'pub fn foo2() -> Result<Reexported, ()>'
 pub fn foo2() -> Result<Reexported, ()> { Ok(0) }
diff --git a/tests/rustdoc/all.rs b/tests/rustdoc/all.rs
index 4c8d0231095..7056af8e343 100644
--- a/tests/rustdoc/all.rs
+++ b/tests/rustdoc/all.rs
@@ -1,11 +1,11 @@
 #![crate_name = "foo"]
 
-// @has foo/all.html '//a[@href="struct.Struct.html"]' 'Struct'
-// @has foo/all.html '//a[@href="enum.Enum.html"]' 'Enum'
-// @has foo/all.html '//a[@href="union.Union.html"]' 'Union'
-// @has foo/all.html '//a[@href="constant.CONST.html"]' 'CONST'
-// @has foo/all.html '//a[@href="static.STATIC.html"]' 'STATIC'
-// @has foo/all.html '//a[@href="fn.function.html"]' 'function'
+//@ has foo/all.html '//a[@href="struct.Struct.html"]' 'Struct'
+//@ has foo/all.html '//a[@href="enum.Enum.html"]' 'Enum'
+//@ has foo/all.html '//a[@href="union.Union.html"]' 'Union'
+//@ has foo/all.html '//a[@href="constant.CONST.html"]' 'CONST'
+//@ has foo/all.html '//a[@href="static.STATIC.html"]' 'STATIC'
+//@ has foo/all.html '//a[@href="fn.function.html"]' 'function'
 
 pub struct Struct;
 pub enum Enum {
@@ -23,6 +23,6 @@ mod private_module {
     pub struct ReexportedStruct;
 }
 
-// @has foo/all.html '//a[@href="struct.ReexportedStruct.html"]' 'ReexportedStruct'
-// @!hasraw foo/all.html 'private_module'
+//@ has foo/all.html '//a[@href="struct.ReexportedStruct.html"]' 'ReexportedStruct'
+//@ !hasraw foo/all.html 'private_module'
 pub use private_module::ReexportedStruct;
diff --git a/tests/rustdoc/anchor-id-duplicate-method-name-25001.rs b/tests/rustdoc/anchor-id-duplicate-method-name-25001.rs
index ffb0765d3c3..5fa6891b23d 100644
--- a/tests/rustdoc/anchor-id-duplicate-method-name-25001.rs
+++ b/tests/rustdoc/anchor-id-duplicate-method-name-25001.rs
@@ -1,7 +1,7 @@
 // https://github.com/rust-lang/rust/issues/25001
 #![crate_name="issue_25001"]
 
-// @has issue_25001/struct.Foo.html
+//@ has issue_25001/struct.Foo.html
 pub struct Foo<T>(T);
 
 pub trait Bar {
@@ -11,36 +11,36 @@ pub trait Bar {
 }
 
 impl Foo<u8> {
-    // @has - '//*[@id="method.pass"]//h4[@class="code-header"]' 'fn pass()'
+    //@ has - '//*[@id="method.pass"]//h4[@class="code-header"]' 'fn pass()'
     pub fn pass() {}
 }
 impl Foo<u16> {
-    // @has - '//*[@id="method.pass-1"]//h4[@class="code-header"]' 'fn pass() -> usize'
+    //@ has - '//*[@id="method.pass-1"]//h4[@class="code-header"]' 'fn pass() -> usize'
     pub fn pass() -> usize { 42 }
 }
 impl Foo<u32> {
-    // @has - '//*[@id="method.pass-2"]//h4[@class="code-header"]' 'fn pass() -> isize'
+    //@ has - '//*[@id="method.pass-2"]//h4[@class="code-header"]' 'fn pass() -> isize'
     pub fn pass() -> isize { 42 }
 }
 
 impl<T> Bar for Foo<T> {
-    // @has - '//*[@id="associatedtype.Item-1"]//h4[@class="code-header"]' 'type Item = T'
+    //@ has - '//*[@id="associatedtype.Item-1"]//h4[@class="code-header"]' 'type Item = T'
     type Item=T;
 
-    // @has - '//*[@id="method.quux"]//h4[@class="code-header"]' 'fn quux(self)'
+    //@ has - '//*[@id="method.quux"]//h4[@class="code-header"]' 'fn quux(self)'
     fn quux(self) {}
 }
 impl<'a, T> Bar for &'a Foo<T> {
-    // @has - '//*[@id="associatedtype.Item"]//h4[@class="code-header"]' "type Item = &'a T"
+    //@ has - '//*[@id="associatedtype.Item"]//h4[@class="code-header"]' "type Item = &'a T"
     type Item=&'a T;
 
-    // @has - '//*[@id="method.quux-1"]//h4[@class="code-header"]' 'fn quux(self)'
+    //@ has - '//*[@id="method.quux-1"]//h4[@class="code-header"]' 'fn quux(self)'
     fn quux(self) {}
 }
 impl<'a, T> Bar for &'a mut Foo<T> {
-    // @has - '//*[@id="associatedtype.Item-2"]//h4[@class="code-header"]' "type Item = &'a mut T"
+    //@ has - '//*[@id="associatedtype.Item-2"]//h4[@class="code-header"]' "type Item = &'a mut T"
     type Item=&'a mut T;
 
-    // @has - '//*[@id="method.quux-2"]//h4[@class="code-header"]' 'fn quux(self)'
+    //@ has - '//*[@id="method.quux-2"]//h4[@class="code-header"]' 'fn quux(self)'
     fn quux(self) {}
 }
diff --git a/tests/rustdoc/anchor-id-trait-method-15169.rs b/tests/rustdoc/anchor-id-trait-method-15169.rs
index 26bb59c1875..19eeeaee9d1 100644
--- a/tests/rustdoc/anchor-id-trait-method-15169.rs
+++ b/tests/rustdoc/anchor-id-trait-method-15169.rs
@@ -1,4 +1,4 @@
-// @has issue_15169/struct.Foo.html '//*[@id="method.eq"]' 'fn eq'
+//@ has issue_15169/struct.Foo.html '//*[@id="method.eq"]' 'fn eq'
 
 // https://github.com/rust-lang/rust/issues/15169
 #![crate_name="issue_15169"]
diff --git a/tests/rustdoc/anchor-id-trait-tymethod-28478.rs b/tests/rustdoc/anchor-id-trait-tymethod-28478.rs
index 5685040dc1e..e7adba7d06e 100644
--- a/tests/rustdoc/anchor-id-trait-tymethod-28478.rs
+++ b/tests/rustdoc/anchor-id-trait-tymethod-28478.rs
@@ -3,32 +3,32 @@
 
 #![feature(associated_type_defaults)]
 
-// @has issue_28478/trait.Bar.html
+//@ has issue_28478/trait.Bar.html
 pub trait Bar {
-    // @has - '//*[@id="associatedtype.Bar"]' 'type Bar = ()'
-    // @has - '//*[@href="#associatedtype.Bar"]' 'Bar'
+    //@ has - '//*[@id="associatedtype.Bar"]' 'type Bar = ()'
+    //@ has - '//*[@href="#associatedtype.Bar"]' 'Bar'
     type Bar = ();
-    // @has - '//*[@id="associatedconstant.Baz"]' 'const Baz: usize'
-    // @has - '//*[@href="#associatedconstant.Baz"]' 'Baz'
+    //@ has - '//*[@id="associatedconstant.Baz"]' 'const Baz: usize'
+    //@ has - '//*[@href="#associatedconstant.Baz"]' 'Baz'
     const Baz: usize = 7;
-    // @has - '//*[@id="tymethod.bar"]' 'fn bar'
+    //@ has - '//*[@id="tymethod.bar"]' 'fn bar'
     fn bar();
-    // @has - '//*[@id="method.baz"]' 'fn baz'
+    //@ has - '//*[@id="method.baz"]' 'fn baz'
     fn baz() { }
 }
 
-// @has issue_28478/struct.Foo.html
+//@ has issue_28478/struct.Foo.html
 pub struct Foo;
 
 impl Foo {
-    // @has - '//*[@href="#method.foo"]' 'foo'
+    //@ has - '//*[@href="#method.foo"]' 'foo'
     pub fn foo() {}
 }
 
 impl Bar for Foo {
-    // @has - '//*[@href="trait.Bar.html#associatedtype.Bar"]' 'Bar'
-    // @has - '//*[@href="trait.Bar.html#associatedconstant.Baz"]' 'Baz'
-    // @has - '//*[@href="trait.Bar.html#tymethod.bar"]' 'bar'
+    //@ has - '//*[@href="trait.Bar.html#associatedtype.Bar"]' 'Bar'
+    //@ has - '//*[@href="trait.Bar.html#associatedconstant.Baz"]' 'Baz'
+    //@ has - '//*[@href="trait.Bar.html#tymethod.bar"]' 'bar'
     fn bar() {}
-    // @has - '//*[@href="trait.Bar.html#method.baz"]' 'baz'
+    //@ has - '//*[@href="trait.Bar.html#method.baz"]' 'baz'
 }
diff --git a/tests/rustdoc/anchors.rs b/tests/rustdoc/anchors.rs
index 034cf8eaf4f..255ef87351c 100644
--- a/tests/rustdoc/anchors.rs
+++ b/tests/rustdoc/anchors.rs
@@ -6,44 +6,44 @@
 
 pub struct Foo;
 
-// @has 'foo/trait.Bar.html'
+//@ has 'foo/trait.Bar.html'
 pub trait Bar {
     // There should be no anchors here.
-    // @snapshot no_type_anchor - '//*[@id="associatedtype.T"]'
+    //@ snapshot no_type_anchor - '//*[@id="associatedtype.T"]'
     type T;
     // There should be no anchors here.
-    // @snapshot no_const_anchor - '//*[@id="associatedconstant.YOLO"]'
+    //@ snapshot no_const_anchor - '//*[@id="associatedconstant.YOLO"]'
     const YOLO: u32;
 
     // There should be no anchors here.
-    // @snapshot no_tymethod_anchor - '//*[@id="tymethod.foo"]'
+    //@ snapshot no_tymethod_anchor - '//*[@id="tymethod.foo"]'
     fn foo();
     // There should be no anchors here.
-    // @snapshot no_trait_method_anchor - '//*[@id="method.bar"]'
+    //@ snapshot no_trait_method_anchor - '//*[@id="method.bar"]'
     fn bar() {}
 }
 
-// @has 'foo/struct.Foo.html'
+//@ has 'foo/struct.Foo.html'
 impl Bar for Foo {
-    // @has - '//*[@id="associatedtype.T"]/a[@class="anchor"]' ''
+    //@ has - '//*[@id="associatedtype.T"]/a[@class="anchor"]' ''
     type T = u32;
-    // @has - '//*[@id="associatedconstant.YOLO"]/a[@class="anchor"]' ''
+    //@ has - '//*[@id="associatedconstant.YOLO"]/a[@class="anchor"]' ''
     const YOLO: u32 = 0;
 
-    // @has - '//*[@id="method.foo"]/a[@class="anchor"]' ''
+    //@ has - '//*[@id="method.foo"]/a[@class="anchor"]' ''
     fn foo() {}
     // Same check for provided "bar" method.
-    // @has - '//*[@id="method.bar"]/a[@class="anchor"]' ''
+    //@ has - '//*[@id="method.bar"]/a[@class="anchor"]' ''
 }
 
 impl Foo {
-    // @snapshot no_const_anchor2 - '//*[@id="associatedconstant.X"]'
+    //@ snapshot no_const_anchor2 - '//*[@id="associatedconstant.X"]'
     // There should be no anchors here.
     pub const X: i32 = 0;
-    // @snapshot no_type_anchor2 - '//*[@id="associatedtype.Y"]'
+    //@ snapshot no_type_anchor2 - '//*[@id="associatedtype.Y"]'
     // There should be no anchors here.
     pub type Y = u32;
-    // @snapshot no_method_anchor - '//*[@id="method.new"]'
+    //@ snapshot no_method_anchor - '//*[@id="method.new"]'
     // There should be no anchors here.
     pub fn new() -> Self { Self }
 }
diff --git a/tests/rustdoc/anonymous-lifetime.rs b/tests/rustdoc/anonymous-lifetime.rs
index 390ed5a1f93..872f31a3602 100644
--- a/tests/rustdoc/anonymous-lifetime.rs
+++ b/tests/rustdoc/anonymous-lifetime.rs
@@ -11,8 +11,8 @@ pub trait Stream {
     fn size_hint(&self) -> (usize, Option<usize>);
 }
 
-// @has 'foo/trait.Stream.html'
-// @has - '//*[@class="code-header"]' 'impl<S: ?Sized + Stream + Unpin> Stream for &mut S'
+//@ has 'foo/trait.Stream.html'
+//@ has - '//*[@class="code-header"]' 'impl<S: ?Sized + Stream + Unpin> Stream for &mut S'
 impl<S: ?Sized + Stream + Unpin> Stream for &mut S {
     type Item = S::Item;
 
diff --git a/tests/rustdoc/anonymous-reexport.rs b/tests/rustdoc/anonymous-reexport.rs
index 839c1a30346..8021008dc66 100644
--- a/tests/rustdoc/anonymous-reexport.rs
+++ b/tests/rustdoc/anonymous-reexport.rs
@@ -2,16 +2,16 @@
 
 // This test ensures we don't display anonymous (non-inline) re-exports of public items.
 
-// @has 'foo/index.html'
-// @has - '//*[@id="main-content"]' ''
+//@ has 'foo/index.html'
+//@ has - '//*[@id="main-content"]' ''
 // We check that the only "h2" present are "Structs" (for "Bla") and "Re-exports".
-// @count - '//*[@id="main-content"]/h2' 2
-// @has - '//*[@id="main-content"]/h2' 'Structs'
-// @has - '//*[@id="main-content"]/h2' 'Re-exports'
+//@ count - '//*[@id="main-content"]/h2' 2
+//@ has - '//*[@id="main-content"]/h2' 'Structs'
+//@ has - '//*[@id="main-content"]/h2' 'Re-exports'
 // The 3 re-exports.
-// @count - '//*[@id="main-content"]//*[@class="item-table"]//li//code' 3
+//@ count - '//*[@id="main-content"]//*[@class="item-table"]//li//code' 3
 // The public struct.
-// @count - '//*[@id="main-content"]//a[@class="struct"]' 1
+//@ count - '//*[@id="main-content"]//a[@class="struct"]' 1
 
 mod ext {
     pub trait Foo {}
diff --git a/tests/rustdoc/array-links.rs b/tests/rustdoc/array-links.rs
index 8ee294daa96..d185233c728 100644
--- a/tests/rustdoc/array-links.rs
+++ b/tests/rustdoc/array-links.rs
@@ -3,26 +3,26 @@
 
 pub struct MyBox<T: ?Sized>(*const T);
 
-// @has 'foo/fn.alpha.html'
-// @snapshot link_slice_u32 - '//pre[@class="rust item-decl"]/code'
+//@ has 'foo/fn.alpha.html'
+//@ snapshot link_slice_u32 - '//pre[@class="rust item-decl"]/code'
 pub fn alpha() -> &'static [u32; 1] {
     loop {}
 }
 
-// @has 'foo/fn.beta.html'
-// @snapshot link_slice_generic - '//pre[@class="rust item-decl"]/code'
+//@ has 'foo/fn.beta.html'
+//@ snapshot link_slice_generic - '//pre[@class="rust item-decl"]/code'
 pub fn beta<T>() -> &'static [T; 1] {
     loop {}
 }
 
-// @has 'foo/fn.gamma.html'
-// @snapshot link_box_u32 - '//pre[@class="rust item-decl"]/code'
+//@ has 'foo/fn.gamma.html'
+//@ snapshot link_box_u32 - '//pre[@class="rust item-decl"]/code'
 pub fn gamma() -> MyBox<[u32; 1]> {
     loop {}
 }
 
-// @has 'foo/fn.delta.html'
-// @snapshot link_box_generic - '//pre[@class="rust item-decl"]/code'
+//@ has 'foo/fn.delta.html'
+//@ snapshot link_box_generic - '//pre[@class="rust item-decl"]/code'
 pub fn delta<T>() -> MyBox<[T; 1]> {
     loop {}
 }
diff --git a/tests/rustdoc/asm-foreign.rs b/tests/rustdoc/asm-foreign.rs
index d7550ca5aca..ebae53ea19c 100644
--- a/tests/rustdoc/asm-foreign.rs
+++ b/tests/rustdoc/asm-foreign.rs
@@ -2,7 +2,7 @@
 
 use std::arch::asm;
 
-// @has asm_foreign/fn.aarch64.html
+//@ has asm_foreign/fn.aarch64.html
 pub unsafe fn aarch64(a: f64, b: f64) -> f64 {
     let c;
     asm!("add {:d}, {:d}, d0", out(vreg) c, in(vreg) a, in("d0") {
@@ -12,7 +12,7 @@ pub unsafe fn aarch64(a: f64, b: f64) -> f64 {
     c
 }
 
-// @has asm_foreign/fn.x86.html
+//@ has asm_foreign/fn.x86.html
 pub unsafe fn x86(a: f64, b: f64) -> f64 {
     let c;
     asm!("addsd {}, {}, xmm0", out(xmm_reg) c, in(xmm_reg) a, in("xmm0") b);
diff --git a/tests/rustdoc/asm-foreign2.rs b/tests/rustdoc/asm-foreign2.rs
index c3b194b1660..c0f3224a90f 100644
--- a/tests/rustdoc/asm-foreign2.rs
+++ b/tests/rustdoc/asm-foreign2.rs
@@ -3,7 +3,7 @@
 
 use std::arch::asm;
 
-// @has asm_foreign2/fn.x86.html
+//@ has asm_foreign2/fn.x86.html
 pub unsafe fn x86(x: i64) -> i64 {
     let y;
     asm!("movq {}, {}", in(reg) x, out(reg) y, options(att_syntax));
diff --git a/tests/rustdoc/asref-for-and-of-local-82465.rs b/tests/rustdoc/asref-for-and-of-local-82465.rs
index e6204688904..9c96b72ee27 100644
--- a/tests/rustdoc/asref-for-and-of-local-82465.rs
+++ b/tests/rustdoc/asref-for-and-of-local-82465.rs
@@ -4,14 +4,14 @@
 use std::convert::AsRef;
 pub struct Local;
 
-// @has foo/struct.Local.html '//h3[@class="code-header"]' 'impl AsRef<str> for Local'
+//@ has foo/struct.Local.html '//h3[@class="code-header"]' 'impl AsRef<str> for Local'
 impl AsRef<str> for Local {
     fn as_ref(&self) -> &str {
         todo!()
     }
 }
 
-// @has - '//h3[@class="code-header"]' 'impl AsRef<Local> for str'
+//@ has - '//h3[@class="code-header"]' 'impl AsRef<Local> for str'
 impl AsRef<Local> for str {
     fn as_ref(&self) -> &Local {
         todo!()
diff --git a/tests/rustdoc/assoc-consts-version.rs b/tests/rustdoc/assoc-consts-version.rs
index 6060bc0a6fd..db4d759acab 100644
--- a/tests/rustdoc/assoc-consts-version.rs
+++ b/tests/rustdoc/assoc-consts-version.rs
@@ -8,7 +8,7 @@
 pub struct SomeStruct;
 
 impl SomeStruct {
-    // @has 'foo/struct.SomeStruct.html' \
+    //@ has 'foo/struct.SomeStruct.html' \
     //   '//*[@id="associatedconstant.SOME_CONST"]//span[@class="since"]' '1.1.2'
     #[stable(since="1.1.2", feature="rust2")]
     pub const SOME_CONST: usize = 0;
diff --git a/tests/rustdoc/assoc-consts.rs b/tests/rustdoc/assoc-consts.rs
index 08dfa879d43..cb8e839541c 100644
--- a/tests/rustdoc/assoc-consts.rs
+++ b/tests/rustdoc/assoc-consts.rs
@@ -1,11 +1,11 @@
 pub trait Foo {
-    // @has assoc_consts/trait.Foo.html '//pre[@class="rust item-decl"]' \
+    //@ has assoc_consts/trait.Foo.html '//pre[@class="rust item-decl"]' \
     //      'const FOO: usize = 13usize;'
-    // @has - '//*[@id="associatedconstant.FOO"]' 'const FOO: usize'
+    //@ has - '//*[@id="associatedconstant.FOO"]' 'const FOO: usize'
     const FOO: usize = 12 + 1;
-    // @has - '//*[@id="associatedconstant.FOO_NO_DEFAULT"]' 'const FOO_NO_DEFAULT: bool'
+    //@ has - '//*[@id="associatedconstant.FOO_NO_DEFAULT"]' 'const FOO_NO_DEFAULT: bool'
     const FOO_NO_DEFAULT: bool;
-    // @!hasraw - FOO_HIDDEN
+    //@ !hasraw - FOO_HIDDEN
     #[doc(hidden)]
     const FOO_HIDDEN: u8 = 0;
 }
@@ -13,22 +13,22 @@ pub trait Foo {
 pub struct Bar;
 
 impl Foo for Bar {
-    // @has assoc_consts/struct.Bar.html '//h3[@class="code-header"]' 'impl Foo for Bar'
-    // @has - '//*[@id="associatedconstant.FOO"]' 'const FOO: usize'
+    //@ has assoc_consts/struct.Bar.html '//h3[@class="code-header"]' 'impl Foo for Bar'
+    //@ has - '//*[@id="associatedconstant.FOO"]' 'const FOO: usize'
     const FOO: usize = 12;
-    // @has - '//*[@id="associatedconstant.FOO_NO_DEFAULT"]' 'const FOO_NO_DEFAULT: bool'
+    //@ has - '//*[@id="associatedconstant.FOO_NO_DEFAULT"]' 'const FOO_NO_DEFAULT: bool'
     const FOO_NO_DEFAULT: bool = false;
-    // @!hasraw - FOO_HIDDEN
+    //@ !hasraw - FOO_HIDDEN
     #[doc(hidden)]
     const FOO_HIDDEN: u8 = 0;
 }
 
 impl Bar {
-    // @has assoc_consts/struct.Bar.html '//*[@id="associatedconstant.BAR"]' \
+    //@ has assoc_consts/struct.Bar.html '//*[@id="associatedconstant.BAR"]' \
     //      'const BAR: usize'
     pub const BAR: usize = 3;
 
-    // @has - '//*[@id="associatedconstant.BAR_ESCAPED"]' \
+    //@ has - '//*[@id="associatedconstant.BAR_ESCAPED"]' \
     //      "const BAR_ESCAPED: &'static str = \"<em>markup</em>\""
     pub const BAR_ESCAPED: &'static str = "<em>markup</em>";
 }
@@ -36,7 +36,7 @@ impl Bar {
 pub struct Baz<'a, U: 'a, T>(T, &'a [U]);
 
 impl Bar {
-    // @has assoc_consts/struct.Bar.html '//*[@id="associatedconstant.BAZ"]' \
+    //@ has assoc_consts/struct.Bar.html '//*[@id="associatedconstant.BAZ"]' \
     //      "const BAZ: Baz<'static, u8, u32>"
     pub const BAZ: Baz<'static, u8, u32> = Baz(321, &[1, 2, 3]);
 }
@@ -44,60 +44,60 @@ impl Bar {
 pub fn f(_: &(ToString + 'static)) {}
 
 impl Bar {
-    // @has assoc_consts/struct.Bar.html '//*[@id="associatedconstant.F"]' \
+    //@ has assoc_consts/struct.Bar.html '//*[@id="associatedconstant.F"]' \
     //      "const F: fn(_: &(dyn ToString + 'static))"
     pub const F: fn(_: &(ToString + 'static)) = f;
 }
 
 impl Bar {
-    // @!hasraw assoc_consts/struct.Bar.html 'BAR_PRIVATE'
+    //@ !hasraw assoc_consts/struct.Bar.html 'BAR_PRIVATE'
     const BAR_PRIVATE: char = 'a';
-    // @!hasraw assoc_consts/struct.Bar.html 'BAR_HIDDEN'
+    //@ !hasraw assoc_consts/struct.Bar.html 'BAR_HIDDEN'
     #[doc(hidden)]
     pub const BAR_HIDDEN: &'static str = "a";
 }
 
-// @has assoc_consts/trait.Qux.html
+//@ has assoc_consts/trait.Qux.html
 pub trait Qux {
-    // @has - '//*[@id="associatedconstant.QUX0"]' 'const QUX0: u8'
-    // @has - '//*[@class="docblock"]' "Docs for QUX0 in trait."
+    //@ has - '//*[@id="associatedconstant.QUX0"]' 'const QUX0: u8'
+    //@ has - '//*[@class="docblock"]' "Docs for QUX0 in trait."
     /// Docs for QUX0 in trait.
     const QUX0: u8;
-    // @has - '//*[@id="associatedconstant.QUX1"]' 'const QUX1: i8'
-    // @has - '//*[@class="docblock"]' "Docs for QUX1 in trait."
+    //@ has - '//*[@id="associatedconstant.QUX1"]' 'const QUX1: i8'
+    //@ has - '//*[@class="docblock"]' "Docs for QUX1 in trait."
     /// Docs for QUX1 in trait.
     const QUX1: i8;
-    // @has - '//*[@id="associatedconstant.QUX_DEFAULT0"]' 'const QUX_DEFAULT0: u16'
-    // @has - '//*[@class="docblock"]' "Docs for QUX_DEFAULT12 in trait."
+    //@ has - '//*[@id="associatedconstant.QUX_DEFAULT0"]' 'const QUX_DEFAULT0: u16'
+    //@ has - '//*[@class="docblock"]' "Docs for QUX_DEFAULT12 in trait."
     /// Docs for QUX_DEFAULT12 in trait.
     const QUX_DEFAULT0: u16 = 1;
-    // @has - '//*[@id="associatedconstant.QUX_DEFAULT1"]' 'const QUX_DEFAULT1: i16'
-    // @has - '//*[@class="docblock"]' "Docs for QUX_DEFAULT1 in trait."
+    //@ has - '//*[@id="associatedconstant.QUX_DEFAULT1"]' 'const QUX_DEFAULT1: i16'
+    //@ has - '//*[@class="docblock"]' "Docs for QUX_DEFAULT1 in trait."
     /// Docs for QUX_DEFAULT1 in trait.
     const QUX_DEFAULT1: i16 = 2;
-    // @has - '//*[@id="associatedconstant.QUX_DEFAULT2"]' 'const QUX_DEFAULT2: u32'
-    // @has - '//*[@class="docblock"]' "Docs for QUX_DEFAULT2 in trait."
+    //@ has - '//*[@id="associatedconstant.QUX_DEFAULT2"]' 'const QUX_DEFAULT2: u32'
+    //@ has - '//*[@class="docblock"]' "Docs for QUX_DEFAULT2 in trait."
     /// Docs for QUX_DEFAULT2 in trait.
     const QUX_DEFAULT2: u32 = 3;
 }
 
-// @has assoc_consts/struct.Bar.html '//h3[@class="code-header"]' 'impl Qux for Bar'
+//@ has assoc_consts/struct.Bar.html '//h3[@class="code-header"]' 'impl Qux for Bar'
 impl Qux for Bar {
-    // @has - '//*[@id="associatedconstant.QUX0"]' 'const QUX0: u8'
-    // @has - '//*[@class="docblock"]' "Docs for QUX0 in trait."
+    //@ has - '//*[@id="associatedconstant.QUX0"]' 'const QUX0: u8'
+    //@ has - '//*[@class="docblock"]' "Docs for QUX0 in trait."
     /// Docs for QUX0 in trait.
     const QUX0: u8 = 4;
-    // @has - '//*[@id="associatedconstant.QUX1"]' 'const QUX1: i8'
-    // @has - '//*[@class="docblock"]' "Docs for QUX1 in impl."
+    //@ has - '//*[@id="associatedconstant.QUX1"]' 'const QUX1: i8'
+    //@ has - '//*[@class="docblock"]' "Docs for QUX1 in impl."
     /// Docs for QUX1 in impl.
     const QUX1: i8 = 5;
-    // @has - '//*[@id="associatedconstant.QUX_DEFAULT0"]' 'const QUX_DEFAULT0: u16'
-    // @has - '//div[@class="impl-items"]//*[@class="docblock"]' "Docs for QUX_DEFAULT12 in trait."
+    //@ has - '//*[@id="associatedconstant.QUX_DEFAULT0"]' 'const QUX_DEFAULT0: u16'
+    //@ has - '//div[@class="impl-items"]//*[@class="docblock"]' "Docs for QUX_DEFAULT12 in trait."
     const QUX_DEFAULT0: u16 = 6;
-    // @has - '//*[@id="associatedconstant.QUX_DEFAULT1"]' 'const QUX_DEFAULT1: i16'
-    // @has - '//*[@class="docblock"]' "Docs for QUX_DEFAULT1 in impl."
+    //@ has - '//*[@id="associatedconstant.QUX_DEFAULT1"]' 'const QUX_DEFAULT1: i16'
+    //@ has - '//*[@class="docblock"]' "Docs for QUX_DEFAULT1 in impl."
     /// Docs for QUX_DEFAULT1 in impl.
     const QUX_DEFAULT1: i16 = 7;
-    // @has - '//*[@id="associatedconstant.QUX_DEFAULT2"]' 'const QUX_DEFAULT2: u32'
-    // @has - '//div[@class="impl-items"]//*[@class="docblock"]' "Docs for QUX_DEFAULT2 in trait."
+    //@ has - '//*[@id="associatedconstant.QUX_DEFAULT2"]' 'const QUX_DEFAULT2: u32'
+    //@ has - '//div[@class="impl-items"]//*[@class="docblock"]' "Docs for QUX_DEFAULT2 in trait."
 }
diff --git a/tests/rustdoc/assoc-item-cast.rs b/tests/rustdoc/assoc-item-cast.rs
index ad8235985bc..17b7cf6f0da 100644
--- a/tests/rustdoc/assoc-item-cast.rs
+++ b/tests/rustdoc/assoc-item-cast.rs
@@ -9,6 +9,6 @@ pub trait AsExpression<T> {
     fn as_expression(self) -> Self::Expression;
 }
 
-// @has foo/type.AsExprOf.html
-// @has - '//pre[@class="rust item-decl"]' 'type AsExprOf<Item, Type> = <Item as AsExpression<Type>>::Expression;'
+//@ has foo/type.AsExprOf.html
+//@ has - '//pre[@class="rust item-decl"]' 'type AsExprOf<Item, Type> = <Item as AsExpression<Type>>::Expression;'
 pub type AsExprOf<Item, Type> = <Item as AsExpression<Type>>::Expression;
diff --git a/tests/rustdoc/assoc-type-bindings-20646.rs b/tests/rustdoc/assoc-type-bindings-20646.rs
index 3d752551d1b..c79d07ff5bd 100644
--- a/tests/rustdoc/assoc-type-bindings-20646.rs
+++ b/tests/rustdoc/assoc-type-bindings-20646.rs
@@ -7,22 +7,22 @@
 
 extern crate issue_20646;
 
-// @has issue_20646/trait.Trait.html \
+//@ has issue_20646/trait.Trait.html \
 //      '//*[@id="associatedtype.Output"]' \
 //      'type Output'
 pub trait Trait {
     type Output;
 }
 
-// @has issue_20646/fn.fun.html \
+//@ has issue_20646/fn.fun.html \
 //      '//pre[@class="rust item-decl"]' 'where T: Trait<Output = i32>'
 pub fn fun<T>(_: T) where T: Trait<Output=i32> {}
 
 pub mod reexport {
-    // @has issue_20646/reexport/trait.Trait.html \
+    //@ has issue_20646/reexport/trait.Trait.html \
     //      '//*[@id="associatedtype.Output"]' \
     //      'type Output'
-    // @has issue_20646/reexport/fn.fun.html \
+    //@ has issue_20646/reexport/fn.fun.html \
     //      '//pre[@class="rust item-decl"]' 'where T: Trait<Output = i32>'
     pub use issue_20646::{Trait, fun};
 }
diff --git a/tests/rustdoc/assoc-types.rs b/tests/rustdoc/assoc-types.rs
index e74db7578d1..8247d8b91e8 100644
--- a/tests/rustdoc/assoc-types.rs
+++ b/tests/rustdoc/assoc-types.rs
@@ -1,19 +1,19 @@
 #![crate_type="lib"]
 
-// @has assoc_types/trait.Index.html
+//@ has assoc_types/trait.Index.html
 pub trait Index<I: ?Sized> {
-    // @has - '//*[@id="associatedtype.Output"]//h4[@class="code-header"]' 'type Output: ?Sized'
+    //@ has - '//*[@id="associatedtype.Output"]//h4[@class="code-header"]' 'type Output: ?Sized'
     type Output: ?Sized;
-    // @has - '//*[@id="tymethod.index"]//h4[@class="code-header"]' \
+    //@ has - '//*[@id="tymethod.index"]//h4[@class="code-header"]' \
     //      "fn index<'a>(&'a self, index: I) -> &'a Self::Output"
-    // @has - '//*[@id="tymethod.index"]//h4[@class="code-header"]//a[@href="trait.Index.html#associatedtype.Output"]' \
+    //@ has - '//*[@id="tymethod.index"]//h4[@class="code-header"]//a[@href="trait.Index.html#associatedtype.Output"]' \
     //      "Output"
     fn index<'a>(&'a self, index: I) -> &'a Self::Output;
 }
 
-// @has assoc_types/fn.use_output.html
-// @has - '//pre[@class="rust item-decl"]' '-> &T::Output'
-// @has - '//pre[@class="rust item-decl"]//a[@href="trait.Index.html#associatedtype.Output"]' 'Output'
+//@ has assoc_types/fn.use_output.html
+//@ has - '//pre[@class="rust item-decl"]' '-> &T::Output'
+//@ has - '//pre[@class="rust item-decl"]//a[@href="trait.Index.html#associatedtype.Output"]' 'Output'
 pub fn use_output<T: Index<usize>>(obj: &T, index: usize) -> &T::Output {
     obj.index(index)
 }
@@ -22,14 +22,14 @@ pub trait Feed {
     type Input;
 }
 
-// @has assoc_types/fn.use_input.html
-// @has - '//pre[@class="rust item-decl"]' 'T::Input'
-// @has - '//pre[@class="rust item-decl"]//a[@href="trait.Feed.html#associatedtype.Input"]' 'Input'
+//@ has assoc_types/fn.use_input.html
+//@ has - '//pre[@class="rust item-decl"]' 'T::Input'
+//@ has - '//pre[@class="rust item-decl"]//a[@href="trait.Feed.html#associatedtype.Input"]' 'Input'
 pub fn use_input<T: Feed>(_feed: &T, _element: T::Input) { }
 
-// @has assoc_types/fn.cmp_input.html
-// @has - '//pre[@class="rust item-decl"]' 'where T::Input: PartialEq<U::Input>'
-// @has - '//pre[@class="rust item-decl"]//a[@href="trait.Feed.html#associatedtype.Input"]' 'Input'
+//@ has assoc_types/fn.cmp_input.html
+//@ has - '//pre[@class="rust item-decl"]' 'where T::Input: PartialEq<U::Input>'
+//@ has - '//pre[@class="rust item-decl"]//a[@href="trait.Feed.html#associatedtype.Input"]' 'Input'
 pub fn cmp_input<T: Feed, U: Feed>(a: &T::Input, b: &U::Input) -> bool
     where T::Input: PartialEq<U::Input>
 {
diff --git a/tests/rustdoc/associated-consts.rs b/tests/rustdoc/associated-consts.rs
index adb155bb525..2a7269a89be 100644
--- a/tests/rustdoc/associated-consts.rs
+++ b/tests/rustdoc/associated-consts.rs
@@ -8,9 +8,9 @@ pub trait Trait {
 
 pub struct Bar;
 
-// @has 'foo/struct.Bar.html'
-// @!has - '//div[@class="sidebar-elems"]//h3' 'Associated Constants'
-// @!has - '//div[@class="sidebar-elems"]//a' 'FOO'
+//@ has 'foo/struct.Bar.html'
+//@ !has - '//div[@class="sidebar-elems"]//h3' 'Associated Constants'
+//@ !has - '//div[@class="sidebar-elems"]//a' 'FOO'
 impl Trait for Bar {
     const FOO: u32 = 1;
 
@@ -21,9 +21,9 @@ pub enum Foo {
     A,
 }
 
-// @has 'foo/enum.Foo.html'
-// @!has - '//div[@class="sidebar-elems"]//h3' 'Associated Constants'
-// @!has - '//div[@class="sidebar-elems"]//a' 'FOO'
+//@ has 'foo/enum.Foo.html'
+//@ !has - '//div[@class="sidebar-elems"]//h3' 'Associated Constants'
+//@ !has - '//div[@class="sidebar-elems"]//a' 'FOO'
 impl Trait for Foo {
     const FOO: u32 = 1;
 
@@ -32,9 +32,9 @@ impl Trait for Foo {
 
 pub struct Baz;
 
-// @has 'foo/struct.Baz.html'
-// @has - '//div[@class="sidebar-elems"]//h3' 'Associated Constants'
-// @has - '//div[@class="sidebar-elems"]//a' 'FOO'
+//@ has 'foo/struct.Baz.html'
+//@ has - '//div[@class="sidebar-elems"]//h3' 'Associated Constants'
+//@ has - '//div[@class="sidebar-elems"]//a' 'FOO'
 impl Baz {
     pub const FOO: u32 = 42;
 }
@@ -43,9 +43,9 @@ pub enum Quux {
     B,
 }
 
-// @has 'foo/enum.Quux.html'
-// @has - '//div[@class="sidebar-elems"]//h3' 'Associated Constants'
-// @has - '//div[@class="sidebar-elems"]//a' 'FOO'
+//@ has 'foo/enum.Quux.html'
+//@ has - '//div[@class="sidebar-elems"]//h3' 'Associated Constants'
+//@ has - '//div[@class="sidebar-elems"]//a' 'FOO'
 impl Quux {
     pub const FOO: u32 = 42;
 }
diff --git a/tests/rustdoc/async-fn-opaque-item.rs b/tests/rustdoc/async-fn-opaque-item.rs
index 566c1c233ce..d45183f96dd 100644
--- a/tests/rustdoc/async-fn-opaque-item.rs
+++ b/tests/rustdoc/async-fn-opaque-item.rs
@@ -5,11 +5,11 @@
 // that comes from an async fn desugaring.
 
 // Check that we don't document an unnamed opaque type
-// @!has async_fn_opaque_item/opaque..html
+//@ !has async_fn_opaque_item/opaque..html
 
 // Checking there is only a "Functions" header and no "Opaque types".
-// @has async_fn_opaque_item/index.html
-// @count - '//*[@class="section-header"]' 1
-// @has - '//*[@class="section-header"]' 'Functions'
+//@ has async_fn_opaque_item/index.html
+//@ count - '//*[@class="section-header"]' 1
+//@ has - '//*[@class="section-header"]' 'Functions'
 
 pub async fn test() {}
diff --git a/tests/rustdoc/async-fn.rs b/tests/rustdoc/async-fn.rs
index 4de5d8575b0..3d49766c55e 100644
--- a/tests/rustdoc/async-fn.rs
+++ b/tests/rustdoc/async-fn.rs
@@ -1,43 +1,43 @@
 //@ edition:2018
-// @has async_fn/fn.foo.html '//pre[@class="rust item-decl"]' 'pub async fn foo() -> Option<Foo>'
+//@ has async_fn/fn.foo.html '//pre[@class="rust item-decl"]' 'pub async fn foo() -> Option<Foo>'
 pub async fn foo() -> Option<Foo> {
     None
 }
 
-// @has async_fn/fn.bar.html '//pre[@class="rust item-decl"]' 'pub async fn bar(a: i32, b: i32) -> i32'
+//@ has async_fn/fn.bar.html '//pre[@class="rust item-decl"]' 'pub async fn bar(a: i32, b: i32) -> i32'
 pub async fn bar(a: i32, b: i32) -> i32 {
     0
 }
 
-// @has async_fn/fn.baz.html '//pre[@class="rust item-decl"]' 'pub async fn baz<T>(a: T) -> T'
+//@ has async_fn/fn.baz.html '//pre[@class="rust item-decl"]' 'pub async fn baz<T>(a: T) -> T'
 pub async fn baz<T>(a: T) -> T {
     a
 }
 
-// @has async_fn/fn.qux.html '//pre[@class="rust item-decl"]' 'pub async unsafe fn qux() -> char'
+//@ has async_fn/fn.qux.html '//pre[@class="rust item-decl"]' 'pub async unsafe fn qux() -> char'
 pub async unsafe fn qux() -> char {
     '⚠'
 }
 
-// @has async_fn/fn.mut_args.html '//pre[@class="rust item-decl"]' 'pub async fn mut_args(a: usize)'
+//@ has async_fn/fn.mut_args.html '//pre[@class="rust item-decl"]' 'pub async fn mut_args(a: usize)'
 pub async fn mut_args(mut a: usize) {}
 
-// @has async_fn/fn.mut_ref.html '//pre[@class="rust item-decl"]' 'pub async fn mut_ref(x: i32)'
+//@ has async_fn/fn.mut_ref.html '//pre[@class="rust item-decl"]' 'pub async fn mut_ref(x: i32)'
 pub async fn mut_ref(ref mut x: i32) {}
 
 trait Bar {}
 
 impl Bar for () {}
 
-// @has async_fn/fn.quux.html '//pre[@class="rust item-decl"]' 'pub async fn quux() -> impl Bar'
+//@ has async_fn/fn.quux.html '//pre[@class="rust item-decl"]' 'pub async fn quux() -> impl Bar'
 pub async fn quux() -> impl Bar {
     ()
 }
 
-// @has async_fn/struct.Foo.html
-// @matches - '//h4[@class="code-header"]' 'pub async fn f\(\)$'
-// @matches - '//h4[@class="code-header"]' 'pub async unsafe fn g\(\)$'
-// @matches - '//h4[@class="code-header"]' 'pub async fn mut_self\(self, first: usize\)$'
+//@ has async_fn/struct.Foo.html
+//@ matches - '//h4[@class="code-header"]' 'pub async fn f\(\)$'
+//@ matches - '//h4[@class="code-header"]' 'pub async unsafe fn g\(\)$'
+//@ matches - '//h4[@class="code-header"]' 'pub async fn mut_self\(self, first: usize\)$'
 pub struct Foo;
 
 impl Foo {
@@ -51,49 +51,49 @@ pub trait Pattern<'a> {}
 impl Pattern<'_> for () {}
 
 pub trait Trait<const N: usize> {}
-// @has async_fn/fn.const_generics.html
-// @has - '//pre[@class="rust item-decl"]' 'pub async fn const_generics<const N: usize>(_: impl Trait<N>)'
+//@ has async_fn/fn.const_generics.html
+//@ has - '//pre[@class="rust item-decl"]' 'pub async fn const_generics<const N: usize>(_: impl Trait<N>)'
 pub async fn const_generics<const N: usize>(_: impl Trait<N>) {}
 
 // test that elided lifetimes are properly elided and not displayed as `'_`
 // regression test for #63037
-// @has async_fn/fn.elided.html
-// @has - '//pre[@class="rust item-decl"]' 'pub async fn elided(foo: &str) -> &str'
+//@ has async_fn/fn.elided.html
+//@ has - '//pre[@class="rust item-decl"]' 'pub async fn elided(foo: &str) -> &str'
 pub async fn elided(foo: &str) -> &str { "" }
 // This should really be shown as written, but for implementation reasons it's difficult.
 // See `impl Clean for TyKind::Ref`.
-// @has async_fn/fn.user_elided.html
-// @has - '//pre[@class="rust item-decl"]' 'pub async fn user_elided(foo: &str) -> &str'
+//@ has async_fn/fn.user_elided.html
+//@ has - '//pre[@class="rust item-decl"]' 'pub async fn user_elided(foo: &str) -> &str'
 pub async fn user_elided(foo: &'_ str) -> &str { "" }
-// @has async_fn/fn.static_trait.html
-// @has - '//pre[@class="rust item-decl"]' 'pub async fn static_trait(foo: &str) -> Box<dyn Bar>'
+//@ has async_fn/fn.static_trait.html
+//@ has - '//pre[@class="rust item-decl"]' 'pub async fn static_trait(foo: &str) -> Box<dyn Bar>'
 pub async fn static_trait(foo: &str) -> Box<dyn Bar> { Box::new(()) }
-// @has async_fn/fn.lifetime_for_trait.html
-// @has - '//pre[@class="rust item-decl"]' "pub async fn lifetime_for_trait(foo: &str) -> Box<dyn Bar + '_>"
+//@ has async_fn/fn.lifetime_for_trait.html
+//@ has - '//pre[@class="rust item-decl"]' "pub async fn lifetime_for_trait(foo: &str) -> Box<dyn Bar + '_>"
 pub async fn lifetime_for_trait(foo: &str) -> Box<dyn Bar + '_> { Box::new(()) }
-// @has async_fn/fn.elided_in_input_trait.html
-// @has - '//pre[@class="rust item-decl"]' "pub async fn elided_in_input_trait(t: impl Pattern<'_>)"
+//@ has async_fn/fn.elided_in_input_trait.html
+//@ has - '//pre[@class="rust item-decl"]' "pub async fn elided_in_input_trait(t: impl Pattern<'_>)"
 pub async fn elided_in_input_trait(t: impl Pattern<'_>) {}
 
 struct AsyncFdReadyGuard<'a, T> { x: &'a T }
 
 impl Foo {
-    // @has async_fn/struct.Foo.html
-    // @has - '//*[@class="method"]' 'pub async fn complicated_lifetimes( &self, context: &impl Bar, ) -> impl Iterator<Item = &usize>'
+    //@ has async_fn/struct.Foo.html
+    //@ has - '//*[@class="method"]' 'pub async fn complicated_lifetimes( &self, context: &impl Bar, ) -> impl Iterator<Item = &usize>'
     pub async fn complicated_lifetimes(&self, context: &impl Bar) -> impl Iterator<Item = &usize> {
         [0].iter()
     }
     // taken from `tokio` as an example of a method that was particularly bad before
-    // @has - '//*[@class="method"]' "pub async fn readable<T>(&self) -> Result<AsyncFdReadyGuard<'_, T>, ()>"
+    //@ has - '//*[@class="method"]' "pub async fn readable<T>(&self) -> Result<AsyncFdReadyGuard<'_, T>, ()>"
     pub async fn readable<T>(&self) -> Result<AsyncFdReadyGuard<'_, T>, ()> { Err(()) }
-    // @has - '//*[@class="method"]' "pub async fn mut_self(&mut self)"
+    //@ has - '//*[@class="method"]' "pub async fn mut_self(&mut self)"
     pub async fn mut_self(&mut self) {}
 }
 
 // test named lifetimes, just in case
-// @has async_fn/fn.named.html
-// @has - '//pre[@class="rust item-decl"]' "pub async fn named<'a, 'b>(foo: &'a str) -> &'b str"
+//@ has async_fn/fn.named.html
+//@ has - '//pre[@class="rust item-decl"]' "pub async fn named<'a, 'b>(foo: &'a str) -> &'b str"
 pub async fn named<'a, 'b>(foo: &'a str) -> &'b str { "" }
-// @has async_fn/fn.named_trait.html
-// @has - '//pre[@class="rust item-decl"]' "pub async fn named_trait<'a, 'b>(foo: impl Pattern<'a>) -> impl Pattern<'b>"
+//@ has async_fn/fn.named_trait.html
+//@ has - '//pre[@class="rust item-decl"]' "pub async fn named_trait<'a, 'b>(foo: impl Pattern<'a>) -> impl Pattern<'b>"
 pub async fn named_trait<'a, 'b>(foo: impl Pattern<'a>) -> impl Pattern<'b> {}
diff --git a/tests/rustdoc/async-trait-sig.rs b/tests/rustdoc/async-trait-sig.rs
index 40e68ce9b3c..be790f6ed7f 100644
--- a/tests/rustdoc/async-trait-sig.rs
+++ b/tests/rustdoc/async-trait-sig.rs
@@ -3,10 +3,10 @@
 #![allow(incomplete_features)]
 
 pub trait Foo {
-    // @has async_trait_sig/trait.Foo.html '//h4[@class="code-header"]' "async fn bar() -> i32"
+    //@ has async_trait_sig/trait.Foo.html '//h4[@class="code-header"]' "async fn bar() -> i32"
     async fn bar() -> i32;
 
-    // @has async_trait_sig/trait.Foo.html '//h4[@class="code-header"]' "async fn baz() -> i32"
+    //@ has async_trait_sig/trait.Foo.html '//h4[@class="code-header"]' "async fn baz() -> i32"
     async fn baz() -> i32 {
         1
     }
diff --git a/tests/rustdoc/async-trait.rs b/tests/rustdoc/async-trait.rs
index 980a812815b..a6ee340e2dd 100644
--- a/tests/rustdoc/async-trait.rs
+++ b/tests/rustdoc/async-trait.rs
@@ -7,7 +7,7 @@ extern crate async_trait_dep;
 
 pub struct Oink {}
 
-// @has 'async_trait/struct.Oink.html' '//h4[@class="code-header"]' "async fn woof()"
+//@ has 'async_trait/struct.Oink.html' '//h4[@class="code-header"]' "async fn woof()"
 impl async_trait_dep::Meow for Oink {
     async fn woof() {
         todo!()
diff --git a/tests/rustdoc/attribute-rendering.rs b/tests/rustdoc/attribute-rendering.rs
index a652fda1604..841533814c3 100644
--- a/tests/rustdoc/attribute-rendering.rs
+++ b/tests/rustdoc/attribute-rendering.rs
@@ -1,7 +1,7 @@
 #![crate_name = "foo"]
 
-// @has 'foo/fn.f.html'
-// @has - //*[@'class="rust item-decl"]' '#[export_name = "f"] pub fn f()'
+//@ has 'foo/fn.f.html'
+//@ has - //*[@'class="rust item-decl"]' '#[export_name = "f"] pub fn f()'
 #[export_name = "\
 f"]
 pub fn f() {}
diff --git a/tests/rustdoc/attributes.rs b/tests/rustdoc/attributes.rs
index 86333c7534a..e34468a88b1 100644
--- a/tests/rustdoc/attributes.rs
+++ b/tests/rustdoc/attributes.rs
@@ -1,13 +1,13 @@
 #![crate_name = "foo"]
 
-// @has foo/fn.f.html '//pre[@class="rust item-decl"]' '#[no_mangle]'
+//@ has foo/fn.f.html '//pre[@class="rust item-decl"]' '#[no_mangle]'
 #[no_mangle]
 pub extern "C" fn f() {}
 
-// @has foo/fn.g.html '//pre[@class="rust item-decl"]' '#[export_name = "bar"]'
+//@ has foo/fn.g.html '//pre[@class="rust item-decl"]' '#[export_name = "bar"]'
 #[export_name = "bar"]
 pub extern "C" fn g() {}
 
-// @has foo/struct.Repr.html '//pre[@class="rust item-decl"]' '#[repr(C, align(8))]'
+//@ has foo/struct.Repr.html '//pre[@class="rust item-decl"]' '#[repr(C, align(8))]'
 #[repr(C, align(8))]
 pub struct Repr;
diff --git a/tests/rustdoc/auto-impl-primitive.rs b/tests/rustdoc/auto-impl-primitive.rs
index a6db93dbc33..3dab02506ca 100644
--- a/tests/rustdoc/auto-impl-primitive.rs
+++ b/tests/rustdoc/auto-impl-primitive.rs
@@ -4,7 +4,7 @@
 
 pub use std::fs::File;
 
-// @has 'foo/primitive.i16.html' '//h2[@id="synthetic-implementations"]' 'Auto Trait Implementation'
+//@ has 'foo/primitive.i16.html' '//h2[@id="synthetic-implementations"]' 'Auto Trait Implementation'
 #[rustc_doc_primitive = "i16"]
 /// I love poneys!
 mod prim {}
diff --git a/tests/rustdoc/auto-trait-bounds-by-associated-type-50159.rs b/tests/rustdoc/auto-trait-bounds-by-associated-type-50159.rs
index 7d9133b85a6..2803c4da437 100644
--- a/tests/rustdoc/auto-trait-bounds-by-associated-type-50159.rs
+++ b/tests/rustdoc/auto-trait-bounds-by-associated-type-50159.rs
@@ -16,11 +16,11 @@ where
     type Item2 = C;
 }
 
-// @has foo/struct.Switch.html
-// @has - '//h3[@class="code-header"]' 'impl<B> Send for Switch<B>where <B as Signal>::Item: Send'
-// @has - '//h3[@class="code-header"]' 'impl<B> Sync for Switch<B>where <B as Signal>::Item: Sync'
-// @count - '//*[@id="implementations-list"]//*[@class="impl"]' 0
-// @count - '//*[@id="synthetic-implementations-list"]//*[@class="impl"]' 6
+//@ has foo/struct.Switch.html
+//@ has - '//h3[@class="code-header"]' 'impl<B> Send for Switch<B>where <B as Signal>::Item: Send'
+//@ has - '//h3[@class="code-header"]' 'impl<B> Sync for Switch<B>where <B as Signal>::Item: Sync'
+//@ count - '//*[@id="implementations-list"]//*[@class="impl"]' 0
+//@ count - '//*[@id="synthetic-implementations-list"]//*[@class="impl"]' 6
 pub struct Switch<B: Signal> {
     pub inner: <B as Signal2>::Item2,
 }
diff --git a/tests/rustdoc/auto-trait-bounds-inference-variables-54705.rs b/tests/rustdoc/auto-trait-bounds-inference-variables-54705.rs
index 00be0042fb0..ef159fca872 100644
--- a/tests/rustdoc/auto-trait-bounds-inference-variables-54705.rs
+++ b/tests/rustdoc/auto-trait-bounds-inference-variables-54705.rs
@@ -3,11 +3,11 @@
 
 pub trait ScopeHandle<'scope> {}
 
-// @has foo/struct.ScopeFutureContents.html
-// @has - '//*[@id="synthetic-implementations-list"]//*[@class="impl"]//h3[@class="code-header"]' \
+//@ has foo/struct.ScopeFutureContents.html
+//@ has - '//*[@id="synthetic-implementations-list"]//*[@class="impl"]//h3[@class="code-header"]' \
 // "impl<'scope, S> Send for ScopeFutureContents<'scope, S>where S: Sync"
 //
-// @has - '//*[@id="synthetic-implementations-list"]//*[@class="impl"]//h3[@class="code-header"]' \
+//@ has - '//*[@id="synthetic-implementations-list"]//*[@class="impl"]//h3[@class="code-header"]' \
 // "impl<'scope, S> Sync for ScopeFutureContents<'scope, S>where S: Sync"
 pub struct ScopeFutureContents<'scope, S>
     where S: ScopeHandle<'scope>,
diff --git a/tests/rustdoc/auto-trait-bounds-where-51236.rs b/tests/rustdoc/auto-trait-bounds-where-51236.rs
index 30c81e79601..c892b6d0abf 100644
--- a/tests/rustdoc/auto-trait-bounds-where-51236.rs
+++ b/tests/rustdoc/auto-trait-bounds-where-51236.rs
@@ -9,8 +9,8 @@ pub mod traits {
     }
 }
 
-// @has foo/struct.Owned.html
-// @has - '//*[@id="synthetic-implementations-list"]//*[@class="impl"]//h3[@class="code-header"]' \
+//@ has foo/struct.Owned.html
+//@ has - '//*[@id="synthetic-implementations-list"]//*[@class="impl"]//h3[@class="code-header"]' \
 // "impl<T> Send for Owned<T>where <T as Owned<'static>>::Reader: Send"
 pub struct Owned<T> where T: for<'a> ::traits::Owned<'a> {
     marker: PhantomData<<T as ::traits::Owned<'static>>::Reader>,
diff --git a/tests/rustdoc/auto-trait-negative-impl-55321.rs b/tests/rustdoc/auto-trait-negative-impl-55321.rs
index e9be1ff854e..147f44da117 100644
--- a/tests/rustdoc/auto-trait-negative-impl-55321.rs
+++ b/tests/rustdoc/auto-trait-negative-impl-55321.rs
@@ -3,19 +3,19 @@
 
 #![feature(negative_impls)]
 
-// @has foo/struct.A.html
-// @has - '//*[@id="trait-implementations-list"]//*[@class="impl"]//h3[@class="code-header"]' \
+//@ has foo/struct.A.html
+//@ has - '//*[@id="trait-implementations-list"]//*[@class="impl"]//h3[@class="code-header"]' \
 // "impl !Send for A"
-// @has - '//*[@id="trait-implementations-list"]//*[@class="impl"]//h3[@class="code-header"]' \
+//@ has - '//*[@id="trait-implementations-list"]//*[@class="impl"]//h3[@class="code-header"]' \
 // "impl !Sync for A"
 pub struct A();
 
 impl !Send for A {}
 impl !Sync for A {}
 
-// @has foo/struct.B.html
-// @has - '//*[@id="synthetic-implementations-list"]//*[@class="impl"]//h3[@class="code-header"]' \
+//@ has foo/struct.B.html
+//@ has - '//*[@id="synthetic-implementations-list"]//*[@class="impl"]//h3[@class="code-header"]' \
 // "impl<T> !Send for B<T>"
-// @has - '//*[@id="synthetic-implementations-list"]//*[@class="impl"]//h3[@class="code-header"]' \
+//@ has - '//*[@id="synthetic-implementations-list"]//*[@class="impl"]//h3[@class="code-header"]' \
 // "impl<T> !Sync for B<T>"
 pub struct B<T: ?Sized>(A, Box<T>);
diff --git a/tests/rustdoc/auto-trait-not-send.rs b/tests/rustdoc/auto-trait-not-send.rs
index 661d905ab63..0a31952f5e1 100644
--- a/tests/rustdoc/auto-trait-not-send.rs
+++ b/tests/rustdoc/auto-trait-not-send.rs
@@ -1,8 +1,8 @@
 #![crate_name = "foo"]
 
-// @has 'foo/struct.Foo.html'
-// @has - '//*[@id="impl-Send-for-Foo"]' 'impl !Send for Foo'
-// @has - '//*[@id="impl-Sync-for-Foo"]' 'impl !Sync for Foo'
+//@ has 'foo/struct.Foo.html'
+//@ has - '//*[@id="impl-Send-for-Foo"]' 'impl !Send for Foo'
+//@ has - '//*[@id="impl-Sync-for-Foo"]' 'impl !Sync for Foo'
 pub struct Foo(*const i8);
 pub trait Whatever: Send {}
 impl<T: Send + ?Sized> Whatever for T {}
diff --git a/tests/rustdoc/auto-traits.rs b/tests/rustdoc/auto-traits.rs
index 01439c8601b..dce406ed3e3 100644
--- a/tests/rustdoc/auto-traits.rs
+++ b/tests/rustdoc/auto-traits.rs
@@ -6,8 +6,8 @@
 
 extern crate auto_traits;
 
-// @has 'foo/trait.Foo.html' '//pre' 'pub unsafe auto trait Foo'
+//@ has 'foo/trait.Foo.html' '//pre' 'pub unsafe auto trait Foo'
 pub unsafe auto trait Foo {}
 
-// @has 'foo/trait.Bar.html' '//pre' 'pub unsafe auto trait Bar'
+//@ has 'foo/trait.Bar.html' '//pre' 'pub unsafe auto trait Bar'
 pub use auto_traits::Bar;
diff --git a/tests/rustdoc/auto_aliases.rs b/tests/rustdoc/auto_aliases.rs
index a047c76b637..920aba805cd 100644
--- a/tests/rustdoc/auto_aliases.rs
+++ b/tests/rustdoc/auto_aliases.rs
@@ -1,6 +1,6 @@
 #![feature(auto_traits)]
 
-// @has auto_aliases/trait.Bar.html '//*[@data-aliases="auto_aliases::Foo"]' 'impl Bar for Foo'
+//@ has auto_aliases/trait.Bar.html '//*[@data-aliases="auto_aliases::Foo"]' 'impl Bar for Foo'
 pub struct Foo;
 
 pub auto trait Bar {}
diff --git a/tests/rustdoc/auxiliary/alias-reexport2.rs b/tests/rustdoc/auxiliary/alias-reexport2.rs
index 9f6910572ad..ee1f242c1d4 100644
--- a/tests/rustdoc/auxiliary/alias-reexport2.rs
+++ b/tests/rustdoc/auxiliary/alias-reexport2.rs
@@ -4,9 +4,9 @@ extern crate alias_reexport;
 
 pub use alias_reexport::Reexported;
 
-// @has 'foo/fn.foo.html'
-// @has - '//*[@class="docblock item-decl"]' 'pub fn foo() -> Reexported'
+//@ has 'foo/fn.foo.html'
+//@ has - '//*[@class="docblock item-decl"]' 'pub fn foo() -> Reexported'
 pub fn foo() -> Reexported { 0 }
-// @has 'foo/fn.foo2.html'
-// @has - '//*[@class="docblock item-decl"]' 'pub fn foo2() -> Result<Reexported, ()>'
+//@ has 'foo/fn.foo2.html'
+//@ has - '//*[@class="docblock item-decl"]' 'pub fn foo2() -> Result<Reexported, ()>'
 pub fn foo2() -> Result<Reexported, ()> { Ok(0) }
diff --git a/tests/rustdoc/auxiliary/rustdoc-ffi.rs b/tests/rustdoc/auxiliary/rustdoc-ffi.rs
index b74d190b526..98e2b55699a 100644
--- a/tests/rustdoc/auxiliary/rustdoc-ffi.rs
+++ b/tests/rustdoc/auxiliary/rustdoc-ffi.rs
@@ -1,6 +1,6 @@
 #![crate_type="lib"]
 
 extern "C" {
-    // @has lib/fn.foreigner.html //pre 'pub unsafe fn foreigner(cold_as_ice: u32)'
+    //@ has lib/fn.foreigner.html //pre 'pub unsafe fn foreigner(cold_as_ice: u32)'
     pub fn foreigner(cold_as_ice: u32);
 }
diff --git a/tests/rustdoc/bad-codeblock-syntax.rs b/tests/rustdoc/bad-codeblock-syntax.rs
index 9ec089fd7ad..b14aca20679 100644
--- a/tests/rustdoc/bad-codeblock-syntax.rs
+++ b/tests/rustdoc/bad-codeblock-syntax.rs
@@ -1,43 +1,43 @@
 #![allow(rustdoc::invalid_rust_codeblocks)]
 
-// @has bad_codeblock_syntax/fn.foo.html
-// @has - '//*[@class="docblock"]' '\_'
+//@ has bad_codeblock_syntax/fn.foo.html
+//@ has - '//*[@class="docblock"]' '\_'
 /// ```
 /// \_
 /// ```
 pub fn foo() {}
 
-// @has bad_codeblock_syntax/fn.bar.html
-// @has - '//*[@class="docblock"]' '`baz::foobar`'
+//@ has bad_codeblock_syntax/fn.bar.html
+//@ has - '//*[@class="docblock"]' '`baz::foobar`'
 /// ```
 /// `baz::foobar`
 /// ```
 pub fn bar() {}
 
-// @has bad_codeblock_syntax/fn.quux.html
-// @has - '//*[@class="docblock"]' '\_'
+//@ has bad_codeblock_syntax/fn.quux.html
+//@ has - '//*[@class="docblock"]' '\_'
 /// ```rust
 /// \_
 /// ```
 pub fn quux() {}
 
-// @has bad_codeblock_syntax/fn.ok.html
-// @has - '//*[@class="docblock"]' '\_'
+//@ has bad_codeblock_syntax/fn.ok.html
+//@ has - '//*[@class="docblock"]' '\_'
 /// ```text
 /// \_
 /// ```
 pub fn ok() {}
 
-// @has bad_codeblock_syntax/fn.escape.html
-// @has - '//*[@class="docblock"]' '\_ <script>alert("not valid Rust");</script>'
+//@ has bad_codeblock_syntax/fn.escape.html
+//@ has - '//*[@class="docblock"]' '\_ <script>alert("not valid Rust");</script>'
 /// ```
 /// \_
 /// <script>alert("not valid Rust");</script>
 /// ```
 pub fn escape() {}
 
-// @has bad_codeblock_syntax/fn.unterminated.html
-// @has - '//*[@class="docblock"]' '"unterminated'
+//@ has bad_codeblock_syntax/fn.unterminated.html
+//@ has - '//*[@class="docblock"]' '"unterminated'
 /// ```
 /// "unterminated
 /// ```
diff --git a/tests/rustdoc/blank-line-in-doc-block-47197.rs b/tests/rustdoc/blank-line-in-doc-block-47197.rs
index 79492b4fa76..c35e6d2fe5c 100644
--- a/tests/rustdoc/blank-line-in-doc-block-47197.rs
+++ b/tests/rustdoc/blank-line-in-doc-block-47197.rs
@@ -1,7 +1,7 @@
 // https://github.com/rust-lang/rust/issues/47197
 #![crate_name="foo"]
 
-// @has foo/fn.whose_woods_these_are_i_think_i_know.html
+//@ has foo/fn.whose_woods_these_are_i_think_i_know.html
 
 /**
 * snow
diff --git a/tests/rustdoc/blanket-impl-29503.rs b/tests/rustdoc/blanket-impl-29503.rs
index d6a132e1c26..f43fe79ca58 100644
--- a/tests/rustdoc/blanket-impl-29503.rs
+++ b/tests/rustdoc/blanket-impl-29503.rs
@@ -3,12 +3,12 @@
 
 use std::fmt;
 
-// @has issue_29503/trait.MyTrait.html
+//@ has issue_29503/trait.MyTrait.html
 pub trait MyTrait {
     fn my_string(&self) -> String;
 }
 
-// @has - "//div[@id='implementors-list']//*[@id='impl-MyTrait-for-T']//h3[@class='code-header']" "impl<T> MyTrait for Twhere T: Debug"
+//@ has - "//div[@id='implementors-list']//*[@id='impl-MyTrait-for-T']//h3[@class='code-header']" "impl<T> MyTrait for Twhere T: Debug"
 impl<T> MyTrait for T
 where
     T: fmt::Debug,
diff --git a/tests/rustdoc/blanket-impl-78673.rs b/tests/rustdoc/blanket-impl-78673.rs
index d7ceef2c057..412d4057406 100644
--- a/tests/rustdoc/blanket-impl-78673.rs
+++ b/tests/rustdoc/blanket-impl-78673.rs
@@ -7,18 +7,18 @@ pub trait AnAmazingTrait {}
 
 impl<T: Something> AnAmazingTrait for T {}
 
-// @has 'issue_78673/struct.MyStruct.html'
-// @has  - '//*[@class="impl"]' 'AnAmazingTrait for MyStruct'
-// @!has - '//*[@class="impl"]' 'AnAmazingTrait for T'
+//@ has 'issue_78673/struct.MyStruct.html'
+//@ has  - '//*[@class="impl"]' 'AnAmazingTrait for MyStruct'
+//@ !has - '//*[@class="impl"]' 'AnAmazingTrait for T'
 pub struct MyStruct;
 
 impl AnAmazingTrait for MyStruct {}
 
 // generic structs may have _both_ specific and blanket impls that apply
 
-// @has 'issue_78673/struct.AnotherStruct.html'
-// @has - '//*[@class="impl"]' 'AnAmazingTrait for AnotherStruct<()>'
-// @has - '//*[@class="impl"]' 'AnAmazingTrait for T'
+//@ has 'issue_78673/struct.AnotherStruct.html'
+//@ has - '//*[@class="impl"]' 'AnAmazingTrait for AnotherStruct<()>'
+//@ has - '//*[@class="impl"]' 'AnAmazingTrait for T'
 pub struct AnotherStruct<T>(T);
 
 impl<T: Something> Something for AnotherStruct<T> {}
diff --git a/tests/rustdoc/blanket-reexport-item.rs b/tests/rustdoc/blanket-reexport-item.rs
index 315a38c30c5..199a47019a2 100644
--- a/tests/rustdoc/blanket-reexport-item.rs
+++ b/tests/rustdoc/blanket-reexport-item.rs
@@ -1,6 +1,6 @@
 #![crate_name = "foo"]
 
-// @has foo/struct.S.html '//*[@id="impl-Into%3CU%3E-for-T"]//h3[@class="code-header"]' 'impl<T, U> Into<U> for T'
+//@ has foo/struct.S.html '//*[@id="impl-Into%3CU%3E-for-T"]//h3[@class="code-header"]' 'impl<T, U> Into<U> for T'
 pub struct S2 {}
 mod m {
     pub struct S {}
diff --git a/tests/rustdoc/bounds.rs b/tests/rustdoc/bounds.rs
index da09e3f2a52..8213ab96241 100644
--- a/tests/rustdoc/bounds.rs
+++ b/tests/rustdoc/bounds.rs
@@ -4,16 +4,16 @@ pub trait Eq {}
 pub trait Eq2 {}
 
 // Checking that "where predicates" and "generics params" are merged.
-// @has 'foo/trait.T.html'
-// @has - "//*[@id='tymethod.f']/h4" "fn f<'a, 'b, 'c, T>()where Self: Eq, T: Eq + 'a, 'c: 'b + 'a,"
+//@ has 'foo/trait.T.html'
+//@ has - "//*[@id='tymethod.f']/h4" "fn f<'a, 'b, 'c, T>()where Self: Eq, T: Eq + 'a, 'c: 'b + 'a,"
 pub trait T {
     fn f<'a, 'b, 'c: 'a, T: Eq + 'a>()
         where Self: Eq, Self: Eq, T: Eq, 'c: 'b;
 }
 
 // Checking that a duplicated "where predicate" is removed.
-// @has 'foo/trait.T2.html'
-// @has - "//*[@id='tymethod.f']/h4" "fn f<T>()where Self: Eq + Eq2, T: Eq2 + Eq,"
+//@ has 'foo/trait.T2.html'
+//@ has - "//*[@id='tymethod.f']/h4" "fn f<T>()where Self: Eq + Eq2, T: Eq2 + Eq,"
 pub trait T2 {
     fn f<T: Eq>()
         where Self: Eq, Self: Eq2, T: Eq2;
@@ -23,8 +23,8 @@ pub trait T2 {
 // Note that we don't want to hide them since they have a semantic effect.
 // For outlives-bounds, they force the lifetime param to be early-bound instead of late-bound.
 // For trait bounds, it can affect well-formedness (see `ClauseKind::WellFormed`).
-// @has 'foo/fn.empty.html'
-// @has - '//pre[@class="rust item-decl"]' "empty<'a, T>()where T:, 'a:,"
+//@ has 'foo/fn.empty.html'
+//@ has - '//pre[@class="rust item-decl"]' "empty<'a, T>()where T:, 'a:,"
 pub fn empty<'a, T>()
     where
         T:,
diff --git a/tests/rustdoc/cap-lints.rs b/tests/rustdoc/cap-lints.rs
index 08a35339680..30f9be0424c 100644
--- a/tests/rustdoc/cap-lints.rs
+++ b/tests/rustdoc/cap-lints.rs
@@ -3,7 +3,7 @@
 // therefore should not concern itself with the lints.
 #[deny(warnings)]
 
-// @has cap_lints/struct.Foo.html //* 'Foo'
+//@ has cap_lints/struct.Foo.html //* 'Foo'
 pub struct Foo {
     field: i32,
 }
diff --git a/tests/rustdoc/cfg-doctest.rs b/tests/rustdoc/cfg-doctest.rs
index 6a9d26a4bb7..a2272e6ca00 100644
--- a/tests/rustdoc/cfg-doctest.rs
+++ b/tests/rustdoc/cfg-doctest.rs
@@ -1,5 +1,5 @@
-// @!has cfg_doctest/struct.SomeStruct.html
-// @!has cfg_doctest/index.html '//a/@href' 'struct.SomeStruct.html'
+//@ !has cfg_doctest/struct.SomeStruct.html
+//@ !has cfg_doctest/index.html '//a/@href' 'struct.SomeStruct.html'
 
 /// Sneaky, this isn't actually part of docs.
 #[cfg(doctest)]
diff --git a/tests/rustdoc/cfg_doc_reexport.rs b/tests/rustdoc/cfg_doc_reexport.rs
index a10c84f2cac..a07e4fe2f02 100644
--- a/tests/rustdoc/cfg_doc_reexport.rs
+++ b/tests/rustdoc/cfg_doc_reexport.rs
@@ -4,14 +4,14 @@
 #![crate_name = "foo"]
 #![no_core]
 
-// @has 'foo/index.html'
-// @has - '//*[@class="item-name"]/*[@class="stab portability"]' 'foobar'
-// @has - '//*[@class="item-name"]/*[@class="stab portability"]' 'bar'
+//@ has 'foo/index.html'
+//@ has - '//*[@class="item-name"]/*[@class="stab portability"]' 'foobar'
+//@ has - '//*[@class="item-name"]/*[@class="stab portability"]' 'bar'
 
 #[doc(cfg(feature = "foobar"))]
 mod imp_priv {
-    // @has 'foo/struct.BarPriv.html'
-    // @has - '//*[@id="main-content"]/*[@class="item-info"]/*[@class="stab portability"]' \
+    //@ has 'foo/struct.BarPriv.html'
+    //@ has - '//*[@id="main-content"]/*[@class="item-info"]/*[@class="stab portability"]' \
     //    'Available on crate feature foobar only.'
     pub struct BarPriv {}
     impl BarPriv {
@@ -22,8 +22,8 @@ mod imp_priv {
 pub use crate::imp_priv::*;
 
 pub mod bar {
-    // @has 'foo/bar/struct.Bar.html'
-    // @has - '//*[@id="main-content"]/*[@class="item-info"]/*[@class="stab portability"]' \
+    //@ has 'foo/bar/struct.Bar.html'
+    //@ has - '//*[@id="main-content"]/*[@class="item-info"]/*[@class="stab portability"]' \
     //    'Available on crate feature bar only.'
     #[doc(cfg(feature = "bar"))]
     pub struct Bar;
diff --git a/tests/rustdoc/check-source-code-urls-to-def-std.rs b/tests/rustdoc/check-source-code-urls-to-def-std.rs
index fac2a94b815..42468f7dde6 100644
--- a/tests/rustdoc/check-source-code-urls-to-def-std.rs
+++ b/tests/rustdoc/check-source-code-urls-to-def-std.rs
@@ -2,14 +2,14 @@
 
 #![crate_name = "foo"]
 
-// @has 'src/foo/check-source-code-urls-to-def-std.rs.html'
+//@ has 'src/foo/check-source-code-urls-to-def-std.rs.html'
 
 fn babar() {}
 
-// @has - '//a[@href="{{channel}}/std/primitive.u32.html"]' 'u32'
-// @has - '//a[@href="{{channel}}/std/primitive.str.html"]' 'str'
-// @has - '//a[@href="{{channel}}/std/primitive.bool.html"]' 'bool'
-// @has - '//a[@href="#7"]' 'babar'
+//@ has - '//a[@href="{{channel}}/std/primitive.u32.html"]' 'u32'
+//@ has - '//a[@href="{{channel}}/std/primitive.str.html"]' 'str'
+//@ has - '//a[@href="{{channel}}/std/primitive.bool.html"]' 'bool'
+//@ has - '//a[@href="#7"]' 'babar'
 pub fn foo(a: u32, b: &str, c: String) {
     let x = 12;
     let y: bool = true;
@@ -31,12 +31,12 @@ macro_rules! data {
 pub fn another_foo() {
     // This is known limitation: if the macro doesn't generate anything, the visitor
     // can't find any item or anything that could tell us that it comes from expansion.
-    // @!has - '//a[@href="#19"]' 'yolo!'
+    //@ !has - '//a[@href="#19"]' 'yolo!'
     yolo!();
-    // @has - '//a[@href="{{channel}}/std/macro.eprintln.html"]' 'eprintln!'
+    //@ has - '//a[@href="{{channel}}/std/macro.eprintln.html"]' 'eprintln!'
     eprintln!();
-    // @has - '//a[@href="#27-29"]' 'data!'
+    //@ has - '//a[@href="#27-29"]' 'data!'
     let x = data!(4);
-    // @has - '//a[@href="#23-25"]' 'bar!'
+    //@ has - '//a[@href="#23-25"]' 'bar!'
     bar!(x);
 }
diff --git a/tests/rustdoc/check-source-code-urls-to-def.rs b/tests/rustdoc/check-source-code-urls-to-def.rs
index 30638992ac7..8703287abc5 100644
--- a/tests/rustdoc/check-source-code-urls-to-def.rs
+++ b/tests/rustdoc/check-source-code-urls-to-def.rs
@@ -8,16 +8,16 @@
 
 extern crate source_code;
 
-// @has 'src/foo/check-source-code-urls-to-def.rs.html'
+//@ has 'src/foo/check-source-code-urls-to-def.rs.html'
 
-// @has - '//pre[@class="rust"]//a[@href="auxiliary/source-code-bar.rs.html#1-17"]' 'bar'
+//@ has - '//pre[@class="rust"]//a[@href="auxiliary/source-code-bar.rs.html#1-17"]' 'bar'
 #[path = "auxiliary/source-code-bar.rs"]
 pub mod bar;
 
-// @count - '//pre[@class="rust"]//a[@href="auxiliary/source-code-bar.rs.html#5-7"]' 4
+//@ count - '//pre[@class="rust"]//a[@href="auxiliary/source-code-bar.rs.html#5-7"]' 4
 use bar::Bar;
-// @has - '//pre[@class="rust"]//a[@href="auxiliary/source-code-bar.rs.html#13-17"]' 'self'
-// @has - '//pre[@class="rust"]//a[@href="auxiliary/source-code-bar.rs.html#14-16"]' 'Trait'
+//@ has - '//pre[@class="rust"]//a[@href="auxiliary/source-code-bar.rs.html#13-17"]' 'self'
+//@ has - '//pre[@class="rust"]//a[@href="auxiliary/source-code-bar.rs.html#14-16"]' 'Trait'
 use bar::sub::{self, Trait};
 
 pub struct Foo;
@@ -28,30 +28,30 @@ impl Foo {
 
 fn babar() {}
 
-// @has - '//pre[@class="rust"]//a/@href' '/struct.String.html'
-// @has - '//pre[@class="rust"]//a/@href' '/primitive.u32.html'
-// @has - '//pre[@class="rust"]//a/@href' '/primitive.str.html'
-// @count - '//pre[@class="rust"]//a[@href="#23"]' 5
-// @has - '//pre[@class="rust"]//a[@href="../../source_code/struct.SourceCode.html"]' \
+//@ has - '//pre[@class="rust"]//a/@href' '/struct.String.html'
+//@ has - '//pre[@class="rust"]//a/@href' '/primitive.u32.html'
+//@ has - '//pre[@class="rust"]//a/@href' '/primitive.str.html'
+//@ count - '//pre[@class="rust"]//a[@href="#23"]' 5
+//@ has - '//pre[@class="rust"]//a[@href="../../source_code/struct.SourceCode.html"]' \
 //        'source_code::SourceCode'
 pub fn foo(a: u32, b: &str, c: String, d: Foo, e: bar::Bar, f: source_code::SourceCode) {
     let x = 12;
     let y: Foo = Foo;
     let z: Bar = bar::Bar { field: Foo };
     babar();
-    // @has - '//pre[@class="rust"]//a[@href="#26"]' 'hello'
+    //@ has - '//pre[@class="rust"]//a[@href="#26"]' 'hello'
     y.hello();
 }
 
-// @has - '//pre[@class="rust"]//a[@href="auxiliary/source-code-bar.rs.html#14-16"]' 'bar::sub::Trait'
-// @has - '//pre[@class="rust"]//a[@href="auxiliary/source-code-bar.rs.html#14-16"]' 'Trait'
+//@ has - '//pre[@class="rust"]//a[@href="auxiliary/source-code-bar.rs.html#14-16"]' 'bar::sub::Trait'
+//@ has - '//pre[@class="rust"]//a[@href="auxiliary/source-code-bar.rs.html#14-16"]' 'Trait'
 pub fn foo2<T: bar::sub::Trait, V: Trait>(t: &T, v: &V, b: bool) {}
 
 pub trait AnotherTrait {}
 pub trait WhyNot {}
 
-// @has - '//pre[@class="rust"]//a[@href="#50"]' 'AnotherTrait'
-// @has - '//pre[@class="rust"]//a[@href="#51"]' 'WhyNot'
+//@ has - '//pre[@class="rust"]//a[@href="#50"]' 'AnotherTrait'
+//@ has - '//pre[@class="rust"]//a[@href="#51"]' 'WhyNot'
 pub fn foo3<T, V>(t: &T, v: &V)
 where
     T: AnotherTrait,
@@ -60,11 +60,11 @@ where
 
 pub trait AnotherTrait2 {}
 
-// @has - '//pre[@class="rust"]//a[@href="#61"]' 'AnotherTrait2'
+//@ has - '//pre[@class="rust"]//a[@href="#61"]' 'AnotherTrait2'
 pub fn foo4() {
     let x: Vec<&dyn AnotherTrait2> = Vec::new();
 }
 
-// @has - '//pre[@class="rust"]//a[@href="../../foo/primitive.bool.html"]' 'bool'
+//@ has - '//pre[@class="rust"]//a[@href="../../foo/primitive.bool.html"]' 'bool'
 #[rustc_doc_primitive = "bool"]
 mod whatever {}
diff --git a/tests/rustdoc/check-styled-link.rs b/tests/rustdoc/check-styled-link.rs
index ed4a5ea2137..a74a3c9466f 100644
--- a/tests/rustdoc/check-styled-link.rs
+++ b/tests/rustdoc/check-styled-link.rs
@@ -2,7 +2,7 @@
 
 pub struct Foo;
 
-// @has foo/struct.Bar.html '//a[@href="struct.Foo.html"]' 'Foo'
+//@ has foo/struct.Bar.html '//a[@href="struct.Foo.html"]' 'Foo'
 
 /// Code-styled reference to [`Foo`].
 pub struct Bar;
diff --git a/tests/rustdoc/check.rs b/tests/rustdoc/check.rs
index 9ca85a123f7..c083e10f657 100644
--- a/tests/rustdoc/check.rs
+++ b/tests/rustdoc/check.rs
@@ -1,5 +1,5 @@
 //@ compile-flags: -Z unstable-options --check
 
-// @!has check/fn.foo.html
-// @!has check/index.html
+//@ !has check/fn.foo.html
+//@ !has check/index.html
 pub fn foo() {}
diff --git a/tests/rustdoc/codeblock-title.rs b/tests/rustdoc/codeblock-title.rs
index 761afb8bd08..22124869d6e 100644
--- a/tests/rustdoc/codeblock-title.rs
+++ b/tests/rustdoc/codeblock-title.rs
@@ -1,9 +1,9 @@
 #![crate_name = "foo"]
 
-// @has foo/fn.bar.html '//*[@class="example-wrap compile_fail"]/*[@class="tooltip"]' "ⓘ"
-// @has foo/fn.bar.html '//*[@class="example-wrap ignore"]/*[@class="tooltip"]' "ⓘ"
-// @has foo/fn.bar.html '//*[@class="example-wrap should_panic"]/*[@class="tooltip"]' "ⓘ"
-// @has foo/fn.bar.html '//*[@title="This example runs with edition 2018"]' "ⓘ"
+//@ has foo/fn.bar.html '//*[@class="example-wrap compile_fail"]/*[@class="tooltip"]' "ⓘ"
+//@ has foo/fn.bar.html '//*[@class="example-wrap ignore"]/*[@class="tooltip"]' "ⓘ"
+//@ has foo/fn.bar.html '//*[@class="example-wrap should_panic"]/*[@class="tooltip"]' "ⓘ"
+//@ has foo/fn.bar.html '//*[@title="This example runs with edition 2018"]' "ⓘ"
 
 /// foo
 ///
diff --git a/tests/rustdoc/compiler-derive-proc-macro.rs b/tests/rustdoc/compiler-derive-proc-macro.rs
index 1c3867ced9b..e8dc5d7c6b7 100644
--- a/tests/rustdoc/compiler-derive-proc-macro.rs
+++ b/tests/rustdoc/compiler-derive-proc-macro.rs
@@ -2,14 +2,14 @@
 
 #![crate_name = "foo"]
 
-// @has 'foo/index.html'
+//@ has 'foo/index.html'
 // Each compiler builtin proc-macro has a trait equivalent so we should have
 // a trait section as well.
-// @count - '//*[@id="main-content"]//*[@class="section-header"]' 2
-// @has - '//*[@id="main-content"]//*[@class="section-header"]' 'Traits'
-// @has - '//*[@id="main-content"]//*[@class="section-header"]' 'Derive Macros'
+//@ count - '//*[@id="main-content"]//*[@class="section-header"]' 2
+//@ has - '//*[@id="main-content"]//*[@class="section-header"]' 'Traits'
+//@ has - '//*[@id="main-content"]//*[@class="section-header"]' 'Derive Macros'
 
 // Now checking the correct file is generated as well.
-// @has 'foo/derive.Clone.html'
-// @!has 'foo/macro.Clone.html'
+//@ has 'foo/derive.Clone.html'
+//@ !has 'foo/macro.Clone.html'
 pub use std::clone::Clone;
diff --git a/tests/rustdoc/const-display.rs b/tests/rustdoc/const-display.rs
index 959a00102b7..ac55a6302f7 100644
--- a/tests/rustdoc/const-display.rs
+++ b/tests/rustdoc/const-display.rs
@@ -7,68 +7,68 @@
 #![feature(foo, foo2)]
 #![feature(staged_api)]
 
-// @has 'foo/fn.foo.html' '//pre' 'pub fn foo() -> u32'
-// @has - '//span[@class="since"]' '1.0.0 (const: unstable)'
+//@ has 'foo/fn.foo.html' '//pre' 'pub fn foo() -> u32'
+//@ has - '//span[@class="since"]' '1.0.0 (const: unstable)'
 #[stable(feature = "rust1", since = "1.0.0")]
 #[rustc_const_unstable(feature="foo", issue = "none")]
 pub const fn foo() -> u32 { 42 }
 
-// @has 'foo/fn.foo_unsafe.html' '//pre' 'pub unsafe fn foo_unsafe() -> u32'
-// @has - '//span[@class="since"]' '1.0.0 (const: unstable)'
+//@ has 'foo/fn.foo_unsafe.html' '//pre' 'pub unsafe fn foo_unsafe() -> u32'
+//@ has - '//span[@class="since"]' '1.0.0 (const: unstable)'
 #[stable(feature = "rust1", since = "1.0.0")]
 #[rustc_const_unstable(feature="foo", issue = "none")]
 pub const unsafe fn foo_unsafe() -> u32 { 42 }
 
-// @has 'foo/fn.foo2.html' '//pre' 'pub const fn foo2() -> u32'
-// @!hasraw - '//span[@class="since"]'
+//@ has 'foo/fn.foo2.html' '//pre' 'pub const fn foo2() -> u32'
+//@ !hasraw - '//span[@class="since"]'
 #[unstable(feature = "humans", issue = "none")]
 pub const fn foo2() -> u32 { 42 }
 
-// @has 'foo/fn.foo3.html' '//pre' 'pub const fn foo3() -> u32'
-// @!hasraw - '//span[@class="since"]'
+//@ has 'foo/fn.foo3.html' '//pre' 'pub const fn foo3() -> u32'
+//@ !hasraw - '//span[@class="since"]'
 #[unstable(feature = "humans", issue = "none")]
 #[rustc_const_unstable(feature = "humans", issue = "none")]
 pub const fn foo3() -> u32 { 42 }
 
-// @has 'foo/fn.bar2.html' '//pre' 'pub const fn bar2() -> u32'
-// @has - //span '1.0.0 (const: 1.0.0)'
+//@ has 'foo/fn.bar2.html' '//pre' 'pub const fn bar2() -> u32'
+//@ has - //span '1.0.0 (const: 1.0.0)'
 #[stable(feature = "rust1", since = "1.0.0")]
 #[rustc_const_stable(feature = "rust1", since = "1.0.0")]
 pub const fn bar2() -> u32 { 42 }
 
 
-// @has 'foo/fn.foo2_gated.html' '//pre' 'pub const unsafe fn foo2_gated() -> u32'
-// @!hasraw - '//span[@class="since"]'
+//@ has 'foo/fn.foo2_gated.html' '//pre' 'pub const unsafe fn foo2_gated() -> u32'
+//@ !hasraw - '//span[@class="since"]'
 #[unstable(feature = "foo2", issue = "none")]
 pub const unsafe fn foo2_gated() -> u32 { 42 }
 
-// @has 'foo/fn.bar2_gated.html' '//pre' 'pub const unsafe fn bar2_gated() -> u32'
-// @has - '//span[@class="since"]' '1.0.0 (const: 1.0.0)'
+//@ has 'foo/fn.bar2_gated.html' '//pre' 'pub const unsafe fn bar2_gated() -> u32'
+//@ has - '//span[@class="since"]' '1.0.0 (const: 1.0.0)'
 #[stable(feature = "rust1", since = "1.0.0")]
 #[rustc_const_stable(feature = "rust1", since = "1.0.0")]
 pub const unsafe fn bar2_gated() -> u32 { 42 }
 
-// @has 'foo/fn.bar_not_gated.html' '//pre' 'pub const unsafe fn bar_not_gated() -> u32'
-// @!hasraw - '//span[@class="since"]'
+//@ has 'foo/fn.bar_not_gated.html' '//pre' 'pub const unsafe fn bar_not_gated() -> u32'
+//@ !hasraw - '//span[@class="since"]'
 pub const unsafe fn bar_not_gated() -> u32 { 42 }
 
 pub struct Foo;
 
 impl Foo {
-    // @has 'foo/struct.Foo.html' '//*[@id="method.gated"]/h4[@class="code-header"]' 'pub fn gated() -> u32'
-    // @has - '//span[@class="since"]' '1.0.0 (const: unstable)'
+    //@ has 'foo/struct.Foo.html' '//*[@id="method.gated"]/h4[@class="code-header"]' 'pub fn gated() -> u32'
+    //@ has - '//span[@class="since"]' '1.0.0 (const: unstable)'
     #[stable(feature = "rust1", since = "1.0.0")]
     #[rustc_const_unstable(feature="foo", issue = "none")]
     pub const fn gated() -> u32 { 42 }
 
-    // @has 'foo/struct.Foo.html' '//*[@id="method.gated_unsafe"]/h4[@class="code-header"]' 'pub unsafe fn gated_unsafe() -> u32'
-    // @has - '//span[@class="since"]' '1.0.0 (const: unstable)'
+    //@ has 'foo/struct.Foo.html' '//*[@id="method.gated_unsafe"]/h4[@class="code-header"]' 'pub unsafe fn gated_unsafe() -> u32'
+    //@ has - '//span[@class="since"]' '1.0.0 (const: unstable)'
     #[stable(feature = "rust1", since = "1.0.0")]
     #[rustc_const_unstable(feature="foo", issue = "none")]
     pub const unsafe fn gated_unsafe() -> u32 { 42 }
 
-    // @has 'foo/struct.Foo.html' '//*[@id="method.stable_impl"]/h4[@class="code-header"]' 'pub const fn stable_impl() -> u32'
-    // @has - '//span[@class="since"]' '1.0.0 (const: 1.2.0)'
+    //@ has 'foo/struct.Foo.html' '//*[@id="method.stable_impl"]/h4[@class="code-header"]' 'pub const fn stable_impl() -> u32'
+    //@ has - '//span[@class="since"]' '1.0.0 (const: 1.2.0)'
     #[stable(feature = "rust1", since = "1.0.0")]
     #[rustc_const_stable(feature = "const2", since = "1.2.0")]
     pub const fn stable_impl() -> u32 { 42 }
@@ -79,13 +79,13 @@ pub struct Bar;
 
 impl Bar {
     // Show non-const stabilities that are the same as the enclosing item.
-    // @has 'foo/struct.Bar.html' '//span[@class="since"]' '1.0.0 (const: 1.2.0)'
+    //@ has 'foo/struct.Bar.html' '//span[@class="since"]' '1.0.0 (const: 1.2.0)'
     #[stable(feature = "rust1", since = "1.0.0")]
     #[rustc_const_stable(feature = "const2", since = "1.2.0")]
     pub const fn stable_impl() -> u32 { 42 }
 
     // Show const-stability even for unstable functions.
-    // @matches 'foo/struct.Bar.html' '//span[@class="since"]' '^const: 1.3.0$'
+    //@ matches 'foo/struct.Bar.html' '//span[@class="since"]' '^const: 1.3.0$'
     #[unstable(feature = "foo2", issue = "none")]
     #[rustc_const_stable(feature = "const3", since = "1.3.0")]
     pub const fn const_stable_unstable() -> u32 { 42 }
diff --git a/tests/rustdoc/const-doc.rs b/tests/rustdoc/const-doc.rs
index 74ab4af61ac..f33083a267c 100644
--- a/tests/rustdoc/const-doc.rs
+++ b/tests/rustdoc/const-doc.rs
@@ -11,8 +11,8 @@ pub struct ContentType {
 }
 
 impl ContentType {
-    // @has const_doc/struct.ContentType.html
-    // @has  - '//*[@id="associatedconstant.Any"]' 'const Any: ContentType'
+    //@ has const_doc/struct.ContentType.html
+    //@ has  - '//*[@id="associatedconstant.Any"]' 'const Any: ContentType'
     pub const Any: ContentType = ContentType { ttype: Foo { f: PhantomData, },
                                                subtype: Foo { f: PhantomData, },
                                                params: None, };
diff --git a/tests/rustdoc/const-effect-param.rs b/tests/rustdoc/const-effect-param.rs
index b6379c05a85..3c81700ba83 100644
--- a/tests/rustdoc/const-effect-param.rs
+++ b/tests/rustdoc/const-effect-param.rs
@@ -2,13 +2,14 @@
 
 #![crate_name = "foo"]
 #![feature(effects, const_trait_impl)]
+#![allow(incomplete_features)]
 
 #[const_trait]
 pub trait Tr {
     fn f();
 }
 
-// @has foo/fn.g.html
-// @has - '//pre[@class="rust item-decl"]' 'pub const fn g<T: Tr>()'
+//@ has foo/fn.g.html
+//@ has - '//pre[@class="rust item-decl"]' 'pub const fn g<T: Tr>()'
 /// foo
 pub const fn g<T: ~const Tr>() {}
diff --git a/tests/rustdoc/const-fn-76501.rs b/tests/rustdoc/const-fn-76501.rs
index 4a7284f9851..fac49b0fd20 100644
--- a/tests/rustdoc/const-fn-76501.rs
+++ b/tests/rustdoc/const-fn-76501.rs
@@ -1,7 +1,7 @@
 // https://github.com/rust-lang/rust/issues/76501
 #![crate_name="foo"]
 
-// @has 'foo/fn.bloop.html' '//pre' 'pub const fn bloop() -> i32'
+//@ has 'foo/fn.bloop.html' '//pre' 'pub const fn bloop() -> i32'
 /// A useless function that always returns 1.
 pub const fn bloop() -> i32 {
     1
@@ -11,7 +11,7 @@ pub const fn bloop() -> i32 {
 pub struct Struct {}
 
 impl Struct {
-    // @has 'foo/struct.Struct.html' '//*[@class="method"]' \
+    //@ has 'foo/struct.Struct.html' '//*[@class="method"]' \
     // 'pub const fn blurp() -> i32'
     /// A useless function that always returns 1.
     pub const fn blurp() -> i32 {
diff --git a/tests/rustdoc/const-fn-effects.rs b/tests/rustdoc/const-fn-effects.rs
index 7c19b4b2c0c..4523870c8a5 100644
--- a/tests/rustdoc/const-fn-effects.rs
+++ b/tests/rustdoc/const-fn-effects.rs
@@ -1,15 +1,16 @@
 #![crate_name = "foo"]
 #![feature(effects)]
+#![allow(incomplete_features)]
 
-// @has foo/fn.bar.html
-// @has - '//pre[@class="rust item-decl"]' 'pub const fn bar() -> '
+//@ has foo/fn.bar.html
+//@ has - '//pre[@class="rust item-decl"]' 'pub const fn bar() -> '
 /// foo
 pub const fn bar() -> usize {
     2
 }
 
-// @has foo/struct.Foo.html
-// @has - '//*[@class="method"]' 'const fn new()'
+//@ has foo/struct.Foo.html
+//@ has - '//*[@class="method"]' 'const fn new()'
 pub struct Foo(usize);
 
 impl Foo {
diff --git a/tests/rustdoc/const-fn.rs b/tests/rustdoc/const-fn.rs
index f6616185681..8cb0cb6bf1d 100644
--- a/tests/rustdoc/const-fn.rs
+++ b/tests/rustdoc/const-fn.rs
@@ -1,14 +1,14 @@
 #![crate_name = "foo"]
 
-// @has foo/fn.bar.html
-// @has - '//pre[@class="rust item-decl"]' 'pub const fn bar() -> '
+//@ has foo/fn.bar.html
+//@ has - '//pre[@class="rust item-decl"]' 'pub const fn bar() -> '
 /// foo
 pub const fn bar() -> usize {
     2
 }
 
-// @has foo/struct.Foo.html
-// @has - '//*[@class="method"]' 'const fn new()'
+//@ has foo/struct.Foo.html
+//@ has - '//*[@class="method"]' 'const fn new()'
 pub struct Foo(usize);
 
 impl Foo {
diff --git a/tests/rustdoc/const-generics/add-impl.rs b/tests/rustdoc/const-generics/add-impl.rs
index df490d2c636..1fea0f847b2 100644
--- a/tests/rustdoc/const-generics/add-impl.rs
+++ b/tests/rustdoc/const-generics/add-impl.rs
@@ -2,12 +2,12 @@
 
 use std::ops::Add;
 
-// @has foo/struct.Simd.html '//pre[@class="rust item-decl"]' 'pub struct Simd<T, const WIDTH: usize>'
+//@ has foo/struct.Simd.html '//pre[@class="rust item-decl"]' 'pub struct Simd<T, const WIDTH: usize>'
 pub struct Simd<T, const WIDTH: usize> {
     inner: T,
 }
 
-// @has foo/struct.Simd.html '//div[@id="trait-implementations-list"]//h3[@class="code-header"]' 'impl Add for Simd<u8, 16>'
+//@ has foo/struct.Simd.html '//div[@id="trait-implementations-list"]//h3[@class="code-header"]' 'impl Add for Simd<u8, 16>'
 impl Add for Simd<u8, 16> {
     type Output = Self;
 
diff --git a/tests/rustdoc/const-generics/const-generic-defaults.rs b/tests/rustdoc/const-generics/const-generic-defaults.rs
index 7a0a794112d..090f17cc988 100644
--- a/tests/rustdoc/const-generics/const-generic-defaults.rs
+++ b/tests/rustdoc/const-generics/const-generic-defaults.rs
@@ -1,5 +1,5 @@
 #![crate_name = "foo"]
 
-// @has foo/struct.Foo.html '//pre[@class="rust item-decl"]' \
+//@ has foo/struct.Foo.html '//pre[@class="rust item-decl"]' \
 //      'pub struct Foo<const M: usize = 10, const N: usize = M, T = i32>('
 pub struct Foo<const M: usize = 10, const N: usize = M, T = i32>(T);
diff --git a/tests/rustdoc/const-generics/const-generic-slice.rs b/tests/rustdoc/const-generics/const-generic-slice.rs
index 80a9ab3f12e..6517caf4f2f 100644
--- a/tests/rustdoc/const-generics/const-generic-slice.rs
+++ b/tests/rustdoc/const-generics/const-generic-slice.rs
@@ -4,8 +4,8 @@ pub trait Array {
     type Item;
 }
 
-// @has foo/trait.Array.html
-// @has - '//*[@class="impl"]' 'impl<T, const N: usize> Array for [T; N]'
+//@ has foo/trait.Array.html
+//@ has - '//*[@class="impl"]' 'impl<T, const N: usize> Array for [T; N]'
 impl<T, const N: usize> Array for [T; N] {
     type Item = T;
 }
diff --git a/tests/rustdoc/const-generics/const-generics-docs.rs b/tests/rustdoc/const-generics/const-generics-docs.rs
index 4ef1acf45f5..e261585263b 100644
--- a/tests/rustdoc/const-generics/const-generics-docs.rs
+++ b/tests/rustdoc/const-generics/const-generics-docs.rs
@@ -3,26 +3,26 @@
 #![crate_name = "foo"]
 
 extern crate extern_crate;
-// @has foo/fn.extern_fn.html '//pre[@class="rust item-decl"]' \
+//@ has foo/fn.extern_fn.html '//pre[@class="rust item-decl"]' \
 //      'pub fn extern_fn<const N: usize>() -> impl Iterator<Item = [u8; N]>'
 pub use extern_crate::extern_fn;
-// @has foo/struct.ExternTy.html '//pre[@class="rust item-decl"]' \
+//@ has foo/struct.ExternTy.html '//pre[@class="rust item-decl"]' \
 //      'pub struct ExternTy<const N: usize> {'
 pub use extern_crate::ExternTy;
-// @has foo/type.TyAlias.html '//pre[@class="rust item-decl"]' \
+//@ has foo/type.TyAlias.html '//pre[@class="rust item-decl"]' \
 //      'type TyAlias<const N: usize> = ExternTy<N>;'
 pub use extern_crate::TyAlias;
-// @has foo/trait.WTrait.html '//pre[@class="rust item-decl"]' \
+//@ has foo/trait.WTrait.html '//pre[@class="rust item-decl"]' \
 //      'pub trait WTrait<const N: usize, const M: usize>'
-// @has - '//pre[@class="rust item-decl"]' 'fn hey<const P: usize>() -> usize'
+//@ has - '//pre[@class="rust item-decl"]' 'fn hey<const P: usize>() -> usize'
 pub use extern_crate::WTrait;
 
-// @has foo/trait.Trait.html '//pre[@class="rust item-decl"]' \
+//@ has foo/trait.Trait.html '//pre[@class="rust item-decl"]' \
 //      'pub trait Trait<const N: usize>'
-// @has - '//*[@id="impl-Trait%3C1%3E-for-u8"]//h3[@class="code-header"]' 'impl Trait<1> for u8'
-// @has - '//*[@id="impl-Trait%3C2%3E-for-u8"]//h3[@class="code-header"]' 'impl Trait<2> for u8'
-// @has - '//*[@id="impl-Trait%3C%7B1+%2B+2%7D%3E-for-u8"]//h3[@class="code-header"]' 'impl Trait<{1 + 2}> for u8'
-// @has - '//*[@id="impl-Trait%3CN%3E-for-%5Bu8;+N%5D"]//h3[@class="code-header"]' \
+//@ has - '//*[@id="impl-Trait%3C1%3E-for-u8"]//h3[@class="code-header"]' 'impl Trait<1> for u8'
+//@ has - '//*[@id="impl-Trait%3C2%3E-for-u8"]//h3[@class="code-header"]' 'impl Trait<2> for u8'
+//@ has - '//*[@id="impl-Trait%3C%7B1+%2B+2%7D%3E-for-u8"]//h3[@class="code-header"]' 'impl Trait<{1 + 2}> for u8'
+//@ has - '//*[@id="impl-Trait%3CN%3E-for-%5Bu8;+N%5D"]//h3[@class="code-header"]' \
 //      'impl<const N: usize> Trait<N> for [u8; N]'
 pub trait Trait<const N: usize> {}
 impl Trait<1> for u8 {}
@@ -30,58 +30,58 @@ impl Trait<2> for u8 {}
 impl Trait<{1 + 2}> for u8 {}
 impl<const N: usize> Trait<N> for [u8; N] {}
 
-// @has foo/struct.Foo.html '//pre[@class="rust item-decl"]' \
+//@ has foo/struct.Foo.html '//pre[@class="rust item-decl"]' \
 //      'pub struct Foo<const N: usize> where u8: Trait<N>'
 pub struct Foo<const N: usize> where u8: Trait<N>;
-// @has foo/struct.Bar.html '//pre[@class="rust item-decl"]' 'pub struct Bar<T, const N: usize>('
+//@ has foo/struct.Bar.html '//pre[@class="rust item-decl"]' 'pub struct Bar<T, const N: usize>('
 pub struct Bar<T, const N: usize>([T; N]);
 
-// @has foo/struct.Foo.html '//*[@id="impl-Foo%3CM%3E"]/h3[@class="code-header"]' 'impl<const M: usize> Foo<M>where u8: Trait<M>'
+//@ has foo/struct.Foo.html '//*[@id="impl-Foo%3CM%3E"]/h3[@class="code-header"]' 'impl<const M: usize> Foo<M>where u8: Trait<M>'
 impl<const M: usize> Foo<M> where u8: Trait<M> {
-    // @has - '//*[@id="associatedconstant.FOO_ASSOC"]' 'pub const FOO_ASSOC: usize'
+    //@ has - '//*[@id="associatedconstant.FOO_ASSOC"]' 'pub const FOO_ASSOC: usize'
     pub const FOO_ASSOC: usize = M + 13;
 
-    // @has - '//*[@id="method.hey"]' 'pub fn hey<const N: usize>(&self) -> Bar<u8, N>'
+    //@ has - '//*[@id="method.hey"]' 'pub fn hey<const N: usize>(&self) -> Bar<u8, N>'
     pub fn hey<const N: usize>(&self) -> Bar<u8, N> {
         Bar([0; N])
     }
 }
 
-// @has foo/struct.Bar.html '//*[@id="impl-Bar%3Cu8,+M%3E"]/h3[@class="code-header"]' 'impl<const M: usize> Bar<u8, M>'
+//@ has foo/struct.Bar.html '//*[@id="impl-Bar%3Cu8,+M%3E"]/h3[@class="code-header"]' 'impl<const M: usize> Bar<u8, M>'
 impl<const M: usize> Bar<u8, M> {
-    // @has - '//*[@id="method.hey"]' \
+    //@ has - '//*[@id="method.hey"]' \
     //      'pub fn hey<const N: usize>(&self) -> Foo<N>where u8: Trait<N>'
     pub fn hey<const N: usize>(&self) -> Foo<N> where u8: Trait<N> {
         Foo
     }
 }
 
-// @has foo/fn.test.html '//pre[@class="rust item-decl"]' \
+//@ has foo/fn.test.html '//pre[@class="rust item-decl"]' \
 //      'pub fn test<const N: usize>() -> impl Trait<N>where u8: Trait<N>'
 pub fn test<const N: usize>() -> impl Trait<N> where u8: Trait<N> {
     2u8
 }
 
-// @has foo/fn.a_sink.html '//pre[@class="rust item-decl"]' \
+//@ has foo/fn.a_sink.html '//pre[@class="rust item-decl"]' \
 //      'pub async fn a_sink<const N: usize>(v: [u8; N]) -> impl Trait<N>'
 pub async fn a_sink<const N: usize>(v: [u8; N]) -> impl Trait<N> {
     v
 }
 
-// @has foo/fn.b_sink.html '//pre[@class="rust item-decl"]' \
+//@ has foo/fn.b_sink.html '//pre[@class="rust item-decl"]' \
 //      'pub async fn b_sink<const N: usize>(_: impl Trait<N>)'
 pub async fn b_sink<const N: usize>(_: impl Trait<N>) {}
 
-// @has foo/fn.concrete.html '//pre[@class="rust item-decl"]' \
+//@ has foo/fn.concrete.html '//pre[@class="rust item-decl"]' \
 //      'pub fn concrete() -> [u8; 22]'
 pub fn concrete() -> [u8; 3 + std::mem::size_of::<u64>() << 1] {
     Default::default()
 }
 
-// @has foo/type.Faz.html '//pre[@class="rust item-decl"]' \
+//@ has foo/type.Faz.html '//pre[@class="rust item-decl"]' \
 //      'type Faz<const N: usize> = [u8; N];'
 pub type Faz<const N: usize> = [u8; N];
-// @has foo/type.Fiz.html '//pre[@class="rust item-decl"]' \
+//@ has foo/type.Fiz.html '//pre[@class="rust item-decl"]' \
 //      'type Fiz<const N: usize> = [[u8; N]; 48];'
 pub type Fiz<const N: usize> = [[u8; N]; 3 << 4];
 
@@ -91,7 +91,7 @@ macro_rules! define_me {
     }
 }
 
-// @has foo/struct.Foz.html '//pre[@class="rust item-decl"]' \
+//@ has foo/struct.Foz.html '//pre[@class="rust item-decl"]' \
 //      'pub struct Foz<const N: usize>(/* private fields */);'
 define_me!(Foz<N>);
 
@@ -103,26 +103,26 @@ impl<const N: usize> Q for [u8; N] {
     const ASSOC: usize = N;
 }
 
-// @has foo/fn.q_user.html '//pre[@class="rust item-decl"]' \
+//@ has foo/fn.q_user.html '//pre[@class="rust item-decl"]' \
 //      'pub fn q_user() -> [u8; 13]'
 pub fn q_user() -> [u8; <[u8; 13] as Q>::ASSOC] {
     [0; <[u8; 13] as Q>::ASSOC]
 }
 
-// @has foo/union.Union.html '//pre[@class="rust item-decl"]' \
+//@ has foo/union.Union.html '//pre[@class="rust item-decl"]' \
 //      'pub union Union<const N: usize>'
 pub union Union<const N: usize> {
-    // @has - //pre "pub arr: [u8; N]"
+    //@ has - //pre "pub arr: [u8; N]"
     pub arr: [u8; N],
-    // @has - //pre "pub another_arr: [(); N]"
+    //@ has - //pre "pub another_arr: [(); N]"
     pub another_arr: [(); N],
 }
 
-// @has foo/enum.Enum.html '//pre[@class="rust item-decl"]' \
+//@ has foo/enum.Enum.html '//pre[@class="rust item-decl"]' \
 //      'pub enum Enum<const N: usize>'
 pub enum Enum<const N: usize> {
-    // @has - //pre "Variant([u8; N])"
+    //@ has - //pre "Variant([u8; N])"
     Variant([u8; N]),
-    // @has - //pre "EmptyVariant"
+    //@ has - //pre "EmptyVariant"
     EmptyVariant,
 }
diff --git a/tests/rustdoc/const-generics/const-impl.rs b/tests/rustdoc/const-generics/const-impl.rs
index f4eefcc1c33..ce536291290 100644
--- a/tests/rustdoc/const-generics/const-impl.rs
+++ b/tests/rustdoc/const-generics/const-impl.rs
@@ -10,21 +10,21 @@ pub enum Order {
     Unsorted,
 }
 
-// @has foo/struct.VSet.html '//pre[@class="rust item-decl"]' 'pub struct VSet<T, const ORDER: Order>'
-// @has foo/struct.VSet.html '//*[@id="impl-Send-for-VSet%3CT,+ORDER%3E"]/h3[@class="code-header"]' 'impl<T, const ORDER: Order> Send for VSet<T, ORDER>'
-// @has foo/struct.VSet.html '//*[@id="impl-Sync-for-VSet%3CT,+ORDER%3E"]/h3[@class="code-header"]' 'impl<T, const ORDER: Order> Sync for VSet<T, ORDER>'
+//@ has foo/struct.VSet.html '//pre[@class="rust item-decl"]' 'pub struct VSet<T, const ORDER: Order>'
+//@ has foo/struct.VSet.html '//*[@id="impl-Send-for-VSet%3CT,+ORDER%3E"]/h3[@class="code-header"]' 'impl<T, const ORDER: Order> Send for VSet<T, ORDER>'
+//@ has foo/struct.VSet.html '//*[@id="impl-Sync-for-VSet%3CT,+ORDER%3E"]/h3[@class="code-header"]' 'impl<T, const ORDER: Order> Sync for VSet<T, ORDER>'
 pub struct VSet<T, const ORDER: Order> {
     inner: Vec<T>,
 }
 
-// @has foo/struct.VSet.html '//*[@id="impl-VSet%3CT,+%7B+Order::Sorted+%7D%3E"]/h3[@class="code-header"]' 'impl<T> VSet<T, { Order::Sorted }>'
+//@ has foo/struct.VSet.html '//*[@id="impl-VSet%3CT,+%7B+Order::Sorted+%7D%3E"]/h3[@class="code-header"]' 'impl<T> VSet<T, { Order::Sorted }>'
 impl<T> VSet<T, { Order::Sorted }> {
     pub fn new() -> Self {
         Self { inner: Vec::new() }
     }
 }
 
-// @has foo/struct.VSet.html '//*[@id="impl-VSet%3CT,+%7B+Order::Unsorted+%7D%3E"]/h3[@class="code-header"]' 'impl<T> VSet<T, { Order::Unsorted }>'
+//@ has foo/struct.VSet.html '//*[@id="impl-VSet%3CT,+%7B+Order::Unsorted+%7D%3E"]/h3[@class="code-header"]' 'impl<T> VSet<T, { Order::Unsorted }>'
 impl<T> VSet<T, { Order::Unsorted }> {
     pub fn new() -> Self {
         Self { inner: Vec::new() }
@@ -33,7 +33,7 @@ impl<T> VSet<T, { Order::Unsorted }> {
 
 pub struct Escape<const S: &'static str>;
 
-// @has foo/struct.Escape.html '//*[@id="impl-Escape%3C%22%3Cscript%3Ealert(%5C%22Escape%5C%22);%3C/script%3E%22%3E"]/h3[@class="code-header"]' 'impl Escape<r#"<script>alert("Escape");</script>"#>'
+//@ has foo/struct.Escape.html '//*[@id="impl-Escape%3C%22%3Cscript%3Ealert(%5C%22Escape%5C%22);%3C/script%3E%22%3E"]/h3[@class="code-header"]' 'impl Escape<r#"<script>alert("Escape");</script>"#>'
 impl Escape<r#"<script>alert("Escape");</script>"#> {
     pub fn f() {}
 }
diff --git a/tests/rustdoc/const-generics/generic_const_exprs.rs b/tests/rustdoc/const-generics/generic_const_exprs.rs
index 2d2d31d7231..c406fa5d034 100644
--- a/tests/rustdoc/const-generics/generic_const_exprs.rs
+++ b/tests/rustdoc/const-generics/generic_const_exprs.rs
@@ -2,6 +2,6 @@
 #![feature(generic_const_exprs)]
 #![allow(incomplete_features)]
 // make sure that `ConstEvaluatable` predicates dont cause rustdoc to ICE #77647
-// @has foo/struct.Ice.html '//pre[@class="rust item-decl"]' \
+//@ has foo/struct.Ice.html '//pre[@class="rust item-decl"]' \
 //      'pub struct Ice<const N: usize> where [(); { _ }]:;'
 pub struct Ice<const N: usize> where [(); N + 1]:;
diff --git a/tests/rustdoc/const-generics/lazy_normalization_consts/const-equate-pred.rs b/tests/rustdoc/const-generics/lazy_normalization_consts/const-equate-pred.rs
index 310e89a35c4..c9d80d68aa1 100644
--- a/tests/rustdoc/const-generics/lazy_normalization_consts/const-equate-pred.rs
+++ b/tests/rustdoc/const-generics/lazy_normalization_consts/const-equate-pred.rs
@@ -11,8 +11,8 @@ pub struct Hasher<T> {
 
 unsafe impl<T: Default> Send for Hasher<T> {}
 
-// @has foo/struct.Foo.html
-// @has - '//h3[@class="code-header"]' 'impl Send for Foo'
+//@ has foo/struct.Foo.html
+//@ has - '//h3[@class="code-header"]' 'impl Send for Foo'
 pub struct Foo {
     hasher: Hasher<[u8; 3]>,
 }
diff --git a/tests/rustdoc/const-generics/type-alias.rs b/tests/rustdoc/const-generics/type-alias.rs
index 4b93e72d273..6d98648fe62 100644
--- a/tests/rustdoc/const-generics/type-alias.rs
+++ b/tests/rustdoc/const-generics/type-alias.rs
@@ -1,4 +1,4 @@
 #![crate_name = "foo"]
 
-// @has foo/type.CellIndex.html '//pre[@class="rust item-decl"]' 'type CellIndex<const D: usize> = [i64; D];'
+//@ has foo/type.CellIndex.html '//pre[@class="rust item-decl"]' 'type CellIndex<const D: usize> = [i64; D];'
 pub type CellIndex<const D: usize> = [i64; D];
diff --git a/tests/rustdoc/const-intrinsic.rs b/tests/rustdoc/const-intrinsic.rs
index 6d2c6cce29c..520e253469c 100644
--- a/tests/rustdoc/const-intrinsic.rs
+++ b/tests/rustdoc/const-intrinsic.rs
@@ -5,21 +5,21 @@
 #![stable(since="1.0.0", feature="rust1")]
 
 extern "rust-intrinsic" {
-    // @has 'foo/fn.transmute.html'
-    // @has - '//pre[@class="rust item-decl"]' 'pub const unsafe extern "rust-intrinsic" fn transmute<T, U>(_: T) -> U'
+    //@ has 'foo/fn.transmute.html'
+    //@ has - '//pre[@class="rust item-decl"]' 'pub const unsafe extern "rust-intrinsic" fn transmute<T, U>(_: T) -> U'
     #[stable(since="1.0.0", feature="rust1")]
     #[rustc_const_stable(feature = "const_transmute", since = "1.56.0")]
     pub fn transmute<T, U>(_: T) -> U;
 
-    // @has 'foo/fn.unreachable.html'
-    // @has - '//pre[@class="rust item-decl"]' 'pub unsafe extern "rust-intrinsic" fn unreachable() -> !'
+    //@ has 'foo/fn.unreachable.html'
+    //@ has - '//pre[@class="rust item-decl"]' 'pub unsafe extern "rust-intrinsic" fn unreachable() -> !'
     #[stable(since="1.0.0", feature="rust1")]
     pub fn unreachable() -> !;
 }
 
 extern "C" {
-    // @has 'foo/fn.needs_drop.html'
-    // @has - '//pre[@class="rust item-decl"]' 'pub unsafe extern "C" fn needs_drop() -> !'
+    //@ has 'foo/fn.needs_drop.html'
+    //@ has - '//pre[@class="rust item-decl"]' 'pub unsafe extern "C" fn needs_drop() -> !'
     #[stable(since="1.0.0", feature="rust1")]
     pub fn needs_drop() -> !;
 }
diff --git a/tests/rustdoc/const-rendering-macros-33302.rs b/tests/rustdoc/const-rendering-macros-33302.rs
index 0f5cb921411..9fd45df08be 100644
--- a/tests/rustdoc/const-rendering-macros-33302.rs
+++ b/tests/rustdoc/const-rendering-macros-33302.rs
@@ -8,42 +8,42 @@ macro_rules! make {
     ($n:expr) => {
         pub struct S;
 
-        // @has issue_33302/constant.CST.html \
+        //@ has issue_33302/constant.CST.html \
         //        '//pre[@class="rust item-decl"]' 'pub const CST: i32'
         pub const CST: i32 = ($n * $n);
-        // @has issue_33302/static.ST.html \
+        //@ has issue_33302/static.ST.html \
         //        '//pre[@class="rust item-decl"]' 'pub static ST: i32'
         pub static ST: i32 = ($n * $n);
 
         pub trait T<X> {
             fn ignore(_: &X) {}
             const C: X;
-            // @has issue_33302/trait.T.html \
+            //@ has issue_33302/trait.T.html \
             //        '//pre[@class="rust item-decl"]' 'const D: i32'
-            // @has - '//*[@id="associatedconstant.D"]' 'const D: i32'
+            //@ has - '//*[@id="associatedconstant.D"]' 'const D: i32'
             const D: i32 = ($n * $n);
         }
 
-        // @has issue_33302/struct.S.html \
+        //@ has issue_33302/struct.S.html \
         //        '//*[@class="impl"]' 'impl T<[i32; 16]> for S'
-        // @has - '//*[@id="associatedconstant.C"]' 'const C: [i32; 16]'
-        // @has - '//*[@id="associatedconstant.D"]' 'const D: i32'
+        //@ has - '//*[@id="associatedconstant.C"]' 'const C: [i32; 16]'
+        //@ has - '//*[@id="associatedconstant.D"]' 'const D: i32'
         impl T<[i32; ($n * $n)]> for S {
             const C: [i32; ($n * $n)] = [0; ($n * $n)];
         }
 
-        // @has issue_33302/struct.S.html \
+        //@ has issue_33302/struct.S.html \
         //        '//*[@class="impl"]' 'impl T<[i32; 16]> for S'
-        // @has - '//*[@id="associatedconstant.C-1"]' 'const C: (i32,)'
-        // @has - '//*[@id="associatedconstant.D-1"]' 'const D: i32'
+        //@ has - '//*[@id="associatedconstant.C-1"]' 'const C: (i32,)'
+        //@ has - '//*[@id="associatedconstant.D-1"]' 'const D: i32'
         impl T<(i32,)> for S {
             const C: (i32,) = ($n,);
         }
 
-        // @has issue_33302/struct.S.html \
+        //@ has issue_33302/struct.S.html \
         //        '//*[@class="impl"]' 'impl T<(i32, i32)> for S'
-        // @has - '//*[@id="associatedconstant.C-2"]' 'const C: (i32, i32)'
-        // @has - '//*[@id="associatedconstant.D-2"]' 'const D: i32'
+        //@ has - '//*[@id="associatedconstant.C-2"]' 'const C: (i32, i32)'
+        //@ has - '//*[@id="associatedconstant.D-2"]' 'const D: i32'
         impl T<(i32, i32)> for S {
             const C: (i32, i32) = ($n, $n);
             const D: i32 = ($n / $n);
diff --git a/tests/rustdoc/const-underscore.rs b/tests/rustdoc/const-underscore.rs
index f7f15e54831..fafc4b4e25c 100644
--- a/tests/rustdoc/const-underscore.rs
+++ b/tests/rustdoc/const-underscore.rs
@@ -1,6 +1,6 @@
 //@ compile-flags: --document-private-items
 
-// @!has const_underscore/constant._.html
+//@ !has const_underscore/constant._.html
 const _: () = {
     #[no_mangle]
     extern "C" fn implementation_detail() {}
diff --git a/tests/rustdoc/const-value-display.rs b/tests/rustdoc/const-value-display.rs
index a7548ad2cc4..658978a3490 100644
--- a/tests/rustdoc/const-value-display.rs
+++ b/tests/rustdoc/const-value-display.rs
@@ -1,9 +1,9 @@
 #![crate_name = "foo"]
 
-// @has 'foo/constant.HOUR_IN_SECONDS.html'
-// @has - '//*[@class="rust item-decl"]//code' 'pub const HOUR_IN_SECONDS: u64 = _; // 3_600u64'
+//@ has 'foo/constant.HOUR_IN_SECONDS.html'
+//@ has - '//*[@class="rust item-decl"]//code' 'pub const HOUR_IN_SECONDS: u64 = _; // 3_600u64'
 pub const HOUR_IN_SECONDS: u64 = 60 * 60;
 
-// @has 'foo/constant.NEGATIVE.html'
-// @has - '//*[@class="rust item-decl"]//code' 'pub const NEGATIVE: i64 = _; // -3_600i64'
+//@ has 'foo/constant.NEGATIVE.html'
+//@ has - '//*[@class="rust item-decl"]//code' 'pub const NEGATIVE: i64 = _; // -3_600i64'
 pub const NEGATIVE: i64 = -60 * 60;
diff --git a/tests/rustdoc/const.rs b/tests/rustdoc/const.rs
index 587ad4db478..fe6a828505a 100644
--- a/tests/rustdoc/const.rs
+++ b/tests/rustdoc/const.rs
@@ -3,7 +3,7 @@
 pub struct Foo;
 
 impl Foo {
-    // @has const/struct.Foo.html '//*[@id="method.new"]//h4[@class="code-header"]' 'const unsafe fn new'
+    //@ has const/struct.Foo.html '//*[@id="method.new"]//h4[@class="code-header"]' 'const unsafe fn new'
     pub const unsafe fn new() -> Foo {
         Foo
     }
diff --git a/tests/rustdoc/constructor-imports.rs b/tests/rustdoc/constructor-imports.rs
index 26795c27444..e5f280476b6 100644
--- a/tests/rustdoc/constructor-imports.rs
+++ b/tests/rustdoc/constructor-imports.rs
@@ -7,9 +7,9 @@ pub mod a {
     }
 }
 
-// @count 'foo/index.html' '//*[code="pub use a::Foo;"]' 1
+//@ count 'foo/index.html' '//*[code="pub use a::Foo;"]' 1
 #[doc(no_inline)]
 pub use a::Foo;
-// @count 'foo/index.html' '//*[code="pub use a::Bar::Baz;"]' 1
+//@ count 'foo/index.html' '//*[code="pub use a::Bar::Baz;"]' 1
 #[doc(no_inline)]
 pub use a::Bar::Baz;
diff --git a/tests/rustdoc/crate-version-escape.rs b/tests/rustdoc/crate-version-escape.rs
index a8f9e7eee7b..3a08d52361c 100644
--- a/tests/rustdoc/crate-version-escape.rs
+++ b/tests/rustdoc/crate-version-escape.rs
@@ -2,4 +2,4 @@
 
 #![crate_name = "foo"]
 
-// @has 'foo/index.html' '//*[@class="version"]' '<script>alert("hi")</script>'
+//@ has 'foo/index.html' '//*[@class="version"]' '<script>alert("hi")</script>'
diff --git a/tests/rustdoc/crate-version-extra.rs b/tests/rustdoc/crate-version-extra.rs
index 4e215b86dee..b3cd54da764 100644
--- a/tests/rustdoc/crate-version-extra.rs
+++ b/tests/rustdoc/crate-version-extra.rs
@@ -3,5 +3,5 @@
 #![crate_name="foo"]
 
 // main version next to logo, extra version data below it
-// @has 'foo/index.html' '//h2/span[@class="version"]' '1.3.37-nightly'
-// @has 'foo/index.html' '//nav[@class="sidebar"]/div[@class="version"]' '(203c57dbe 2023-09-17)'
+//@ has 'foo/index.html' '//h2/span[@class="version"]' '1.3.37-nightly'
+//@ has 'foo/index.html' '//nav[@class="sidebar"]/div[@class="version"]' '(203c57dbe 2023-09-17)'
diff --git a/tests/rustdoc/crate-version.rs b/tests/rustdoc/crate-version.rs
index 7095bf54c13..05ce0aeb5ca 100644
--- a/tests/rustdoc/crate-version.rs
+++ b/tests/rustdoc/crate-version.rs
@@ -1,3 +1,3 @@
 //@ compile-flags: --crate-version=1.3.37
 
-// @has 'crate_version/index.html' '//*[@class="version"]' '1.3.37'
+//@ has 'crate_version/index.html' '//*[@class="version"]' '1.3.37'
diff --git a/tests/rustdoc/cross-crate-hidden-assoc-trait-items.rs b/tests/rustdoc/cross-crate-hidden-assoc-trait-items.rs
index 22630705e1e..d3771c2e7a2 100644
--- a/tests/rustdoc/cross-crate-hidden-assoc-trait-items.rs
+++ b/tests/rustdoc/cross-crate-hidden-assoc-trait-items.rs
@@ -10,14 +10,14 @@
 // visible items instead and assert that there are *exactly two* associated items
 // (by counting the number of `section`s). This is more robust and future-proof.
 
-// @has dependent/struct.Ty.html
-// @has - '//*[@id="associatedtype.VisibleAssoc"]' 'type VisibleAssoc = ()'
-// @has - '//*[@id="associatedconstant.VISIBLE_ASSOC"]' 'const VISIBLE_ASSOC: ()'
-// @count - '//*[@class="impl-items"]/section' 2
+//@ has dependent/struct.Ty.html
+//@ has - '//*[@id="associatedtype.VisibleAssoc"]' 'type VisibleAssoc = ()'
+//@ has - '//*[@id="associatedconstant.VISIBLE_ASSOC"]' 'const VISIBLE_ASSOC: ()'
+//@ count - '//*[@class="impl-items"]/section' 2
 
-// @has dependent/trait.Tr.html
-// @has - '//*[@id="associatedtype.VisibleAssoc-1"]' 'type VisibleAssoc = ()'
-// @has - '//*[@id="associatedconstant.VISIBLE_ASSOC-1"]' 'const VISIBLE_ASSOC: ()'
-// @count - '//*[@class="impl-items"]/section' 2
+//@ has dependent/trait.Tr.html
+//@ has - '//*[@id="associatedtype.VisibleAssoc-1"]' 'type VisibleAssoc = ()'
+//@ has - '//*[@id="associatedconstant.VISIBLE_ASSOC-1"]' 'const VISIBLE_ASSOC: ()'
+//@ count - '//*[@class="impl-items"]/section' 2
 
 pub use dependency::{Tr, Ty};
diff --git a/tests/rustdoc/cross-crate-hidden-impl-parameter.rs b/tests/rustdoc/cross-crate-hidden-impl-parameter.rs
index 69f9ca132fd..ebfe251134a 100644
--- a/tests/rustdoc/cross-crate-hidden-impl-parameter.rs
+++ b/tests/rustdoc/cross-crate-hidden-impl-parameter.rs
@@ -8,7 +8,7 @@ pub use ::cross_crate_hidden_impl_parameter::{HiddenType, HiddenTrait}; // OK, n
 
 pub enum MyLibType {}
 
-// @!has foo/enum.MyLibType.html '//*[@id="impl-From%3CHiddenType%3E"]' 'impl From<HiddenType> for MyLibType'
+//@ !has foo/enum.MyLibType.html '//*[@id="impl-From%3CHiddenType%3E"]' 'impl From<HiddenType> for MyLibType'
 impl From<HiddenType> for MyLibType {
     fn from(it: HiddenType) -> MyLibType {
         match it {}
@@ -17,17 +17,17 @@ impl From<HiddenType> for MyLibType {
 
 pub struct T<T>(T);
 
-// @!has foo/enum.MyLibType.html '//*[@id="impl-From%3CT%3CT%3CT%3CT%3CHiddenType%3E%3E%3E%3E%3E"]' 'impl From<T<T<T<T<HiddenType>>>>> for MyLibType'
+//@ !has foo/enum.MyLibType.html '//*[@id="impl-From%3CT%3CT%3CT%3CT%3CHiddenType%3E%3E%3E%3E%3E"]' 'impl From<T<T<T<T<HiddenType>>>>> for MyLibType'
 impl From<T<T<T<T<HiddenType>>>>> for MyLibType {
     fn from(it: T<T<T<T<HiddenType>>>>) -> MyLibType {
         todo!()
     }
 }
 
-// @!has foo/enum.MyLibType.html '//*[@id="impl-HiddenTrait"]' 'impl HiddenTrait for MyLibType'
+//@ !has foo/enum.MyLibType.html '//*[@id="impl-HiddenTrait"]' 'impl HiddenTrait for MyLibType'
 impl HiddenTrait for MyLibType {}
 
-// @!has foo/struct.T.html '//*[@id="impl-From%3CMyLibType%3E"]' 'impl From<MyLibType> for T<T<T<T<HiddenType>>>>'
+//@ !has foo/struct.T.html '//*[@id="impl-From%3CMyLibType%3E"]' 'impl From<MyLibType> for T<T<T<T<HiddenType>>>>'
 impl From<MyLibType> for T<T<T<T<HiddenType>>>> {
     fn from(it: MyLibType) -> T<T<T<T<HiddenType>>>> {
         match it {}
diff --git a/tests/rustdoc/cross-crate-links.rs b/tests/rustdoc/cross-crate-links.rs
index 36e8f31dfc6..b051d41cad4 100644
--- a/tests/rustdoc/cross-crate-links.rs
+++ b/tests/rustdoc/cross-crate-links.rs
@@ -6,54 +6,54 @@
 #[macro_use]
 extern crate all_item_types;
 
-// @has 'foo/index.html' '//a[@href="../all_item_types/foo_mod/index.html"]' 'foo_mod'
+//@ has 'foo/index.html' '//a[@href="../all_item_types/foo_mod/index.html"]' 'foo_mod'
 #[doc(no_inline)]
 pub use all_item_types::foo_mod;
 
-// @has 'foo/index.html' '//a[@href="../all_item_types/fn.foo_ffn.html"]' 'foo_ffn'
+//@ has 'foo/index.html' '//a[@href="../all_item_types/fn.foo_ffn.html"]' 'foo_ffn'
 #[doc(no_inline)]
 pub use all_item_types::foo_ffn;
 
-// @has 'foo/index.html' '//a[@href="../all_item_types/static.FOO_FSTATIC.html"]' 'FOO_FSTATIC'
+//@ has 'foo/index.html' '//a[@href="../all_item_types/static.FOO_FSTATIC.html"]' 'FOO_FSTATIC'
 #[doc(no_inline)]
 pub use all_item_types::FOO_FSTATIC;
 
-// @has 'foo/index.html' '//a[@href="../all_item_types/foreigntype.FooFType.html"]' 'FooFType'
+//@ has 'foo/index.html' '//a[@href="../all_item_types/foreigntype.FooFType.html"]' 'FooFType'
 #[doc(no_inline)]
 pub use all_item_types::FooFType;
 
-// @has 'foo/index.html' '//a[@href="../all_item_types/fn.foo_fn.html"]' 'foo_fn'
+//@ has 'foo/index.html' '//a[@href="../all_item_types/fn.foo_fn.html"]' 'foo_fn'
 #[doc(no_inline)]
 pub use all_item_types::foo_fn;
 
-// @has 'foo/index.html' '//a[@href="../all_item_types/trait.FooTrait.html"]' 'FooTrait'
+//@ has 'foo/index.html' '//a[@href="../all_item_types/trait.FooTrait.html"]' 'FooTrait'
 #[doc(no_inline)]
 pub use all_item_types::FooTrait;
 
-// @has 'foo/index.html' '//a[@href="../all_item_types/struct.FooStruct.html"]' 'FooStruct'
+//@ has 'foo/index.html' '//a[@href="../all_item_types/struct.FooStruct.html"]' 'FooStruct'
 #[doc(no_inline)]
 pub use all_item_types::FooStruct;
 
-// @has 'foo/index.html' '//a[@href="../all_item_types/enum.FooEnum.html"]' 'FooEnum'
+//@ has 'foo/index.html' '//a[@href="../all_item_types/enum.FooEnum.html"]' 'FooEnum'
 #[doc(no_inline)]
 pub use all_item_types::FooEnum;
 
-// @has 'foo/index.html' '//a[@href="../all_item_types/union.FooUnion.html"]' 'FooUnion'
+//@ has 'foo/index.html' '//a[@href="../all_item_types/union.FooUnion.html"]' 'FooUnion'
 #[doc(no_inline)]
 pub use all_item_types::FooUnion;
 
-// @has 'foo/index.html' '//a[@href="../all_item_types/type.FooType.html"]' 'FooType'
+//@ has 'foo/index.html' '//a[@href="../all_item_types/type.FooType.html"]' 'FooType'
 #[doc(no_inline)]
 pub use all_item_types::FooType;
 
-// @has 'foo/index.html' '//a[@href="../all_item_types/static.FOO_STATIC.html"]' 'FOO_STATIC'
+//@ has 'foo/index.html' '//a[@href="../all_item_types/static.FOO_STATIC.html"]' 'FOO_STATIC'
 #[doc(no_inline)]
 pub use all_item_types::FOO_STATIC;
 
-// @has 'foo/index.html' '//a[@href="../all_item_types/constant.FOO_CONSTANT.html"]' 'FOO_CONSTANT'
+//@ has 'foo/index.html' '//a[@href="../all_item_types/constant.FOO_CONSTANT.html"]' 'FOO_CONSTANT'
 #[doc(no_inline)]
 pub use all_item_types::FOO_CONSTANT;
 
-// @has 'foo/index.html' '//a[@href="../all_item_types/macro.foo_macro.html"]' 'foo_macro'
+//@ has 'foo/index.html' '//a[@href="../all_item_types/macro.foo_macro.html"]' 'foo_macro'
 #[doc(no_inline)]
 pub use all_item_types::foo_macro;
diff --git a/tests/rustdoc/cross-crate-primitive-doc.rs b/tests/rustdoc/cross-crate-primitive-doc.rs
index 01a4c4ef8e4..ca33dedcbae 100644
--- a/tests/rustdoc/cross-crate-primitive-doc.rs
+++ b/tests/rustdoc/cross-crate-primitive-doc.rs
@@ -7,7 +7,7 @@
 
 extern crate primitive_doc;
 
-// @has 'cross_crate_primitive_doc/fn.foo.html' '//a[@href="../primitive_doc/primitive.usize.html"]' 'usize'
-// @has 'cross_crate_primitive_doc/fn.foo.html' '//a[@href="../primitive_doc/primitive.usize.html"]' 'link'
+//@ has 'cross_crate_primitive_doc/fn.foo.html' '//a[@href="../primitive_doc/primitive.usize.html"]' 'usize'
+//@ has 'cross_crate_primitive_doc/fn.foo.html' '//a[@href="../primitive_doc/primitive.usize.html"]' 'link'
 /// [link](usize)
 pub fn foo() -> usize { 0 }
diff --git a/tests/rustdoc/custom_code_classes.rs b/tests/rustdoc/custom_code_classes.rs
index 569857a09cb..1e89b0761a6 100644
--- a/tests/rustdoc/custom_code_classes.rs
+++ b/tests/rustdoc/custom_code_classes.rs
@@ -4,10 +4,10 @@
 #![feature(no_core)]
 #![no_core]
 
-// @has 'foo/struct.Bar.html'
-// @has - '//*[@id="main-content"]//pre[@class="language-whatever hoho-c"]' 'main;'
-// @has - '//*[@id="main-content"]//pre[@class="language-whatever2 haha-c"]' 'main;'
-// @has - '//*[@id="main-content"]//pre[@class="language-whatever4 huhu-c"]' 'main;'
+//@ has 'foo/struct.Bar.html'
+//@ has - '//*[@id="main-content"]//pre[@class="language-whatever hoho-c"]' 'main;'
+//@ has - '//*[@id="main-content"]//pre[@class="language-whatever2 haha-c"]' 'main;'
+//@ has - '//*[@id="main-content"]//pre[@class="language-whatever4 huhu-c"]' 'main;'
 
 /// ```{class=hoho-c},whatever
 /// main;
diff --git a/tests/rustdoc/decl-line-wrapping-empty-arg-list.rs b/tests/rustdoc/decl-line-wrapping-empty-arg-list.rs
index 4cfb87496b4..635c7762a53 100644
--- a/tests/rustdoc/decl-line-wrapping-empty-arg-list.rs
+++ b/tests/rustdoc/decl-line-wrapping-empty-arg-list.rs
@@ -5,8 +5,8 @@
 
 pub struct Padding00000000000000000000000000000000000000000000000000000000000000000000000000000000;
 
-// @has 'decl_line_wrapping_empty_arg_list/fn.create.html'
-// @snapshot decl - '//pre[@class="rust item-decl"]'
+//@ has 'decl_line_wrapping_empty_arg_list/fn.create.html'
+//@ snapshot decl - '//pre[@class="rust item-decl"]'
 pub fn create() -> Padding00000000000000000000000000000000000000000000000000000000000000000000000000000000 {
     loop {}
 }
diff --git a/tests/rustdoc/decl-trailing-whitespace.rs b/tests/rustdoc/decl-trailing-whitespace.rs
index 66783774308..9fa01f3216c 100644
--- a/tests/rustdoc/decl-trailing-whitespace.rs
+++ b/tests/rustdoc/decl-trailing-whitespace.rs
@@ -4,10 +4,10 @@
 
 pub struct Error;
 
-// @has 'foo/trait.Write.html'
+//@ has 'foo/trait.Write.html'
 
 pub trait Write {
-    // @snapshot 'declaration' - '//*[@class="rust item-decl"]//code'
+    //@ snapshot 'declaration' - '//*[@class="rust item-decl"]//code'
     fn poll_write(
         self,
         cx: &mut Option<String>,
diff --git a/tests/rustdoc/decl_macro.rs b/tests/rustdoc/decl_macro.rs
index 116fa15d749..da471e7c224 100644
--- a/tests/rustdoc/decl_macro.rs
+++ b/tests/rustdoc/decl_macro.rs
@@ -2,25 +2,25 @@
 
 #![feature(decl_macro)]
 
-// @has decl_macro/macro.my_macro.html //pre 'pub macro my_macro() {'
-// @has - //pre '...'
-// @has - //pre '}'
+//@ has decl_macro/macro.my_macro.html //pre 'pub macro my_macro() {'
+//@ has - //pre '...'
+//@ has - //pre '}'
 pub macro my_macro() {
 
 }
 
-// @has decl_macro/macro.my_macro_2.html //pre 'pub macro my_macro_2($($tok:tt)*) {'
-// @has - //pre '...'
-// @has - //pre '}'
+//@ has decl_macro/macro.my_macro_2.html //pre 'pub macro my_macro_2($($tok:tt)*) {'
+//@ has - //pre '...'
+//@ has - //pre '}'
 pub macro my_macro_2($($tok:tt)*) {
 
 }
 
-// @has decl_macro/macro.my_macro_multi.html //pre 'pub macro my_macro_multi {'
-// @has - //pre '(_) => { ... },'
-// @has - //pre '($foo:ident . $bar:expr) => { ... },'
-// @has - //pre '($($foo:literal),+) => { ... },'
-// @has - //pre '}'
+//@ has decl_macro/macro.my_macro_multi.html //pre 'pub macro my_macro_multi {'
+//@ has - //pre '(_) => { ... },'
+//@ has - //pre '($foo:ident . $bar:expr) => { ... },'
+//@ has - //pre '($($foo:literal),+) => { ... },'
+//@ has - //pre '}'
 pub macro my_macro_multi {
     (_) => {
 
@@ -33,21 +33,21 @@ pub macro my_macro_multi {
     }
 }
 
-// @has decl_macro/macro.by_example_single.html //pre 'pub macro by_example_single($foo:expr) {'
-// @has - //pre '...'
-// @has - //pre '}'
+//@ has decl_macro/macro.by_example_single.html //pre 'pub macro by_example_single($foo:expr) {'
+//@ has - //pre '...'
+//@ has - //pre '}'
 pub macro by_example_single {
     ($foo:expr) => {}
 }
 
 mod a {
     mod b {
-        // @has decl_macro/a/b/macro.by_example_vis.html //pre 'pub(super) macro by_example_vis($foo:expr) {'
+        //@ has decl_macro/a/b/macro.by_example_vis.html //pre 'pub(super) macro by_example_vis($foo:expr) {'
         pub(in super) macro by_example_vis {
             ($foo:expr) => {}
         }
         mod c {
-            // @has decl_macro/a/b/c/macro.by_example_vis_named.html //pre 'pub(in a) macro by_example_vis_named($foo:expr) {'
+            //@ has decl_macro/a/b/c/macro.by_example_vis_named.html //pre 'pub(in a) macro by_example_vis_named($foo:expr) {'
             pub(in a) macro by_example_vis_named {
                 ($foo:expr) => {}
             }
diff --git a/tests/rustdoc/decl_macro_priv.rs b/tests/rustdoc/decl_macro_priv.rs
index 2a890e739f2..d87c8d22f2d 100644
--- a/tests/rustdoc/decl_macro_priv.rs
+++ b/tests/rustdoc/decl_macro_priv.rs
@@ -2,13 +2,13 @@
 
 #![feature(decl_macro)]
 
-// @has decl_macro_priv/macro.crate_macro.html //pre 'pub(crate) macro crate_macro() {'
-// @has - //pre '...'
-// @has - //pre '}'
+//@ has decl_macro_priv/macro.crate_macro.html //pre 'pub(crate) macro crate_macro() {'
+//@ has - //pre '...'
+//@ has - //pre '}'
 pub(crate) macro crate_macro() {}
 
-// @has decl_macro_priv/macro.priv_macro.html //pre 'macro priv_macro() {'
-// @!has - //pre 'pub macro priv_macro() {'
-// @has - //pre '...'
-// @has - //pre '}'
+//@ has decl_macro_priv/macro.priv_macro.html //pre 'macro priv_macro() {'
+//@ !has - //pre 'pub macro priv_macro() {'
+//@ has - //pre '...'
+//@ has - //pre '}'
 macro priv_macro() {}
diff --git a/tests/rustdoc/deduplicate-glob-import-impl-21474.rs b/tests/rustdoc/deduplicate-glob-import-impl-21474.rs
index 2a675b4b6ef..5812d414997 100644
--- a/tests/rustdoc/deduplicate-glob-import-impl-21474.rs
+++ b/tests/rustdoc/deduplicate-glob-import-impl-21474.rs
@@ -9,6 +9,6 @@ mod inner {
 
 pub trait Blah { }
 
-// @count issue_21474/struct.What.html \
+//@ count issue_21474/struct.What.html \
 //        '//*[@id="trait-implementations-list"]//*[@class="impl"]' 1
 pub struct What;
diff --git a/tests/rustdoc/default-theme.rs b/tests/rustdoc/default-theme.rs
index 4167086807c..529b994c3c2 100644
--- a/tests/rustdoc/default-theme.rs
+++ b/tests/rustdoc/default-theme.rs
@@ -1,7 +1,7 @@
 //@ compile-flags: --default-theme ayu
 
-// @has default_theme/index.html
-// @has - '//script[@id="default-settings"]/@data-theme' 'ayu'
-// @has - '//script[@id="default-settings"]/@data-use_system_theme' 'false'
+//@ has default_theme/index.html
+//@ has - '//script[@id="default-settings"]/@data-theme' 'ayu'
+//@ has - '//script[@id="default-settings"]/@data-use_system_theme' 'false'
 
 pub fn whatever() {}
diff --git a/tests/rustdoc/default-trait-method-link.rs b/tests/rustdoc/default-trait-method-link.rs
index 7bcd2a3c149..3e03ecece97 100644
--- a/tests/rustdoc/default-trait-method-link.rs
+++ b/tests/rustdoc/default-trait-method-link.rs
@@ -1,7 +1,7 @@
 #![crate_name = "foo"]
 
-// @has foo/trait.Foo.html '//a[@href="trait.Foo.html#tymethod.req"]' 'req'
-// @has foo/trait.Foo.html '//a[@href="trait.Foo.html#method.prov"]' 'prov'
+//@ has foo/trait.Foo.html '//a[@href="trait.Foo.html#tymethod.req"]' 'req'
+//@ has foo/trait.Foo.html '//a[@href="trait.Foo.html#method.prov"]' 'prov'
 
 /// Always make sure to implement [`req`], but you don't have to implement [`prov`].
 ///
diff --git a/tests/rustdoc/default-trait-method.rs b/tests/rustdoc/default-trait-method.rs
index c8950678164..5a1d256e906 100644
--- a/tests/rustdoc/default-trait-method.rs
+++ b/tests/rustdoc/default-trait-method.rs
@@ -1,45 +1,45 @@
 #![feature(min_specialization)]
 
-// @has default_trait_method/trait.Item.html
+//@ has default_trait_method/trait.Item.html
 pub trait Item {
-    // @has - '//*[@id="tymethod.foo"]' 'fn foo()'
-    // @!has - '//*[@id="tymethod.foo"]' 'default fn foo()'
+    //@ has - '//*[@id="tymethod.foo"]' 'fn foo()'
+    //@ !has - '//*[@id="tymethod.foo"]' 'default fn foo()'
     fn foo();
 
-    // @has - '//*[@id="tymethod.bar"]' 'fn bar()'
-    // @!has - '//*[@id="tymethod.bar"]' 'default fn bar()'
+    //@ has - '//*[@id="tymethod.bar"]' 'fn bar()'
+    //@ !has - '//*[@id="tymethod.bar"]' 'default fn bar()'
     fn bar();
 
-    // @has - '//*[@id="tymethod.baz"]' 'unsafe fn baz()'
-    // @!has - '//*[@id="tymethod.baz"]' 'default unsafe fn baz()'
+    //@ has - '//*[@id="tymethod.baz"]' 'unsafe fn baz()'
+    //@ !has - '//*[@id="tymethod.baz"]' 'default unsafe fn baz()'
     unsafe fn baz();
 
-    // @has - '//*[@id="tymethod.quux"]' 'unsafe fn quux()'
-    // @!has - '//*[@id="tymethod.quux"]' 'default unsafe fn quux()'
+    //@ has - '//*[@id="tymethod.quux"]' 'unsafe fn quux()'
+    //@ !has - '//*[@id="tymethod.quux"]' 'default unsafe fn quux()'
     unsafe fn quux();
 
-    // @has - '//*[@id="method.xyzzy"]' 'fn xyzzy()'
-    // @!has - '//*[@id="method.xyzzy"]' 'default fn xyzzy()'
+    //@ has - '//*[@id="method.xyzzy"]' 'fn xyzzy()'
+    //@ !has - '//*[@id="method.xyzzy"]' 'default fn xyzzy()'
     fn xyzzy() {}
 }
 
-// @has default_trait_method/struct.Foo.html
+//@ has default_trait_method/struct.Foo.html
 pub struct Foo;
 impl Item for Foo {
-    // @has - '//*[@id="method.foo"]' 'default fn foo()'
+    //@ has - '//*[@id="method.foo"]' 'default fn foo()'
     default fn foo() {}
 
-    // @has - '//*[@id="method.bar"]' 'fn bar()'
-    // @!has - '//*[@id="method.bar"]' 'default fn bar()'
+    //@ has - '//*[@id="method.bar"]' 'fn bar()'
+    //@ !has - '//*[@id="method.bar"]' 'default fn bar()'
     fn bar() {}
 
-    // @has - '//*[@id="method.baz"]' 'default unsafe fn baz()'
+    //@ has - '//*[@id="method.baz"]' 'default unsafe fn baz()'
     default unsafe fn baz() {}
 
-    // @has - '//*[@id="method.quux"]' 'unsafe fn quux()'
-    // @!has - '//*[@id="method.quux"]' 'default unsafe fn quux()'
+    //@ has - '//*[@id="method.quux"]' 'unsafe fn quux()'
+    //@ !has - '//*[@id="method.quux"]' 'default unsafe fn quux()'
     unsafe fn quux() {}
 
-    // @has - '//*[@id="method.xyzzy"]' 'fn xyzzy()'
-    // @!has - '//*[@id="method.xyzzy"]' 'default fn xyzzy()'
+    //@ has - '//*[@id="method.xyzzy"]' 'fn xyzzy()'
+    //@ !has - '//*[@id="method.xyzzy"]' 'default fn xyzzy()'
 }
diff --git a/tests/rustdoc/deprecated-future-staged-api.rs b/tests/rustdoc/deprecated-future-staged-api.rs
index 64dfd893050..1bb44e2a520 100644
--- a/tests/rustdoc/deprecated-future-staged-api.rs
+++ b/tests/rustdoc/deprecated-future-staged-api.rs
@@ -1,17 +1,17 @@
 #![feature(staged_api)]
 #![stable(feature = "deprecated_future_staged_api", since = "1.0.0")]
 
-// @has deprecated_future_staged_api/index.html '//*[@class="stab deprecated"]' \
+//@ has deprecated_future_staged_api/index.html '//*[@class="stab deprecated"]' \
 //      'Deprecation planned'
-// @has deprecated_future_staged_api/struct.S1.html '//*[@class="stab deprecated"]' \
+//@ has deprecated_future_staged_api/struct.S1.html '//*[@class="stab deprecated"]' \
 //      'Deprecating in 99.99.99: effectively never'
 #[deprecated(since = "99.99.99", note = "effectively never")]
 #[stable(feature = "deprecated_future_staged_api", since = "1.0.0")]
 pub struct S1;
 
-// @has deprecated_future_staged_api/index.html '//*[@class="stab deprecated"]' \
+//@ has deprecated_future_staged_api/index.html '//*[@class="stab deprecated"]' \
 //      'Deprecation planned'
-// @has deprecated_future_staged_api/struct.S2.html '//*[@class="stab deprecated"]' \
+//@ has deprecated_future_staged_api/struct.S2.html '//*[@class="stab deprecated"]' \
 //      'Deprecating in a future version: literally never'
 #[deprecated(since = "TBD", note = "literally never")]
 #[stable(feature = "deprecated_future_staged_api", since = "1.0.0")]
diff --git a/tests/rustdoc/deprecated-future.rs b/tests/rustdoc/deprecated-future.rs
index 7db8cc60281..8e669e43bf7 100644
--- a/tests/rustdoc/deprecated-future.rs
+++ b/tests/rustdoc/deprecated-future.rs
@@ -1,6 +1,6 @@
-// @has deprecated_future/index.html '//*[@class="stab deprecated"]' \
+//@ has deprecated_future/index.html '//*[@class="stab deprecated"]' \
 //      'Deprecated'
-// @has deprecated_future/struct.S.html '//*[@class="stab deprecated"]' \
+//@ has deprecated_future/struct.S.html '//*[@class="stab deprecated"]' \
 //      'Deprecated since 99.99.99: effectively never'
 #[deprecated(since = "99.99.99", note = "effectively never")]
 pub struct S;
diff --git a/tests/rustdoc/deprecated-impls.rs b/tests/rustdoc/deprecated-impls.rs
index e419d2631f6..a57f26ec7fd 100644
--- a/tests/rustdoc/deprecated-impls.rs
+++ b/tests/rustdoc/deprecated-impls.rs
@@ -1,19 +1,19 @@
 #![crate_name = "foo"]
 
-// @has foo/struct.Foo0.html
+//@ has foo/struct.Foo0.html
 pub struct Foo0;
 
 impl Foo0 {
-    // @has - '//*[@class="stab deprecated"]' 'Deprecated since 1.0.1: fn_with_doc'
-    // @hasraw - 'fn_with_doc short'
-    // @hasraw - 'fn_with_doc full'
+    //@ has - '//*[@class="stab deprecated"]' 'Deprecated since 1.0.1: fn_with_doc'
+    //@ hasraw - 'fn_with_doc short'
+    //@ hasraw - 'fn_with_doc full'
     /// fn_with_doc short
     ///
     /// fn_with_doc full
     #[deprecated(since = "1.0.1", note = "fn_with_doc")]
     pub fn fn_with_doc() {}
 
-    // @has - '//*[@class="stab deprecated"]' 'Deprecated since 1.0.2: fn_without_doc'
+    //@ has - '//*[@class="stab deprecated"]' 'Deprecated since 1.0.2: fn_without_doc'
     #[deprecated(since = "1.0.2", note = "fn_without_doc")]
     pub fn fn_without_doc() {}
 }
@@ -47,72 +47,72 @@ pub trait Bar {
     fn fn_def_def_without_doc() {}
 }
 
-// @has foo/struct.Foo1.html
+//@ has foo/struct.Foo1.html
 pub struct Foo1;
 
 impl Bar for Foo1 {
-    // @has - '//*[@class="stab deprecated"]' 'Deprecated since 1.0.3: fn_empty_with_doc'
-    // @hasraw - 'fn_empty_with_doc_impl short'
-    // @hasraw - 'fn_empty_with_doc_impl full'
+    //@ has - '//*[@class="stab deprecated"]' 'Deprecated since 1.0.3: fn_empty_with_doc'
+    //@ hasraw - 'fn_empty_with_doc_impl short'
+    //@ hasraw - 'fn_empty_with_doc_impl full'
     /// fn_empty_with_doc_impl short
     ///
     /// fn_empty_with_doc_impl full
     fn fn_empty_with_doc() {}
 
-    // @has - '//*[@class="stab deprecated"]' 'Deprecated since 1.0.4: fn_empty_without_doc'
+    //@ has - '//*[@class="stab deprecated"]' 'Deprecated since 1.0.4: fn_empty_without_doc'
     fn fn_empty_without_doc() {}
 
-    // @has - '//*[@class="stab deprecated"]' 'Deprecated since 1.0.5: fn_def_with_doc'
-    // @hasraw - 'fn_def_with_doc_impl short'
-    // @hasraw - 'fn_def_with_doc_impl full'
+    //@ has - '//*[@class="stab deprecated"]' 'Deprecated since 1.0.5: fn_def_with_doc'
+    //@ hasraw - 'fn_def_with_doc_impl short'
+    //@ hasraw - 'fn_def_with_doc_impl full'
     /// fn_def_with_doc_impl short
     ///
     /// fn_def_with_doc_impl full
     fn fn_def_with_doc() {}
 
-    // @has - '//*[@class="stab deprecated"]' 'Deprecated since 1.0.6: fn_def_without_doc'
+    //@ has - '//*[@class="stab deprecated"]' 'Deprecated since 1.0.6: fn_def_without_doc'
     fn fn_def_without_doc() {}
 
-    // @has - '//*[@class="stab deprecated"]' 'Deprecated since 1.0.7: fn_def_def_with_doc'
-    // @hasraw - 'fn_def_def_with_doc short'
-    // @!hasraw - 'fn_def_def_with_doc full'
+    //@ has - '//*[@class="stab deprecated"]' 'Deprecated since 1.0.7: fn_def_def_with_doc'
+    //@ hasraw - 'fn_def_def_with_doc short'
+    //@ !hasraw - 'fn_def_def_with_doc full'
 
-    // @has - '//*[@class="stab deprecated"]' 'Deprecated since 1.0.8: fn_def_def_without_doc'
+    //@ has - '//*[@class="stab deprecated"]' 'Deprecated since 1.0.8: fn_def_def_without_doc'
 }
 
-// @has foo/struct.Foo2.html
+//@ has foo/struct.Foo2.html
 pub struct Foo2;
 
 impl Bar for Foo2 {
-    // @has - '//*[@class="stab deprecated"]' 'Deprecated since 1.0.3: fn_empty_with_doc'
-    // @hasraw - 'fn_empty_with_doc short'
-    // @!hasraw - 'fn_empty_with_doc full'
+    //@ has - '//*[@class="stab deprecated"]' 'Deprecated since 1.0.3: fn_empty_with_doc'
+    //@ hasraw - 'fn_empty_with_doc short'
+    //@ !hasraw - 'fn_empty_with_doc full'
     fn fn_empty_with_doc() {}
 
-    // @has - '//*[@class="stab deprecated"]' 'Deprecated since 1.0.4: fn_empty_without_doc'
-    // @hasraw - 'fn_empty_without_doc_impl short'
-    // @hasraw - 'fn_empty_without_doc_impl full'
+    //@ has - '//*[@class="stab deprecated"]' 'Deprecated since 1.0.4: fn_empty_without_doc'
+    //@ hasraw - 'fn_empty_without_doc_impl short'
+    //@ hasraw - 'fn_empty_without_doc_impl full'
     /// fn_empty_without_doc_impl short
     ///
     /// fn_empty_without_doc_impl full
     fn fn_empty_without_doc() {}
 
-    // @has - '//*[@class="stab deprecated"]' 'Deprecated since 1.0.5: fn_def_with_doc'
-    // @hasraw - 'fn_def_with_doc short'
-    // @!hasraw - 'fn_def_with_doc full'
+    //@ has - '//*[@class="stab deprecated"]' 'Deprecated since 1.0.5: fn_def_with_doc'
+    //@ hasraw - 'fn_def_with_doc short'
+    //@ !hasraw - 'fn_def_with_doc full'
     fn fn_def_with_doc() {}
 
-    // @has - '//*[@class="stab deprecated"]' 'Deprecated since 1.0.6: fn_def_without_doc'
-    // @hasraw - 'fn_def_without_doc_impl short'
-    // @hasraw - 'fn_def_without_doc_impl full'
+    //@ has - '//*[@class="stab deprecated"]' 'Deprecated since 1.0.6: fn_def_without_doc'
+    //@ hasraw - 'fn_def_without_doc_impl short'
+    //@ hasraw - 'fn_def_without_doc_impl full'
     /// fn_def_without_doc_impl short
     ///
     /// fn_def_without_doc_impl full
     fn fn_def_without_doc() {}
 
-    // @has - '//*[@class="stab deprecated"]' 'Deprecated since 1.0.7: fn_def_def_with_doc'
-    // @hasraw - 'fn_def_def_with_doc short'
-    // @!hasraw - 'fn_def_def_with_doc full'
+    //@ has - '//*[@class="stab deprecated"]' 'Deprecated since 1.0.7: fn_def_def_with_doc'
+    //@ hasraw - 'fn_def_def_with_doc short'
+    //@ !hasraw - 'fn_def_def_with_doc full'
 
-    // @has - '//*[@class="stab deprecated"]' 'Deprecated since 1.0.8: fn_def_def_without_doc'
+    //@ has - '//*[@class="stab deprecated"]' 'Deprecated since 1.0.8: fn_def_def_without_doc'
 }
diff --git a/tests/rustdoc/deprecated.rs b/tests/rustdoc/deprecated.rs
index 9c9c0945b8f..b39da9b440a 100644
--- a/tests/rustdoc/deprecated.rs
+++ b/tests/rustdoc/deprecated.rs
@@ -1,33 +1,33 @@
-// @has deprecated/index.html '//*[@class="item-name"]/span[@class="stab deprecated"]' \
+//@ has deprecated/index.html '//*[@class="item-name"]/span[@class="stab deprecated"]' \
 //      'Deprecated'
-// @has - '//*[@class="desc docblock-short"]' 'Deprecated docs'
+//@ has - '//*[@class="desc docblock-short"]' 'Deprecated docs'
 
-// @has deprecated/struct.S.html '//*[@class="stab deprecated"]' \
+//@ has deprecated/struct.S.html '//*[@class="stab deprecated"]' \
 //      'Deprecated since 1.0.0: text'
 /// Deprecated docs
 #[deprecated(since = "1.0.0", note = "text")]
 pub struct S;
 
-// @matches deprecated/index.html '//*[@class="desc docblock-short"]' '^Docs'
+//@ matches deprecated/index.html '//*[@class="desc docblock-short"]' '^Docs'
 /// Docs
 pub struct T;
 
-// @matches deprecated/struct.U.html '//*[@class="stab deprecated"]' \
+//@ matches deprecated/struct.U.html '//*[@class="stab deprecated"]' \
 //      'Deprecated since 1.0.0$'
 #[deprecated(since = "1.0.0")]
 pub struct U;
 
-// @matches deprecated/struct.V.html '//*[@class="stab deprecated"]' \
+//@ matches deprecated/struct.V.html '//*[@class="stab deprecated"]' \
 //      'Deprecated: text$'
 #[deprecated(note = "text")]
 pub struct V;
 
-// @matches deprecated/struct.W.html '//*[@class="stab deprecated"]' \
+//@ matches deprecated/struct.W.html '//*[@class="stab deprecated"]' \
 //      'Deprecated$'
 #[deprecated]
 pub struct W;
 
-// @matches deprecated/struct.X.html '//*[@class="stab deprecated"]' \
+//@ matches deprecated/struct.X.html '//*[@class="stab deprecated"]' \
 //      'Deprecated: shorthand reason: code$'
 #[deprecated = "shorthand reason: `code`"]
 pub struct X;
diff --git a/tests/rustdoc/deref-methods-19190-foreign-type.rs b/tests/rustdoc/deref-methods-19190-foreign-type.rs
index c8326992115..7ac0521eb29 100644
--- a/tests/rustdoc/deref-methods-19190-foreign-type.rs
+++ b/tests/rustdoc/deref-methods-19190-foreign-type.rs
@@ -11,6 +11,6 @@ impl Deref for Bar {
     fn deref(&self) -> &String { loop {} }
 }
 
-// @has issue_19190_2/struct.Bar.html
-// @!has - '//*[@id="method.new"]' 'fn new() -> String'
-// @has - '//*[@id="method.as_str"]' 'fn as_str(&self) -> &str'
+//@ has issue_19190_2/struct.Bar.html
+//@ !has - '//*[@id="method.new"]' 'fn new() -> String'
+//@ has - '//*[@id="method.as_str"]' 'fn as_str(&self) -> &str'
diff --git a/tests/rustdoc/deref-methods-19190-inline.rs b/tests/rustdoc/deref-methods-19190-inline.rs
index ef31cc70d93..942edbd5aaf 100644
--- a/tests/rustdoc/deref-methods-19190-inline.rs
+++ b/tests/rustdoc/deref-methods-19190-inline.rs
@@ -9,19 +9,19 @@ extern crate issue_19190_3;
 use std::ops::Deref;
 use issue_19190_3::Baz;
 
-// @has issue_19190_3/struct.Foo.html
-// @has - '//*[@id="method.as_str"]' 'fn as_str(&self) -> &str'
-// @!has - '//*[@id="method.new"]' 'fn new() -> String'
+//@ has issue_19190_3/struct.Foo.html
+//@ has - '//*[@id="method.as_str"]' 'fn as_str(&self) -> &str'
+//@ !has - '//*[@id="method.new"]' 'fn new() -> String'
 pub use issue_19190_3::Foo;
 
-// @has issue_19190_3/struct.Bar.html
-// @has - '//*[@id="method.baz"]' 'fn baz(&self)'
-// @!has - '//*[@id="method.static_baz"]' 'fn static_baz()'
+//@ has issue_19190_3/struct.Bar.html
+//@ has - '//*[@id="method.baz"]' 'fn baz(&self)'
+//@ !has - '//*[@id="method.static_baz"]' 'fn static_baz()'
 pub use issue_19190_3::Bar;
 
-// @has issue_19190_3/struct.MyBar.html
-// @has - '//*[@id="method.baz"]' 'fn baz(&self)'
-// @!has - '//*[@id="method.static_baz"]' 'fn static_baz()'
+//@ has issue_19190_3/struct.MyBar.html
+//@ has - '//*[@id="method.baz"]' 'fn baz(&self)'
+//@ !has - '//*[@id="method.static_baz"]' 'fn static_baz()'
 pub struct MyBar;
 
 impl Deref for MyBar {
diff --git a/tests/rustdoc/deref-methods-19190.rs b/tests/rustdoc/deref-methods-19190.rs
index 4c274d82ff7..ea10ac3b678 100644
--- a/tests/rustdoc/deref-methods-19190.rs
+++ b/tests/rustdoc/deref-methods-19190.rs
@@ -16,8 +16,8 @@ impl Deref for Bar {
     fn deref(&self) -> &Foo { loop {} }
 }
 
-// @has issue_19190/struct.Bar.html
-// @has - '//*[@id="method.foo"]//h4[@class="code-header"]' 'fn foo(&self)'
-// @has - '//*[@id="method.foo"]' 'fn foo(&self)'
-// @!has - '//*[@id="method.static_foo"]//h4[@class="code-header"]' 'fn static_foo()'
-// @!has - '//*[@id="method.static_foo"]' 'fn static_foo()'
+//@ has issue_19190/struct.Bar.html
+//@ has - '//*[@id="method.foo"]//h4[@class="code-header"]' 'fn foo(&self)'
+//@ has - '//*[@id="method.foo"]' 'fn foo(&self)'
+//@ !has - '//*[@id="method.static_foo"]//h4[@class="code-header"]' 'fn static_foo()'
+//@ !has - '//*[@id="method.static_foo"]' 'fn static_foo()'
diff --git a/tests/rustdoc/deref-mut-35169-2.rs b/tests/rustdoc/deref-mut-35169-2.rs
index c82323ddc6a..37462790f2e 100644
--- a/tests/rustdoc/deref-mut-35169-2.rs
+++ b/tests/rustdoc/deref-mut-35169-2.rs
@@ -26,18 +26,18 @@ impl DerefMut for Bar {
     fn deref_mut(&mut self) -> &mut Foo { loop {} }
 }
 
-// @has foo/struct.Bar.html
-// @has - '//*[@id="method.by_ref"]//h4[@class="code-header"]' 'fn by_ref(&self)'
-// @has - '//*[@id="method.by_ref"]' 'fn by_ref(&self)'
-// @has - '//*[@id="method.by_explicit_ref"]//h4[@class="code-header"]' 'fn by_explicit_ref(self: &Foo)'
-// @has - '//*[@id="method.by_explicit_ref"]' 'fn by_explicit_ref(self: &Foo)'
-// @has - '//*[@id="method.by_mut_ref"]//h4[@class="code-header"]' 'fn by_mut_ref(&mut self)'
-// @has - '//*[@id="method.by_mut_ref"]' 'fn by_mut_ref(&mut self)'
-// @has - '//*[@id="method.by_explicit_mut_ref"]//h4[@class="code-header"]' 'fn by_explicit_mut_ref(self: &mut Foo)'
-// @has - '//*[@id="method.by_explicit_mut_ref"]' 'fn by_explicit_mut_ref(self: &mut Foo)'
-// @!has - '//*[@id="method.by_explicit_box"]//h4[@class="code-header"]' 'fn by_explicit_box(self: Box<Foo>)'
-// @!has - '//*[@id="method.by_explicit_box"]' 'fn by_explicit_box(self: Box<Foo>)'
-// @!has - '//*[@id="method.by_explicit_self_box"]//h4[@class="code-header"]' 'fn by_explicit_self_box(self: Box<Self>)'
-// @!has - '//*[@id="method.by_explicit_self_box"]' 'fn by_explicit_self_box(self: Box<Self>)'
-// @!has - '//*[@id="method.static_foo"]//h4[@class="code-header"]' 'fn static_foo()'
-// @!has - '//*[@id="method.static_foo"]' 'fn static_foo()'
+//@ has foo/struct.Bar.html
+//@ has - '//*[@id="method.by_ref"]//h4[@class="code-header"]' 'fn by_ref(&self)'
+//@ has - '//*[@id="method.by_ref"]' 'fn by_ref(&self)'
+//@ has - '//*[@id="method.by_explicit_ref"]//h4[@class="code-header"]' 'fn by_explicit_ref(self: &Foo)'
+//@ has - '//*[@id="method.by_explicit_ref"]' 'fn by_explicit_ref(self: &Foo)'
+//@ has - '//*[@id="method.by_mut_ref"]//h4[@class="code-header"]' 'fn by_mut_ref(&mut self)'
+//@ has - '//*[@id="method.by_mut_ref"]' 'fn by_mut_ref(&mut self)'
+//@ has - '//*[@id="method.by_explicit_mut_ref"]//h4[@class="code-header"]' 'fn by_explicit_mut_ref(self: &mut Foo)'
+//@ has - '//*[@id="method.by_explicit_mut_ref"]' 'fn by_explicit_mut_ref(self: &mut Foo)'
+//@ !has - '//*[@id="method.by_explicit_box"]//h4[@class="code-header"]' 'fn by_explicit_box(self: Box<Foo>)'
+//@ !has - '//*[@id="method.by_explicit_box"]' 'fn by_explicit_box(self: Box<Foo>)'
+//@ !has - '//*[@id="method.by_explicit_self_box"]//h4[@class="code-header"]' 'fn by_explicit_self_box(self: Box<Self>)'
+//@ !has - '//*[@id="method.by_explicit_self_box"]' 'fn by_explicit_self_box(self: Box<Self>)'
+//@ !has - '//*[@id="method.static_foo"]//h4[@class="code-header"]' 'fn static_foo()'
+//@ !has - '//*[@id="method.static_foo"]' 'fn static_foo()'
diff --git a/tests/rustdoc/deref-mut-35169.rs b/tests/rustdoc/deref-mut-35169.rs
index 44afaf2e903..07a3754f795 100644
--- a/tests/rustdoc/deref-mut-35169.rs
+++ b/tests/rustdoc/deref-mut-35169.rs
@@ -21,18 +21,18 @@ impl Deref for Bar {
     fn deref(&self) -> &Foo { loop {} }
 }
 
-// @has foo/struct.Bar.html
-// @has - '//*[@id="method.by_ref"]//h4[@class="code-header"]' 'fn by_ref(&self)'
-// @has - '//*[@id="method.by_ref"]' 'fn by_ref(&self)'
-// @has - '//*[@id="method.by_explicit_ref"]//h4[@class="code-header"]' 'fn by_explicit_ref(self: &Foo)'
-// @has - '//*[@id="method.by_explicit_ref"]' 'fn by_explicit_ref(self: &Foo)'
-// @!has - '//*[@id="method.by_mut_ref"]//h4[@class="code-header"]' 'fn by_mut_ref(&mut self)'
-// @!has - '//*[@id="method.by_mut_ref"]' 'fn by_mut_ref(&mut self)'
-// @!has - '//*[@id="method.by_explicit_mut_ref"]//h4[@class="code-header"]' 'fn by_explicit_mut_ref(self: &mut Foo)'
-// @!has - '//*[@id="method.by_explicit_mut_ref"]' 'fn by_explicit_mut_ref(self: &mut Foo)'
-// @!has - '//*[@id="method.by_explicit_box"]//h4[@class="code-header"]' 'fn by_explicit_box(self: Box<Foo>)'
-// @!has - '//*[@id="method.by_explicit_box"]' 'fn by_explicit_box(self: Box<Foo>)'
-// @!has - '//*[@id="method.by_explicit_self_box"]//h4[@class="code-header"]' 'fn by_explicit_self_box(self: Box<Self>)'
-// @!has - '//*[@id="method.by_explicit_self_box"]' 'fn by_explicit_self_box(self: Box<Self>)'
-// @!has - '//*[@id="method.static_foo"]//h4[@class="code-header"]' 'fn static_foo()'
-// @!has - '//*[@id="method.static_foo"]' 'fn static_foo()'
+//@ has foo/struct.Bar.html
+//@ has - '//*[@id="method.by_ref"]//h4[@class="code-header"]' 'fn by_ref(&self)'
+//@ has - '//*[@id="method.by_ref"]' 'fn by_ref(&self)'
+//@ has - '//*[@id="method.by_explicit_ref"]//h4[@class="code-header"]' 'fn by_explicit_ref(self: &Foo)'
+//@ has - '//*[@id="method.by_explicit_ref"]' 'fn by_explicit_ref(self: &Foo)'
+//@ !has - '//*[@id="method.by_mut_ref"]//h4[@class="code-header"]' 'fn by_mut_ref(&mut self)'
+//@ !has - '//*[@id="method.by_mut_ref"]' 'fn by_mut_ref(&mut self)'
+//@ !has - '//*[@id="method.by_explicit_mut_ref"]//h4[@class="code-header"]' 'fn by_explicit_mut_ref(self: &mut Foo)'
+//@ !has - '//*[@id="method.by_explicit_mut_ref"]' 'fn by_explicit_mut_ref(self: &mut Foo)'
+//@ !has - '//*[@id="method.by_explicit_box"]//h4[@class="code-header"]' 'fn by_explicit_box(self: Box<Foo>)'
+//@ !has - '//*[@id="method.by_explicit_box"]' 'fn by_explicit_box(self: Box<Foo>)'
+//@ !has - '//*[@id="method.by_explicit_self_box"]//h4[@class="code-header"]' 'fn by_explicit_self_box(self: Box<Self>)'
+//@ !has - '//*[@id="method.by_explicit_self_box"]' 'fn by_explicit_self_box(self: Box<Self>)'
+//@ !has - '//*[@id="method.static_foo"]//h4[@class="code-header"]' 'fn static_foo()'
+//@ !has - '//*[@id="method.static_foo"]' 'fn static_foo()'
diff --git a/tests/rustdoc/deref/deref-const-fn.rs b/tests/rustdoc/deref/deref-const-fn.rs
index 85c2f2934e0..fa1e4730071 100644
--- a/tests/rustdoc/deref/deref-const-fn.rs
+++ b/tests/rustdoc/deref/deref-const-fn.rs
@@ -7,13 +7,13 @@
 
 #![stable(feature = "rust1", since = "1.0.0")]
 
-// @has 'foo/struct.Bar.html'
+//@ has 'foo/struct.Bar.html'
 #[stable(feature = "rust1", since = "1.0.0")]
 pub struct Bar;
 
 impl Bar {
-    // @has - '//*[@id="method.len"]' 'pub const fn len(&self) -> usize'
-    // @has - '//*[@id="method.len"]//span[@class="since"]' 'const: 1.0.0'
+    //@ has - '//*[@id="method.len"]' 'pub const fn len(&self) -> usize'
+    //@ has - '//*[@id="method.len"]//span[@class="since"]' 'const: 1.0.0'
     #[stable(feature = "rust1", since = "1.0.0")]
     #[rustc_const_stable(feature = "rust1", since = "1.0.0")]
     pub const fn len(&self) -> usize { 0 }
@@ -24,10 +24,10 @@ pub struct Foo {
     value: Bar,
 }
 
-// @has 'foo/struct.Foo.html'
-// @has - '//*[@id="method.len"]' 'pub fn len(&self) -> usize'
-// @has - '//*[@id="method.len"]//span[@class="since"]' '1.0.0'
-// @!has - '//*[@id="method.len"]//span[@class="since"]' '(const: 1.0.0)'
+//@ has 'foo/struct.Foo.html'
+//@ has - '//*[@id="method.len"]' 'pub fn len(&self) -> usize'
+//@ has - '//*[@id="method.len"]//span[@class="since"]' '1.0.0'
+//@ !has - '//*[@id="method.len"]//span[@class="since"]' '(const: 1.0.0)'
 #[stable(feature = "rust1", since = "1.0.0")]
 impl std::ops::Deref for Foo {
     type Target = Bar;
diff --git a/tests/rustdoc/deref/deref-multiple-impl-blocks.rs b/tests/rustdoc/deref/deref-multiple-impl-blocks.rs
index fa3607c5fc1..2ce35627546 100644
--- a/tests/rustdoc/deref/deref-multiple-impl-blocks.rs
+++ b/tests/rustdoc/deref/deref-multiple-impl-blocks.rs
@@ -2,11 +2,11 @@
 
 use std::ops::{Deref, DerefMut};
 
-// @has foo/struct.Vec.html
-// @count - '//h2[@id="deref-methods-Slice"]' 1
-// @count - '//div[@id="deref-methods-Slice-1"]' 1
-// @count - '//div[@id="deref-methods-Slice-1"][@class="impl-items"]' 1
-// @count - '//div[@id="deref-methods-Slice-1"]/div[@class="impl-items"]' 0
+//@ has foo/struct.Vec.html
+//@ count - '//h2[@id="deref-methods-Slice"]' 1
+//@ count - '//div[@id="deref-methods-Slice-1"]' 1
+//@ count - '//div[@id="deref-methods-Slice-1"][@class="impl-items"]' 1
+//@ count - '//div[@id="deref-methods-Slice-1"]/div[@class="impl-items"]' 0
 pub struct Vec;
 
 pub struct Slice;
diff --git a/tests/rustdoc/deref/deref-mut-methods.rs b/tests/rustdoc/deref/deref-mut-methods.rs
index 65681f81245..83214ca3b8a 100644
--- a/tests/rustdoc/deref/deref-mut-methods.rs
+++ b/tests/rustdoc/deref/deref-mut-methods.rs
@@ -8,8 +8,8 @@ impl Foo {
     pub fn foo(&mut self) {}
 }
 
-// @has foo/struct.Bar.html
-// @has - '//*[@class="sidebar-elems"]//*[@class="block deref-methods"]//a[@href="#method.foo"]' 'foo'
+//@ has foo/struct.Bar.html
+//@ has - '//*[@class="sidebar-elems"]//*[@class="block deref-methods"]//a[@href="#method.foo"]' 'foo'
 pub struct Bar {
     foo: Foo,
 }
diff --git a/tests/rustdoc/deref/deref-recursive-pathbuf.rs b/tests/rustdoc/deref/deref-recursive-pathbuf.rs
index 7aee3147ba8..be6b1811503 100644
--- a/tests/rustdoc/deref/deref-recursive-pathbuf.rs
+++ b/tests/rustdoc/deref/deref-recursive-pathbuf.rs
@@ -2,15 +2,15 @@
 // levels and across multiple crates.
 // For `Deref` on non-foreign types, look at `deref-recursive.rs`.
 
-// @has 'foo/struct.Foo.html'
-// @has '-' '//*[@id="deref-methods-PathBuf"]' 'Methods from Deref<Target = PathBuf>'
-// @has '-' '//*[@class="impl-items"]//*[@id="method.as_path"]' 'pub fn as_path(&self)'
-// @has '-' '//*[@id="deref-methods-Path"]' 'Methods from Deref<Target = Path>'
-// @has '-' '//*[@class="impl-items"]//*[@id="method.exists"]' 'pub fn exists(&self)'
-// @has '-' '//div[@class="sidebar-elems"]//h3/a[@href="#deref-methods-PathBuf"]' 'Methods from Deref<Target=PathBuf>'
-// @has '-' '//*[@class="sidebar-elems"]//*[@class="block deref-methods"]//a[@href="#method.as_path"]' 'as_path'
-// @has '-' '//div[@class="sidebar-elems"]//h3/a[@href="#deref-methods-Path"]' 'Methods from Deref<Target=Path>'
-// @has '-' '//*[@class="sidebar-elems"]//*[@class="block deref-methods"]//a[@href="#method.exists"]' 'exists'
+//@ has 'foo/struct.Foo.html'
+//@ has '-' '//*[@id="deref-methods-PathBuf"]' 'Methods from Deref<Target = PathBuf>'
+//@ has '-' '//*[@class="impl-items"]//*[@id="method.as_path"]' 'pub fn as_path(&self)'
+//@ has '-' '//*[@id="deref-methods-Path"]' 'Methods from Deref<Target = Path>'
+//@ has '-' '//*[@class="impl-items"]//*[@id="method.exists"]' 'pub fn exists(&self)'
+//@ has '-' '//div[@class="sidebar-elems"]//h3/a[@href="#deref-methods-PathBuf"]' 'Methods from Deref<Target=PathBuf>'
+//@ has '-' '//*[@class="sidebar-elems"]//*[@class="block deref-methods"]//a[@href="#method.as_path"]' 'as_path'
+//@ has '-' '//div[@class="sidebar-elems"]//h3/a[@href="#deref-methods-Path"]' 'Methods from Deref<Target=Path>'
+//@ has '-' '//*[@class="sidebar-elems"]//*[@class="block deref-methods"]//a[@href="#method.exists"]' 'exists'
 
 #![crate_name = "foo"]
 
diff --git a/tests/rustdoc/deref/deref-recursive.rs b/tests/rustdoc/deref/deref-recursive.rs
index 0436f2f86f5..604ce7a40c0 100644
--- a/tests/rustdoc/deref/deref-recursive.rs
+++ b/tests/rustdoc/deref/deref-recursive.rs
@@ -2,15 +2,15 @@
 // levels if needed.
 // For `Deref` on foreign types, look at `deref-recursive-pathbuf.rs`.
 
-// @has 'foo/struct.Foo.html'
-// @has '-' '//*[@id="deref-methods-Bar"]' 'Methods from Deref<Target = Bar>'
-// @has '-' '//*[@class="impl-items"]//*[@id="method.bar"]' 'pub fn bar(&self)'
-// @has '-' '//*[@id="deref-methods-Baz"]' 'Methods from Deref<Target = Baz>'
-// @has '-' '//*[@class="impl-items"]//*[@id="method.baz"]' 'pub fn baz(&self)'
-// @has '-' '//div[@class="sidebar-elems"]//h3/a[@href="#deref-methods-Bar"]' 'Methods from Deref<Target=Bar>'
-// @has '-' '//*[@class="sidebar-elems"]//section//a[@href="#method.bar"]' 'bar'
-// @has '-' '//div[@class="sidebar-elems"]//h3/a[@href="#deref-methods-Baz"]' 'Methods from Deref<Target=Baz>'
-// @has '-' '//*[@class="sidebar-elems"]//section//a[@href="#method.baz"]' 'baz'
+//@ has 'foo/struct.Foo.html'
+//@ has '-' '//*[@id="deref-methods-Bar"]' 'Methods from Deref<Target = Bar>'
+//@ has '-' '//*[@class="impl-items"]//*[@id="method.bar"]' 'pub fn bar(&self)'
+//@ has '-' '//*[@id="deref-methods-Baz"]' 'Methods from Deref<Target = Baz>'
+//@ has '-' '//*[@class="impl-items"]//*[@id="method.baz"]' 'pub fn baz(&self)'
+//@ has '-' '//div[@class="sidebar-elems"]//h3/a[@href="#deref-methods-Bar"]' 'Methods from Deref<Target=Bar>'
+//@ has '-' '//*[@class="sidebar-elems"]//section//a[@href="#method.bar"]' 'bar'
+//@ has '-' '//div[@class="sidebar-elems"]//h3/a[@href="#deref-methods-Baz"]' 'Methods from Deref<Target=Baz>'
+//@ has '-' '//*[@class="sidebar-elems"]//section//a[@href="#method.baz"]' 'baz'
 
 #![crate_name = "foo"]
 
diff --git a/tests/rustdoc/deref/deref-slice-core.rs b/tests/rustdoc/deref/deref-slice-core.rs
index cccf273a820..3a21c19ddd1 100644
--- a/tests/rustdoc/deref/deref-slice-core.rs
+++ b/tests/rustdoc/deref/deref-slice-core.rs
@@ -5,9 +5,9 @@
 
 use core::ops::Deref;
 
-// @has 'deref_slice_core/struct.MyArray.html'
-// @has '-' '//*[@id="deref-methods-%5BT%5D"]' 'Methods from Deref<Target = [T]>'
-// @has '-' '//*[@class="impl-items"]//*[@id="method.len"]' 'pub fn len(&self)'
+//@ has 'deref_slice_core/struct.MyArray.html'
+//@ has '-' '//*[@id="deref-methods-%5BT%5D"]' 'Methods from Deref<Target = [T]>'
+//@ has '-' '//*[@class="impl-items"]//*[@id="method.len"]' 'pub fn len(&self)'
 
 pub struct MyArray<T> {
     array: [T; 10],
diff --git a/tests/rustdoc/deref/deref-to-primitive.rs b/tests/rustdoc/deref/deref-to-primitive.rs
index 527de780d48..7a5a3cd8fd6 100644
--- a/tests/rustdoc/deref/deref-to-primitive.rs
+++ b/tests/rustdoc/deref/deref-to-primitive.rs
@@ -1,8 +1,8 @@
 #![crate_name = "foo"]
 
-// @has 'foo/struct.Foo.html'
-// @has - '//*[@id="deref-methods-i32"]' 'Methods from Deref<Target = i32>'
-// @has - '//*[@id="deref-methods-i32-1"]//*[@id="associatedconstant.BITS"]/h4' \
+//@ has 'foo/struct.Foo.html'
+//@ has - '//*[@id="deref-methods-i32"]' 'Methods from Deref<Target = i32>'
+//@ has - '//*[@id="deref-methods-i32-1"]//*[@id="associatedconstant.BITS"]/h4' \
 //        'pub const BITS: u32 = 32u32'
 pub struct Foo(i32);
 
diff --git a/tests/rustdoc/deref/deref-typedef.rs b/tests/rustdoc/deref/deref-typedef.rs
index 32424d13eb8..44324cc6f41 100644
--- a/tests/rustdoc/deref/deref-typedef.rs
+++ b/tests/rustdoc/deref/deref-typedef.rs
@@ -1,16 +1,16 @@
 #![crate_name = "foo"]
 
-// @has 'foo/struct.Bar.html'
-// @has '-' '//*[@id="deref-methods-FooJ"]' 'Methods from Deref<Target = FooJ>'
-// @has '-' '//*[@class="impl-items"]//*[@id="method.foo_a"]' 'pub fn foo_a(&self)'
-// @has '-' '//*[@class="impl-items"]//*[@id="method.foo_b"]' 'pub fn foo_b(&self)'
-// @has '-' '//*[@class="impl-items"]//*[@id="method.foo_c"]' 'pub fn foo_c(&self)'
-// @has '-' '//*[@class="impl-items"]//*[@id="method.foo_j"]' 'pub fn foo_j(&self)'
-// @has '-' '//div[@class="sidebar-elems"]//h3/a[@href="#deref-methods-FooJ"]' 'Methods from Deref<Target=FooJ>'
-// @has '-' '//*[@class="sidebar-elems"]//section//a[@href="#method.foo_a"]' 'foo_a'
-// @has '-' '//*[@class="sidebar-elems"]//section//a[@href="#method.foo_b"]' 'foo_b'
-// @has '-' '//*[@class="sidebar-elems"]//section//a[@href="#method.foo_c"]' 'foo_c'
-// @has '-' '//*[@class="sidebar-elems"]//section//a[@href="#method.foo_j"]' 'foo_j'
+//@ has 'foo/struct.Bar.html'
+//@ has '-' '//*[@id="deref-methods-FooJ"]' 'Methods from Deref<Target = FooJ>'
+//@ has '-' '//*[@class="impl-items"]//*[@id="method.foo_a"]' 'pub fn foo_a(&self)'
+//@ has '-' '//*[@class="impl-items"]//*[@id="method.foo_b"]' 'pub fn foo_b(&self)'
+//@ has '-' '//*[@class="impl-items"]//*[@id="method.foo_c"]' 'pub fn foo_c(&self)'
+//@ has '-' '//*[@class="impl-items"]//*[@id="method.foo_j"]' 'pub fn foo_j(&self)'
+//@ has '-' '//div[@class="sidebar-elems"]//h3/a[@href="#deref-methods-FooJ"]' 'Methods from Deref<Target=FooJ>'
+//@ has '-' '//*[@class="sidebar-elems"]//section//a[@href="#method.foo_a"]' 'foo_a'
+//@ has '-' '//*[@class="sidebar-elems"]//section//a[@href="#method.foo_b"]' 'foo_b'
+//@ has '-' '//*[@class="sidebar-elems"]//section//a[@href="#method.foo_c"]' 'foo_c'
+//@ has '-' '//*[@class="sidebar-elems"]//section//a[@href="#method.foo_j"]' 'foo_j'
 
 pub struct FooA;
 pub type FooB = FooA;
diff --git a/tests/rustdoc/deref/escape-deref-methods.rs b/tests/rustdoc/deref/escape-deref-methods.rs
index 66919d73eeb..2e423640f67 100644
--- a/tests/rustdoc/deref/escape-deref-methods.rs
+++ b/tests/rustdoc/deref/escape-deref-methods.rs
@@ -26,8 +26,8 @@ impl Deref for TitleList {
     }
 }
 
-// @has foo/struct.TitleList.html
-// @has - '//div[@class="sidebar-elems"]//h3' 'Methods from Deref<Target=Vec<Title>>'
+//@ has foo/struct.TitleList.html
+//@ has - '//div[@class="sidebar-elems"]//h3' 'Methods from Deref<Target=Vec<Title>>'
 impl DerefMut for TitleList {
     fn deref_mut(&mut self) -> &mut Self::Target {
         &mut self.members
diff --git a/tests/rustdoc/deref/issue-100679-sidebar-links-deref.rs b/tests/rustdoc/deref/issue-100679-sidebar-links-deref.rs
index f09d2320609..44ac08de0b8 100644
--- a/tests/rustdoc/deref/issue-100679-sidebar-links-deref.rs
+++ b/tests/rustdoc/deref/issue-100679-sidebar-links-deref.rs
@@ -11,7 +11,7 @@ impl std::ops::Deref for Vec {
     }
 }
 
-// @has foo/struct.Vec.html '//*[@class="sidebar-elems"]//section//li/a[@href="#method.is_empty"]' \
+//@ has foo/struct.Vec.html '//*[@class="sidebar-elems"]//section//li/a[@href="#method.is_empty"]' \
 //          "is_empty"
 impl Vec {
     pub fn is_empty(&self) -> bool {
@@ -19,9 +19,9 @@ impl Vec {
     }
 }
 
-// @has foo/struct.Vec.html '//*[@class="sidebar-elems"]//section//li/a[@href="#method.is_empty-1"]' \
+//@ has foo/struct.Vec.html '//*[@class="sidebar-elems"]//section//li/a[@href="#method.is_empty-1"]' \
 //          "is_empty"
-// @has foo/struct.Slice.html '//*[@class="sidebar-elems"]//section//li/a[@href="#method.is_empty"]' \
+//@ has foo/struct.Slice.html '//*[@class="sidebar-elems"]//section//li/a[@href="#method.is_empty"]' \
 //          "is_empty"
 impl Slice {
     pub fn is_empty(&self) -> bool {
diff --git a/tests/rustdoc/deref/recursive-deref-sidebar.rs b/tests/rustdoc/deref/recursive-deref-sidebar.rs
index 619f40eff89..0af5326f3dc 100644
--- a/tests/rustdoc/deref/recursive-deref-sidebar.rs
+++ b/tests/rustdoc/deref/recursive-deref-sidebar.rs
@@ -9,13 +9,13 @@ impl B { pub fn foo_b(&self) {} }
 pub struct C {}
 impl C { pub fn foo_c(&self) {} }
 
-// @has recursive_deref_sidebar/struct.A.html '//*[@class="sidebar-elems"]//section' 'foo_b'
+//@ has recursive_deref_sidebar/struct.A.html '//*[@class="sidebar-elems"]//section' 'foo_b'
 impl Deref for A {
     type Target = B;
     fn deref(&self) -> &B { todo!() }
 }
 
-// @has recursive_deref_sidebar/struct.A.html '//*[@class="sidebar-elems"]//section' 'foo_c'
+//@ has recursive_deref_sidebar/struct.A.html '//*[@class="sidebar-elems"]//section' 'foo_c'
 impl Deref for B {
     type Target = C;
     fn deref(&self) -> &C { todo!() }
diff --git a/tests/rustdoc/deref/recursive-deref.rs b/tests/rustdoc/deref/recursive-deref.rs
index aa38485c445..286abef382c 100644
--- a/tests/rustdoc/deref/recursive-deref.rs
+++ b/tests/rustdoc/deref/recursive-deref.rs
@@ -9,8 +9,8 @@ impl C {
     pub fn c(&self) {}
 }
 
-// @has recursive_deref/struct.A.html '//h3[@class="code-header"]' 'impl Deref for A'
-// @has '-' '//*[@class="impl-items"]//*[@id="method.c"]' 'pub fn c(&self)'
+//@ has recursive_deref/struct.A.html '//h3[@class="code-header"]' 'impl Deref for A'
+//@ has '-' '//*[@class="impl-items"]//*[@id="method.c"]' 'pub fn c(&self)'
 impl Deref for A {
     type Target = B;
 
@@ -19,8 +19,8 @@ impl Deref for A {
     }
 }
 
-// @has recursive_deref/struct.B.html '//h3[@class="code-header"]' 'impl Deref for B'
-// @has '-' '//*[@class="impl-items"]//*[@id="method.c"]' 'pub fn c(&self)'
+//@ has recursive_deref/struct.B.html '//h3[@class="code-header"]' 'impl Deref for B'
+//@ has '-' '//*[@class="impl-items"]//*[@id="method.c"]' 'pub fn c(&self)'
 impl Deref for B {
     type Target = C;
 
@@ -29,7 +29,7 @@ impl Deref for B {
     }
 }
 
-// @has recursive_deref/struct.C.html '//h3[@class="code-header"]' 'impl Deref for C'
+//@ has recursive_deref/struct.C.html '//h3[@class="code-header"]' 'impl Deref for C'
 impl Deref for C {
     type Target = B;
 
@@ -49,9 +49,9 @@ impl G {
     pub fn g() {}
 }
 
-// @has recursive_deref/struct.D.html '//h3[@class="code-header"]' 'impl Deref for D'
+//@ has recursive_deref/struct.D.html '//h3[@class="code-header"]' 'impl Deref for D'
 // We also check that `G::g` method isn't rendered because there is no `self` argument.
-// @!has '-' '//*[@id="deref-methods-G"]' ''
+//@ !has '-' '//*[@id="deref-methods-G"]' ''
 impl Deref for D {
     type Target = E;
 
@@ -60,9 +60,9 @@ impl Deref for D {
     }
 }
 
-// @has recursive_deref/struct.E.html '//h3[@class="code-header"]' 'impl Deref for E'
+//@ has recursive_deref/struct.E.html '//h3[@class="code-header"]' 'impl Deref for E'
 // We also check that `G::g` method isn't rendered because there is no `self` argument.
-// @!has '-' '//*[@id="deref-methods-G"]' ''
+//@ !has '-' '//*[@id="deref-methods-G"]' ''
 impl Deref for E {
     type Target = F;
 
@@ -71,9 +71,9 @@ impl Deref for E {
     }
 }
 
-// @has recursive_deref/struct.F.html '//h3[@class="code-header"]' 'impl Deref for F'
+//@ has recursive_deref/struct.F.html '//h3[@class="code-header"]' 'impl Deref for F'
 // We also check that `G::g` method isn't rendered because there is no `self` argument.
-// @!has '-' '//*[@id="deref-methods-G"]' ''
+//@ !has '-' '//*[@id="deref-methods-G"]' ''
 impl Deref for F {
     type Target = G;
 
@@ -82,7 +82,7 @@ impl Deref for F {
     }
 }
 
-// @has recursive_deref/struct.G.html '//h3[@class="code-header"]' 'impl Deref for G'
+//@ has recursive_deref/struct.G.html '//h3[@class="code-header"]' 'impl Deref for G'
 impl Deref for G {
     type Target = E;
 
@@ -100,8 +100,8 @@ impl I {
     pub fn i() {}
 }
 
-// @has recursive_deref/struct.H.html '//h3[@class="code-header"]' 'impl Deref for H'
-// @!has '-' '//*[@id="deref-methods-I"]' ''
+//@ has recursive_deref/struct.H.html '//h3[@class="code-header"]' 'impl Deref for H'
+//@ !has '-' '//*[@id="deref-methods-I"]' ''
 impl Deref for H {
     type Target = I;
 
@@ -110,7 +110,7 @@ impl Deref for H {
     }
 }
 
-// @has recursive_deref/struct.I.html '//h3[@class="code-header"]' 'impl Deref for I'
+//@ has recursive_deref/struct.I.html '//h3[@class="code-header"]' 'impl Deref for I'
 impl Deref for I {
     type Target = H;
 
diff --git a/tests/rustdoc/description.rs b/tests/rustdoc/description.rs
index aabbb4c4c8f..be6ef1dc756 100644
--- a/tests/rustdoc/description.rs
+++ b/tests/rustdoc/description.rs
@@ -5,13 +5,13 @@
 //! This is the contents of the test crate docstring.
 //! It should not show up in the description.
 
-// @has 'foo/index.html' '//meta[@name="description"]/@content' \
+//@ has 'foo/index.html' '//meta[@name="description"]/@content' \
 //   'Description test crate'
-// @!has - '//meta[@name="description"]/@content' 'should not show up'
+//@ !has - '//meta[@name="description"]/@content' 'should not show up'
 
-// @has 'foo/foo_mod/index.html' '//meta[@name="description"]/@content' \
+//@ has 'foo/foo_mod/index.html' '//meta[@name="description"]/@content' \
 //   'First paragraph description.'
-// @!has - '//meta[@name="description"]/@content' 'Second paragraph'
+//@ !has - '//meta[@name="description"]/@content' 'Second paragraph'
 /// First paragraph description.
 ///
 /// Second paragraph should not show up.
@@ -19,12 +19,12 @@ pub mod foo_mod {
     pub struct __Thing {}
 }
 
-// @has 'foo/fn.foo_fn.html' '//meta[@name="description"]/@content' \
+//@ has 'foo/fn.foo_fn.html' '//meta[@name="description"]/@content' \
 //   'Only paragraph.'
 /// Only paragraph.
 pub fn foo_fn() {}
 
-// @has 'foo/fn.bar_fn.html' '//meta[@name="description"]/@content' \
+//@ has 'foo/fn.bar_fn.html' '//meta[@name="description"]/@content' \
 //   'Description with intra-doc link to foo_fn and [nonexistent_item] and foo_fn.'
 #[allow(rustdoc::broken_intra_doc_links)]
 /// Description with intra-doc link to [foo_fn] and [nonexistent_item] and [foo_fn](self::foo_fn).
diff --git a/tests/rustdoc/description_default.rs b/tests/rustdoc/description_default.rs
index 21d8e04d3f9..6a673870bec 100644
--- a/tests/rustdoc/description_default.rs
+++ b/tests/rustdoc/description_default.rs
@@ -1,14 +1,14 @@
 #![crate_name = "foo"]
 
-// @has 'foo/index.html' '//meta[@name="description"]/@content' \
+//@ has 'foo/index.html' '//meta[@name="description"]/@content' \
 //   'API documentation for the Rust `foo` crate.'
 
-// @has 'foo/foo_mod/index.html' '//meta[@name="description"]/@content' \
+//@ has 'foo/foo_mod/index.html' '//meta[@name="description"]/@content' \
 //   'API documentation for the Rust `foo_mod` mod in crate `foo`.'
 pub mod foo_mod {
     pub struct __Thing {}
 }
 
-// @has 'foo/fn.foo_fn.html' '//meta[@name="description"]/@content' \
+//@ has 'foo/fn.foo_fn.html' '//meta[@name="description"]/@content' \
 //   'API documentation for the Rust `foo_fn` fn in crate `foo`.'
 pub fn foo_fn() {}
diff --git a/tests/rustdoc/disambiguate-anchors-32890.rs b/tests/rustdoc/disambiguate-anchors-32890.rs
index d88601d65d3..0b726d5fba4 100644
--- a/tests/rustdoc/disambiguate-anchors-32890.rs
+++ b/tests/rustdoc/disambiguate-anchors-32890.rs
@@ -1,20 +1,20 @@
 // https://github.com/rust-lang/rust/issues/32890
 #![crate_name="issue_32890"]
 
-// @has issue_32890/struct.Foo.html
+//@ has issue_32890/struct.Foo.html
 pub struct Foo<T>(T);
 
 impl Foo<u8> {
-    // @has - '//a[@href="#method.pass"]' 'pass'
+    //@ has - '//a[@href="#method.pass"]' 'pass'
     pub fn pass() {}
 }
 
 impl Foo<u16> {
-    // @has - '//a[@href="#method.pass-1"]' 'pass'
+    //@ has - '//a[@href="#method.pass-1"]' 'pass'
     pub fn pass() {}
 }
 
 impl Foo<u32> {
-    // @has - '//a[@href="#method.pass-2"]' 'pass'
+    //@ has - '//a[@href="#method.pass-2"]' 'pass'
     pub fn pass() {}
 }
diff --git a/tests/rustdoc/disambiguate-anchors-header-29449.rs b/tests/rustdoc/disambiguate-anchors-header-29449.rs
index 1388af7df4b..feb0632775e 100644
--- a/tests/rustdoc/disambiguate-anchors-header-29449.rs
+++ b/tests/rustdoc/disambiguate-anchors-header-29449.rs
@@ -1,27 +1,27 @@
 // https://github.com/rust-lang/rust/issues/29449
 #![crate_name="issue_29449"]
 
-// @has issue_29449/struct.Foo.html
+//@ has issue_29449/struct.Foo.html
 pub struct Foo;
 
 impl Foo {
-    // @has - '//*[@id="examples"]' 'Examples'
-    // @has - '//*[@id="examples"]/a[@href="#examples"]' '§'
-    // @has - '//*[@id="panics"]' 'Panics'
-    // @has - '//*[@id="panics"]/a[@href="#panics"]' '§'
+    //@ has - '//*[@id="examples"]' 'Examples'
+    //@ has - '//*[@id="examples"]/a[@href="#examples"]' '§'
+    //@ has - '//*[@id="panics"]' 'Panics'
+    //@ has - '//*[@id="panics"]/a[@href="#panics"]' '§'
     /// # Examples
     /// # Panics
     pub fn bar() {}
 
-    // @has - '//*[@id="examples-1"]' 'Examples'
-    // @has - '//*[@id="examples-1"]/a[@href="#examples-1"]' '§'
+    //@ has - '//*[@id="examples-1"]' 'Examples'
+    //@ has - '//*[@id="examples-1"]/a[@href="#examples-1"]' '§'
     /// # Examples
     pub fn bar_1() {}
 
-    // @has - '//*[@id="examples-2"]' 'Examples'
-    // @has - '//*[@id="examples-2"]/a[@href="#examples-2"]' '§'
-    // @has - '//*[@id="panics-1"]' 'Panics'
-    // @has - '//*[@id="panics-1"]/a[@href="#panics-1"]' '§'
+    //@ has - '//*[@id="examples-2"]' 'Examples'
+    //@ has - '//*[@id="examples-2"]/a[@href="#examples-2"]' '§'
+    //@ has - '//*[@id="panics-1"]' 'Panics'
+    //@ has - '//*[@id="panics-1"]/a[@href="#panics-1"]' '§'
     /// # Examples
     /// # Panics
     pub fn bar_2() {}
diff --git a/tests/rustdoc/display-hidden-items.rs b/tests/rustdoc/display-hidden-items.rs
index 901ca17d4d2..d9f53435e46 100644
--- a/tests/rustdoc/display-hidden-items.rs
+++ b/tests/rustdoc/display-hidden-items.rs
@@ -4,72 +4,72 @@
 
 #![crate_name = "foo"]
 
-// @has 'foo/index.html'
-// @has - '//*[@class="item-name"]/span[@title="Hidden item"]' '👻'
+//@ has 'foo/index.html'
+//@ has - '//*[@class="item-name"]/span[@title="Hidden item"]' '👻'
 
-// @has - '//*[@id="reexport.hidden_reexport"]/code' '#[doc(hidden)] pub use hidden::inside_hidden as hidden_reexport;'
+//@ has - '//*[@id="reexport.hidden_reexport"]/code' '#[doc(hidden)] pub use hidden::inside_hidden as hidden_reexport;'
 #[doc(hidden)]
 pub use hidden::inside_hidden as hidden_reexport;
 
-// @has - '//*[@class="item-name"]/a[@class="trait"]' 'TraitHidden'
-// @has 'foo/trait.TraitHidden.html'
-// @has - '//code' '#[doc(hidden)] pub trait TraitHidden'
+//@ has - '//*[@class="item-name"]/a[@class="trait"]' 'TraitHidden'
+//@ has 'foo/trait.TraitHidden.html'
+//@ has - '//code' '#[doc(hidden)] pub trait TraitHidden'
 #[doc(hidden)]
 pub trait TraitHidden {}
 
-// @has 'foo/index.html' '//*[@class="item-name"]/a[@class="trait"]' 'Trait'
+//@ has 'foo/index.html' '//*[@class="item-name"]/a[@class="trait"]' 'Trait'
 pub trait Trait {
-    // @has 'foo/trait.Trait.html'
-    // @has - '//*[@id="associatedconstant.BAR"]/*[@class="code-header"]' '#[doc(hidden)] const BAR: u32 = 0u32'
+    //@ has 'foo/trait.Trait.html'
+    //@ has - '//*[@id="associatedconstant.BAR"]/*[@class="code-header"]' '#[doc(hidden)] const BAR: u32 = 0u32'
     #[doc(hidden)]
     const BAR: u32 = 0;
 
-    // @has - '//*[@id="method.foo"]/*[@class="code-header"]' 'fn foo()'
+    //@ has - '//*[@id="method.foo"]/*[@class="code-header"]' 'fn foo()'
     #[doc(hidden)]
     fn foo() {}
 }
 
-// @has 'foo/index.html' '//*[@class="item-name"]/a[@class="struct"]' 'Struct'
-// @has 'foo/struct.Struct.html'
+//@ has 'foo/index.html' '//*[@class="item-name"]/a[@class="struct"]' 'Struct'
+//@ has 'foo/struct.Struct.html'
 pub struct Struct {
-    // @has - '//*[@id="structfield.a"]/code' 'a: u32'
+    //@ has - '//*[@id="structfield.a"]/code' 'a: u32'
     #[doc(hidden)]
     pub a: u32,
 }
 
 impl Struct {
-    // @has - '//*[@id="method.new"]/*[@class="code-header"]' 'pub fn new() -> Self'
+    //@ has - '//*[@id="method.new"]/*[@class="code-header"]' 'pub fn new() -> Self'
     #[doc(hidden)]
     pub fn new() -> Self { Self { a: 0 } }
 }
 
 impl Trait for Struct {
-    // @has - '//*[@id="associatedconstant.BAR"]/*[@class="code-header"]' '#[doc(hidden)] const BAR: u32 = 0u32'
-    // @has - '//*[@id="method.foo"]/*[@class="code-header"]' '#[doc(hidden)] fn foo()'
+    //@ has - '//*[@id="associatedconstant.BAR"]/*[@class="code-header"]' '#[doc(hidden)] const BAR: u32 = 0u32'
+    //@ has - '//*[@id="method.foo"]/*[@class="code-header"]' '#[doc(hidden)] fn foo()'
 }
-// @has - '//*[@id="impl-TraitHidden-for-Struct"]/*[@class="code-header"]' 'impl TraitHidden for Struct'
+//@ has - '//*[@id="impl-TraitHidden-for-Struct"]/*[@class="code-header"]' 'impl TraitHidden for Struct'
 impl TraitHidden for Struct {}
 
-// @has 'foo/index.html' '//*[@class="item-name"]/a[@class="enum"]' 'HiddenEnum'
-// @has 'foo/enum.HiddenEnum.html'
-// @has - '//code' '#[doc(hidden)] pub enum HiddenEnum'
+//@ has 'foo/index.html' '//*[@class="item-name"]/a[@class="enum"]' 'HiddenEnum'
+//@ has 'foo/enum.HiddenEnum.html'
+//@ has - '//code' '#[doc(hidden)] pub enum HiddenEnum'
 #[doc(hidden)]
 pub enum HiddenEnum {
     A,
 }
 
-// @has 'foo/index.html' '//*[@class="item-name"]/a[@class="enum"]' 'Enum'
+//@ has 'foo/index.html' '//*[@class="item-name"]/a[@class="enum"]' 'Enum'
 pub enum Enum {
-    // @has 'foo/enum.Enum.html' '//*[@id="variant.A"]/*[@class="code-header"]' 'A'
+    //@ has 'foo/enum.Enum.html' '//*[@id="variant.A"]/*[@class="code-header"]' 'A'
     #[doc(hidden)]
     A,
 }
 
-// @has 'foo/index.html' '//*[@class="item-name"]/a[@class="mod"]' 'hidden'
+//@ has 'foo/index.html' '//*[@class="item-name"]/a[@class="mod"]' 'hidden'
 #[doc(hidden)]
 pub mod hidden {
-    // @has 'foo/hidden/index.html'
-    // @has - '//*[@class="item-name"]/a[@class="fn"]' 'inside_hidden'
-    // @has 'foo/hidden/fn.inside_hidden.html'
+    //@ has 'foo/hidden/index.html'
+    //@ has - '//*[@class="item-name"]/a[@class="fn"]' 'inside_hidden'
+    //@ has 'foo/hidden/fn.inside_hidden.html'
     pub fn inside_hidden() {}
 }
diff --git a/tests/rustdoc/doc-assoc-item.rs b/tests/rustdoc/doc-assoc-item.rs
index 4d5c9f83e1e..2eb82abfc0b 100644
--- a/tests/rustdoc/doc-assoc-item.rs
+++ b/tests/rustdoc/doc-assoc-item.rs
@@ -8,7 +8,7 @@ pub trait Bar {
     fn foo(foo: Self::Fuu);
 }
 
-// @has doc_assoc_item/struct.Foo.html '//*[@class="impl"]' 'impl<T: Bar<Fuu = u32>> Foo<T>'
+//@ has doc_assoc_item/struct.Foo.html '//*[@class="impl"]' 'impl<T: Bar<Fuu = u32>> Foo<T>'
 impl<T: Bar<Fuu = u32>> Foo<T> {
     pub fn new(t: T) -> Foo<T> {
         Foo {
diff --git a/tests/rustdoc/doc-attr-comment-mix-42760.rs b/tests/rustdoc/doc-attr-comment-mix-42760.rs
index 16c1705eb00..c457ac74d8d 100644
--- a/tests/rustdoc/doc-attr-comment-mix-42760.rs
+++ b/tests/rustdoc/doc-attr-comment-mix-42760.rs
@@ -3,8 +3,8 @@
 
 #![allow(rustdoc::invalid_rust_codeblocks)]
 
-// @has foo/struct.NonGen.html
-// @has - '//h2' 'Example'
+//@ has foo/struct.NonGen.html
+//@ has - '//h2' 'Example'
 
 /// Item docs.
 ///
diff --git a/tests/rustdoc/doc-auto-cfg.rs b/tests/rustdoc/doc-auto-cfg.rs
index 7842ee69c9f..b3fe8922fd7 100644
--- a/tests/rustdoc/doc-auto-cfg.rs
+++ b/tests/rustdoc/doc-auto-cfg.rs
@@ -1,35 +1,35 @@
 #![feature(doc_auto_cfg)]
 #![crate_name = "foo"]
 
-// @has foo/fn.foo.html
-// @has - '//*[@class="item-info"]/*[@class="stab portability"]' 'non-meowmeow'
+//@ has foo/fn.foo.html
+//@ has - '//*[@class="item-info"]/*[@class="stab portability"]' 'non-meowmeow'
 #[cfg(not(meowmeow))]
 pub fn foo() {}
 
-// @has foo/fn.bar.html
-// @has - '//*[@class="item-info"]/*[@class="stab portability"]' 'meowmeow'
-// @!has - '//*[@class="item-info"]/*[@class="stab portability"]' 'test'
-// @!has - '//*[@class="item-info"]/*[@class="stab portability"]' 'doc'
-// @!has - '//*[@class="item-info"]/*[@class="stab portability"]' 'doctest'
+//@ has foo/fn.bar.html
+//@ has - '//*[@class="item-info"]/*[@class="stab portability"]' 'meowmeow'
+//@ !has - '//*[@class="item-info"]/*[@class="stab portability"]' 'test'
+//@ !has - '//*[@class="item-info"]/*[@class="stab portability"]' 'doc'
+//@ !has - '//*[@class="item-info"]/*[@class="stab portability"]' 'doctest'
 #[cfg(any(meowmeow, test, doc, doctest))]
 pub fn bar() {}
 
-// @has foo/fn.appear_1.html
-// @has - '//*[@class="item-info"]/*[@class="stab portability"]' 'meowmeow'
-// @!has - '//*[@class="item-info"]/*[@class="stab portability"]' 'doc'
-// @!has - '//*[@class="item-info"]/*[@class="stab portability"]' 'non-test'
+//@ has foo/fn.appear_1.html
+//@ has - '//*[@class="item-info"]/*[@class="stab portability"]' 'meowmeow'
+//@ !has - '//*[@class="item-info"]/*[@class="stab portability"]' 'doc'
+//@ !has - '//*[@class="item-info"]/*[@class="stab portability"]' 'non-test'
 #[cfg(any(meowmeow, doc, not(test)))]
 pub fn appear_1() {} // issue #98065
 
-// @has foo/fn.appear_2.html
-// @has - '//*[@class="item-info"]/*[@class="stab portability"]' 'meowmeow'
-// @!has - '//*[@class="item-info"]/*[@class="stab portability"]' 'doc'
-// @!has - '//*[@class="item-info"]/*[@class="stab portability"]' 'test'
+//@ has foo/fn.appear_2.html
+//@ has - '//*[@class="item-info"]/*[@class="stab portability"]' 'meowmeow'
+//@ !has - '//*[@class="item-info"]/*[@class="stab portability"]' 'doc'
+//@ !has - '//*[@class="item-info"]/*[@class="stab portability"]' 'test'
 #[cfg(any(meowmeow, doc, all(test)))]
 pub fn appear_2() {} // issue #98065
 
-// @has foo/fn.appear_3.html
-// @has - '//*[@class="item-info"]/*[@class="stab portability"]' 'meowmeow'
-// @!has - '//*[@class="item-info"]/*[@class="stab portability"]' 'doc'
+//@ has foo/fn.appear_3.html
+//@ has - '//*[@class="item-info"]/*[@class="stab portability"]' 'meowmeow'
+//@ !has - '//*[@class="item-info"]/*[@class="stab portability"]' 'doc'
 #[cfg(any(meowmeow, doc, all()))]
 pub fn appear_3() {} // issue #98065
diff --git a/tests/rustdoc/doc-cfg-hide.rs b/tests/rustdoc/doc-cfg-hide.rs
index f80453d50ed..ceb1f99fae0 100644
--- a/tests/rustdoc/doc-cfg-hide.rs
+++ b/tests/rustdoc/doc-cfg-hide.rs
@@ -3,30 +3,30 @@
 
 #![doc(cfg_hide(feature = "solecism"))]
 
-// @has 'oud/struct.Solecism.html'
-// @count   - '//*[@class="stab portability"]' 0
+//@ has 'oud/struct.Solecism.html'
+//@ count   - '//*[@class="stab portability"]' 0
 //@ compile-flags:--cfg feature="solecism"
 #[cfg(feature = "solecism")]
 pub struct Solecism;
 
-// @has 'oud/struct.Scribacious.html'
-// @count   - '//*[@class="stab portability"]' 1
-// @matches - '//*[@class="stab portability"]' 'crate feature solecism'
+//@ has 'oud/struct.Scribacious.html'
+//@ count   - '//*[@class="stab portability"]' 1
+//@ matches - '//*[@class="stab portability"]' 'crate feature solecism'
 #[cfg(feature = "solecism")]
 #[doc(cfg(feature = "solecism"))]
 pub struct Scribacious;
 
-// @has 'oud/struct.Hyperdulia.html'
-// @count   - '//*[@class="stab portability"]' 1
-// @matches - '//*[@class="stab portability"]' 'crate feature hyperdulia'
+//@ has 'oud/struct.Hyperdulia.html'
+//@ count   - '//*[@class="stab portability"]' 1
+//@ matches - '//*[@class="stab portability"]' 'crate feature hyperdulia'
 //@ compile-flags:--cfg feature="hyperdulia"
 #[cfg(feature = "solecism")]
 #[cfg(feature = "hyperdulia")]
 pub struct Hyperdulia;
 
-// @has 'oud/struct.Oystercatcher.html'
-// @count   - '//*[@class="stab portability"]' 1
-// @matches - '//*[@class="stab portability"]' 'crate feature oystercatcher only'
+//@ has 'oud/struct.Oystercatcher.html'
+//@ count   - '//*[@class="stab portability"]' 1
+//@ matches - '//*[@class="stab portability"]' 'crate feature oystercatcher only'
 //@ compile-flags:--cfg feature="oystercatcher"
 #[cfg(all(feature = "solecism", feature = "oystercatcher"))]
 pub struct Oystercatcher;
diff --git a/tests/rustdoc/doc-cfg-implicit-gate.rs b/tests/rustdoc/doc-cfg-implicit-gate.rs
index 15de15c0ce2..b5b8d0f427b 100644
--- a/tests/rustdoc/doc-cfg-implicit-gate.rs
+++ b/tests/rustdoc/doc-cfg-implicit-gate.rs
@@ -1,7 +1,7 @@
 //@ compile-flags:--cfg feature="worricow"
 #![crate_name = "xenogenous"]
 
-// @has 'xenogenous/struct.Worricow.html'
-// @count   - '//*[@class="stab portability"]' 0
+//@ has 'xenogenous/struct.Worricow.html'
+//@ count   - '//*[@class="stab portability"]' 0
 #[cfg(feature = "worricow")]
 pub struct Worricow;
diff --git a/tests/rustdoc/doc-cfg-implicit.rs b/tests/rustdoc/doc-cfg-implicit.rs
index a6c0896db31..69b10867ee3 100644
--- a/tests/rustdoc/doc-cfg-implicit.rs
+++ b/tests/rustdoc/doc-cfg-implicit.rs
@@ -1,30 +1,30 @@
 #![crate_name = "funambulism"]
 #![feature(doc_auto_cfg, doc_cfg)]
 
-// @has 'funambulism/struct.Disorbed.html'
-// @count   - '//*[@class="stab portability"]' 1
-// @matches - '//*[@class="stab portability"]' 'crate feature disorbed'
+//@ has 'funambulism/struct.Disorbed.html'
+//@ count   - '//*[@class="stab portability"]' 1
+//@ matches - '//*[@class="stab portability"]' 'crate feature disorbed'
 //@ compile-flags:--cfg feature="disorbed"
 #[cfg(feature = "disorbed")]
 pub struct Disorbed;
 
-// @has 'funambulism/struct.Aesthesia.html'
-// @count   - '//*[@class="stab portability"]' 1
-// @matches - '//*[@class="stab portability"]' 'crate feature aesthesia'
+//@ has 'funambulism/struct.Aesthesia.html'
+//@ count   - '//*[@class="stab portability"]' 1
+//@ matches - '//*[@class="stab portability"]' 'crate feature aesthesia'
 //@ compile-flags:--cfg feature="aesthesia"
 #[doc(cfg(feature = "aesthesia"))]
 pub struct Aesthesia;
 
-// @has 'funambulism/struct.Pliothermic.html'
-// @count   - '//*[@class="stab portability"]' 1
-// @matches - '//*[@class="stab portability"]' 'crate feature pliothermic'
+//@ has 'funambulism/struct.Pliothermic.html'
+//@ count   - '//*[@class="stab portability"]' 1
+//@ matches - '//*[@class="stab portability"]' 'crate feature pliothermic'
 //@ compile-flags:--cfg feature="epopoeist"
 #[cfg(feature = "epopoeist")]
 #[doc(cfg(feature = "pliothermic"))]
 pub struct Pliothermic;
 
-// @has 'funambulism/struct.Simillimum.html'
-// @count   - '//*[@class="stab portability"]' 0
+//@ has 'funambulism/struct.Simillimum.html'
+//@ count   - '//*[@class="stab portability"]' 0
 //@ compile-flags:--cfg feature="simillimum"
 #[cfg(feature = "simillimum")]
 #[doc(cfg(all()))]
diff --git a/tests/rustdoc/doc-cfg-inherit-from-module-79201.rs b/tests/rustdoc/doc-cfg-inherit-from-module-79201.rs
index 76260c4a502..256e3b0015c 100644
--- a/tests/rustdoc/doc-cfg-inherit-from-module-79201.rs
+++ b/tests/rustdoc/doc-cfg-inherit-from-module-79201.rs
@@ -3,13 +3,13 @@
 
 #![feature(doc_cfg)]
 
-// @has 'foo/trait.Foo.html'
-// @count   - '//*[@class="stab portability"]' 6
-// @matches - '//*[@class="stab portability"]' 'crate feature foo-root'
-// @matches - '//*[@class="stab portability"]' 'crate feature foo-public-mod'
-// @matches - '//*[@class="stab portability"]' 'crate feature foo-private-mod'
-// @matches - '//*[@class="stab portability"]' 'crate feature foo-fn'
-// @matches - '//*[@class="stab portability"]' 'crate feature foo-method'
+//@ has 'foo/trait.Foo.html'
+//@ count   - '//*[@class="stab portability"]' 6
+//@ matches - '//*[@class="stab portability"]' 'crate feature foo-root'
+//@ matches - '//*[@class="stab portability"]' 'crate feature foo-public-mod'
+//@ matches - '//*[@class="stab portability"]' 'crate feature foo-private-mod'
+//@ matches - '//*[@class="stab portability"]' 'crate feature foo-fn'
+//@ matches - '//*[@class="stab portability"]' 'crate feature foo-method'
 
 pub trait Foo {}
 
diff --git a/tests/rustdoc/doc-cfg-simplification.rs b/tests/rustdoc/doc-cfg-simplification.rs
index 633df661be0..ce70de289c6 100644
--- a/tests/rustdoc/doc-cfg-simplification.rs
+++ b/tests/rustdoc/doc-cfg-simplification.rs
@@ -1,75 +1,75 @@
 #![crate_name = "globuliferous"]
 #![feature(doc_cfg)]
 
-// @has 'globuliferous/index.html'
-// @count   - '//*[@class="stab portability"]' 1
-// @matches - '//*[@class="stab portability"]' '^ratel$'
-
-// @has 'globuliferous/ratel/index.html'
-// @count   - '//*[@class="stab portability"]' 8
-// @matches - '//*[@class="stab portability"]' 'crate feature ratel'
-// @matches - '//*[@class="stab portability"]' '^zoonosology$'
-// @matches - '//*[@class="stab portability"]' '^yusho$'
-// @matches - '//*[@class="stab portability"]' '^nunciative$'
-// @matches - '//*[@class="stab portability"]' '^thionic$'
-// @matches - '//*[@class="stab portability"]' '^zincic$'
-// @matches - '//*[@class="stab portability"]' '^cosmotellurian$'
-// @matches - '//*[@class="stab portability"]' '^aposiopesis$'
+//@ has 'globuliferous/index.html'
+//@ count   - '//*[@class="stab portability"]' 1
+//@ matches - '//*[@class="stab portability"]' '^ratel$'
+
+//@ has 'globuliferous/ratel/index.html'
+//@ count   - '//*[@class="stab portability"]' 8
+//@ matches - '//*[@class="stab portability"]' 'crate feature ratel'
+//@ matches - '//*[@class="stab portability"]' '^zoonosology$'
+//@ matches - '//*[@class="stab portability"]' '^yusho$'
+//@ matches - '//*[@class="stab portability"]' '^nunciative$'
+//@ matches - '//*[@class="stab portability"]' '^thionic$'
+//@ matches - '//*[@class="stab portability"]' '^zincic$'
+//@ matches - '//*[@class="stab portability"]' '^cosmotellurian$'
+//@ matches - '//*[@class="stab portability"]' '^aposiopesis$'
 #[doc(cfg(feature = "ratel"))]
 pub mod ratel {
-    // @has 'globuliferous/ratel/fn.ovicide.html'
-    // @count   - '//*[@class="stab portability"]' 1
-    // @matches - '//*[@class="stab portability"]' 'crate feature ratel'
+    //@ has 'globuliferous/ratel/fn.ovicide.html'
+    //@ count   - '//*[@class="stab portability"]' 1
+    //@ matches - '//*[@class="stab portability"]' 'crate feature ratel'
     pub fn ovicide() {}
 
-    // @has 'globuliferous/ratel/fn.zoonosology.html'
-    // @count   - '//*[@class="stab portability"]' 1
-    // @matches - '//*[@class="stab portability"]' 'crate features ratel and zoonosology'
+    //@ has 'globuliferous/ratel/fn.zoonosology.html'
+    //@ count   - '//*[@class="stab portability"]' 1
+    //@ matches - '//*[@class="stab portability"]' 'crate features ratel and zoonosology'
     #[doc(cfg(feature = "zoonosology"))]
     pub fn zoonosology() {}
 
-    // @has 'globuliferous/ratel/constant.DIAGRAPHICS.html'
-    // @count   - '//*[@class="stab portability"]' 1
-    // @matches - '//*[@class="stab portability"]' 'crate feature ratel'
+    //@ has 'globuliferous/ratel/constant.DIAGRAPHICS.html'
+    //@ count   - '//*[@class="stab portability"]' 1
+    //@ matches - '//*[@class="stab portability"]' 'crate feature ratel'
     pub const DIAGRAPHICS: () = ();
 
-    // @has 'globuliferous/ratel/constant.YUSHO.html'
-    // @count   - '//*[@class="stab portability"]' 1
-    // @matches - '//*[@class="stab portability"]' 'crate features ratel and yusho'
+    //@ has 'globuliferous/ratel/constant.YUSHO.html'
+    //@ count   - '//*[@class="stab portability"]' 1
+    //@ matches - '//*[@class="stab portability"]' 'crate features ratel and yusho'
     #[doc(cfg(feature = "yusho"))]
     pub const YUSHO: () = ();
 
-    // @has 'globuliferous/ratel/static.KEYBUGLE.html'
-    // @count   - '//*[@class="stab portability"]' 1
-    // @matches - '//*[@class="stab portability"]' 'crate feature ratel'
+    //@ has 'globuliferous/ratel/static.KEYBUGLE.html'
+    //@ count   - '//*[@class="stab portability"]' 1
+    //@ matches - '//*[@class="stab portability"]' 'crate feature ratel'
     pub static KEYBUGLE: () = ();
 
-    // @has 'globuliferous/ratel/static.NUNCIATIVE.html'
-    // @count   - '//*[@class="stab portability"]' 1
-    // @matches - '//*[@class="stab portability"]' 'crate features ratel and nunciative'
+    //@ has 'globuliferous/ratel/static.NUNCIATIVE.html'
+    //@ count   - '//*[@class="stab portability"]' 1
+    //@ matches - '//*[@class="stab portability"]' 'crate features ratel and nunciative'
     #[doc(cfg(feature = "nunciative"))]
     pub static NUNCIATIVE: () = ();
 
-    // @has 'globuliferous/ratel/type.Wrick.html'
-    // @count   - '//*[@class="stab portability"]' 1
-    // @matches - '//*[@class="stab portability"]' 'crate feature ratel'
+    //@ has 'globuliferous/ratel/type.Wrick.html'
+    //@ count   - '//*[@class="stab portability"]' 1
+    //@ matches - '//*[@class="stab portability"]' 'crate feature ratel'
     pub type Wrick = ();
 
-    // @has 'globuliferous/ratel/type.Thionic.html'
-    // @count   - '//*[@class="stab portability"]' 1
-    // @matches - '//*[@class="stab portability"]' 'crate features ratel and thionic'
+    //@ has 'globuliferous/ratel/type.Thionic.html'
+    //@ count   - '//*[@class="stab portability"]' 1
+    //@ matches - '//*[@class="stab portability"]' 'crate features ratel and thionic'
     #[doc(cfg(feature = "thionic"))]
     pub type Thionic = ();
 
-    // @has 'globuliferous/ratel/struct.Eventration.html'
-    // @count   - '//*[@class="stab portability"]' 1
-    // @matches - '//*[@class="stab portability"]' 'crate feature ratel'
+    //@ has 'globuliferous/ratel/struct.Eventration.html'
+    //@ count   - '//*[@class="stab portability"]' 1
+    //@ matches - '//*[@class="stab portability"]' 'crate feature ratel'
     pub struct Eventration;
 
-    // @has 'globuliferous/ratel/struct.Zincic.html'
-    // @count   - '//*[@class="stab portability"]' 2
-    // @matches - '//*[@class="stab portability"]' 'crate features ratel and zincic'
-    // @matches - '//*[@class="stab portability"]' 'crate feature rutherford'
+    //@ has 'globuliferous/ratel/struct.Zincic.html'
+    //@ count   - '//*[@class="stab portability"]' 2
+    //@ matches - '//*[@class="stab portability"]' 'crate features ratel and zincic'
+    //@ matches - '//*[@class="stab portability"]' 'crate feature rutherford'
     #[doc(cfg(feature = "zincic"))]
     pub struct Zincic {
         pub rectigrade: (),
@@ -78,18 +78,18 @@ pub mod ratel {
         pub rutherford: (),
     }
 
-    // @has 'globuliferous/ratel/enum.Cosmotellurian.html'
-    // @count   - '//*[@class="stab portability"]' 10
-    // @matches - '//*[@class="stab portability"]' 'crate features ratel and cosmotellurian'
-    // @matches - '//*[@class="stab portability"]' 'crate feature biotaxy'
-    // @matches - '//*[@class="stab portability"]' 'crate feature xiphopagus'
-    // @matches - '//*[@class="stab portability"]' 'crate feature juxtapositive'
-    // @matches - '//*[@class="stab portability"]' 'crate feature fuero'
-    // @matches - '//*[@class="stab portability"]' 'crate feature palaeophile'
-    // @matches - '//*[@class="stab portability"]' 'crate feature broadcloth'
-    // @matches - '//*[@class="stab portability"]' 'crate features broadcloth and xanthocomic'
-    // @matches - '//*[@class="stab portability"]' 'crate feature broadcloth'
-    // @matches - '//*[@class="stab portability"]' 'crate features broadcloth and whosoever'
+    //@ has 'globuliferous/ratel/enum.Cosmotellurian.html'
+    //@ count   - '//*[@class="stab portability"]' 10
+    //@ matches - '//*[@class="stab portability"]' 'crate features ratel and cosmotellurian'
+    //@ matches - '//*[@class="stab portability"]' 'crate feature biotaxy'
+    //@ matches - '//*[@class="stab portability"]' 'crate feature xiphopagus'
+    //@ matches - '//*[@class="stab portability"]' 'crate feature juxtapositive'
+    //@ matches - '//*[@class="stab portability"]' 'crate feature fuero'
+    //@ matches - '//*[@class="stab portability"]' 'crate feature palaeophile'
+    //@ matches - '//*[@class="stab portability"]' 'crate feature broadcloth'
+    //@ matches - '//*[@class="stab portability"]' 'crate features broadcloth and xanthocomic'
+    //@ matches - '//*[@class="stab portability"]' 'crate feature broadcloth'
+    //@ matches - '//*[@class="stab portability"]' 'crate features broadcloth and whosoever'
     #[doc(cfg(feature = "cosmotellurian"))]
     pub enum Cosmotellurian {
         Groundsel {
@@ -133,12 +133,12 @@ pub mod ratel {
         pub const WHOSOEVER: () = ();
     }
 
-    // @has 'globuliferous/ratel/trait.Gnotobiology.html'
-    // @count   - '//*[@class="stab portability"]' 4
-    // @matches - '//*[@class="stab portability"]' 'crate feature ratel'
-    // @matches - '//*[@class="stab portability"]' 'crate feature unzymotic'
-    // @matches - '//*[@class="stab portability"]' 'crate feature summate'
-    // @matches - '//*[@class="stab portability"]' 'crate feature unctuous'
+    //@ has 'globuliferous/ratel/trait.Gnotobiology.html'
+    //@ count   - '//*[@class="stab portability"]' 4
+    //@ matches - '//*[@class="stab portability"]' 'crate feature ratel'
+    //@ matches - '//*[@class="stab portability"]' 'crate feature unzymotic'
+    //@ matches - '//*[@class="stab portability"]' 'crate feature summate'
+    //@ matches - '//*[@class="stab portability"]' 'crate feature unctuous'
     pub trait Gnotobiology {
         const XYLOTHERAPY: ();
 
@@ -156,12 +156,12 @@ pub mod ratel {
         fn unctuous();
     }
 
-    // @has 'globuliferous/ratel/trait.Aposiopesis.html'
-    // @count   - '//*[@class="stab portability"]' 4
-    // @matches - '//*[@class="stab portability"]' 'crate features ratel and aposiopesis'
-    // @matches - '//*[@class="stab portability"]' 'crate feature umbracious'
-    // @matches - '//*[@class="stab portability"]' 'crate feature uakari'
-    // @matches - '//*[@class="stab portability"]' 'crate feature rotograph'
+    //@ has 'globuliferous/ratel/trait.Aposiopesis.html'
+    //@ count   - '//*[@class="stab portability"]' 4
+    //@ matches - '//*[@class="stab portability"]' 'crate features ratel and aposiopesis'
+    //@ matches - '//*[@class="stab portability"]' 'crate feature umbracious'
+    //@ matches - '//*[@class="stab portability"]' 'crate feature uakari'
+    //@ matches - '//*[@class="stab portability"]' 'crate feature rotograph'
     #[doc(cfg(feature = "aposiopesis"))]
     pub trait Aposiopesis {
         const REDHIBITION: ();
diff --git a/tests/rustdoc/doc-cfg-traits.rs b/tests/rustdoc/doc-cfg-traits.rs
index 13407b2c791..1256a7ae2c1 100644
--- a/tests/rustdoc/doc-cfg-traits.rs
+++ b/tests/rustdoc/doc-cfg-traits.rs
@@ -1,21 +1,21 @@
 #![crate_name = "myrmecophagous"]
 #![feature(doc_cfg, associated_type_defaults)]
 
-// @has 'myrmecophagous/index.html'
-// @count   - '//*[@class="stab portability"]' 2
-// @matches - '//*[@class="stab portability"]' '^jurisconsult$'
-// @matches - '//*[@class="stab portability"]' '^quarter$'
+//@ has 'myrmecophagous/index.html'
+//@ count   - '//*[@class="stab portability"]' 2
+//@ matches - '//*[@class="stab portability"]' '^jurisconsult$'
+//@ matches - '//*[@class="stab portability"]' '^quarter$'
 
 pub trait Lea {}
 
-// @has 'myrmecophagous/trait.Vortoscope.html'
-// @count   - '//*[@class="stab portability"]' 6
-// @matches - '//*[@class="stab portability"]' 'crate feature zibib'
-// @matches - '//*[@class="stab portability"]' 'crate feature poriform'
-// @matches - '//*[@class="stab portability"]' 'crate feature ethopoeia'
-// @matches - '//*[@class="stab portability"]' 'crate feature lea'
-// @matches - '//*[@class="stab portability"]' 'crate feature unit'
-// @matches - '//*[@class="stab portability"]' 'crate feature quarter'
+//@ has 'myrmecophagous/trait.Vortoscope.html'
+//@ count   - '//*[@class="stab portability"]' 6
+//@ matches - '//*[@class="stab portability"]' 'crate feature zibib'
+//@ matches - '//*[@class="stab portability"]' 'crate feature poriform'
+//@ matches - '//*[@class="stab portability"]' 'crate feature ethopoeia'
+//@ matches - '//*[@class="stab portability"]' 'crate feature lea'
+//@ matches - '//*[@class="stab portability"]' 'crate feature unit'
+//@ matches - '//*[@class="stab portability"]' 'crate feature quarter'
 pub trait Vortoscope {
     type Batology = ();
 
@@ -39,15 +39,15 @@ impl<T: Lea> Vortoscope for T {}
 #[doc(cfg(feature = "unit"))]
 impl Vortoscope for () {}
 
-// @has 'myrmecophagous/trait.Jurisconsult.html'
-// @count   - '//*[@class="stab portability"]' 7
-// @matches - '//*[@class="stab portability"]' 'crate feature jurisconsult'
-// @matches - '//*[@class="stab portability"]' 'crate feature lithomancy'
-// @matches - '//*[@class="stab portability"]' 'crate feature boodle'
-// @matches - '//*[@class="stab portability"]' 'crate feature mistetch'
-// @matches - '//*[@class="stab portability"]' 'crate feature lea'
-// @matches - '//*[@class="stab portability"]' 'crate feature unit'
-// @matches - '//*[@class="stab portability"]' 'crate feature quarter'
+//@ has 'myrmecophagous/trait.Jurisconsult.html'
+//@ count   - '//*[@class="stab portability"]' 7
+//@ matches - '//*[@class="stab portability"]' 'crate feature jurisconsult'
+//@ matches - '//*[@class="stab portability"]' 'crate feature lithomancy'
+//@ matches - '//*[@class="stab portability"]' 'crate feature boodle'
+//@ matches - '//*[@class="stab portability"]' 'crate feature mistetch'
+//@ matches - '//*[@class="stab portability"]' 'crate feature lea'
+//@ matches - '//*[@class="stab portability"]' 'crate feature unit'
+//@ matches - '//*[@class="stab portability"]' 'crate feature quarter'
 #[doc(cfg(feature = "jurisconsult"))]
 pub trait Jurisconsult {
     type Urbanist = ();
@@ -72,19 +72,19 @@ impl<T: Lea> Jurisconsult for T {}
 #[doc(cfg(feature = "unit"))]
 impl Jurisconsult for () {}
 
-// @has 'myrmecophagous/struct.Ultimogeniture.html'
-// @count   - '//*[@class="stab portability"]' 8
+//@ has 'myrmecophagous/struct.Ultimogeniture.html'
+//@ count   - '//*[@class="stab portability"]' 8
 //
-// @matches - '//*[@class="stab portability"]' 'crate feature zibib'
-// @matches - '//*[@class="stab portability"]' 'crate feature poriform'
-// @matches - '//*[@class="stab portability"]' 'crate feature ethopoeia'
+//@ matches - '//*[@class="stab portability"]' 'crate feature zibib'
+//@ matches - '//*[@class="stab portability"]' 'crate feature poriform'
+//@ matches - '//*[@class="stab portability"]' 'crate feature ethopoeia'
 //
-// @matches - '//*[@class="stab portability"]' 'crate feature jurisconsult'
-// @matches - '//*[@class="stab portability"]' 'crate feature lithomancy'
-// @matches - '//*[@class="stab portability"]' 'crate feature boodle'
-// @matches - '//*[@class="stab portability"]' 'crate feature mistetch'
+//@ matches - '//*[@class="stab portability"]' 'crate feature jurisconsult'
+//@ matches - '//*[@class="stab portability"]' 'crate feature lithomancy'
+//@ matches - '//*[@class="stab portability"]' 'crate feature boodle'
+//@ matches - '//*[@class="stab portability"]' 'crate feature mistetch'
 //
-// @matches - '//*[@class="stab portability"]' 'crate feature copy'
+//@ matches - '//*[@class="stab portability"]' 'crate feature copy'
 #[derive(Clone)]
 pub struct Ultimogeniture;
 
@@ -96,20 +96,20 @@ impl Jurisconsult for Ultimogeniture {}
 #[doc(cfg(feature = "copy"))]
 impl Copy for Ultimogeniture {}
 
-// @has 'myrmecophagous/struct.Quarter.html'
-// @count   - '//*[@class="stab portability"]' 9
-// @matches - '//*[@class="stab portability"]' 'crate feature quarter'
+//@ has 'myrmecophagous/struct.Quarter.html'
+//@ count   - '//*[@class="stab portability"]' 9
+//@ matches - '//*[@class="stab portability"]' 'crate feature quarter'
 //
-// @matches - '//*[@class="stab portability"]' 'crate feature zibib'
-// @matches - '//*[@class="stab portability"]' 'crate feature poriform'
-// @matches - '//*[@class="stab portability"]' 'crate feature ethopoeia'
+//@ matches - '//*[@class="stab portability"]' 'crate feature zibib'
+//@ matches - '//*[@class="stab portability"]' 'crate feature poriform'
+//@ matches - '//*[@class="stab portability"]' 'crate feature ethopoeia'
 //
-// @matches - '//*[@class="stab portability"]' 'crate feature jurisconsult'
-// @matches - '//*[@class="stab portability"]' 'crate feature lithomancy'
-// @matches - '//*[@class="stab portability"]' 'crate feature boodle'
-// @matches - '//*[@class="stab portability"]' 'crate feature mistetch'
+//@ matches - '//*[@class="stab portability"]' 'crate feature jurisconsult'
+//@ matches - '//*[@class="stab portability"]' 'crate feature lithomancy'
+//@ matches - '//*[@class="stab portability"]' 'crate feature boodle'
+//@ matches - '//*[@class="stab portability"]' 'crate feature mistetch'
 //
-// @matches - '//*[@class="stab portability"]' 'crate feature copy'
+//@ matches - '//*[@class="stab portability"]' 'crate feature copy'
 #[doc(cfg(feature = "quarter"))]
 #[derive(Clone)]
 pub struct Quarter;
diff --git a/tests/rustdoc/doc-cfg.rs b/tests/rustdoc/doc-cfg.rs
index c4702d4109e..6c973b5666b 100644
--- a/tests/rustdoc/doc-cfg.rs
+++ b/tests/rustdoc/doc-cfg.rs
@@ -1,33 +1,33 @@
 #![feature(doc_cfg)]
 #![feature(target_feature, cfg_target_feature)]
 
-// @has doc_cfg/struct.Portable.html
-// @!has - '//*[@id="main-content"]/*[@class="item-info"]/*[@class="stab portability"]' ''
-// @has - '//*[@id="method.unix_and_arm_only_function"]' 'fn unix_and_arm_only_function()'
-// @has - '//*[@class="stab portability"]' 'Available on Unix and ARM only.'
-// @has - '//*[@id="method.wasi_and_wasm32_only_function"]' 'fn wasi_and_wasm32_only_function()'
-// @has - '//*[@class="stab portability"]' 'Available on WASI and WebAssembly only.'
+//@ has doc_cfg/struct.Portable.html
+//@ !has - '//*[@id="main-content"]/*[@class="item-info"]/*[@class="stab portability"]' ''
+//@ has - '//*[@id="method.unix_and_arm_only_function"]' 'fn unix_and_arm_only_function()'
+//@ has - '//*[@class="stab portability"]' 'Available on Unix and ARM only.'
+//@ has - '//*[@id="method.wasi_and_wasm32_only_function"]' 'fn wasi_and_wasm32_only_function()'
+//@ has - '//*[@class="stab portability"]' 'Available on WASI and WebAssembly only.'
 pub struct Portable;
 
-// @has doc_cfg/unix_only/index.html \
+//@ has doc_cfg/unix_only/index.html \
 //  '//*[@id="main-content"]/*[@class="item-info"]/*[@class="stab portability"]' \
 //  'Available on Unix only.'
-// @matches - '//*[@class="item-name"]//*[@class="stab portability"]' '\AARM\Z'
-// @count - '//*[@class="stab portability"]' 2
+//@ matches - '//*[@class="item-name"]//*[@class="stab portability"]' '\AARM\Z'
+//@ count - '//*[@class="stab portability"]' 2
 #[doc(cfg(unix))]
 pub mod unix_only {
-    // @has doc_cfg/unix_only/fn.unix_only_function.html \
+    //@ has doc_cfg/unix_only/fn.unix_only_function.html \
     //  '//*[@id="main-content"]/*[@class="item-info"]/*[@class="stab portability"]' \
     //  'Available on Unix only.'
-    // @count - '//*[@class="stab portability"]' 1
+    //@ count - '//*[@class="stab portability"]' 1
     pub fn unix_only_function() {
         content::should::be::irrelevant();
     }
 
-    // @has doc_cfg/unix_only/trait.ArmOnly.html \
+    //@ has doc_cfg/unix_only/trait.ArmOnly.html \
     //  '//*[@id="main-content"]/*[@class="item-info"]/*[@class="stab portability"]' \
     //  'Available on Unix and ARM only.'
-    // @count - '//*[@class="stab portability"]' 1
+    //@ count - '//*[@class="stab portability"]' 1
     #[doc(cfg(target_arch = "arm"))]
     pub trait ArmOnly {
         fn unix_and_arm_only_function();
@@ -39,25 +39,25 @@ pub mod unix_only {
     }
 }
 
-// @has doc_cfg/wasi_only/index.html \
+//@ has doc_cfg/wasi_only/index.html \
 //  '//*[@id="main-content"]/*[@class="item-info"]/*[@class="stab portability"]' \
 //  'Available on WASI only.'
-// @matches - '//*[@class="item-name"]//*[@class="stab portability"]' '\AWebAssembly\Z'
-// @count - '//*[@class="stab portability"]' 2
+//@ matches - '//*[@class="item-name"]//*[@class="stab portability"]' '\AWebAssembly\Z'
+//@ count - '//*[@class="stab portability"]' 2
 #[doc(cfg(target_os = "wasi"))]
 pub mod wasi_only {
-    // @has doc_cfg/wasi_only/fn.wasi_only_function.html \
+    //@ has doc_cfg/wasi_only/fn.wasi_only_function.html \
     //  '//*[@id="main-content"]/*[@class="item-info"]/*[@class="stab portability"]' \
     //  'Available on WASI only.'
-    // @count - '//*[@class="stab portability"]' 1
+    //@ count - '//*[@class="stab portability"]' 1
     pub fn wasi_only_function() {
         content::should::be::irrelevant();
     }
 
-    // @has doc_cfg/wasi_only/trait.Wasm32Only.html \
+    //@ has doc_cfg/wasi_only/trait.Wasm32Only.html \
     //  '//*[@id="main-content"]/*[@class="item-info"]/*[@class="stab portability"]' \
     //  'Available on WASI and WebAssembly only.'
-    // @count - '//*[@class="stab portability"]' 1
+    //@ count - '//*[@class="stab portability"]' 1
     #[doc(cfg(target_arch = "wasm32"))]
     pub trait Wasm32Only {
         fn wasi_and_wasm32_only_function();
@@ -73,19 +73,19 @@ pub mod wasi_only {
 // item as well
 
 // the portability header is different on the module view versus the full view
-// @has doc_cfg/index.html
-// @matches - '//*[@class="item-name"]//*[@class="stab portability"]' '\Aavx\Z'
+//@ has doc_cfg/index.html
+//@ matches - '//*[@class="item-name"]//*[@class="stab portability"]' '\Aavx\Z'
 
-// @has doc_cfg/fn.uses_target_feature.html
-// @has - '//*[@id="main-content"]/*[@class="item-info"]/*[@class="stab portability"]' \
+//@ has doc_cfg/fn.uses_target_feature.html
+//@ has - '//*[@id="main-content"]/*[@class="item-info"]/*[@class="stab portability"]' \
 //        'Available with target feature avx only.'
 #[target_feature(enable = "avx")]
 pub unsafe fn uses_target_feature() {
     content::should::be::irrelevant();
 }
 
-// @has doc_cfg/fn.uses_cfg_target_feature.html
-// @has - '//*[@id="main-content"]/*[@class="item-info"]/*[@class="stab portability"]' \
+//@ has doc_cfg/fn.uses_cfg_target_feature.html
+//@ has - '//*[@id="main-content"]/*[@class="item-info"]/*[@class="stab portability"]' \
 //        'Available with target feature avx only.'
 #[doc(cfg(target_feature = "avx"))]
 pub fn uses_cfg_target_feature() {
@@ -93,7 +93,7 @@ pub fn uses_cfg_target_feature() {
 }
 
 // multiple attributes should be allowed
-// @has doc_cfg/fn.multiple_attrs.html \
+//@ has doc_cfg/fn.multiple_attrs.html \
 //  '//*[@id="main-content"]/*[@class="item-info"]/*[@class="stab portability"]' \
 //  'Available on x and y and z only.'
 #[doc(cfg(x))]
diff --git a/tests/rustdoc/doc-hidden-method-13698.rs b/tests/rustdoc/doc-hidden-method-13698.rs
index 44bf8bfd8d2..5c0ad18ee29 100644
--- a/tests/rustdoc/doc-hidden-method-13698.rs
+++ b/tests/rustdoc/doc-hidden-method-13698.rs
@@ -7,7 +7,7 @@
 extern crate issue_13698;
 
 pub struct Foo;
-// @!has issue_13698/struct.Foo.html '//*[@id="method.foo"]' 'fn foo'
+//@ !has issue_13698/struct.Foo.html '//*[@id="method.foo"]' 'fn foo'
 impl issue_13698::Foo for Foo {}
 
 pub trait Bar {
@@ -15,5 +15,5 @@ pub trait Bar {
     fn bar(&self) {}
 }
 
-// @!has issue_13698/struct.Foo.html '//*[@id="method.bar"]' 'fn bar'
+//@ !has issue_13698/struct.Foo.html '//*[@id="method.bar"]' 'fn bar'
 impl Bar for Foo {}
diff --git a/tests/rustdoc/doc-hidden-private-67851-both.rs b/tests/rustdoc/doc-hidden-private-67851-both.rs
index e6eb6a68ffd..2e2190d8755 100644
--- a/tests/rustdoc/doc-hidden-private-67851-both.rs
+++ b/tests/rustdoc/doc-hidden-private-67851-both.rs
@@ -2,9 +2,9 @@
 // https://github.com/rust-lang/rust/issues/67851
 #![crate_name="foo"]
 
-// @has foo/struct.Hidden.html
+//@ has foo/struct.Hidden.html
 #[doc(hidden)]
 pub struct Hidden;
 
-// @has foo/struct.Private.html
+//@ has foo/struct.Private.html
 struct Private;
diff --git a/tests/rustdoc/doc-hidden-private-67851-hidden.rs b/tests/rustdoc/doc-hidden-private-67851-hidden.rs
index 9767f9c84f9..a811a04a668 100644
--- a/tests/rustdoc/doc-hidden-private-67851-hidden.rs
+++ b/tests/rustdoc/doc-hidden-private-67851-hidden.rs
@@ -2,9 +2,9 @@
 // https://github.com/rust-lang/rust/issues/67851
 #![crate_name="foo"]
 
-// @has foo/struct.Hidden.html
+//@ has foo/struct.Hidden.html
 #[doc(hidden)]
 pub struct Hidden;
 
-// @!has foo/struct.Private.html
+//@ !has foo/struct.Private.html
 struct Private;
diff --git a/tests/rustdoc/doc-hidden-private-67851-neither.rs b/tests/rustdoc/doc-hidden-private-67851-neither.rs
index 6c6e84da43d..1f70ceefe44 100644
--- a/tests/rustdoc/doc-hidden-private-67851-neither.rs
+++ b/tests/rustdoc/doc-hidden-private-67851-neither.rs
@@ -1,9 +1,9 @@
 // https://github.com/rust-lang/rust/issues/67851
 #![crate_name="foo"]
 
-// @!has foo/struct.Hidden.html
+//@ !has foo/struct.Hidden.html
 #[doc(hidden)]
 pub struct Hidden;
 
-// @!has foo/struct.Private.html
+//@ !has foo/struct.Private.html
 struct Private;
diff --git a/tests/rustdoc/doc-hidden-private-67851-private.rs b/tests/rustdoc/doc-hidden-private-67851-private.rs
index 4aa39f5b789..f6f546ad5ea 100644
--- a/tests/rustdoc/doc-hidden-private-67851-private.rs
+++ b/tests/rustdoc/doc-hidden-private-67851-private.rs
@@ -2,9 +2,9 @@
 // https://github.com/rust-lang/rust/issues/67851
 #![crate_name="foo"]
 
-// @!has foo/struct.Hidden.html
+//@ !has foo/struct.Hidden.html
 #[doc(hidden)]
 pub struct Hidden;
 
-// @has foo/struct.Private.html
+//@ has foo/struct.Private.html
 struct Private;
diff --git a/tests/rustdoc/doc-hidden-trait-implementors-33069.rs b/tests/rustdoc/doc-hidden-trait-implementors-33069.rs
index 35570668ea1..d5ee3d09276 100644
--- a/tests/rustdoc/doc-hidden-trait-implementors-33069.rs
+++ b/tests/rustdoc/doc-hidden-trait-implementors-33069.rs
@@ -8,6 +8,6 @@ pub mod hidden {
     pub struct Foo;
 }
 
-// @has issue_33069/trait.Bar.html
-// @!has - '//code' 'impl Bar for Foo'
+//@ has issue_33069/trait.Bar.html
+//@ !has - '//code' 'impl Bar for Foo'
 impl Bar for hidden::Foo {}
diff --git a/tests/rustdoc/doc_auto_cfg_nested_impl.rs b/tests/rustdoc/doc_auto_cfg_nested_impl.rs
index 4d73e0d829a..f85d7b23637 100644
--- a/tests/rustdoc/doc_auto_cfg_nested_impl.rs
+++ b/tests/rustdoc/doc_auto_cfg_nested_impl.rs
@@ -8,8 +8,8 @@ pub struct S;
 pub trait MyTrait1 {}
 pub trait MyTrait2 {}
 
-// @has foo/struct.S.html
-// @has - '//*[@id="impl-MyTrait1-for-S"]//*[@class="stab portability"]' \
+//@ has foo/struct.S.html
+//@ has - '//*[@id="impl-MyTrait1-for-S"]//*[@class="stab portability"]' \
 //        'Available on non-crate feature coolstuff only.'
 #[cfg(not(feature = "coolstuff"))]
 impl MyTrait1 for S {}
@@ -18,7 +18,7 @@ impl MyTrait1 for S {}
 mod submod {
     use crate::{S, MyTrait2};
     // This impl should also have the `not(feature = "coolstuff")`.
-    // @has - '//*[@id="impl-MyTrait2-for-S"]//*[@class="stab portability"]' \
+    //@ has - '//*[@id="impl-MyTrait2-for-S"]//*[@class="stab portability"]' \
     //        'Available on non-crate feature coolstuff only.'
     impl MyTrait2 for S {}
 }
diff --git a/tests/rustdoc/doctest/doctest-escape-boring-41783.rs b/tests/rustdoc/doctest/doctest-escape-boring-41783.rs
index 7782e148fd9..2d614f63da6 100644
--- a/tests/rustdoc/doctest/doctest-escape-boring-41783.rs
+++ b/tests/rustdoc/doctest/doctest-escape-boring-41783.rs
@@ -1,14 +1,14 @@
 // https://github.com/rust-lang/rust/issues/41783
 #![crate_name="foo"]
 
-// @has foo/struct.Foo.html
-// @!hasraw - 'space'
-// @!hasraw - 'comment'
-// @hasraw - '<span class="attr">#[outer]'
-// @!hasraw - '<span class="attr">#[outer]</span>'
-// @hasraw - '#![inner]</span>'
-// @!hasraw - '<span class="attr">#![inner]</span>'
-// @snapshot 'codeblock' - '//*[@class="toggle top-doc"]/*[@class="docblock"]//pre/code'
+//@ has foo/struct.Foo.html
+//@ !hasraw - 'space'
+//@ !hasraw - 'comment'
+//@ hasraw - '<span class="attr">#[outer]'
+//@ !hasraw - '<span class="attr">#[outer]</span>'
+//@ hasraw - '#![inner]</span>'
+//@ !hasraw - '<span class="attr">#![inner]</span>'
+//@ snapshot 'codeblock' - '//*[@class="toggle top-doc"]/*[@class="docblock"]//pre/code'
 
 /// ```no_run
 /// # # space
diff --git a/tests/rustdoc/document-hidden-items-15347.rs b/tests/rustdoc/document-hidden-items-15347.rs
index bf3c73f0ba1..ee19e793020 100644
--- a/tests/rustdoc/document-hidden-items-15347.rs
+++ b/tests/rustdoc/document-hidden-items-15347.rs
@@ -3,6 +3,6 @@
 
 #![crate_name="issue_15347"]
 
-// @has issue_15347/fn.foo.html
+//@ has issue_15347/fn.foo.html
 #[doc(hidden)]
 pub fn foo() {}
diff --git a/tests/rustdoc/double-hyphen-to-dash.rs b/tests/rustdoc/double-hyphen-to-dash.rs
index 66905f90cfc..009de4faf41 100644
--- a/tests/rustdoc/double-hyphen-to-dash.rs
+++ b/tests/rustdoc/double-hyphen-to-dash.rs
@@ -2,8 +2,8 @@
 
 #![crate_name = "foo"]
 
-// @has 'foo/index.html' '//*[@class="desc docblock-short"]' '–'
-// @has 'foo/struct.Bar.html' '//*[@class="docblock"]' '–'
+//@ has 'foo/index.html' '//*[@class="desc docblock-short"]' '–'
+//@ has 'foo/struct.Bar.html' '//*[@class="docblock"]' '–'
 
 /// --
 pub struct Bar;
diff --git a/tests/rustdoc/double-quote-escape.rs b/tests/rustdoc/double-quote-escape.rs
index 4f4436377a0..9c8fb8fc6da 100644
--- a/tests/rustdoc/double-quote-escape.rs
+++ b/tests/rustdoc/double-quote-escape.rs
@@ -6,6 +6,6 @@ pub trait Foo<T> {
 
 pub struct Bar;
 
-// @has foo/struct.Bar.html
-// @has - '//*[@class="sidebar-elems"]//section//a[@href="#impl-Foo%3Cunsafe+extern+%22C%22+fn()%3E-for-Bar"]' 'Foo<unsafe extern "C" fn()>'
+//@ has foo/struct.Bar.html
+//@ has - '//*[@class="sidebar-elems"]//section//a[@href="#impl-Foo%3Cunsafe+extern+%22C%22+fn()%3E-for-Bar"]' 'Foo<unsafe extern "C" fn()>'
 impl Foo<unsafe extern "C" fn()> for Bar {}
diff --git a/tests/rustdoc/duplicate-cfg.rs b/tests/rustdoc/duplicate-cfg.rs
index 12846c5c17a..87c089e9735 100644
--- a/tests/rustdoc/duplicate-cfg.rs
+++ b/tests/rustdoc/duplicate-cfg.rs
@@ -1,53 +1,53 @@
 #![crate_name = "foo"]
 #![feature(doc_cfg)]
 
-// @has 'foo/index.html'
-// @matches '-' '//*[@class="item-name"]//*[@class="stab portability"]' '^sync$'
-// @has '-' '//*[@class="item-name"]//*[@class="stab portability"]/@title' 'Available on crate feature `sync` only'
+//@ has 'foo/index.html'
+//@ matches '-' '//*[@class="item-name"]//*[@class="stab portability"]' '^sync$'
+//@ has '-' '//*[@class="item-name"]//*[@class="stab portability"]/@title' 'Available on crate feature `sync` only'
 
-// @has 'foo/struct.Foo.html'
-// @has '-' '//*[@class="stab portability"]' 'sync'
+//@ has 'foo/struct.Foo.html'
+//@ has '-' '//*[@class="stab portability"]' 'sync'
 #[doc(cfg(feature = "sync"))]
 #[doc(cfg(feature = "sync"))]
 /// my feature sync struct
 pub struct Foo;
 
-// @has 'foo/bar/index.html'
-// @has '-' '//*[@class="stab portability"]' 'Available on crate feature sync only.'
+//@ has 'foo/bar/index.html'
+//@ has '-' '//*[@class="stab portability"]' 'Available on crate feature sync only.'
 #[doc(cfg(feature = "sync"))]
 pub mod bar {
-    // @has 'foo/bar/struct.Bar.html'
-    // @has '-' '//*[@class="stab portability"]' 'Available on crate feature sync only.'
+    //@ has 'foo/bar/struct.Bar.html'
+    //@ has '-' '//*[@class="stab portability"]' 'Available on crate feature sync only.'
     #[doc(cfg(feature = "sync"))]
     pub struct Bar;
 }
 
-// @has 'foo/baz/index.html'
-// @has '-' '//*[@class="stab portability"]' 'Available on crate features sync and send only.'
+//@ has 'foo/baz/index.html'
+//@ has '-' '//*[@class="stab portability"]' 'Available on crate features sync and send only.'
 #[doc(cfg(all(feature = "sync", feature = "send")))]
 pub mod baz {
-    // @has 'foo/baz/struct.Baz.html'
-    // @has '-' '//*[@class="stab portability"]' 'Available on crate features sync and send only.'
+    //@ has 'foo/baz/struct.Baz.html'
+    //@ has '-' '//*[@class="stab portability"]' 'Available on crate features sync and send only.'
     #[doc(cfg(feature = "sync"))]
     pub struct Baz;
 }
 
-// @has 'foo/qux/index.html'
-// @has '-' '//*[@class="stab portability"]' 'Available on crate feature sync only.'
+//@ has 'foo/qux/index.html'
+//@ has '-' '//*[@class="stab portability"]' 'Available on crate feature sync only.'
 #[doc(cfg(feature = "sync"))]
 pub mod qux {
-    // @has 'foo/qux/struct.Qux.html'
-    // @has '-' '//*[@class="stab portability"]' 'Available on crate features sync and send only.'
+    //@ has 'foo/qux/struct.Qux.html'
+    //@ has '-' '//*[@class="stab portability"]' 'Available on crate features sync and send only.'
     #[doc(cfg(all(feature = "sync", feature = "send")))]
     pub struct Qux;
 }
 
-// @has 'foo/quux/index.html'
-// @has '-' '//*[@class="stab portability"]' 'Available on crate feature sync and crate feature send and foo only.'
+//@ has 'foo/quux/index.html'
+//@ has '-' '//*[@class="stab portability"]' 'Available on crate feature sync and crate feature send and foo only.'
 #[doc(cfg(all(feature = "sync", feature = "send", foo)))]
 pub mod quux {
-    // @has 'foo/quux/struct.Quux.html'
-    // @has '-' '//*[@class="stab portability"]' 'Available on crate feature sync and crate feature send and foo and bar only.'
+    //@ has 'foo/quux/struct.Quux.html'
+    //@ has '-' '//*[@class="stab portability"]' 'Available on crate feature sync and crate feature send and foo and bar only.'
     #[doc(cfg(all(feature = "send", feature = "sync", bar)))]
     pub struct Quux;
 }
diff --git a/tests/rustdoc/duplicate-flags.rs b/tests/rustdoc/duplicate-flags.rs
index c0df181397b..230eedfba62 100644
--- a/tests/rustdoc/duplicate-flags.rs
+++ b/tests/rustdoc/duplicate-flags.rs
@@ -1,4 +1,4 @@
 //@ compile-flags: --document-private-items --document-private-items
 
-// @has duplicate_flags/struct.Private.html
+//@ has duplicate_flags/struct.Private.html
 struct Private;
diff --git a/tests/rustdoc/duplicate_impls/issue-33054.rs b/tests/rustdoc/duplicate_impls/issue-33054.rs
index 4c2071b8322..24ff30668cf 100644
--- a/tests/rustdoc/duplicate_impls/issue-33054.rs
+++ b/tests/rustdoc/duplicate_impls/issue-33054.rs
@@ -1,13 +1,13 @@
 // ignore-tidy-linelength
 
-// @has issue_33054/impls/struct.Foo.html
-// @has - '//h3[@class="code-header"]' 'impl Foo'
-// @has - '//h3[@class="code-header"]' 'impl Bar for Foo'
-// @count - '//*[@id="trait-implementations-list"]//*[@class="impl"]' 1
-// @count - '//*[@id="main-content"]/div[@id="implementations-list"]/details/summary/*[@class="impl"]' 1
-// @has issue_33054/impls/bar/trait.Bar.html
-// @has - '//h3[@class="code-header"]' 'impl Bar for Foo'
-// @count - '//*[@class="struct"]' 1
+//@ has issue_33054/impls/struct.Foo.html
+//@ has - '//h3[@class="code-header"]' 'impl Foo'
+//@ has - '//h3[@class="code-header"]' 'impl Bar for Foo'
+//@ count - '//*[@id="trait-implementations-list"]//*[@class="impl"]' 1
+//@ count - '//*[@id="main-content"]/div[@id="implementations-list"]/details/summary/*[@class="impl"]' 1
+//@ has issue_33054/impls/bar/trait.Bar.html
+//@ has - '//h3[@class="code-header"]' 'impl Bar for Foo'
+//@ count - '//*[@class="struct"]' 1
 pub mod impls;
 
 #[doc(inline)]
diff --git a/tests/rustdoc/duplicated-glob-reexport-60522.rs b/tests/rustdoc/duplicated-glob-reexport-60522.rs
index 50def2c3cd9..a75a21c2dac 100644
--- a/tests/rustdoc/duplicated-glob-reexport-60522.rs
+++ b/tests/rustdoc/duplicated-glob-reexport-60522.rs
@@ -4,14 +4,14 @@
 
 #![crate_name = "foo"]
 
-// @has 'foo/index.html'
-// @count - '//*[@id="main-content"]/*[@class="section-header"]' 1
-// @has - '//*[@id="main-content"]/*[@class="section-header"]' 'Modules'
-// @count - '//*[@id="main-content"]/*[@class="item-table"]//*[@class="mod"]' 2
-// @has - '//*[@id="main-content"]//*[@class="mod"]' 'banana'
-// @has - '//*[@id="main-content"]//*[@href="banana/index.html"]' 'banana'
-// @has - '//*[@id="main-content"]//*[@class="mod"]' 'peach'
-// @has - '//*[@id="main-content"]//*[@href="peach/index.html"]' 'peach'
+//@ has 'foo/index.html'
+//@ count - '//*[@id="main-content"]/*[@class="section-header"]' 1
+//@ has - '//*[@id="main-content"]/*[@class="section-header"]' 'Modules'
+//@ count - '//*[@id="main-content"]/*[@class="item-table"]//*[@class="mod"]' 2
+//@ has - '//*[@id="main-content"]//*[@class="mod"]' 'banana'
+//@ has - '//*[@id="main-content"]//*[@href="banana/index.html"]' 'banana'
+//@ has - '//*[@id="main-content"]//*[@class="mod"]' 'peach'
+//@ has - '//*[@id="main-content"]//*[@href="peach/index.html"]' 'peach'
 
 pub use crate::my_crate::*;
 
@@ -24,16 +24,16 @@ mod my_crate {
     }
 }
 
-// @has 'foo/banana/index.html'
-// @count - '//*[@id="main-content"]//*[@class="struct"]' 1
-// @has - '//*[@id="main-content"]//*[@class="struct"]' 'Brown'
+//@ has 'foo/banana/index.html'
+//@ count - '//*[@id="main-content"]//*[@class="struct"]' 1
+//@ has - '//*[@id="main-content"]//*[@class="struct"]' 'Brown'
 pub mod banana {
     pub struct Brown;
 }
 
-// @has 'foo/peach/index.html'
-// @count - '//*[@id="main-content"]//*[@class="struct"]' 1
-// @has - '//*[@id="main-content"]//*[@class="struct"]' 'Pungent'
+//@ has 'foo/peach/index.html'
+//@ count - '//*[@id="main-content"]//*[@class="struct"]' 1
+//@ has - '//*[@id="main-content"]//*[@class="struct"]' 'Pungent'
 pub mod peach {
     pub struct Pungent;
 }
diff --git a/tests/rustdoc/duplicated_impl.rs b/tests/rustdoc/duplicated_impl.rs
index f32cf310055..e7828885cc1 100644
--- a/tests/rustdoc/duplicated_impl.rs
+++ b/tests/rustdoc/duplicated_impl.rs
@@ -6,8 +6,8 @@
 // We check that there is only one "impl<T> Something<Whatever> for T" listed in the
 // blanket implementations.
 
-// @has 'foo/struct.Whatever.html'
-// @count - '//*[@id="blanket-implementations-list"]/section[@class="impl"]' 1
+//@ has 'foo/struct.Whatever.html'
+//@ count - '//*[@id="blanket-implementations-list"]/section[@class="impl"]' 1
 
 pub trait Something<T> { }
 pub struct Whatever;
diff --git a/tests/rustdoc/early-unindent.rs b/tests/rustdoc/early-unindent.rs
index 791a452c957..33342aaee0e 100644
--- a/tests/rustdoc/early-unindent.rs
+++ b/tests/rustdoc/early-unindent.rs
@@ -6,8 +6,8 @@ pub mod app {
     pub struct S;
 
     impl S {
-        // @has 'foo/app/struct.S.html'
-        // @has - '//a[@href="../enums/enum.Foo.html#method.by_name"]' 'Foo::by_name'
+        //@ has 'foo/app/struct.S.html'
+        //@ has - '//a[@href="../enums/enum.Foo.html#method.by_name"]' 'Foo::by_name'
         /**
         Doc comment hello! [`Foo::by_name`](`crate::enums::Foo::by_name`).
         */
diff --git a/tests/rustdoc/elided-lifetime.rs b/tests/rustdoc/elided-lifetime.rs
index 4df381a6f68..259325762c6 100644
--- a/tests/rustdoc/elided-lifetime.rs
+++ b/tests/rustdoc/elided-lifetime.rs
@@ -10,34 +10,34 @@
 pub struct Ref<'a>(&'a u32);
 type ARef<'a> = Ref<'a>;
 
-// @has foo/fn.test1.html
-// @matchesraw - "Ref</a>&lt;'_&gt;"
+//@ has foo/fn.test1.html
+//@ matchesraw - "Ref</a>&lt;'_&gt;"
 pub fn test1(a: &u32) -> Ref {
     Ref(a)
 }
 
-// @has foo/fn.test2.html
-// @matchesraw - "Ref</a>&lt;'_&gt;"
+//@ has foo/fn.test2.html
+//@ matchesraw - "Ref</a>&lt;'_&gt;"
 pub fn test2(a: &u32) -> Ref<'_> {
     Ref(a)
 }
 
-// @has foo/fn.test3.html
-// @matchesraw - "Ref</a>&lt;'_&gt;"
+//@ has foo/fn.test3.html
+//@ matchesraw - "Ref</a>&lt;'_&gt;"
 pub fn test3(a: &u32) -> ARef {
     Ref(a)
 }
 
-// @has foo/fn.test4.html
-// @matchesraw - "Ref</a>&lt;'_&gt;"
+//@ has foo/fn.test4.html
+//@ matchesraw - "Ref</a>&lt;'_&gt;"
 pub fn test4(a: &u32) -> ARef<'_> {
     Ref(a)
 }
 
 // Ensure external paths in inlined docs also display elided lifetime
-// @has foo/bar/fn.test5.html
-// @matchesraw - "Ref</a>&lt;'_&gt;"
-// @has foo/bar/fn.test6.html
-// @matchesraw - "Ref</a>&lt;'_&gt;"
+//@ has foo/bar/fn.test5.html
+//@ matchesraw - "Ref</a>&lt;'_&gt;"
+//@ has foo/bar/fn.test6.html
+//@ matchesraw - "Ref</a>&lt;'_&gt;"
 #[doc(inline)]
 pub extern crate bar;
diff --git a/tests/rustdoc/empty-impl-block-private-with-doc.rs b/tests/rustdoc/empty-impl-block-private-with-doc.rs
index 21c860c0923..5dc7e1aed7a 100644
--- a/tests/rustdoc/empty-impl-block-private-with-doc.rs
+++ b/tests/rustdoc/empty-impl-block-private-with-doc.rs
@@ -4,13 +4,13 @@
 #![allow(incomplete_features)]
 #![crate_name = "foo"]
 
-// @has 'foo/struct.Foo.html'
+//@ has 'foo/struct.Foo.html'
 pub struct Foo;
 
 // There are 3 impl blocks with public item and one that should not be displayed
 // by default because it only contains private items (but not in this case because
 // we used `--document-private-items`).
-// @count - '//*[@class="impl"]' 'impl Foo' 4
+//@ count - '//*[@class="impl"]' 'impl Foo' 4
 
 // Impl block only containing private items should not be displayed unless the
 // `--document-private-items` flag is used.
diff --git a/tests/rustdoc/empty-impl-block-private.rs b/tests/rustdoc/empty-impl-block-private.rs
index d44b4a47cee..2ee65d1a969 100644
--- a/tests/rustdoc/empty-impl-block-private.rs
+++ b/tests/rustdoc/empty-impl-block-private.rs
@@ -2,12 +2,12 @@
 #![allow(incomplete_features)]
 #![crate_name = "foo"]
 
-// @has 'foo/struct.Foo.html'
+//@ has 'foo/struct.Foo.html'
 pub struct Foo;
 
 // There are 3 impl blocks with public item and one that should not be displayed
 // because it only contains private items.
-// @count - '//*[@class="impl"]' 'impl Foo' 3
+//@ count - '//*[@class="impl"]' 'impl Foo' 3
 
 // Impl block only containing private items should not be displayed.
 /// Private
diff --git a/tests/rustdoc/empty-impl-block.rs b/tests/rustdoc/empty-impl-block.rs
index da780580bd0..91fd4a64ef9 100644
--- a/tests/rustdoc/empty-impl-block.rs
+++ b/tests/rustdoc/empty-impl-block.rs
@@ -1,20 +1,20 @@
 #![crate_name = "foo"]
 
-// @has 'foo/struct.Foo.html'
+//@ has 'foo/struct.Foo.html'
 pub struct Foo;
 
-// @has - '//*[@class="docblock"]' 'Hello empty impl block!'
-// @has - '//*[@class="item-info"]' 'This impl block contains no items.'
+//@ has - '//*[@class="docblock"]' 'Hello empty impl block!'
+//@ has - '//*[@class="item-info"]' 'This impl block contains no items.'
 /// Hello empty impl block!
 impl Foo {}
 // We ensure that this empty impl block without doc isn't rendered.
-// @count - '//*[@class="impl"]' 'impl Foo' 1
+//@ count - '//*[@class="impl"]' 'impl Foo' 1
 impl Foo {}
 
 // Just to ensure that empty trait impl blocks are rendered.
 pub struct Another;
 pub trait Bar {}
 
-// @has 'foo/struct.Another.html'
-// @has - '//h3[@class="code-header"]' 'impl Bar for Another'
+//@ has 'foo/struct.Another.html'
+//@ has - '//h3[@class="code-header"]' 'impl Bar for Another'
 impl Bar for Another {}
diff --git a/tests/rustdoc/empty-impls.rs b/tests/rustdoc/empty-impls.rs
index 83902d6f7ab..912a8d3d913 100644
--- a/tests/rustdoc/empty-impls.rs
+++ b/tests/rustdoc/empty-impls.rs
@@ -1,19 +1,19 @@
 #![crate_name = "foo"]
 
-// @has foo/struct.Foo.html
-// @has - '//div[@id="synthetic-implementations-list"]/*[@id="impl-Send-for-Foo"]' 'impl Send for Foo'
+//@ has foo/struct.Foo.html
+//@ has - '//div[@id="synthetic-implementations-list"]/*[@id="impl-Send-for-Foo"]' 'impl Send for Foo'
 pub struct Foo;
 
 pub trait EmptyTrait {}
 
-// @has - '//div[@id="trait-implementations-list"]/*[@id="impl-EmptyTrait-for-Foo"]' 'impl EmptyTrait for Foo'
+//@ has - '//div[@id="trait-implementations-list"]/*[@id="impl-EmptyTrait-for-Foo"]' 'impl EmptyTrait for Foo'
 impl EmptyTrait for Foo {}
 
 pub trait NotEmpty {
     fn foo(&self);
 }
 
-// @has - '//div[@id="trait-implementations-list"]/details/summary/*[@id="impl-NotEmpty-for-Foo"]' 'impl NotEmpty for Foo'
+//@ has - '//div[@id="trait-implementations-list"]/details/summary/*[@id="impl-NotEmpty-for-Foo"]' 'impl NotEmpty for Foo'
 impl NotEmpty for Foo {
     fn foo(&self) {}
 }
diff --git a/tests/rustdoc/empty-mod-private.rs b/tests/rustdoc/empty-mod-private.rs
index 7e78aac1764..4e408e3d424 100644
--- a/tests/rustdoc/empty-mod-private.rs
+++ b/tests/rustdoc/empty-mod-private.rs
@@ -1,16 +1,16 @@
 //@ compile-flags: --document-private-items
 
-// @has 'empty_mod_private/index.html' '//a[@href="foo/index.html"]' 'foo'
-// @hasraw 'empty_mod_private/sidebar-items.js' 'foo'
-// @matches 'empty_mod_private/foo/index.html' '//h1' 'Module empty_mod_private::foo'
+//@ has 'empty_mod_private/index.html' '//a[@href="foo/index.html"]' 'foo'
+//@ hasraw 'empty_mod_private/sidebar-items.js' 'foo'
+//@ matches 'empty_mod_private/foo/index.html' '//h1' 'Module empty_mod_private::foo'
 mod foo {}
 
-// @has 'empty_mod_private/index.html' '//a[@href="bar/index.html"]' 'bar'
-// @hasraw 'empty_mod_private/sidebar-items.js' 'bar'
-// @matches 'empty_mod_private/bar/index.html' '//h1' 'Module empty_mod_private::bar'
+//@ has 'empty_mod_private/index.html' '//a[@href="bar/index.html"]' 'bar'
+//@ hasraw 'empty_mod_private/sidebar-items.js' 'bar'
+//@ matches 'empty_mod_private/bar/index.html' '//h1' 'Module empty_mod_private::bar'
 mod bar {
-    // @has 'empty_mod_private/bar/index.html' '//a[@href="baz/index.html"]' 'baz'
-    // @hasraw 'empty_mod_private/bar/sidebar-items.js' 'baz'
-    // @matches 'empty_mod_private/bar/baz/index.html' '//h1' 'Module empty_mod_private::bar::baz'
+    //@ has 'empty_mod_private/bar/index.html' '//a[@href="baz/index.html"]' 'baz'
+    //@ hasraw 'empty_mod_private/bar/sidebar-items.js' 'baz'
+    //@ matches 'empty_mod_private/bar/baz/index.html' '//h1' 'Module empty_mod_private::bar::baz'
     mod baz {}
 }
diff --git a/tests/rustdoc/empty-mod-public.rs b/tests/rustdoc/empty-mod-public.rs
index c0bac40212c..b5a63525524 100644
--- a/tests/rustdoc/empty-mod-public.rs
+++ b/tests/rustdoc/empty-mod-public.rs
@@ -1,14 +1,14 @@
-// @has 'empty_mod_public/index.html' '//a[@href="foo/index.html"]' 'foo'
-// @hasraw 'empty_mod_public/sidebar-items.js' 'foo'
-// @matches 'empty_mod_public/foo/index.html' '//h1' 'Module empty_mod_public::foo'
+//@ has 'empty_mod_public/index.html' '//a[@href="foo/index.html"]' 'foo'
+//@ hasraw 'empty_mod_public/sidebar-items.js' 'foo'
+//@ matches 'empty_mod_public/foo/index.html' '//h1' 'Module empty_mod_public::foo'
 pub mod foo {}
 
-// @has 'empty_mod_public/index.html' '//a[@href="bar/index.html"]' 'bar'
-// @hasraw 'empty_mod_public/sidebar-items.js' 'bar'
-// @matches 'empty_mod_public/bar/index.html' '//h1' 'Module empty_mod_public::bar'
+//@ has 'empty_mod_public/index.html' '//a[@href="bar/index.html"]' 'bar'
+//@ hasraw 'empty_mod_public/sidebar-items.js' 'bar'
+//@ matches 'empty_mod_public/bar/index.html' '//h1' 'Module empty_mod_public::bar'
 pub mod bar {
-    // @has 'empty_mod_public/bar/index.html' '//a[@href="baz/index.html"]' 'baz'
-    // @hasraw 'empty_mod_public/bar/sidebar-items.js' 'baz'
-    // @matches 'empty_mod_public/bar/baz/index.html' '//h1' 'Module empty_mod_public::bar::baz'
+    //@ has 'empty_mod_public/bar/index.html' '//a[@href="baz/index.html"]' 'baz'
+    //@ hasraw 'empty_mod_public/bar/sidebar-items.js' 'baz'
+    //@ matches 'empty_mod_public/bar/baz/index.html' '//h1' 'Module empty_mod_public::bar::baz'
     pub mod baz {}
 }
diff --git a/tests/rustdoc/empty-section.rs b/tests/rustdoc/empty-section.rs
index 0d6afb0e444..71ebc66d695 100644
--- a/tests/rustdoc/empty-section.rs
+++ b/tests/rustdoc/empty-section.rs
@@ -3,8 +3,8 @@
 
 pub struct Foo;
 
-// @has foo/struct.Foo.html
-// @!hasraw - 'Auto Trait Implementations'
+//@ has foo/struct.Foo.html
+//@ !hasraw - 'Auto Trait Implementations'
 impl !Send for Foo {}
 impl !Sync for Foo {}
 impl !std::marker::Freeze for Foo {}
diff --git a/tests/rustdoc/ensure-src-link.rs b/tests/rustdoc/ensure-src-link.rs
index f95b5f2d424..4156fdcba59 100644
--- a/tests/rustdoc/ensure-src-link.rs
+++ b/tests/rustdoc/ensure-src-link.rs
@@ -2,5 +2,5 @@
 
 // This test ensures that the [src] link is present on traits items.
 
-// @has foo/trait.Iterator.html '//*[@id="method.zip"]//a[@class="src"]' "source"
+//@ has foo/trait.Iterator.html '//*[@id="method.zip"]//a[@class="src"]' "source"
 pub use std::iter::Iterator;
diff --git a/tests/rustdoc/enum-headings.rs b/tests/rustdoc/enum-headings.rs
index 2e5c34391c4..6deabf1cd9a 100644
--- a/tests/rustdoc/enum-headings.rs
+++ b/tests/rustdoc/enum-headings.rs
@@ -1,25 +1,25 @@
 #![crate_name = "foo"]
-// @has foo/enum.Token.html
+//@ has foo/enum.Token.html
 /// A token!
 /// # First
 /// Some following text...
-// @has - '//h2[@id="first"]' "First"
+//@ has - '//h2[@id="first"]' "First"
 pub enum Token {
     /// A declaration!
     /// # Variant-First
     /// Some following text...
-    // @has - '//h4[@id="variant-first"]' "Variant-First"
+    //@ has - '//h4[@id="variant-first"]' "Variant-First"
     Declaration {
         /// A version!
         /// # Variant-Field-First
         /// Some following text...
-        // @has - '//h5[@id="variant-field-first"]' "Variant-Field-First"
+        //@ has - '//h5[@id="variant-field-first"]' "Variant-Field-First"
         version: String,
     },
     /// A Zoople!
     /// # Variant-First
     Zoople(
-        // @has - '//h5[@id="variant-tuple-field-first"]' "Variant-Tuple-Field-First"
+        //@ has - '//h5[@id="variant-tuple-field-first"]' "Variant-Tuple-Field-First"
         /// Zoople's first variant!
         /// # Variant-Tuple-Field-First
         /// Some following text...
@@ -28,13 +28,13 @@ pub enum Token {
     /// Unfinished business!
     /// # Non-Exhaustive-First
     /// Some following text...
-    // @has - '//h4[@id="non-exhaustive-first"]' "Non-Exhaustive-First"
+    //@ has - '//h4[@id="non-exhaustive-first"]' "Non-Exhaustive-First"
     #[non_exhaustive]
     Unfinished {
         /// This is x.
         /// # X-First
         /// Some following text...
-        // @has - '//h5[@id="x-first"]' "X-First"
+        //@ has - '//h5[@id="x-first"]' "X-First"
         x: usize,
     },
 }
diff --git a/tests/rustdoc/enum-variant-doc-hidden-field-88600.rs b/tests/rustdoc/enum-variant-doc-hidden-field-88600.rs
index 31d96e9db75..f1d461c66c3 100644
--- a/tests/rustdoc/enum-variant-doc-hidden-field-88600.rs
+++ b/tests/rustdoc/enum-variant-doc-hidden-field-88600.rs
@@ -8,26 +8,26 @@ pub struct H;
 // Denotes a field which should not be hidden (shown).
 pub struct S;
 
-// @has foo/enum.FooEnum.html
+//@ has foo/enum.FooEnum.html
 pub enum FooEnum {
-    // @has - '//*[@id="variant.HiddenTupleItem"]//h3' 'HiddenTupleItem(/* private fields */)'
-    // @count - '//*[@id="variant.HiddenTupleItem.field.0"]' 0
+    //@ has - '//*[@id="variant.HiddenTupleItem"]//h3' 'HiddenTupleItem(/* private fields */)'
+    //@ count - '//*[@id="variant.HiddenTupleItem.field.0"]' 0
     HiddenTupleItem(#[doc(hidden)] H),
-    // @has - '//*[@id="variant.MultipleHidden"]//h3' 'MultipleHidden(/* private fields */)'
-    // @count - '//*[@id="variant.MultipleHidden.field.0"]' 0
-    // @count - '//*[@id="variant.MultipleHidden.field.1"]' 0
+    //@ has - '//*[@id="variant.MultipleHidden"]//h3' 'MultipleHidden(/* private fields */)'
+    //@ count - '//*[@id="variant.MultipleHidden.field.0"]' 0
+    //@ count - '//*[@id="variant.MultipleHidden.field.1"]' 0
     MultipleHidden(#[doc(hidden)] H, #[doc(hidden)] H),
-    // @has - '//*[@id="variant.MixedHiddenFirst"]//h3' 'MixedHiddenFirst(_, S)'
-    // @count - '//*[@id="variant.MixedHiddenFirst.field.0"]' 0
-    // @has - '//*[@id="variant.MixedHiddenFirst.field.1"]' '1: S'
+    //@ has - '//*[@id="variant.MixedHiddenFirst"]//h3' 'MixedHiddenFirst(_, S)'
+    //@ count - '//*[@id="variant.MixedHiddenFirst.field.0"]' 0
+    //@ has - '//*[@id="variant.MixedHiddenFirst.field.1"]' '1: S'
     MixedHiddenFirst(#[doc(hidden)] H, /** dox */ S),
-    // @has - '//*[@id="variant.MixedHiddenLast"]//h3' 'MixedHiddenLast(S, _)'
-    // @has - '//*[@id="variant.MixedHiddenLast.field.0"]' '0: S'
-    // @count - '//*[@id="variant.MixedHiddenLast.field.1"]' 0
+    //@ has - '//*[@id="variant.MixedHiddenLast"]//h3' 'MixedHiddenLast(S, _)'
+    //@ has - '//*[@id="variant.MixedHiddenLast.field.0"]' '0: S'
+    //@ count - '//*[@id="variant.MixedHiddenLast.field.1"]' 0
     MixedHiddenLast(/** dox */ S, #[doc(hidden)] H),
-    // @has - '//*[@id="variant.HiddenStruct"]//h3' 'HiddenStruct'
-    // @count - '//*[@id="variant.HiddenStruct.field.h"]' 0
-    // @has - '//*[@id="variant.HiddenStruct.field.s"]' 's: S'
+    //@ has - '//*[@id="variant.HiddenStruct"]//h3' 'HiddenStruct'
+    //@ count - '//*[@id="variant.HiddenStruct.field.h"]' 0
+    //@ has - '//*[@id="variant.HiddenStruct.field.s"]' 's: S'
     HiddenStruct {
         #[doc(hidden)]
         h: H,
diff --git a/tests/rustdoc/enum-variant-fields-heading.rs b/tests/rustdoc/enum-variant-fields-heading.rs
index 8a7c99a8735..e210667d3c0 100644
--- a/tests/rustdoc/enum-variant-fields-heading.rs
+++ b/tests/rustdoc/enum-variant-fields-heading.rs
@@ -3,12 +3,12 @@
 
 #![crate_name = "foo"]
 
-// @has 'foo/enum.Foo.html'
-// @has - '//*[@id="variant.A"]' 'A'
-// @count - '//*[@id="variant.A.fields"]' 0
-// @has - '//*[@id="variant.B"]' 'B'
-// @count - '//*[@id="variant.B.fields"]' 0
-// @snapshot variants - '//*[@id="main-content"]/*[@class="variants"]'
+//@ has 'foo/enum.Foo.html'
+//@ has - '//*[@id="variant.A"]' 'A'
+//@ count - '//*[@id="variant.A.fields"]' 0
+//@ has - '//*[@id="variant.B"]' 'B'
+//@ count - '//*[@id="variant.B.fields"]' 0
+//@ snapshot variants - '//*[@id="main-content"]/*[@class="variants"]'
 
 pub enum Foo {
     /// A variant with no fields
diff --git a/tests/rustdoc/enum-variant-private-46767.rs b/tests/rustdoc/enum-variant-private-46767.rs
index 6386aa75a95..cc93684e723 100644
--- a/tests/rustdoc/enum-variant-private-46767.rs
+++ b/tests/rustdoc/enum-variant-private-46767.rs
@@ -6,5 +6,5 @@ mod private {
 }
 pub use self::private::Enum::*;
 
-// @!has-dir foo/private
-// @!has foo/index.html '//a/@href' 'private/index.html'
+//@ !has-dir foo/private
+//@ !has foo/index.html '//a/@href' 'private/index.html'
diff --git a/tests/rustdoc/enum-variant-reexport-35488.rs b/tests/rustdoc/enum-variant-reexport-35488.rs
index ed955dcd770..b8e42ef7a89 100644
--- a/tests/rustdoc/enum-variant-reexport-35488.rs
+++ b/tests/rustdoc/enum-variant-reexport-35488.rs
@@ -8,9 +8,9 @@ mod foo {
     pub use self::Foo::*;
 }
 
-// @has 'foo/index.html' '//code' 'pub use self::Foo::*;'
-// @has 'foo/enum.Foo.html'
+//@ has 'foo/index.html' '//code' 'pub use self::Foo::*;'
+//@ has 'foo/enum.Foo.html'
 pub use self::foo::*;
 
-// @has 'foo/index.html' '//code' 'pub use std::option::Option::None;'
+//@ has 'foo/index.html' '//code' 'pub use std::option::Option::None;'
 pub use std::option::Option::None;
diff --git a/tests/rustdoc/enum-variant-value.rs b/tests/rustdoc/enum-variant-value.rs
index 5767d9e5423..1670de8a24f 100644
--- a/tests/rustdoc/enum-variant-value.rs
+++ b/tests/rustdoc/enum-variant-value.rs
@@ -10,13 +10,13 @@ extern crate bar;
 // In this case, since all variants are C-like variants and at least one of them
 // has its value set, we display values for all of them.
 
-// @has 'foo/enum.A.html'
-// @has - '//*[@class="rust item-decl"]/code' 'A = 12,'
-// @has - '//*[@class="rust item-decl"]/code' 'B = 13,'
-// @has - '//*[@class="rust item-decl"]/code' 'C = 1_245,'
-// @matches - '//*[@id="variant.A"]/h3' '^A = 12$'
-// @matches - '//*[@id="variant.B"]/h3' '^B = 13$'
-// @matches - '//*[@id="variant.C"]/h3' '^C = 1_245$'
+//@ has 'foo/enum.A.html'
+//@ has - '//*[@class="rust item-decl"]/code' 'A = 12,'
+//@ has - '//*[@class="rust item-decl"]/code' 'B = 13,'
+//@ has - '//*[@class="rust item-decl"]/code' 'C = 1_245,'
+//@ matches - '//*[@id="variant.A"]/h3' '^A = 12$'
+//@ matches - '//*[@id="variant.B"]/h3' '^B = 13$'
+//@ matches - '//*[@id="variant.C"]/h3' '^C = 1_245$'
 pub enum A {
     A = 12,
     B,
@@ -26,11 +26,11 @@ pub enum A {
 // In this case, all variants are C-like variants but none of them has its value set.
 // Therefore we don't display values.
 
-// @has 'foo/enum.B.html'
-// @has - '//*[@class="rust item-decl"]/code' 'A,'
-// @has - '//*[@class="rust item-decl"]/code' 'B,'
-// @matches - '//*[@id="variant.A"]/h3' '^A$'
-// @matches - '//*[@id="variant.B"]/h3' '^B$'
+//@ has 'foo/enum.B.html'
+//@ has - '//*[@class="rust item-decl"]/code' 'A,'
+//@ has - '//*[@class="rust item-decl"]/code' 'B,'
+//@ matches - '//*[@id="variant.A"]/h3' '^A$'
+//@ matches - '//*[@id="variant.B"]/h3' '^B$'
 pub enum B {
     A,
     B,
@@ -38,13 +38,13 @@ pub enum B {
 
 // In this case, not all variants are C-like variants so we don't display values.
 
-// @has 'foo/enum.C.html'
-// @has - '//*[@class="rust item-decl"]/code' 'A = 12,'
-// @has - '//*[@class="rust item-decl"]/code' 'B,'
-// @has - '//*[@class="rust item-decl"]/code' 'C(u32),'
-// @matches - '//*[@id="variant.A"]/h3' '^A = 12$'
-// @matches - '//*[@id="variant.B"]/h3' '^B$'
-// @has - '//*[@id="variant.C"]/h3' 'C(u32)'
+//@ has 'foo/enum.C.html'
+//@ has - '//*[@class="rust item-decl"]/code' 'A = 12,'
+//@ has - '//*[@class="rust item-decl"]/code' 'B,'
+//@ has - '//*[@class="rust item-decl"]/code' 'C(u32),'
+//@ matches - '//*[@id="variant.A"]/h3' '^A = 12$'
+//@ matches - '//*[@id="variant.B"]/h3' '^B$'
+//@ has - '//*[@id="variant.C"]/h3' 'C(u32)'
 #[repr(u32)]
 pub enum C {
     A = 12,
@@ -55,59 +55,59 @@ pub enum C {
 // In this case, not all variants are C-like variants and no C-like variant has its
 // value set, so we don't display values.
 
-// @has 'foo/enum.D.html'
-// @has - '//*[@class="rust item-decl"]/code' 'A,'
-// @has - '//*[@class="rust item-decl"]/code' 'C(u32),'
-// @matches - '//*[@id="variant.A"]/h3' '^A$'
-// @has - '//*[@id="variant.C"]/h3' 'C(u32)'
+//@ has 'foo/enum.D.html'
+//@ has - '//*[@class="rust item-decl"]/code' 'A,'
+//@ has - '//*[@class="rust item-decl"]/code' 'C(u32),'
+//@ matches - '//*[@id="variant.A"]/h3' '^A$'
+//@ has - '//*[@id="variant.C"]/h3' 'C(u32)'
 pub enum D {
     A,
     C(u32),
 }
 
-// @has 'foo/enum.E.html'
-// @has - '//*[@class="rust item-decl"]/code' 'A = 12,'
-// @has - '//*[@class="rust item-decl"]/code' 'B = 13,'
-// @has - '//*[@class="rust item-decl"]/code' 'C = 1_245,'
-// @matches - '//*[@id="variant.A"]/h3' '^A = 12$'
-// @matches - '//*[@id="variant.B"]/h3' '^B = 13$'
-// @matches - '//*[@id="variant.C"]/h3' '^C = 1_245$'
+//@ has 'foo/enum.E.html'
+//@ has - '//*[@class="rust item-decl"]/code' 'A = 12,'
+//@ has - '//*[@class="rust item-decl"]/code' 'B = 13,'
+//@ has - '//*[@class="rust item-decl"]/code' 'C = 1_245,'
+//@ matches - '//*[@id="variant.A"]/h3' '^A = 12$'
+//@ matches - '//*[@id="variant.B"]/h3' '^B = 13$'
+//@ matches - '//*[@id="variant.C"]/h3' '^C = 1_245$'
 pub use bar::E;
 
-// @has 'foo/enum.F.html'
-// @has - '//*[@class="rust item-decl"]/code' 'A,'
-// @has - '//*[@class="rust item-decl"]/code' 'B,'
-// @matches - '//*[@id="variant.A"]/h3' '^A$'
-// @matches - '//*[@id="variant.B"]/h3' '^B$'
+//@ has 'foo/enum.F.html'
+//@ has - '//*[@class="rust item-decl"]/code' 'A,'
+//@ has - '//*[@class="rust item-decl"]/code' 'B,'
+//@ matches - '//*[@id="variant.A"]/h3' '^A$'
+//@ matches - '//*[@id="variant.B"]/h3' '^B$'
 pub use bar::F;
 
-// @has 'foo/enum.G.html'
-// @has - '//*[@class="rust item-decl"]/code' 'A = 12,'
-// @has - '//*[@class="rust item-decl"]/code' 'B,'
-// @has - '//*[@class="rust item-decl"]/code' 'C(u32),'
-// @matches - '//*[@id="variant.A"]/h3' '^A = 12$'
-// @matches - '//*[@id="variant.B"]/h3' '^B$'
-// @has - '//*[@id="variant.C"]/h3' 'C(u32)'
+//@ has 'foo/enum.G.html'
+//@ has - '//*[@class="rust item-decl"]/code' 'A = 12,'
+//@ has - '//*[@class="rust item-decl"]/code' 'B,'
+//@ has - '//*[@class="rust item-decl"]/code' 'C(u32),'
+//@ matches - '//*[@id="variant.A"]/h3' '^A = 12$'
+//@ matches - '//*[@id="variant.B"]/h3' '^B$'
+//@ has - '//*[@id="variant.C"]/h3' 'C(u32)'
 pub use bar::G;
 
-// @has 'foo/enum.H.html'
-// @has - '//*[@class="rust item-decl"]/code' 'A,'
-// @has - '//*[@class="rust item-decl"]/code' 'C(u32),'
-// @matches - '//*[@id="variant.A"]/h3' '^A$'
-// @has - '//*[@id="variant.C"]/h3' 'C(u32)'
+//@ has 'foo/enum.H.html'
+//@ has - '//*[@class="rust item-decl"]/code' 'A,'
+//@ has - '//*[@class="rust item-decl"]/code' 'C(u32),'
+//@ matches - '//*[@id="variant.A"]/h3' '^A$'
+//@ has - '//*[@id="variant.C"]/h3' 'C(u32)'
 pub use bar::H;
 
 // Testing more complex cases.
 pub const X: isize = 2;
-// @has 'foo/enum.I.html'
-// @has - '//*[@class="rust item-decl"]/code' 'A = 2,'
-// @has - '//*[@class="rust item-decl"]/code' 'B = 4,'
-// @has - '//*[@class="rust item-decl"]/code' 'C = 9,'
-// @has - '//*[@class="rust item-decl"]/code' 'D = -1,'
-// @matches - '//*[@id="variant.A"]/h3' '^A = 2$'
-// @matches - '//*[@id="variant.B"]/h3' '^B = 4$'
-// @matches - '//*[@id="variant.C"]/h3' '^C = 9$'
-// @matches - '//*[@id="variant.D"]/h3' '^D = -1$'
+//@ has 'foo/enum.I.html'
+//@ has - '//*[@class="rust item-decl"]/code' 'A = 2,'
+//@ has - '//*[@class="rust item-decl"]/code' 'B = 4,'
+//@ has - '//*[@class="rust item-decl"]/code' 'C = 9,'
+//@ has - '//*[@class="rust item-decl"]/code' 'D = -1,'
+//@ matches - '//*[@id="variant.A"]/h3' '^A = 2$'
+//@ matches - '//*[@id="variant.B"]/h3' '^B = 4$'
+//@ matches - '//*[@id="variant.C"]/h3' '^C = 9$'
+//@ matches - '//*[@id="variant.D"]/h3' '^D = -1$'
 #[repr(isize)]
 pub enum I {
     A = X,
@@ -118,74 +118,74 @@ pub enum I {
 
 // Testing `repr`.
 
-// @has 'foo/enum.J.html'
-// @has - '//*[@class="rust item-decl"]/code' 'A = 0,'
-// @has - '//*[@class="rust item-decl"]/code' 'B = 1,'
-// @matches - '//*[@id="variant.A"]/h3' '^A = 0$'
-// @matches - '//*[@id="variant.B"]/h3' '^B = 1$'
+//@ has 'foo/enum.J.html'
+//@ has - '//*[@class="rust item-decl"]/code' 'A = 0,'
+//@ has - '//*[@class="rust item-decl"]/code' 'B = 1,'
+//@ matches - '//*[@id="variant.A"]/h3' '^A = 0$'
+//@ matches - '//*[@id="variant.B"]/h3' '^B = 1$'
 #[repr(C)]
 pub enum J {
     A,
     B,
 }
 
-// @has 'foo/enum.K.html'
-// @has - '//*[@class="rust item-decl"]/code' 'A(u32),'
-// @has - '//*[@class="rust item-decl"]/code' 'B,'
-// @has - '//*[@id="variant.A"]/h3' 'A(u32)'
-// @matches - '//*[@id="variant.B"]/h3' '^B$'
+//@ has 'foo/enum.K.html'
+//@ has - '//*[@class="rust item-decl"]/code' 'A(u32),'
+//@ has - '//*[@class="rust item-decl"]/code' 'B,'
+//@ has - '//*[@id="variant.A"]/h3' 'A(u32)'
+//@ matches - '//*[@id="variant.B"]/h3' '^B$'
 #[repr(C)]
 pub enum K {
     A(u32),
     B,
 }
 
-// @has 'foo/enum.L.html'
-// @has - '//*[@class="rust item-decl"]/code' 'A = 0,'
-// @has - '//*[@class="rust item-decl"]/code' 'B = 1,'
-// @matches - '//*[@id="variant.A"]/h3' '^A = 0$'
-// @matches - '//*[@id="variant.B"]/h3' '^B = 1$'
+//@ has 'foo/enum.L.html'
+//@ has - '//*[@class="rust item-decl"]/code' 'A = 0,'
+//@ has - '//*[@class="rust item-decl"]/code' 'B = 1,'
+//@ matches - '//*[@id="variant.A"]/h3' '^A = 0$'
+//@ matches - '//*[@id="variant.B"]/h3' '^B = 1$'
 #[repr(u32)]
 pub enum L {
     A,
     B,
 }
 
-// @has 'foo/enum.M.html'
-// @has - '//*[@class="rust item-decl"]/code' 'A(u32),'
-// @has - '//*[@class="rust item-decl"]/code' 'B,'
-// @has - '//*[@id="variant.A"]/h3' 'A(u32)'
-// @matches - '//*[@id="variant.B"]/h3' '^B$'
+//@ has 'foo/enum.M.html'
+//@ has - '//*[@class="rust item-decl"]/code' 'A(u32),'
+//@ has - '//*[@class="rust item-decl"]/code' 'B,'
+//@ has - '//*[@id="variant.A"]/h3' 'A(u32)'
+//@ matches - '//*[@id="variant.B"]/h3' '^B$'
 #[repr(u32)]
 pub enum M {
     A(u32),
     B,
 }
 
-// @has 'foo/enum.N.html'
-// @has - '//*[@class="rust item-decl"]/code' 'A = 0,'
-// @has - '//*[@class="rust item-decl"]/code' 'B = 1,'
-// @matches - '//*[@id="variant.A"]/h3' '^A = 0$'
-// @matches - '//*[@id="variant.B"]/h3' '^B = 1$'
+//@ has 'foo/enum.N.html'
+//@ has - '//*[@class="rust item-decl"]/code' 'A = 0,'
+//@ has - '//*[@class="rust item-decl"]/code' 'B = 1,'
+//@ matches - '//*[@id="variant.A"]/h3' '^A = 0$'
+//@ matches - '//*[@id="variant.B"]/h3' '^B = 1$'
 pub use bar::N;
 
-// @has 'foo/enum.O.html'
-// @has - '//*[@class="rust item-decl"]/code' 'A(u32),'
-// @has - '//*[@class="rust item-decl"]/code' 'B,'
-// @has - '//*[@id="variant.A"]/h3' 'A(u32)'
-// @matches - '//*[@id="variant.B"]/h3' '^B$'
+//@ has 'foo/enum.O.html'
+//@ has - '//*[@class="rust item-decl"]/code' 'A(u32),'
+//@ has - '//*[@class="rust item-decl"]/code' 'B,'
+//@ has - '//*[@id="variant.A"]/h3' 'A(u32)'
+//@ matches - '//*[@id="variant.B"]/h3' '^B$'
 pub use bar::O;
 
-// @has 'foo/enum.P.html'
-// @has - '//*[@class="rust item-decl"]/code' 'A = 0,'
-// @has - '//*[@class="rust item-decl"]/code' 'B = 1,'
-// @matches - '//*[@id="variant.A"]/h3' '^A = 0$'
-// @matches - '//*[@id="variant.B"]/h3' '^B = 1$'
+//@ has 'foo/enum.P.html'
+//@ has - '//*[@class="rust item-decl"]/code' 'A = 0,'
+//@ has - '//*[@class="rust item-decl"]/code' 'B = 1,'
+//@ matches - '//*[@id="variant.A"]/h3' '^A = 0$'
+//@ matches - '//*[@id="variant.B"]/h3' '^B = 1$'
 pub use bar::P;
 
-// @has 'foo/enum.Q.html'
-// @has - '//*[@class="rust item-decl"]/code' 'A(u32),'
-// @has - '//*[@class="rust item-decl"]/code' 'B,'
-// @has - '//*[@id="variant.A"]/h3' 'A(u32)'
-// @matches - '//*[@id="variant.B"]/h3' '^B$'
+//@ has 'foo/enum.Q.html'
+//@ has - '//*[@class="rust item-decl"]/code' 'A(u32),'
+//@ has - '//*[@class="rust item-decl"]/code' 'B,'
+//@ has - '//*[@id="variant.A"]/h3' 'A(u32)'
+//@ matches - '//*[@id="variant.B"]/h3' '^B$'
 pub use bar::Q;
diff --git a/tests/rustdoc/extern-default-method.rs b/tests/rustdoc/extern-default-method.rs
index 058c2200d94..1af9fab152e 100644
--- a/tests/rustdoc/extern-default-method.rs
+++ b/tests/rustdoc/extern-default-method.rs
@@ -16,8 +16,8 @@ extern crate rustdoc_extern_default_method as ext;
 // general: If the type `Struct` also had an inherent method called `provided`, the impl item
 // would link to that one even though those two methods are distinct items!
 
-// @count extern_default_method/struct.Struct.html '//*[@id="method.provided"]' 1
-// @count extern_default_method/struct.Struct.html '//*[@id="method.provided"]//a[@class="fn"]' 1
-// @snapshot no_href_on_anchor - '//*[@id="method.provided"]//a[@class="fn"]'
-// @has extern_default_method/struct.Struct.html '//*[@id="method.provided"]//a[@class="anchor"]/@href' #method.provided
+//@ count extern_default_method/struct.Struct.html '//*[@id="method.provided"]' 1
+//@ count extern_default_method/struct.Struct.html '//*[@id="method.provided"]//a[@class="fn"]' 1
+//@ snapshot no_href_on_anchor - '//*[@id="method.provided"]//a[@class="fn"]'
+//@ has extern_default_method/struct.Struct.html '//*[@id="method.provided"]//a[@class="anchor"]/@href' #method.provided
 pub use ext::Struct;
diff --git a/tests/rustdoc/extern-fn-22038.rs b/tests/rustdoc/extern-fn-22038.rs
index 72d39c32a1c..206c6e181d1 100644
--- a/tests/rustdoc/extern-fn-22038.rs
+++ b/tests/rustdoc/extern-fn-22038.rs
@@ -2,21 +2,21 @@
 #![crate_name="issue_22038"]
 
 extern "C" {
-    // @has issue_22038/fn.foo1.html \
+    //@ has issue_22038/fn.foo1.html \
     //      '//pre[@class="rust item-decl"]' 'pub unsafe extern "C" fn foo1()'
     pub fn foo1();
 }
 
 extern "system" {
-    // @has issue_22038/fn.foo2.html \
+    //@ has issue_22038/fn.foo2.html \
     //      '//pre[@class="rust item-decl"]' 'pub unsafe extern "system" fn foo2()'
     pub fn foo2();
 }
 
-// @has issue_22038/fn.bar.html \
+//@ has issue_22038/fn.bar.html \
 //      '//pre[@class="rust item-decl"]' 'pub extern "C" fn bar()'
 pub extern "C" fn bar() {}
 
-// @has issue_22038/fn.baz.html \
+//@ has issue_22038/fn.baz.html \
 //      '//pre[@class="rust item-decl"]' 'pub extern "system" fn baz()'
 pub extern "system" fn baz() {}
diff --git a/tests/rustdoc/extern-html-root-url-precedence.rs b/tests/rustdoc/extern-html-root-url-precedence.rs
index 68af5ea5e04..93775087997 100644
--- a/tests/rustdoc/extern-html-root-url-precedence.rs
+++ b/tests/rustdoc/extern-html-root-url-precedence.rs
@@ -1,7 +1,7 @@
 //@ compile-flags:-Z unstable-options --extern-html-root-url core=https://example.com/core/0.1.0 --extern-html-root-takes-precedence
 
-// @has extern_html_root_url_precedence/index.html
+//@ has extern_html_root_url_precedence/index.html
 // --extern-html-root should take precedence if `--takes-precedence` is passed
-// @has - '//a/@href' 'https://example.com/core/0.1.0/core/iter/index.html'
+//@ has - '//a/@href' 'https://example.com/core/0.1.0/core/iter/index.html'
 #[doc(no_inline)]
 pub use std::iter;
diff --git a/tests/rustdoc/extern-html-root-url.rs b/tests/rustdoc/extern-html-root-url.rs
index 672c460c20b..a503e829de4 100644
--- a/tests/rustdoc/extern-html-root-url.rs
+++ b/tests/rustdoc/extern-html-root-url.rs
@@ -6,13 +6,13 @@
 extern crate html_root;
 extern crate no_html_root;
 
-// @has extern_html_root_url/index.html
+//@ has extern_html_root_url/index.html
 // `html_root_url` should override `--extern-html-root-url`
-// @has - '//a/@href' 'https://example.com/html_root/html_root/fn.foo.html'
+//@ has - '//a/@href' 'https://example.com/html_root/html_root/fn.foo.html'
 #[doc(no_inline)]
 pub use html_root::foo;
 
 #[doc(no_inline)]
 // `--extern-html-root-url` should apply if no `html_root_url` is given
-// @has - '//a/@href' 'https://example.com/override/no_html_root/fn.bar.html'
+//@ has - '//a/@href' 'https://example.com/override/no_html_root/fn.bar.html'
 pub use no_html_root::bar;
diff --git a/tests/rustdoc/extern-impl-trait.rs b/tests/rustdoc/extern-impl-trait.rs
index 9cc235504e7..65b7a8cef49 100644
--- a/tests/rustdoc/extern-impl-trait.rs
+++ b/tests/rustdoc/extern-impl-trait.rs
@@ -4,8 +4,8 @@
 
 extern crate extern_impl_trait;
 
-// @has 'foo/struct.X.html' '//h4[@class="code-header"]' "impl Foo<Associated = ()> + 'a"
+//@ has 'foo/struct.X.html' '//h4[@class="code-header"]' "impl Foo<Associated = ()> + 'a"
 pub use extern_impl_trait::X;
 
-// @has 'foo/struct.Y.html' '//h4[@class="code-header"]' "impl Foo<Associated = ()> + ?Sized + 'a"
+//@ has 'foo/struct.Y.html' '//h4[@class="code-header"]' "impl Foo<Associated = ()> + ?Sized + 'a"
 pub use extern_impl_trait::Y;
diff --git a/tests/rustdoc/extern-impl.rs b/tests/rustdoc/extern-impl.rs
index fd1bc214008..4fc31393988 100644
--- a/tests/rustdoc/extern-impl.rs
+++ b/tests/rustdoc/extern-impl.rs
@@ -1,27 +1,27 @@
 #![crate_name = "foo"]
 
-// @has foo/struct.Foo.html
+//@ has foo/struct.Foo.html
 pub struct Foo;
 
 impl Foo {
-    // @has - '//h4[@class="code-header"]' 'fn rust0()'
+    //@ has - '//h4[@class="code-header"]' 'fn rust0()'
     pub fn rust0() {}
-    // @has - '//h4[@class="code-header"]' 'fn rust1()'
+    //@ has - '//h4[@class="code-header"]' 'fn rust1()'
     pub extern "Rust" fn rust1() {}
-    // @has - '//h4[@class="code-header"]' 'extern "C" fn c0()'
+    //@ has - '//h4[@class="code-header"]' 'extern "C" fn c0()'
     pub extern fn c0() {}
-    // @has - '//h4[@class="code-header"]' 'extern "C" fn c1()'
+    //@ has - '//h4[@class="code-header"]' 'extern "C" fn c1()'
     pub extern "C" fn c1() {}
-    // @has - '//h4[@class="code-header"]' 'extern "system" fn system0()'
+    //@ has - '//h4[@class="code-header"]' 'extern "system" fn system0()'
     pub extern "system" fn system0() {}
 }
 
-// @has foo/trait.Bar.html
+//@ has foo/trait.Bar.html
 pub trait Bar {}
 
-// @has - '//h3[@class="code-header"]' 'impl Bar for fn()'
+//@ has - '//h3[@class="code-header"]' 'impl Bar for fn()'
 impl Bar for fn() {}
-// @has - '//h3[@class="code-header"]' 'impl Bar for extern "C" fn()'
+//@ has - '//h3[@class="code-header"]' 'impl Bar for extern "C" fn()'
 impl Bar for extern fn() {}
-// @has - '//h3[@class="code-header"]' 'impl Bar for extern "system" fn()'
+//@ has - '//h3[@class="code-header"]' 'impl Bar for extern "system" fn()'
 impl Bar for extern "system" fn() {}
diff --git a/tests/rustdoc/extern-links.rs b/tests/rustdoc/extern-links.rs
index a8c6eb76390..d1fee224755 100644
--- a/tests/rustdoc/extern-links.rs
+++ b/tests/rustdoc/extern-links.rs
@@ -5,17 +5,17 @@
 
 pub extern crate extern_links;
 
-// @!has foo/index.html '//a' 'extern_links'
+//@ !has foo/index.html '//a' 'extern_links'
 #[doc(no_inline)]
 pub use extern_links as extern_links2;
 
-// @!has foo/index.html '//a' 'Foo'
+//@ !has foo/index.html '//a' 'Foo'
 #[doc(no_inline)]
 pub use extern_links::Foo;
 
 #[doc(hidden)]
 pub mod hidden {
-    // @!has foo/hidden/extern_links/index.html
-    // @!has foo/hidden/extern_links/struct.Foo.html
+    //@ !has foo/hidden/extern_links/index.html
+    //@ !has foo/hidden/extern_links/struct.Foo.html
     pub use extern_links;
 }
diff --git a/tests/rustdoc/extern-method.rs b/tests/rustdoc/extern-method.rs
index 3a86ad4feb0..c3e042f2da8 100644
--- a/tests/rustdoc/extern-method.rs
+++ b/tests/rustdoc/extern-method.rs
@@ -5,15 +5,15 @@
 
 extern crate rustdoc_extern_method as foo;
 
-// @has extern_method/trait.Foo.html //pre "pub trait Foo"
-// @has - '//*[@id="tymethod.foo"]//h4[@class="code-header"]' 'extern "rust-call" fn foo'
-// @has - '//*[@id="method.foo_"]//h4[@class="code-header"]' 'extern "rust-call" fn foo_'
+//@ has extern_method/trait.Foo.html //pre "pub trait Foo"
+//@ has - '//*[@id="tymethod.foo"]//h4[@class="code-header"]' 'extern "rust-call" fn foo'
+//@ has - '//*[@id="method.foo_"]//h4[@class="code-header"]' 'extern "rust-call" fn foo_'
 pub use foo::Foo;
 
-// @has extern_method/trait.Bar.html //pre "pub trait Bar"
+//@ has extern_method/trait.Bar.html //pre "pub trait Bar"
 pub trait Bar {
-    // @has - '//*[@id="tymethod.bar"]//h4[@class="code-header"]' 'extern "rust-call" fn bar'
+    //@ has - '//*[@id="tymethod.bar"]//h4[@class="code-header"]' 'extern "rust-call" fn bar'
     extern "rust-call" fn bar(&self, _: ());
-    // @has - '//*[@id="method.bar_"]//h4[@class="code-header"]' 'extern "rust-call" fn bar_'
+    //@ has - '//*[@id="method.bar_"]//h4[@class="code-header"]' 'extern "rust-call" fn bar_'
     extern "rust-call" fn bar_(&self, _: ()) { }
 }
diff --git a/tests/rustdoc/external-cross.rs b/tests/rustdoc/external-cross.rs
index 527c81839b5..13646ec38cf 100644
--- a/tests/rustdoc/external-cross.rs
+++ b/tests/rustdoc/external-cross.rs
@@ -5,6 +5,6 @@
 
 extern crate external_cross;
 
-// @has host/struct.NeedMoreDocs.html
-// @has - '//h2' 'Cross-crate imported docs'
+//@ has host/struct.NeedMoreDocs.html
+//@ has - '//h2' 'Cross-crate imported docs'
 pub use external_cross::NeedMoreDocs;
diff --git a/tests/rustdoc/external-doc.rs b/tests/rustdoc/external-doc.rs
index bd322d67a37..c81aa17ed5a 100644
--- a/tests/rustdoc/external-doc.rs
+++ b/tests/rustdoc/external-doc.rs
@@ -1,14 +1,14 @@
-// @has external_doc/struct.IncludeStrDocs.html
-// @has - '//h2' 'External Docs'
-// @has - '//h3' 'Inline Docs'
+//@ has external_doc/struct.IncludeStrDocs.html
+//@ has - '//h2' 'External Docs'
+//@ has - '//h3' 'Inline Docs'
 #[doc = include_str!("auxiliary/external-doc.md")]
 /// ## Inline Docs
 pub struct IncludeStrDocs;
 
 macro_rules! dir { () => { "auxiliary" } }
 
-// @has external_doc/struct.EagerExpansion.html
-// @has - '//h2' 'External Docs'
+//@ has external_doc/struct.EagerExpansion.html
+//@ has - '//h2' 'External Docs'
 #[doc = include_str!(concat!(dir!(), "/external-doc.md"))]
 /// ## Inline Docs
 pub struct EagerExpansion;
diff --git a/tests/rustdoc/external-macro-src.rs b/tests/rustdoc/external-macro-src.rs
index 1813ecb423f..f723af57fad 100644
--- a/tests/rustdoc/external-macro-src.rs
+++ b/tests/rustdoc/external-macro-src.rs
@@ -5,8 +5,8 @@
 #[macro_use]
 extern crate external_macro_src;
 
-// @has foo/index.html '//a[@href="../src/foo/external-macro-src.rs.html#3-12"]' 'source'
+//@ has foo/index.html '//a[@href="../src/foo/external-macro-src.rs.html#3-12"]' 'source'
 
-// @has foo/struct.Foo.html
-// @has - '//a[@href="../src/foo/external-macro-src.rs.html#12"]' 'source'
+//@ has foo/struct.Foo.html
+//@ has - '//a[@href="../src/foo/external-macro-src.rs.html#12"]' 'source'
 make_foo!();
diff --git a/tests/rustdoc/feature-gate-doc_auto_cfg.rs b/tests/rustdoc/feature-gate-doc_auto_cfg.rs
index da76381e480..75a488bc8ab 100644
--- a/tests/rustdoc/feature-gate-doc_auto_cfg.rs
+++ b/tests/rustdoc/feature-gate-doc_auto_cfg.rs
@@ -2,7 +2,7 @@
 
 #![crate_name = "foo"]
 
-// @has foo/fn.foo.html
-// @count - '//*[@class="item-info"]/*[@class="stab portability"]' 0
+//@ has foo/fn.foo.html
+//@ count - '//*[@class="item-info"]/*[@class="stab portability"]' 0
 #[cfg(not(test))]
 pub fn foo() {}
diff --git a/tests/rustdoc/ffi.rs b/tests/rustdoc/ffi.rs
index c9dbdbf42a5..5ba7cdba910 100644
--- a/tests/rustdoc/ffi.rs
+++ b/tests/rustdoc/ffi.rs
@@ -3,10 +3,10 @@
 
 extern crate rustdoc_ffi as lib;
 
-// @has ffi/fn.foreigner.html //pre 'pub unsafe extern "C" fn foreigner(cold_as_ice: u32)'
+//@ has ffi/fn.foreigner.html //pre 'pub unsafe extern "C" fn foreigner(cold_as_ice: u32)'
 pub use lib::foreigner;
 
 extern "C" {
-    // @has ffi/fn.another.html //pre 'pub unsafe extern "C" fn another(cold_as_ice: u32)'
+    //@ has ffi/fn.another.html //pre 'pub unsafe extern "C" fn another(cold_as_ice: u32)'
     pub fn another(cold_as_ice: u32);
 }
diff --git a/tests/rustdoc/files-creation-hidden.rs b/tests/rustdoc/files-creation-hidden.rs
index 498d9cdaef1..8adf84d6640 100644
--- a/tests/rustdoc/files-creation-hidden.rs
+++ b/tests/rustdoc/files-creation-hidden.rs
@@ -1,24 +1,24 @@
 #![crate_name="foo"]
 
-// @files foo '["index.html", "all.html", "sidebar-items.js"]'
-// @!has "foo/struct.Foo.html"
+//@ files foo '["index.html", "all.html", "sidebar-items.js"]'
+//@ !has "foo/struct.Foo.html"
 #[doc(hidden)]
 pub struct Foo;
 
-// @!has "foo/struct.Bar.html"
+//@ !has "foo/struct.Bar.html"
 pub use crate::Foo as Bar;
 
-// @!has "foo/struct.Baz.html"
+//@ !has "foo/struct.Baz.html"
 #[doc(hidden)]
 pub use crate::Foo as Baz;
 
-// @!has "foo/foo/index.html"
+//@ !has "foo/foo/index.html"
 #[doc(hidden)]
 pub mod foo {}
 
-// @!has "foo/bar/index.html"
+//@ !has "foo/bar/index.html"
 pub use crate::foo as bar;
 
-// @!has "foo/baz/index.html"
+//@ !has "foo/baz/index.html"
 #[doc(hidden)]
 pub use crate::foo as baz;
diff --git a/tests/rustdoc/files-creation-private.rs b/tests/rustdoc/files-creation-private.rs
index e2fdbc068f8..54579380f0b 100644
--- a/tests/rustdoc/files-creation-private.rs
+++ b/tests/rustdoc/files-creation-private.rs
@@ -1,22 +1,22 @@
 #![crate_name="foo"]
 
-// @files "foo" \
+//@ files "foo" \
 // '["index.html", "all.html", "sidebar-items.js", "foo", "bar", "private", "struct.Bar.html"]'
-// @files "foo/bar" '["index.html", "sidebar-items.js"]'
+//@ files "foo/bar" '["index.html", "sidebar-items.js"]'
 
-// @!has "foo/priv/index.html"
-// @!has "foo/priv/struct.Foo.html"
+//@ !has "foo/priv/index.html"
+//@ !has "foo/priv/struct.Foo.html"
 mod private {
     pub struct Foo;
 }
 
-// @has "foo/struct.Bar.html"
+//@ has "foo/struct.Bar.html"
 pub use crate::private::Foo as Bar;
 
-// @!has "foo/foo/index.html"
+//@ !has "foo/foo/index.html"
 mod foo {
     pub mod subfoo {}
 }
 
-// @has "foo/bar/index.html"
+//@ has "foo/bar/index.html"
 pub use crate::foo::subfoo as bar;
diff --git a/tests/rustdoc/fn-bound.rs b/tests/rustdoc/fn-bound.rs
index 9e060ff2026..460b6b14e79 100644
--- a/tests/rustdoc/fn-bound.rs
+++ b/tests/rustdoc/fn-bound.rs
@@ -11,7 +11,7 @@ pub struct ConditionalIterator<F> {
 }
 
 
-// @has 'fn_bound/struct.ConditionalIterator.html' '//h3[@class="code-header"]' 'impl<F: Fn(&i32)> Iterator for ConditionalIterator<F>'
+//@ has 'fn_bound/struct.ConditionalIterator.html' '//h3[@class="code-header"]' 'impl<F: Fn(&i32)> Iterator for ConditionalIterator<F>'
 impl<F: Fn(&i32)> Iterator for ConditionalIterator<F> {
     type Item = ();
 
diff --git a/tests/rustdoc/fn-pointer-arg-name.rs b/tests/rustdoc/fn-pointer-arg-name.rs
index 359ca64ee8d..3bde6e9ecfa 100644
--- a/tests/rustdoc/fn-pointer-arg-name.rs
+++ b/tests/rustdoc/fn-pointer-arg-name.rs
@@ -1,5 +1,5 @@
 #![crate_name = "foo"]
 
-// @has foo/fn.f.html
-// @has - '//pre[@class="rust item-decl"]' 'pub fn f(callback: fn(len: usize, foo: u32))'
+//@ has foo/fn.f.html
+//@ has - '//pre[@class="rust item-decl"]' 'pub fn f(callback: fn(len: usize, foo: u32))'
 pub fn f(callback: fn(len: usize, foo: u32)) {}
diff --git a/tests/rustdoc/fn-sidebar.rs b/tests/rustdoc/fn-sidebar.rs
index 2fe8ebec1c5..dfe756739a6 100644
--- a/tests/rustdoc/fn-sidebar.rs
+++ b/tests/rustdoc/fn-sidebar.rs
@@ -1,9 +1,9 @@
 #![crate_name = "foo"]
 
-// @has foo/fn.bar.html
-// @has - '//*[@class="sidebar-elems"]' ''
+//@ has foo/fn.bar.html
+//@ has - '//*[@class="sidebar-elems"]' ''
 pub fn bar() {}
 
-// @has foo/constant.BAR.html
-// @has - '//*[@class="sidebar-elems"]' ''
+//@ has foo/constant.BAR.html
+//@ has - '//*[@class="sidebar-elems"]' ''
 pub const BAR: u32 = 0;
diff --git a/tests/rustdoc/fn-type.rs b/tests/rustdoc/fn-type.rs
index 3959aeb6cfb..6d63e5cea4a 100644
--- a/tests/rustdoc/fn-type.rs
+++ b/tests/rustdoc/fn-type.rs
@@ -8,6 +8,6 @@ pub struct Foo<'a, T> {
     pub hrtb_lifetime: for<'b, 'c> fn(one: &'b i32, two: &'c &'b i32) -> (&'b i32, &'c i32),
 }
 
-// @has 'foo/struct.Foo.html' '//span[@id="structfield.generic"]' "generic: fn(val: &T) -> T"
-// @has 'foo/struct.Foo.html' '//span[@id="structfield.lifetime"]' "lifetime: fn(val: &'a i32) -> i32"
-// @has 'foo/struct.Foo.html' '//span[@id="structfield.hrtb_lifetime"]' "hrtb_lifetime: for<'b, 'c> fn(one: &'b i32, two: &'c &'b i32) -> (&'b i32, &'c i32)"
+//@ has 'foo/struct.Foo.html' '//span[@id="structfield.generic"]' "generic: fn(val: &T) -> T"
+//@ has 'foo/struct.Foo.html' '//span[@id="structfield.lifetime"]' "lifetime: fn(val: &'a i32) -> i32"
+//@ has 'foo/struct.Foo.html' '//span[@id="structfield.hrtb_lifetime"]' "hrtb_lifetime: for<'b, 'c> fn(one: &'b i32, two: &'c &'b i32) -> (&'b i32, &'c i32)"
diff --git a/tests/rustdoc/footnote-definition-without-blank-line-100638.rs b/tests/rustdoc/footnote-definition-without-blank-line-100638.rs
index b6f62c3bcba..a8aab1ac38e 100644
--- a/tests/rustdoc/footnote-definition-without-blank-line-100638.rs
+++ b/tests/rustdoc/footnote-definition-without-blank-line-100638.rs
@@ -6,10 +6,10 @@
 //! [^2]: Footnote B.
 //! [^3]: Footnote C.
 
-// @has 'foo/index.html'
-// @has - '//*[@class="docblock"]/*[@class="footnotes"]/ol/li[@id="fn1"]/p' 'Footnote A'
-// @has - '//li[@id="fn1"]/p/a/@href' '#fnref1'
-// @has - '//*[@class="docblock"]/*[@class="footnotes"]/ol/li[@id="fn2"]/p' 'Footnote B'
-// @has - '//li[@id="fn2"]/p/a/@href' '#fnref2'
-// @has - '//*[@class="docblock"]/*[@class="footnotes"]/ol/li[@id="fn3"]/p' 'Footnote C'
-// @has - '//li[@id="fn3"]/p/a/@href' '#fnref3'
+//@ has 'foo/index.html'
+//@ has - '//*[@class="docblock"]/*[@class="footnotes"]/ol/li[@id="fn1"]/p' 'Footnote A'
+//@ has - '//li[@id="fn1"]/p/a/@href' '#fnref1'
+//@ has - '//*[@class="docblock"]/*[@class="footnotes"]/ol/li[@id="fn2"]/p' 'Footnote B'
+//@ has - '//li[@id="fn2"]/p/a/@href' '#fnref2'
+//@ has - '//*[@class="docblock"]/*[@class="footnotes"]/ol/li[@id="fn3"]/p' 'Footnote C'
+//@ has - '//li[@id="fn3"]/p/a/@href' '#fnref3'
diff --git a/tests/rustdoc/footnote-in-summary.rs b/tests/rustdoc/footnote-in-summary.rs
index e6ff5a7fd51..d69282f1041 100644
--- a/tests/rustdoc/footnote-in-summary.rs
+++ b/tests/rustdoc/footnote-in-summary.rs
@@ -3,13 +3,13 @@
 
 #![crate_name = "foo"]
 
-// @has 'foo/index.html'
-// @has - '//*[@class="desc docblock-short"]' 'hello bla'
-// @!has - '//*[@class="desc docblock-short"]/sup' '1'
+//@ has 'foo/index.html'
+//@ has - '//*[@class="desc docblock-short"]' 'hello bla'
+//@ !has - '//*[@class="desc docblock-short"]/sup' '1'
 
-// @has 'foo/struct.S.html'
-// @has - '//*[@class="docblock"]//sup' '1'
-// @has - '//*[@class="docblock"]' 'hello 1 bla'
+//@ has 'foo/struct.S.html'
+//@ has - '//*[@class="docblock"]//sup' '1'
+//@ has - '//*[@class="docblock"]' 'hello 1 bla'
 
 /// hello [^foot] bla
 ///
diff --git a/tests/rustdoc/foreign-implementors-js-43701.rs b/tests/rustdoc/foreign-implementors-js-43701.rs
index 3b16ad2045a..03147da02c2 100644
--- a/tests/rustdoc/foreign-implementors-js-43701.rs
+++ b/tests/rustdoc/foreign-implementors-js-43701.rs
@@ -3,4 +3,4 @@
 
 pub use std::vec::Vec;
 
-// @!has trait.impl/core/clone/trait.Clone.js
+//@ !has trait.impl/core/clone/trait.Clone.js
diff --git a/tests/rustdoc/foreigntype-reexport.rs b/tests/rustdoc/foreigntype-reexport.rs
index 1dec0ef3e0f..22c1852adf5 100644
--- a/tests/rustdoc/foreigntype-reexport.rs
+++ b/tests/rustdoc/foreigntype-reexport.rs
@@ -11,11 +11,11 @@ mod sub {
 
 pub mod sub2 {
     extern "C" {
-        // @has foreigntype_reexport/sub2/foreigntype.C.html
+        //@ has foreigntype_reexport/sub2/foreigntype.C.html
         pub type C;
-        // @has foreigntype_reexport/sub2/fn.f.html
+        //@ has foreigntype_reexport/sub2/fn.f.html
         pub fn f();
-        // @has foreigntype_reexport/sub2/static.K3.html
+        //@ has foreigntype_reexport/sub2/static.K3.html
         pub static K3: usize;
     }
 }
@@ -29,28 +29,28 @@ mod sub3 {
     }
 }
 
-// @has foreigntype_reexport/foreigntype.C2.html
-// @has foreigntype_reexport/fn.f2.html
-// @has foreigntype_reexport/static.K2.html
-// @has foreigntype_reexport/index.html '//a[@class="foreigntype"]' 'C2'
-// @has foreigntype_reexport/index.html '//a[@class="fn"]' 'f2'
-// @has foreigntype_reexport/index.html '//a[@class="static"]' 'K2'
+//@ has foreigntype_reexport/foreigntype.C2.html
+//@ has foreigntype_reexport/fn.f2.html
+//@ has foreigntype_reexport/static.K2.html
+//@ has foreigntype_reexport/index.html '//a[@class="foreigntype"]' 'C2'
+//@ has foreigntype_reexport/index.html '//a[@class="fn"]' 'f2'
+//@ has foreigntype_reexport/index.html '//a[@class="static"]' 'K2'
 pub use self::sub::{f2, C2, K as K2};
 
-// @has foreigntype_reexport/index.html '//a[@class="foreigntype"]' 'C'
-// @has foreigntype_reexport/index.html '//a[@class="fn"]' 'f'
-// @has foreigntype_reexport/index.html '//a[@class="static"]' 'K3'
-// @has foreigntype_reexport/index.html '//code' 'pub use self::sub2::C as C3;'
-// @has foreigntype_reexport/index.html '//code' 'pub use self::sub2::f as f3;'
-// @has foreigntype_reexport/index.html '//code' 'pub use self::sub2::K3;'
+//@ has foreigntype_reexport/index.html '//a[@class="foreigntype"]' 'C'
+//@ has foreigntype_reexport/index.html '//a[@class="fn"]' 'f'
+//@ has foreigntype_reexport/index.html '//a[@class="static"]' 'K3'
+//@ has foreigntype_reexport/index.html '//code' 'pub use self::sub2::C as C3;'
+//@ has foreigntype_reexport/index.html '//code' 'pub use self::sub2::f as f3;'
+//@ has foreigntype_reexport/index.html '//code' 'pub use self::sub2::K3;'
 pub use self::sub2::{f as f3, C as C3, K3};
 
-// @has foreigntype_reexport/foreigntype.C4.html
-// @has foreigntype_reexport/fn.f4.html
-// @has foreigntype_reexport/static.K4.html
-// @!has foreigntype_reexport/foreigntype.X4.html
-// @has foreigntype_reexport/index.html '//a[@class="foreigntype"]' 'C4'
-// @has foreigntype_reexport/index.html '//a[@class="fn"]' 'f4'
-// @has foreigntype_reexport/index.html '//a[@class="static"]' 'K4'
-// @!has foreigntype_reexport/index.html '//a[@class="foreigntype"]' 'X4'
+//@ has foreigntype_reexport/foreigntype.C4.html
+//@ has foreigntype_reexport/fn.f4.html
+//@ has foreigntype_reexport/static.K4.html
+//@ !has foreigntype_reexport/foreigntype.X4.html
+//@ has foreigntype_reexport/index.html '//a[@class="foreigntype"]' 'C4'
+//@ has foreigntype_reexport/index.html '//a[@class="fn"]' 'f4'
+//@ has foreigntype_reexport/index.html '//a[@class="static"]' 'K4'
+//@ !has foreigntype_reexport/index.html '//a[@class="foreigntype"]' 'X4'
 pub use self::sub3::*;
diff --git a/tests/rustdoc/foreigntype.rs b/tests/rustdoc/foreigntype.rs
index 29f9c2926e9..bee3d8e6509 100644
--- a/tests/rustdoc/foreigntype.rs
+++ b/tests/rustdoc/foreigntype.rs
@@ -1,18 +1,18 @@
 #![feature(extern_types)]
 
 extern "C" {
-    // @has foreigntype/foreigntype.ExtType.html
+    //@ has foreigntype/foreigntype.ExtType.html
     pub type ExtType;
 }
 
 impl ExtType {
-    // @has - '//a[@class="fn"]' 'do_something'
+    //@ has - '//a[@class="fn"]' 'do_something'
     pub fn do_something(&self) {}
 }
 
 pub trait Trait {}
 
-// @has foreigntype/trait.Trait.html '//a[@class="foreigntype"]' 'ExtType'
+//@ has foreigntype/trait.Trait.html '//a[@class="foreigntype"]' 'ExtType'
 impl Trait for ExtType {}
 
-// @has foreigntype/index.html '//a[@class="foreigntype"]' 'ExtType'
+//@ has foreigntype/index.html '//a[@class="foreigntype"]' 'ExtType'
diff --git a/tests/rustdoc/generic-associated-types/gats.rs b/tests/rustdoc/generic-associated-types/gats.rs
index 605176e5fea..ecfa1796e72 100644
--- a/tests/rustdoc/generic-associated-types/gats.rs
+++ b/tests/rustdoc/generic-associated-types/gats.rs
@@ -1,19 +1,19 @@
 #![crate_name = "foo"]
 
-// @has foo/trait.LendingIterator.html
+//@ has foo/trait.LendingIterator.html
 pub trait LendingIterator {
-    // @has - '//*[@id="associatedtype.Item"]//h4[@class="code-header"]' "type Item<'a> where Self: 'a"
+    //@ has - '//*[@id="associatedtype.Item"]//h4[@class="code-header"]' "type Item<'a> where Self: 'a"
     type Item<'a> where Self: 'a;
 
-    // @has - '//*[@id="tymethod.next"]//h4[@class="code-header"]' \
+    //@ has - '//*[@id="tymethod.next"]//h4[@class="code-header"]' \
     //      "fn next<'a>(&'a self) -> Self::Item<'a>"
-    // @has - '//*[@id="tymethod.next"]//h4[@class="code-header"]//a[@href="trait.LendingIterator.html#associatedtype.Item"]' \
+    //@ has - '//*[@id="tymethod.next"]//h4[@class="code-header"]//a[@href="trait.LendingIterator.html#associatedtype.Item"]' \
     //      "Item"
     fn next<'a>(&'a self) -> Self::Item<'a>;
 }
 
-// @has foo/trait.LendingIterator.html
-// @has - '//*[@id="associatedtype.Item-1"]//h4[@class="code-header"]' "type Item<'a> = ()"
+//@ has foo/trait.LendingIterator.html
+//@ has - '//*[@id="associatedtype.Item-1"]//h4[@class="code-header"]' "type Item<'a> = ()"
 impl LendingIterator for () {
     type Item<'a> = ();
 
@@ -22,8 +22,8 @@ impl LendingIterator for () {
 
 pub struct Infinite<T>(T);
 
-// @has foo/trait.LendingIterator.html
-// @has - '//*[@id="associatedtype.Item-2"]//h4[@class="code-header"]' "type Item<'a> = &'a T where Self: 'a"
+//@ has foo/trait.LendingIterator.html
+//@ has - '//*[@id="associatedtype.Item-2"]//h4[@class="code-header"]' "type Item<'a> = &'a T where Self: 'a"
 impl<T> LendingIterator for Infinite<T> {
     type Item<'a> = &'a T where Self: 'a;
 
diff --git a/tests/rustdoc/generic-associated-types/issue-109488.rs b/tests/rustdoc/generic-associated-types/issue-109488.rs
index 99ae8a6c36c..12f8988f520 100644
--- a/tests/rustdoc/generic-associated-types/issue-109488.rs
+++ b/tests/rustdoc/generic-associated-types/issue-109488.rs
@@ -2,9 +2,9 @@
 // the href of the corresponding trait (in this case it is private).
 // Further, test that we also linkify the GAT arguments.
 
-// @has 'issue_109488/type.A.html'
-// @has - '//pre[@class="rust item-decl"]' '<S as Tr>::P<Option<i32>>'
-// @has - '//pre[@class="rust item-decl"]//a[@class="enum"]/@href' '{{channel}}/core/option/enum.Option.html'
+//@ has 'issue_109488/type.A.html'
+//@ has - '//pre[@class="rust item-decl"]' '<S as Tr>::P<Option<i32>>'
+//@ has - '//pre[@class="rust item-decl"]//a[@class="enum"]/@href' '{{channel}}/core/option/enum.Option.html'
 pub type A = <S as Tr>::P<Option<i32>>;
 
 /*private*/ trait Tr {
diff --git a/tests/rustdoc/generic-associated-types/issue-94683.rs b/tests/rustdoc/generic-associated-types/issue-94683.rs
index 985c7e983aa..19a1e9d448e 100644
--- a/tests/rustdoc/generic-associated-types/issue-94683.rs
+++ b/tests/rustdoc/generic-associated-types/issue-94683.rs
@@ -6,7 +6,7 @@ pub trait Trait {
 
 // Make sure that the elided lifetime shows up
 
-// @has foo/type.T.html
-// @hasraw - "pub type T = "
-// @hasraw - "&lt;'_&gt;"
+//@ has foo/type.T.html
+//@ hasraw - "pub type T = "
+//@ hasraw - "&lt;'_&gt;"
 pub type T = fn(&<() as Trait>::Gat<'_>);
diff --git a/tests/rustdoc/generic-const-items.rs b/tests/rustdoc/generic-const-items.rs
index e2c6a027afa..31c300f2ff1 100644
--- a/tests/rustdoc/generic-const-items.rs
+++ b/tests/rustdoc/generic-const-items.rs
@@ -1,8 +1,8 @@
 #![feature(generic_const_items)]
 #![allow(incomplete_features)]
 
-// @has 'generic_const_items/constant.K.html'
-// @has - '//*[@class="rust item-decl"]//code' \
+//@ has 'generic_const_items/constant.K.html'
+//@ has - '//*[@class="rust item-decl"]//code' \
 // "pub const K<'a, T: 'a + Copy, const N: usize>: Option<[T; N]> \
 // where \
 //     String: From<T>;"
@@ -10,9 +10,9 @@ pub const K<'a, T: 'a + Copy, const N: usize>: Option<[T; N]> = None
 where
     String: From<T>;
 
-// @has generic_const_items/trait.Trait.html
+//@ has generic_const_items/trait.Trait.html
 pub trait Trait<T: ?Sized> {
-    // @has - '//*[@id="associatedconstant.C"]' \
+    //@ has - '//*[@id="associatedconstant.C"]' \
     // "const C<'a>: &'a T \
     // where \
     //     T: 'a + Eq"
@@ -23,10 +23,10 @@ pub trait Trait<T: ?Sized> {
 
 pub struct Implementor;
 
-// @has generic_const_items/struct.Implementor.html
-// @has - '//h3[@class="code-header"]' 'impl Trait<str> for Implementor'
+//@ has generic_const_items/struct.Implementor.html
+//@ has - '//h3[@class="code-header"]' 'impl Trait<str> for Implementor'
 impl Trait<str> for Implementor {
-    // @has - '//*[@id="associatedconstant.C"]' \
+    //@ has - '//*[@id="associatedconstant.C"]' \
     // "const C<'a>: &'a str = \"C\" \
     // where \
     //     str: 'a"
diff --git a/tests/rustdoc/generic-impl.rs b/tests/rustdoc/generic-impl.rs
index f62540c6bf9..9d15d0fff77 100644
--- a/tests/rustdoc/generic-impl.rs
+++ b/tests/rustdoc/generic-impl.rs
@@ -2,12 +2,12 @@
 
 use std::fmt;
 
-// @!has foo/struct.Bar.html '//*[@id="impl-ToString-for-Bar"]' ''
+//@ !has foo/struct.Bar.html '//*[@id="impl-ToString-for-Bar"]' ''
 pub struct Bar;
 
-// @has foo/struct.Foo.html '//*[@id="impl-ToString-for-T"]//h3[@class="code-header"]' 'impl<T> ToString for T'
+//@ has foo/struct.Foo.html '//*[@id="impl-ToString-for-T"]//h3[@class="code-header"]' 'impl<T> ToString for T'
 pub struct Foo;
-// @has foo/struct.Foo.html '//*[@class="sidebar-elems"]//section//a[@href="#impl-ToString-for-T"]' 'ToString'
+//@ has foo/struct.Foo.html '//*[@class="sidebar-elems"]//section//a[@href="#impl-ToString-for-T"]' 'ToString'
 
 impl fmt::Display for Foo {
     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
diff --git a/tests/rustdoc/generic_const_exprs.rs b/tests/rustdoc/generic_const_exprs.rs
index 6ff59163975..44f7bf5b24c 100644
--- a/tests/rustdoc/generic_const_exprs.rs
+++ b/tests/rustdoc/generic_const_exprs.rs
@@ -5,7 +5,7 @@
 
 #![crate_name = "foo"]
 
-// @has 'foo/trait.Foo.html'
+//@ has 'foo/trait.Foo.html'
 
 pub trait Foo: Sized {
     const WIDTH: usize;
@@ -16,7 +16,7 @@ pub trait Foo: Sized {
 impl<T: Sized> Foo for T {
     const WIDTH: usize = 1;
 
-    // @has - '//*[@id="tymethod.arrayify"]/*[@class="code-header"]' \
+    //@ has - '//*[@id="tymethod.arrayify"]/*[@class="code-header"]' \
     // 'fn arrayify(self) -> [Self; Self::WIDTH]'
     fn arrayify(self) -> [Self; Self::WIDTH] {
         [self]
diff --git a/tests/rustdoc/glob-reexport-attribute-merge-120487.rs b/tests/rustdoc/glob-reexport-attribute-merge-120487.rs
index 98cdec107ae..2fa10f546d5 100644
--- a/tests/rustdoc/glob-reexport-attribute-merge-120487.rs
+++ b/tests/rustdoc/glob-reexport-attribute-merge-120487.rs
@@ -5,11 +5,11 @@
 #![crate_name = "foo"]
 #![feature(doc_cfg)]
 
-// @has 'foo/index.html'
+//@ has 'foo/index.html'
 // There are two items.
-// @count - '//*[@class="item-table"]//div[@class="item-name"]' 2
+//@ count - '//*[@class="item-table"]//div[@class="item-name"]' 2
 // Only one of them should have an attribute.
-// @count - '//*[@class="item-table"]//div[@class="item-name"]/*[@class="stab portability"]' 1
+//@ count - '//*[@class="item-table"]//div[@class="item-name"]/*[@class="stab portability"]' 1
 
 mod a {
     #[doc(cfg(not(feature = "a")))]
@@ -23,10 +23,10 @@ mod b {
     pub struct Test2;
 }
 
-// @has 'foo/struct.Test1.html'
-// @count - '//*[@id="main-content"]/*[@class="item-info"]' 1
-// @has - '//*[@id="main-content"]/*[@class="item-info"]' 'Available on non-crate feature a only.'
+//@ has 'foo/struct.Test1.html'
+//@ count - '//*[@id="main-content"]/*[@class="item-info"]' 1
+//@ has - '//*[@id="main-content"]/*[@class="item-info"]' 'Available on non-crate feature a only.'
 pub use a::*;
-// @has 'foo/struct.Test2.html'
-// @count - '//*[@id="main-content"]/*[@class="item-info"]' 0
+//@ has 'foo/struct.Test2.html'
+//@ count - '//*[@id="main-content"]/*[@class="item-info"]' 0
 pub use b::Test2;
diff --git a/tests/rustdoc/glob-reexport-attribute-merge-doc-auto-cfg.rs b/tests/rustdoc/glob-reexport-attribute-merge-doc-auto-cfg.rs
index 3e3e602eb1b..314b457c2ad 100644
--- a/tests/rustdoc/glob-reexport-attribute-merge-doc-auto-cfg.rs
+++ b/tests/rustdoc/glob-reexport-attribute-merge-doc-auto-cfg.rs
@@ -4,11 +4,11 @@
 #![crate_name = "foo"]
 #![feature(doc_auto_cfg)]
 
-// @has 'foo/index.html'
+//@ has 'foo/index.html'
 // There are two items.
-// @count - '//*[@class="item-table"]//div[@class="item-name"]' 2
+//@ count - '//*[@class="item-table"]//div[@class="item-name"]' 2
 // Only one of them should have an attribute.
-// @count - '//*[@class="item-table"]//div[@class="item-name"]/*[@class="stab portability"]' 1
+//@ count - '//*[@class="item-table"]//div[@class="item-name"]/*[@class="stab portability"]' 1
 
 mod a {
     #[cfg(not(feature = "a"))]
@@ -20,10 +20,10 @@ mod b {
     pub struct Test2;
 }
 
-// @has 'foo/struct.Test1.html'
-// @count - '//*[@id="main-content"]/*[@class="item-info"]' 1
-// @has - '//*[@id="main-content"]/*[@class="item-info"]' 'Available on non-crate feature a only.'
+//@ has 'foo/struct.Test1.html'
+//@ count - '//*[@id="main-content"]/*[@class="item-info"]' 1
+//@ has - '//*[@id="main-content"]/*[@class="item-info"]' 'Available on non-crate feature a only.'
 pub use a::*;
-// @has 'foo/struct.Test2.html'
-// @count - '//*[@id="main-content"]/*[@class="item-info"]' 0
+//@ has 'foo/struct.Test2.html'
+//@ count - '//*[@id="main-content"]/*[@class="item-info"]' 0
 pub use b::Test2;
diff --git a/tests/rustdoc/glob-shadowing-const.rs b/tests/rustdoc/glob-shadowing-const.rs
index 58fe8173e03..1eb5596cd9c 100644
--- a/tests/rustdoc/glob-shadowing-const.rs
+++ b/tests/rustdoc/glob-shadowing-const.rs
@@ -14,7 +14,7 @@ mod sub4 {
 #[doc(inline)]
 pub use sub4::inner::*;
 
-// @has 'foo/index.html'
-// @has - '//div[@class="desc docblock-short"]' '1'
-// @!has - '//div[@class="desc docblock-short"]' '0'
+//@ has 'foo/index.html'
+//@ has - '//div[@class="desc docblock-short"]' '1'
+//@ !has - '//div[@class="desc docblock-short"]' '0'
 fn main() { assert_eq!(X, 1); }
diff --git a/tests/rustdoc/glob-shadowing.rs b/tests/rustdoc/glob-shadowing.rs
index c117b9d6489..a051bd407d5 100644
--- a/tests/rustdoc/glob-shadowing.rs
+++ b/tests/rustdoc/glob-shadowing.rs
@@ -1,20 +1,20 @@
-// @has 'glob_shadowing/index.html'
-// @count - '//div[@class="item-name"]' 6
-// @!has - '//div[@class="desc docblock-short"]' 'sub1::describe'
-// @has - '//div[@class="desc docblock-short"]' 'sub2::describe'
+//@ has 'glob_shadowing/index.html'
+//@ count - '//div[@class="item-name"]' 6
+//@ !has - '//div[@class="desc docblock-short"]' 'sub1::describe'
+//@ has - '//div[@class="desc docblock-short"]' 'sub2::describe'
 
-// @!has - '//div[@class="desc docblock-short"]' 'sub1::describe2'
+//@ !has - '//div[@class="desc docblock-short"]' 'sub1::describe2'
 
-// @!has - '//div[@class="desc docblock-short"]' 'sub1::prelude'
-// @has - '//div[@class="desc docblock-short"]' 'mod::prelude'
+//@ !has - '//div[@class="desc docblock-short"]' 'sub1::prelude'
+//@ has - '//div[@class="desc docblock-short"]' 'mod::prelude'
 
-// @has - '//div[@class="desc docblock-short"]' 'sub1::Foo (struct)'
-// @has - '//div[@class="desc docblock-short"]' 'mod::Foo (function)'
+//@ has - '//div[@class="desc docblock-short"]' 'sub1::Foo (struct)'
+//@ has - '//div[@class="desc docblock-short"]' 'mod::Foo (function)'
 
-// @has - '//div[@class="desc docblock-short"]' 'sub4::inner::X'
+//@ has - '//div[@class="desc docblock-short"]' 'sub4::inner::X'
 
-// @has 'glob_shadowing/fn.describe.html'
-// @has - '//div[@class="docblock"]' 'sub2::describe'
+//@ has 'glob_shadowing/fn.describe.html'
+//@ has - '//div[@class="docblock"]' 'sub2::describe'
 
 mod sub1 {
     // this should be shadowed by sub2::describe
diff --git a/tests/rustdoc/heading-levels-89309.rs b/tests/rustdoc/heading-levels-89309.rs
index caa99428525..772217c1594 100644
--- a/tests/rustdoc/heading-levels-89309.rs
+++ b/tests/rustdoc/heading-levels-89309.rs
@@ -1,20 +1,20 @@
 // https://github.com/rust-lang/rust/issues/89309
 #![crate_name = "foo"]
 
-// @has foo/trait.Read.html
-// @has - '//h2' 'Trait examples'
+//@ has foo/trait.Read.html
+//@ has - '//h2' 'Trait examples'
 /// # Trait examples
 pub trait Read {
-    // @has - '//h5' 'Function examples'
+    //@ has - '//h5' 'Function examples'
     /// # Function examples
     fn read(&mut self, buf: &mut [u8]) -> Result<usize, ()>;
 }
 
 pub struct Foo;
 
-// @has foo/struct.Foo.html
+//@ has foo/struct.Foo.html
 impl Foo {
-    // @has - '//h5' 'Implementation header'
+    //@ has - '//h5' 'Implementation header'
     /// # Implementation header
     pub fn bar(&self) -> usize {
         1
@@ -22,7 +22,7 @@ impl Foo {
 }
 
 impl Read for Foo {
-    // @has - '//h5' 'Trait implementation header'
+    //@ has - '//h5' 'Trait implementation header'
     /// # Trait implementation header
     fn read(&mut self, buf: &mut [u8]) -> Result<usize, ()> {
         Ok(1)
diff --git a/tests/rustdoc/hidden-extern-34025.rs b/tests/rustdoc/hidden-extern-34025.rs
index 81ccf2a0e5c..2a7b21a874d 100644
--- a/tests/rustdoc/hidden-extern-34025.rs
+++ b/tests/rustdoc/hidden-extern-34025.rs
@@ -1,12 +1,12 @@
 // https://github.com/rust-lang/rust/issues/34025
 #![crate_name = "foo"]
 
-// @!has 'foo/sys/index.html'
-// @!has 'foo/sys/sidebar-items.js'
+//@ !has 'foo/sys/index.html'
+//@ !has 'foo/sys/sidebar-items.js'
 #[doc(hidden)]
 pub mod sys {
     extern "C" {
-        // @!has 'foo/sys/fn.foo.html'
+        //@ !has 'foo/sys/fn.foo.html'
         #[doc(hidden)]
         pub fn foo();
     }
diff --git a/tests/rustdoc/hidden-impls.rs b/tests/rustdoc/hidden-impls.rs
index 3283fbfecce..73deeed9e90 100644
--- a/tests/rustdoc/hidden-impls.rs
+++ b/tests/rustdoc/hidden-impls.rs
@@ -10,8 +10,8 @@ pub mod __hidden {
     pub use hidden::Foo;
 }
 
-// @has foo/trait.Clone.html
-// @!hasraw - 'Foo'
-// @has trait.impl/core/clone/trait.Clone.js
-// @!hasraw - 'Foo'
+//@ has foo/trait.Clone.html
+//@ !hasraw - 'Foo'
+//@ has trait.impl/core/clone/trait.Clone.js
+//@ !hasraw - 'Foo'
 pub use std::clone::Clone;
diff --git a/tests/rustdoc/hidden-line.rs b/tests/rustdoc/hidden-line.rs
index 00a05a7c26f..0162b27d8be 100644
--- a/tests/rustdoc/hidden-line.rs
+++ b/tests/rustdoc/hidden-line.rs
@@ -15,5 +15,5 @@
 /// ```
 pub fn foo() {}
 
-// @!hasraw hidden_line/fn.foo.html invisible
-// @matches - //pre "#\[derive\(PartialEq\)\] // Bar"
+//@ !hasraw hidden_line/fn.foo.html invisible
+//@ matches - //pre "#\[derive\(PartialEq\)\] // Bar"
diff --git a/tests/rustdoc/hidden-methods.rs b/tests/rustdoc/hidden-methods.rs
index 543d8f768a6..ed9c1ee1aac 100644
--- a/tests/rustdoc/hidden-methods.rs
+++ b/tests/rustdoc/hidden-methods.rs
@@ -16,14 +16,14 @@ pub mod hidden {
     }
 }
 
-// @has foo/struct.Foo.html
-// @!hasraw - 'Methods'
-// @!has - '//code' 'impl Foo'
-// @!hasraw - 'this_should_be_hidden'
+//@ has foo/struct.Foo.html
+//@ !hasraw - 'Methods'
+//@ !has - '//code' 'impl Foo'
+//@ !hasraw - 'this_should_be_hidden'
 pub use hidden::Foo;
 
-// @has foo/struct.Bar.html
-// @!hasraw - 'Methods'
-// @!has - '//code' 'impl Bar'
-// @!hasraw - 'this_should_be_hidden'
+//@ has foo/struct.Bar.html
+//@ !hasraw - 'Methods'
+//@ !has - '//code' 'impl Bar'
+//@ !hasraw - 'this_should_be_hidden'
 pub use hidden::Bar;
diff --git a/tests/rustdoc/hidden-private.rs b/tests/rustdoc/hidden-private.rs
index 5e3c7f3a3e4..658e093cc23 100644
--- a/tests/rustdoc/hidden-private.rs
+++ b/tests/rustdoc/hidden-private.rs
@@ -6,10 +6,10 @@
 
 #![crate_name = "foo"]
 
-// @has 'foo/index.html'
-// @count - '//*[@class="item-table"]//a[@class="struct"]' 2
-// @count - '//*[@class="item-table"]//a[@class="trait"]' 1
-// @count - '//*[@class="item-table"]//a[@class="macro"]' 0
+//@ has 'foo/index.html'
+//@ count - '//*[@class="item-table"]//a[@class="struct"]' 2
+//@ count - '//*[@class="item-table"]//a[@class="trait"]' 1
+//@ count - '//*[@class="item-table"]//a[@class="macro"]' 0
 #[doc(hidden)]
 const _: () = {
     macro_rules! stry {
@@ -18,8 +18,8 @@ const _: () = {
 
     struct ShouldBeHidden;
 
-    // @has 'foo/struct.Foo.html'
-    // @!has - '//*[@class="code-header"]' 'impl Bar for Foo'
+    //@ has 'foo/struct.Foo.html'
+    //@ !has - '//*[@class="code-header"]' 'impl Bar for Foo'
     #[doc(hidden)]
     impl Bar for Foo {
         fn bar(&self) {
@@ -27,15 +27,15 @@ const _: () = {
         }
     }
 
-    // @has 'foo/struct.Private.html'
-    // @has - '//*[@id="impl-Bar-for-Private"]/*[@class="code-header"]' 'impl Bar for Private'
-    // @has - '//*[@id="method.bar"]/*[@class="code-header"]' 'fn bar(&self)'
+    //@ has 'foo/struct.Private.html'
+    //@ has - '//*[@id="impl-Bar-for-Private"]/*[@class="code-header"]' 'impl Bar for Private'
+    //@ has - '//*[@id="method.bar"]/*[@class="code-header"]' 'fn bar(&self)'
     impl Bar for Private {
         fn bar(&self) {}
     }
 
-    // @has - '//*[@id="impl-Private"]/*[@class="code-header"]' 'impl Private'
-    // @has - '//*[@id="method.tralala"]/*[@class="code-header"]' 'fn tralala()'
+    //@ has - '//*[@id="impl-Private"]/*[@class="code-header"]' 'impl Private'
+    //@ has - '//*[@id="method.tralala"]/*[@class="code-header"]' 'fn tralala()'
     impl Private {
         fn tralala() {}
     }
diff --git a/tests/rustdoc/hidden-trait-methods-with-document-hidden-items.rs b/tests/rustdoc/hidden-trait-methods-with-document-hidden-items.rs
index d2269e3b021..a290992e5fe 100644
--- a/tests/rustdoc/hidden-trait-methods-with-document-hidden-items.rs
+++ b/tests/rustdoc/hidden-trait-methods-with-document-hidden-items.rs
@@ -3,11 +3,11 @@
 // test for trait methods with `doc(hidden)` with `--document-hidden-items` passed.
 #![crate_name = "foo"]
 
-// @has foo/trait.Trait.html
-// @has - '//*[@id="associatedtype.Foo"]' 'type Foo'
-// @has - '//*[@id="associatedtype.Bar"]' 'type Bar'
-// @has - '//*[@id="tymethod.f"]' 'fn f()'
-// @has - '//*[@id="tymethod.g"]' 'fn g()'
+//@ has foo/trait.Trait.html
+//@ has - '//*[@id="associatedtype.Foo"]' 'type Foo'
+//@ has - '//*[@id="associatedtype.Bar"]' 'type Bar'
+//@ has - '//*[@id="tymethod.f"]' 'fn f()'
+//@ has - '//*[@id="tymethod.g"]' 'fn g()'
 pub trait Trait {
     #[doc(hidden)]
     type Foo;
@@ -17,11 +17,11 @@ pub trait Trait {
     fn g();
 }
 
-// @has foo/struct.S.html
-// @has - '//*[@id="associatedtype.Foo"]' 'type Foo'
-// @has - '//*[@id="associatedtype.Bar"]' 'type Bar'
-// @has - '//*[@id="method.f"]' 'fn f()'
-// @has - '//*[@id="method.g"]' 'fn g()'
+//@ has foo/struct.S.html
+//@ has - '//*[@id="associatedtype.Foo"]' 'type Foo'
+//@ has - '//*[@id="associatedtype.Bar"]' 'type Bar'
+//@ has - '//*[@id="method.f"]' 'fn f()'
+//@ has - '//*[@id="method.g"]' 'fn g()'
 pub struct S;
 impl Trait for S {
     type Foo = ();
diff --git a/tests/rustdoc/hidden-trait-methods.rs b/tests/rustdoc/hidden-trait-methods.rs
index e924ba7d0ac..2c342ff28b3 100644
--- a/tests/rustdoc/hidden-trait-methods.rs
+++ b/tests/rustdoc/hidden-trait-methods.rs
@@ -1,11 +1,11 @@
 // test for trait methods with `doc(hidden)`.
 #![crate_name = "foo"]
 
-// @has foo/trait.Trait.html
-// @!has - '//*[@id="associatedtype.Foo"]' 'type Foo'
-// @has - '//*[@id="associatedtype.Bar"]' 'type Bar'
-// @!has - '//*[@id="tymethod.f"]' 'fn f()'
-// @has - '//*[@id="tymethod.g"]' 'fn g()'
+//@ has foo/trait.Trait.html
+//@ !has - '//*[@id="associatedtype.Foo"]' 'type Foo'
+//@ has - '//*[@id="associatedtype.Bar"]' 'type Bar'
+//@ !has - '//*[@id="tymethod.f"]' 'fn f()'
+//@ has - '//*[@id="tymethod.g"]' 'fn g()'
 pub trait Trait {
     #[doc(hidden)]
     type Foo;
@@ -15,11 +15,11 @@ pub trait Trait {
     fn g();
 }
 
-// @has foo/struct.S.html
-// @!has - '//*[@id="associatedtype.Foo"]' 'type Foo'
-// @has - '//*[@id="associatedtype.Bar"]' 'type Bar'
-// @!has - '//*[@id="method.f"]' 'fn f()'
-// @has - '//*[@id="method.g"]' 'fn g()'
+//@ has foo/struct.S.html
+//@ !has - '//*[@id="associatedtype.Foo"]' 'type Foo'
+//@ has - '//*[@id="associatedtype.Bar"]' 'type Bar'
+//@ !has - '//*[@id="method.f"]' 'fn f()'
+//@ has - '//*[@id="method.g"]' 'fn g()'
 pub struct S;
 impl Trait for S {
     type Foo = ();
diff --git a/tests/rustdoc/hidden-trait-struct-impls.rs b/tests/rustdoc/hidden-trait-struct-impls.rs
index cc3f6337719..1010cb45960 100644
--- a/tests/rustdoc/hidden-trait-struct-impls.rs
+++ b/tests/rustdoc/hidden-trait-struct-impls.rs
@@ -11,12 +11,12 @@ pub struct Bar;
 
 struct Hidden;
 
-// @!has foo/struct.Bar.html '//*[@id="impl-Foo-for-Bar"]' 'impl Foo for Bar'
+//@ !has foo/struct.Bar.html '//*[@id="impl-Foo-for-Bar"]' 'impl Foo for Bar'
 impl Foo for Bar {}
-// @!has foo/struct.Bar.html '//*[@id="impl-Dark-for-Bar"]' 'impl Dark for Bar'
+//@ !has foo/struct.Bar.html '//*[@id="impl-Dark-for-Bar"]' 'impl Dark for Bar'
 impl Dark for Bar {}
-// @has foo/struct.Bar.html '//*[@id="impl-Bam-for-Bar"]' 'impl Bam for Bar'
-// @has foo/trait.Bam.html '//*[@id="implementors-list"]' 'impl Bam for Bar'
+//@ has foo/struct.Bar.html '//*[@id="impl-Bam-for-Bar"]' 'impl Bam for Bar'
+//@ has foo/trait.Bam.html '//*[@id="implementors-list"]' 'impl Bam for Bar'
 impl Bam for Bar {}
-// @!has foo/trait.Bam.html '//*[@id="implementors-list"]' 'impl Bam for Hidden'
+//@ !has foo/trait.Bam.html '//*[@id="implementors-list"]' 'impl Bam for Hidden'
 impl Bam for Hidden {}
diff --git a/tests/rustdoc/hide-complex-unevaluated-const-arguments.rs b/tests/rustdoc/hide-complex-unevaluated-const-arguments.rs
index d728f772a69..e94c1ea5c61 100644
--- a/tests/rustdoc/hide-complex-unevaluated-const-arguments.rs
+++ b/tests/rustdoc/hide-complex-unevaluated-const-arguments.rs
@@ -9,7 +9,7 @@
 
 use std::marker::ConstParamTy;
 
-// @has hide_complex_unevaluated_const_arguments/trait.Stage.html
+//@ has hide_complex_unevaluated_const_arguments/trait.Stage.html
 pub trait Stage {
     // A helper constant that prevents const expressions containing it
     // from getting fully evaluated since it doesn't have a body and
@@ -29,12 +29,12 @@ pub trait Stage {
     // This assoc. const could leak the private assoc. function `Struct::new`.
     // Ensure that this does not happen.
     //
-    // @has - '//*[@id="associatedconstant.ARRAY1"]' \
+    //@ has - '//*[@id="associatedconstant.ARRAY1"]' \
     //        'const ARRAY1: [u8; { _ }]'
     const ARRAY1: [u8; Struct::new(/* ... */).do_something(Self::ABSTRACT * 1_000)]
         where [(); Struct::new(/* ... */).do_something(Self::ABSTRACT * 1_000)]:;
 
-    // @has - '//*[@id="associatedconstant.VERBOSE"]' \
+    //@ has - '//*[@id="associatedconstant.VERBOSE"]' \
     //        'const VERBOSE: [u16; { _ }]'
     const VERBOSE: [u16; compute("thing", 9 + 9) * Self::ABSTRACT]
         where [(); compute("thing", 9 + 9) * Self::ABSTRACT]:;
@@ -44,7 +44,7 @@ pub trait Stage {
     // (e.g. printing sth. akin to `<Self as Helper<{ _ }>>::OUT`) but
     // right now “safe is safe”.
     //
-    // @has - '//*[@id="associatedconstant.PATH"]' \
+    //@ has - '//*[@id="associatedconstant.PATH"]' \
     //        'const PATH: usize = _'
     const PATH: usize = <Self as Helper<{ Struct { private: () } }>>::OUT;
 }
@@ -66,7 +66,7 @@ impl<const S: Struct, St: Stage + ?Sized> Helper<S> for St {
 // If rustdoc gets patched to evaluate const arguments, it is fine to replace
 // this test as long as one can ensure that private fields are not leaked!
 //
-// @has hide_complex_unevaluated_const_arguments/trait.Sub.html \
+//@ has hide_complex_unevaluated_const_arguments/trait.Sub.html \
 //      '//pre[@class="rust item-decl"]' \
 //      'pub trait Sub: Sup<{ _ }, { _ }> { }'
 pub trait Sub: Sup<{ 90 * 20 * 4 }, { Struct { private: () } }> {}
diff --git a/tests/rustdoc/hide-complex-unevaluated-consts.rs b/tests/rustdoc/hide-complex-unevaluated-consts.rs
index ba623246a01..61ae8c801dd 100644
--- a/tests/rustdoc/hide-complex-unevaluated-consts.rs
+++ b/tests/rustdoc/hide-complex-unevaluated-consts.rs
@@ -7,7 +7,7 @@
 // Read the documentation of `rustdoc::clean::utils::print_const_expr`
 // for further details.
 
-// @has hide_complex_unevaluated_consts/trait.Container.html
+//@ has hide_complex_unevaluated_consts/trait.Container.html
 pub trait Container {
     // A helper constant that prevents const expressions containing it
     // from getting fully evaluated since it doesn't have a body and
@@ -17,11 +17,11 @@ pub trait Container {
 
     // Ensure that the private field does not get leaked:
     //
-    // @has - '//*[@id="associatedconstant.STRUCT0"]' \
+    //@ has - '//*[@id="associatedconstant.STRUCT0"]' \
     //        'const STRUCT0: Struct = _'
     const STRUCT0: Struct = Struct { private: () };
 
-    // @has - '//*[@id="associatedconstant.STRUCT1"]' \
+    //@ has - '//*[@id="associatedconstant.STRUCT1"]' \
     //        'const STRUCT1: (Struct,) = _'
     const STRUCT1: (Struct,) = (Struct{private: /**/()},);
 
@@ -30,20 +30,20 @@ pub trait Container {
     // show it. However for the time being, the printing logic is a bit
     // conservative.
     //
-    // @has - '//*[@id="associatedconstant.STRUCT2"]' \
+    //@ has - '//*[@id="associatedconstant.STRUCT2"]' \
     //        'const STRUCT2: Record = _'
     const STRUCT2: Record = Record { public: 5 };
 
     // Test that we do not show the incredibly verbose match expr:
     //
-    // @has - '//*[@id="associatedconstant.MATCH0"]' \
+    //@ has - '//*[@id="associatedconstant.MATCH0"]' \
     //        'const MATCH0: i32 = _'
     const MATCH0: i32 = match 234 {
         0 => 1,
         _ => Self::ABSTRACT,
     };
 
-    // @has - '//*[@id="associatedconstant.MATCH1"]' \
+    //@ has - '//*[@id="associatedconstant.MATCH1"]' \
     //        'const MATCH1: bool = _'
     const MATCH1: bool = match Self::ABSTRACT {
         _ => true,
@@ -61,7 +61,7 @@ pub trait Container {
     // For now, the implementation is quite simple and the choices
     // rather conservative.
     //
-    // @has - '//*[@id="associatedconstant.ARITH_OPS"]' \
+    //@ has - '//*[@id="associatedconstant.ARITH_OPS"]' \
     //        'const ARITH_OPS: i32 = _'
     const ARITH_OPS: i32 = Self::ABSTRACT * 2 + 1;
 }
diff --git a/tests/rustdoc/hide-mut-methods-if-no-derefmut-impl-74083.rs b/tests/rustdoc/hide-mut-methods-if-no-derefmut-impl-74083.rs
index 0bed7e2fb62..995121a8455 100644
--- a/tests/rustdoc/hide-mut-methods-if-no-derefmut-impl-74083.rs
+++ b/tests/rustdoc/hide-mut-methods-if-no-derefmut-impl-74083.rs
@@ -9,8 +9,8 @@ impl Foo {
     pub fn foo(&mut self) {}
 }
 
-// @has foo/struct.Bar.html
-// @!has - '//div[@class="sidebar-links"]/a[@href="#method.foo"]' 'foo'
+//@ has foo/struct.Bar.html
+//@ !has - '//div[@class="sidebar-links"]/a[@href="#method.foo"]' 'foo'
 pub struct Bar {
     foo: Foo,
 }
diff --git a/tests/rustdoc/hide-unstable-trait.rs b/tests/rustdoc/hide-unstable-trait.rs
index ebf9efb368b..33c514c77a7 100644
--- a/tests/rustdoc/hide-unstable-trait.rs
+++ b/tests/rustdoc/hide-unstable-trait.rs
@@ -5,7 +5,7 @@
 
 extern crate unstable_trait;
 
-// @hasraw foo/struct.Foo.html 'bar'
-// @hasraw foo/struct.Foo.html 'bar2'
+//@ hasraw foo/struct.Foo.html 'bar'
+//@ hasraw foo/struct.Foo.html 'bar2'
 #[doc(inline)]
 pub use unstable_trait::Foo;
diff --git a/tests/rustdoc/higher-ranked-trait-bounds.rs b/tests/rustdoc/higher-ranked-trait-bounds.rs
index 3493ae6d2bb..cda2ddc9166 100644
--- a/tests/rustdoc/higher-ranked-trait-bounds.rs
+++ b/tests/rustdoc/higher-ranked-trait-bounds.rs
@@ -1,44 +1,44 @@
 #![crate_name = "foo"]
 
-// @has foo/trait.Trait.html
+//@ has foo/trait.Trait.html
 pub trait Trait<'x> {}
 
-// @has foo/fn.test1.html
-// @has - '//pre' "pub fn test1<T>()where for<'a> &'a T: Iterator,"
+//@ has foo/fn.test1.html
+//@ has - '//pre' "pub fn test1<T>()where for<'a> &'a T: Iterator,"
 pub fn test1<T>()
 where
     for<'a> &'a T: Iterator,
 {
 }
 
-// @has foo/fn.test2.html
-// @has - '//pre' "pub fn test2<T>()where for<'a, 'b> &'a T: Trait<'b>,"
+//@ has foo/fn.test2.html
+//@ has - '//pre' "pub fn test2<T>()where for<'a, 'b> &'a T: Trait<'b>,"
 pub fn test2<T>()
 where
     for<'a, 'b> &'a T: Trait<'b>,
 {
 }
 
-// @has foo/fn.test3.html
-// @has - '//pre' "pub fn test3<F>()where F: for<'a, 'b> Fn(&'a u8, &'b u8),"
+//@ has foo/fn.test3.html
+//@ has - '//pre' "pub fn test3<F>()where F: for<'a, 'b> Fn(&'a u8, &'b u8),"
 pub fn test3<F>()
 where
     F: for<'a, 'b> Fn(&'a u8, &'b u8),
 {
 }
 
-// @has foo/struct.Foo.html
+//@ has foo/struct.Foo.html
 pub struct Foo<'a> {
     _x: &'a u8,
     pub some_trait: &'a dyn for<'b> Trait<'b>,
     pub some_func: for<'c> fn(val: &'c i32) -> i32,
 }
 
-// @has - '//span[@id="structfield.some_func"]' "some_func: for<'c> fn(val: &'c i32) -> i32"
-// @has - '//span[@id="structfield.some_trait"]' "some_trait: &'a dyn for<'b> Trait<'b>"
+//@ has - '//span[@id="structfield.some_func"]' "some_func: for<'c> fn(val: &'c i32) -> i32"
+//@ has - '//span[@id="structfield.some_trait"]' "some_trait: &'a dyn for<'b> Trait<'b>"
 
 impl<'a> Foo<'a> {
-    // @has - '//h4[@class="code-header"]' "pub fn bar<T>()where T: Trait<'a>,"
+    //@ has - '//h4[@class="code-header"]' "pub fn bar<T>()where T: Trait<'a>,"
     pub fn bar<T>()
     where
         T: Trait<'a>,
@@ -46,15 +46,15 @@ impl<'a> Foo<'a> {
     }
 }
 
-// @has foo/trait.B.html
+//@ has foo/trait.B.html
 pub trait B<'x> {}
 
-// @has - '//h3[@class="code-header"]' "impl<'a> B<'a> for dyn for<'b> Trait<'b>"
+//@ has - '//h3[@class="code-header"]' "impl<'a> B<'a> for dyn for<'b> Trait<'b>"
 impl<'a> B<'a> for dyn for<'b> Trait<'b> {}
 
-// @has foo/struct.Bar.html
-// @has - '//span[@id="structfield.bar"]' "bar: &'a (dyn for<'b> Trait<'b> + Unpin)"
-// @has - '//span[@id="structfield.baz"]' "baz: &'a (dyn Unpin + for<'b> Trait<'b>)"
+//@ has foo/struct.Bar.html
+//@ has - '//span[@id="structfield.bar"]' "bar: &'a (dyn for<'b> Trait<'b> + Unpin)"
+//@ has - '//span[@id="structfield.baz"]' "baz: &'a (dyn Unpin + for<'b> Trait<'b>)"
 pub struct Bar<'a> {
     pub bar: &'a (dyn for<'b> Trait<'b> + Unpin),
     pub baz: &'a (dyn Unpin + for<'b> Trait<'b>),
diff --git a/tests/rustdoc/highlight-invalid-rust-12834.rs b/tests/rustdoc/highlight-invalid-rust-12834.rs
index f8acc500264..f4a015ded29 100644
--- a/tests/rustdoc/highlight-invalid-rust-12834.rs
+++ b/tests/rustdoc/highlight-invalid-rust-12834.rs
@@ -5,8 +5,8 @@
 #![crate_name="issue_12834"]
 #![allow(rustdoc::invalid_rust_codeblocks)]
 
-// @has issue_12834/fn.foo.html
-// @has - //pre 'a + b '
+//@ has issue_12834/fn.foo.html
+//@ has - //pre 'a + b '
 
 /// ```
 /// a + b ∈ Self ∀ a, b ∈ Self
diff --git a/tests/rustdoc/html-no-source.rs b/tests/rustdoc/html-no-source.rs
index b52792837e5..100ab0031f7 100644
--- a/tests/rustdoc/html-no-source.rs
+++ b/tests/rustdoc/html-no-source.rs
@@ -8,23 +8,23 @@
 #![crate_name = "foo"]
 
 // Ensures that there is no items in the corresponding "src" folder.
-// @files 'src/foo' '[]'
+//@ files 'src/foo' '[]'
 
-// @has foo/fn.foo.html
-// @has - '//div[@class="main-heading"]/*[@class="out-of-band"]' '1.0.0 · '
-// @!has - '//div[@class="main-heading"]/*[@class="out-of-band"]' '1.0.0 · source · '
+//@ has foo/fn.foo.html
+//@ has - '//div[@class="main-heading"]/*[@class="out-of-band"]' '1.0.0 · '
+//@ !has - '//div[@class="main-heading"]/*[@class="out-of-band"]' '1.0.0 · source · '
 #[stable(feature = "bar", since = "1.0")]
 pub fn foo() {}
 
-// @has foo/struct.Bar.html
-// @has - '//div[@class="main-heading"]/*[@class="out-of-band"]' '1.0.0 · '
-// @!has - '//div[@class="main-heading"]/*[@class="out-of-band"]' '1.0.0 · source · '
+//@ has foo/struct.Bar.html
+//@ has - '//div[@class="main-heading"]/*[@class="out-of-band"]' '1.0.0 · '
+//@ !has - '//div[@class="main-heading"]/*[@class="out-of-band"]' '1.0.0 · source · '
 #[stable(feature = "bar", since = "1.0")]
 pub struct Bar;
 
 impl Bar {
-    // @has - '//*[@id="method.bar"]/*[@class="since rightside"]' '2.0.0'
-    // @!has - '//*[@id="method.bar"]/*[@class="rightside"]' '2.0.0 ·'
+    //@ has - '//*[@id="method.bar"]/*[@class="since rightside"]' '2.0.0'
+    //@ !has - '//*[@id="method.bar"]/*[@class="rightside"]' '2.0.0 ·'
     #[stable(feature = "foobar", since = "2.0")]
     pub fn bar() {}
 }
diff --git a/tests/rustdoc/impl-alias-substituted.rs b/tests/rustdoc/impl-alias-substituted.rs
index 82dfffe5f1c..02efcd88df8 100644
--- a/tests/rustdoc/impl-alias-substituted.rs
+++ b/tests/rustdoc/impl-alias-substituted.rs
@@ -2,7 +2,7 @@ pub struct Matrix<T, const N: usize, const M: usize>([[T; N]; M]);
 
 pub type Vector<T, const N: usize> = Matrix<T, N, 1>;
 
-// @has "impl_alias_substituted/struct.Matrix.html" '//*[@class="impl"]//h3[@class="code-header"]' \
+//@ has "impl_alias_substituted/struct.Matrix.html" '//*[@class="impl"]//h3[@class="code-header"]' \
 //  "impl<T: Copy> Matrix<T, 3, 1>"
 impl<T: Copy> Vector<T, 3> {
     pub fn test() {}
diff --git a/tests/rustdoc/impl-assoc-type-21092.rs b/tests/rustdoc/impl-assoc-type-21092.rs
index 2354fb986e7..c350456195d 100644
--- a/tests/rustdoc/impl-assoc-type-21092.rs
+++ b/tests/rustdoc/impl-assoc-type-21092.rs
@@ -6,6 +6,6 @@
 
 extern crate issue_21092;
 
-// @has issue_21092/struct.Bar.html
-// @has - '//*[@id="associatedtype.Bar"]' 'type Bar = i32'
+//@ has issue_21092/struct.Bar.html
+//@ has - '//*[@id="associatedtype.Bar"]' 'type Bar = i32'
 pub use issue_21092::{Foo, Bar};
diff --git a/tests/rustdoc/impl-blanket-53689.rs b/tests/rustdoc/impl-blanket-53689.rs
index 63bce550b9b..4b1697349f2 100644
--- a/tests/rustdoc/impl-blanket-53689.rs
+++ b/tests/rustdoc/impl-blanket-53689.rs
@@ -5,9 +5,9 @@
 
 extern crate issue_53689;
 
-// @has foo/trait.MyTrait.html
-// @!hasraw - 'MyStruct'
-// @count - '//*[h3="impl<T> MyTrait for T"]' 1
+//@ has foo/trait.MyTrait.html
+//@ !hasraw - 'MyStruct'
+//@ count - '//*[h3="impl<T> MyTrait for T"]' 1
 pub trait MyTrait {}
 
 impl<T> MyTrait for T {}
diff --git a/tests/rustdoc/impl-box.rs b/tests/rustdoc/impl-box.rs
index 592b6c98587..1fb63e21685 100644
--- a/tests/rustdoc/impl-box.rs
+++ b/tests/rustdoc/impl-box.rs
@@ -4,8 +4,8 @@
 
 pub struct MyType;
 
-// @has 'impl_box/struct.MyType.html'
-// @has '-' '//*[@id="impl-Iterator-for-Box%3CMyType%3E"]' 'impl Iterator for Box<MyType>'
+//@ has 'impl_box/struct.MyType.html'
+//@ has '-' '//*[@id="impl-Iterator-for-Box%3CMyType%3E"]' 'impl Iterator for Box<MyType>'
 
 impl Iterator for Box<MyType> {
     type Item = ();
diff --git a/tests/rustdoc/impl-disambiguation.rs b/tests/rustdoc/impl-disambiguation.rs
index 9e74ede8ff7..cfd5013964b 100644
--- a/tests/rustdoc/impl-disambiguation.rs
+++ b/tests/rustdoc/impl-disambiguation.rs
@@ -4,13 +4,13 @@ pub trait Foo {}
 
 pub struct Bar<T> { field: T }
 
-// @has foo/trait.Foo.html '//*[@id="implementors-list"]//h3[@class="code-header"]' \
+//@ has foo/trait.Foo.html '//*[@id="implementors-list"]//h3[@class="code-header"]' \
 //     "impl Foo for Bar<u8>"
 impl Foo for Bar<u8> {}
-// @has foo/trait.Foo.html '//*[@id="implementors-list"]//h3[@class="code-header"]' \
+//@ has foo/trait.Foo.html '//*[@id="implementors-list"]//h3[@class="code-header"]' \
 //     "impl Foo for Bar<u16>"
 impl Foo for Bar<u16> {}
-// @has foo/trait.Foo.html '//*[@id="implementors-list"]//h3[@class="code-header"]' \
+//@ has foo/trait.Foo.html '//*[@id="implementors-list"]//h3[@class="code-header"]' \
 //     "impl<'a> Foo for &'a Bar<u8>"
 impl<'a> Foo for &'a Bar<u8> {}
 
@@ -22,9 +22,9 @@ pub mod mod2 {
     pub enum Baz {}
 }
 
-// @has foo/trait.Foo.html '//*[@id="implementors-list"]//h3[@class="code-header"]' \
+//@ has foo/trait.Foo.html '//*[@id="implementors-list"]//h3[@class="code-header"]' \
 //     "impl Foo for foo::mod1::Baz"
 impl Foo for mod1::Baz {}
-// @has foo/trait.Foo.html '//*[@id="implementors-list"]//h3[@class="code-header"]' \
+//@ has foo/trait.Foo.html '//*[@id="implementors-list"]//h3[@class="code-header"]' \
 //     "impl<'a> Foo for &'a foo::mod2::Baz"
 impl<'a> Foo for &'a mod2::Baz {}
diff --git a/tests/rustdoc/impl-everywhere.rs b/tests/rustdoc/impl-everywhere.rs
index 2311c806c18..d1a4e901bad 100644
--- a/tests/rustdoc/impl-everywhere.rs
+++ b/tests/rustdoc/impl-everywhere.rs
@@ -8,23 +8,23 @@ pub struct Bar;
 impl Foo for Bar {}
 impl Foo2 for Bar {}
 
-// @has foo/fn.foo.html '//section[@id="main-content"]//pre' "x: &'x impl Foo"
-// @has foo/fn.foo.html '//section[@id="main-content"]//pre' "-> &'x impl Foo"
+//@ has foo/fn.foo.html '//section[@id="main-content"]//pre' "x: &'x impl Foo"
+//@ has foo/fn.foo.html '//section[@id="main-content"]//pre' "-> &'x impl Foo"
 pub fn foo<'x>(x: &'x impl Foo) -> &'x impl Foo {
     x
 }
 
-// @has foo/fn.foo2.html '//section[@id="main-content"]//pre' "x: &'x impl Foo"
-// @has foo/fn.foo2.html '//section[@id="main-content"]//pre' '-> impl Foo2'
+//@ has foo/fn.foo2.html '//section[@id="main-content"]//pre' "x: &'x impl Foo"
+//@ has foo/fn.foo2.html '//section[@id="main-content"]//pre' '-> impl Foo2'
 pub fn foo2<'x>(_x: &'x impl Foo) -> impl Foo2 {
     Bar
 }
 
-// @has foo/fn.foo_foo.html '//section[@id="main-content"]//pre' '-> impl Foo + Foo2'
+//@ has foo/fn.foo_foo.html '//section[@id="main-content"]//pre' '-> impl Foo + Foo2'
 pub fn foo_foo() -> impl Foo + Foo2 {
     Bar
 }
 
-// @has foo/fn.foo_foo_foo.html '//section[@id="main-content"]//pre' "x: &'x (impl Foo + Foo2)"
+//@ has foo/fn.foo_foo_foo.html '//section[@id="main-content"]//pre' "x: &'x (impl Foo + Foo2)"
 pub fn foo_foo_foo<'x>(_x: &'x (impl Foo + Foo2)) {
 }
diff --git a/tests/rustdoc/impl-in-const-block.rs b/tests/rustdoc/impl-in-const-block.rs
index b44e7135246..3f757fa9566 100644
--- a/tests/rustdoc/impl-in-const-block.rs
+++ b/tests/rustdoc/impl-in-const-block.rs
@@ -4,12 +4,12 @@
 
 #![crate_name = "foo"]
 
-// @has 'foo/struct.A.html'
-// @has - '//*[@id="method.new"]/*[@class="code-header"]' 'pub fn new() -> A'
-// @has - '//*[@id="method.bar"]/*[@class="code-header"]' 'pub fn bar(&self)'
-// @has - '//*[@id="method.woo"]/*[@class="code-header"]' 'pub fn woo(&self)'
-// @has - '//*[@id="method.yoo"]/*[@class="code-header"]' 'pub fn yoo()'
-// @has - '//*[@id="method.yuu"]/*[@class="code-header"]' 'pub fn yuu()'
+//@ has 'foo/struct.A.html'
+//@ has - '//*[@id="method.new"]/*[@class="code-header"]' 'pub fn new() -> A'
+//@ has - '//*[@id="method.bar"]/*[@class="code-header"]' 'pub fn bar(&self)'
+//@ has - '//*[@id="method.woo"]/*[@class="code-header"]' 'pub fn woo(&self)'
+//@ has - '//*[@id="method.yoo"]/*[@class="code-header"]' 'pub fn yoo()'
+//@ has - '//*[@id="method.yuu"]/*[@class="code-header"]' 'pub fn yuu()'
 pub struct A;
 
 const _: () = {
diff --git a/tests/rustdoc/impl-on-ty-alias-issue-119015.rs b/tests/rustdoc/impl-on-ty-alias-issue-119015.rs
index 68996deae6f..cea0f5565a2 100644
--- a/tests/rustdoc/impl-on-ty-alias-issue-119015.rs
+++ b/tests/rustdoc/impl-on-ty-alias-issue-119015.rs
@@ -1,9 +1,9 @@
 #![crate_name = "foo"]
 
-// @has 'foo/index.html'
+//@ has 'foo/index.html'
 // There should be only `type A`.
-// @count - '//*[@class="item-table"]//*[@class="item-name"]' 1
-// @has - '//*[@class="item-name"]/a[@href="type.A.html"]' 'A'
+//@ count - '//*[@class="item-table"]//*[@class="item-name"]' 1
+//@ has - '//*[@class="item-name"]/a[@href="type.A.html"]' 'A'
 
 mod foo {
     pub struct S;
@@ -13,15 +13,15 @@ use foo::S;
 
 pub type A = S;
 
-// @has 'foo/type.A.html'
-// @has - '//*[@id="method.default"]/h4' 'fn default() -> Self'
+//@ has 'foo/type.A.html'
+//@ has - '//*[@id="method.default"]/h4' 'fn default() -> Self'
 impl Default for A {
     fn default() -> Self {
         S
     }
 }
 
-// @has - '//*[@id="method.a"]/h4' 'pub fn a(&self)'
+//@ has - '//*[@id="method.a"]/h4' 'pub fn a(&self)'
 impl A {
     pub fn a(&self) {}
 }
diff --git a/tests/rustdoc/impl-parts-crosscrate.rs b/tests/rustdoc/impl-parts-crosscrate.rs
index 2cca3a5c37c..49752ab75d5 100644
--- a/tests/rustdoc/impl-parts-crosscrate.rs
+++ b/tests/rustdoc/impl-parts-crosscrate.rs
@@ -12,9 +12,9 @@ pub struct Bar<T> { t: T }
 // full impl string.  Instead, just make sure something from each part
 // is mentioned.
 
-// @hasraw trait.impl/rustdoc_impl_parts_crosscrate/trait.AnAutoTrait.js Bar
-// @hasraw - Send
-// @hasraw - !AnAutoTrait
-// @hasraw - Copy
+//@ hasraw trait.impl/rustdoc_impl_parts_crosscrate/trait.AnAutoTrait.js Bar
+//@ hasraw - Send
+//@ hasraw - !AnAutoTrait
+//@ hasraw - Copy
 impl<T: Send> !rustdoc_impl_parts_crosscrate::AnAutoTrait for Bar<T>
     where T: Copy {}
diff --git a/tests/rustdoc/impl-parts.rs b/tests/rustdoc/impl-parts.rs
index f7738060e99..820f51008a4 100644
--- a/tests/rustdoc/impl-parts.rs
+++ b/tests/rustdoc/impl-parts.rs
@@ -5,8 +5,8 @@ pub auto trait AnAutoTrait {}
 
 pub struct Foo<T> { field: T }
 
-// @has impl_parts/struct.Foo.html '//*[@class="impl"]//h3[@class="code-header"]' \
+//@ has impl_parts/struct.Foo.html '//*[@class="impl"]//h3[@class="code-header"]' \
 //     "impl<T> !AnAutoTrait for Foo<T>where T: Sync + Clone,"
-// @has impl_parts/trait.AnAutoTrait.html '//*[@id="implementors-list"]//h3[@class="code-header"]' \
+//@ has impl_parts/trait.AnAutoTrait.html '//*[@id="implementors-list"]//h3[@class="code-header"]' \
 //     "impl<T> !AnAutoTrait for Foo<T>where T: Sync + Clone,"
 impl<T: Clone> !AnAutoTrait for Foo<T> where T: Sync {}
diff --git a/tests/rustdoc/impl-ref-20175.rs b/tests/rustdoc/impl-ref-20175.rs
index a92db2d0a66..b1a9286fd41 100644
--- a/tests/rustdoc/impl-ref-20175.rs
+++ b/tests/rustdoc/impl-ref-20175.rs
@@ -8,7 +8,7 @@ pub trait Foo {
 
 pub struct Bar;
 
-// @has issue_20175/struct.Bar.html \
+//@ has issue_20175/struct.Bar.html \
 //      '//*[@id="method.foo"]' \
 //      'fn foo'
 impl<'a> Foo for &'a Bar {}
diff --git a/tests/rustdoc/impl-trait-43869.rs b/tests/rustdoc/impl-trait-43869.rs
index 9c4ed841f79..89176f59ca1 100644
--- a/tests/rustdoc/impl-trait-43869.rs
+++ b/tests/rustdoc/impl-trait-43869.rs
@@ -61,15 +61,15 @@ pub fn test_44731_4() -> Box<Iterator<Item=impl Clone>> {
     Box::new(g())
 }
 
-// @has foo/fn.g.html
-// @has foo/fn.h.html
-// @has foo/fn.i.html
-// @has foo/fn.j.html
-// @has foo/fn.k.html
-// @has foo/fn.l.html
-// @has foo/fn.m.html
-// @has foo/fn.n.html
-// @has foo/fn.o.html
-// @has foo/fn.test_44731_0.html
-// @has foo/fn.test_44731_1.html
-// @has foo/fn.test_44731_4.html
+//@ has foo/fn.g.html
+//@ has foo/fn.h.html
+//@ has foo/fn.i.html
+//@ has foo/fn.j.html
+//@ has foo/fn.k.html
+//@ has foo/fn.l.html
+//@ has foo/fn.m.html
+//@ has foo/fn.n.html
+//@ has foo/fn.o.html
+//@ has foo/fn.test_44731_0.html
+//@ has foo/fn.test_44731_1.html
+//@ has foo/fn.test_44731_4.html
diff --git a/tests/rustdoc/impl-trait-alias.rs b/tests/rustdoc/impl-trait-alias.rs
index 4f681c78ee1..f7ecfffbf46 100644
--- a/tests/rustdoc/impl-trait-alias.rs
+++ b/tests/rustdoc/impl-trait-alias.rs
@@ -3,11 +3,11 @@
 trait MyTrait {}
 impl MyTrait for i32 {}
 
-// @hasraw impl_trait_alias/type.Foo.html 'Foo'
+//@ hasraw impl_trait_alias/type.Foo.html 'Foo'
 /// debug type
 pub type Foo = impl MyTrait;
 
-// @hasraw impl_trait_alias/fn.foo.html 'foo'
+//@ hasraw impl_trait_alias/fn.foo.html 'foo'
 /// debug function
 pub fn foo() -> Foo {
     1
diff --git a/tests/rustdoc/impl-type-parameter-33592.rs b/tests/rustdoc/impl-type-parameter-33592.rs
index 77f53710e5e..ac5df460925 100644
--- a/tests/rustdoc/impl-type-parameter-33592.rs
+++ b/tests/rustdoc/impl-type-parameter-33592.rs
@@ -7,8 +7,8 @@ pub struct Bar;
 
 pub struct Baz;
 
-// @has foo/trait.Foo.html '//h3[@class="code-header"]' 'impl Foo<i32> for Bar'
+//@ has foo/trait.Foo.html '//h3[@class="code-header"]' 'impl Foo<i32> for Bar'
 impl Foo<i32> for Bar {}
 
-// @has foo/trait.Foo.html '//h3[@class="code-header"]' 'impl<T> Foo<T> for Baz'
+//@ has foo/trait.Foo.html '//h3[@class="code-header"]' 'impl<T> Foo<T> for Baz'
 impl<T> Foo<T> for Baz {}
diff --git a/tests/rustdoc/implementor-stable-version.rs b/tests/rustdoc/implementor-stable-version.rs
index 3674b9f2e48..cd4fa93f803 100644
--- a/tests/rustdoc/implementor-stable-version.rs
+++ b/tests/rustdoc/implementor-stable-version.rs
@@ -12,10 +12,10 @@ pub trait Baz {}
 #[stable(feature = "baz", since = "3.3.3")]
 pub struct Foo;
 
-// @has foo/trait.Bar.html '//div[@id="implementors-list"]//span[@class="since"]' '4.4.4'
+//@ has foo/trait.Bar.html '//div[@id="implementors-list"]//span[@class="since"]' '4.4.4'
 #[stable(feature = "foobar", since = "4.4.4")]
 impl Bar for Foo {}
 
-// @has foo/trait.Baz.html '//div[@id="implementors-list"]//span[@class="since"]' '3.3.3'
+//@ has foo/trait.Baz.html '//div[@id="implementors-list"]//span[@class="since"]' '3.3.3'
 #[stable(feature = "foobaz", since = "3.3.3")]
 impl Baz for Foo {}
diff --git a/tests/rustdoc/implementors-unstable-75588.rs b/tests/rustdoc/implementors-unstable-75588.rs
index befddf6b788..44a785c4ad9 100644
--- a/tests/rustdoc/implementors-unstable-75588.rs
+++ b/tests/rustdoc/implementors-unstable-75588.rs
@@ -11,8 +11,8 @@ extern crate realcore;
 extern crate real_gimli;
 
 // issue #74672
-// @!has foo/trait.Deref.html '//*[@id="impl-Deref-for-EndianSlice"]//h3[@class="code-header"]' 'impl Deref for EndianSlice'
+//@ !has foo/trait.Deref.html '//*[@id="impl-Deref-for-EndianSlice"]//h3[@class="code-header"]' 'impl Deref for EndianSlice'
 pub use realcore::Deref;
 
-// @has foo/trait.Join.html '//*[@id="impl-Join-for-Foo"]//h3[@class="code-header"]' 'impl Join for Foo'
+//@ has foo/trait.Join.html '//*[@id="impl-Join-for-Foo"]//h3[@class="code-header"]' 'impl Join for Foo'
 pub use realcore::Join;
diff --git a/tests/rustdoc/impossible-default.rs b/tests/rustdoc/impossible-default.rs
index 24d6e3bdac1..fad64068010 100644
--- a/tests/rustdoc/impossible-default.rs
+++ b/tests/rustdoc/impossible-default.rs
@@ -11,9 +11,9 @@ pub trait Foo {
     fn no_needs_sized(&self) {}
 }
 
-// @!has foo/struct.Bar.html '//*[@id="method.needs_sized"]//h4[@class="code-header"]' \
+//@ !has foo/struct.Bar.html '//*[@id="method.needs_sized"]//h4[@class="code-header"]' \
 // "fn needs_sized"
-// @has foo/struct.Bar.html '//*[@id="method.no_needs_sized"]//h4[@class="code-header"]' \
+//@ has foo/struct.Bar.html '//*[@id="method.no_needs_sized"]//h4[@class="code-header"]' \
 // "fn no_needs_sized"
 pub struct Bar([u8]);
 
diff --git a/tests/rustdoc/include_str_cut.rs b/tests/rustdoc/include_str_cut.rs
index cbc1ba8db75..27336c95a69 100644
--- a/tests/rustdoc/include_str_cut.rs
+++ b/tests/rustdoc/include_str_cut.rs
@@ -1,7 +1,7 @@
 #![crate_name = "foo"]
 #![no_std]
 
-// @has 'foo/fn.foo.html'
-// @has - '//*[@class="docblock"]' 'inc2 x'
+//@ has 'foo/fn.foo.html'
+//@ has - '//*[@class="docblock"]' 'inc2 x'
 #[doc = include_str!("short-line.md")]
 pub fn foo() {}
diff --git a/tests/rustdoc/index-page.rs b/tests/rustdoc/index-page.rs
index 51354c8b25b..ea8a0ee17e7 100644
--- a/tests/rustdoc/index-page.rs
+++ b/tests/rustdoc/index-page.rs
@@ -4,8 +4,8 @@
 
 #![crate_name = "foo"]
 
-// @has foo/../index.html
-// @has - '//h1' 'List of all crates'
-// @has - '//ul[@class="all-items"]//a[@href="foo/index.html"]' 'foo'
-// @has - '//ul[@class="all-items"]//a[@href="all_item_types/index.html"]' 'all_item_types'
+//@ has foo/../index.html
+//@ has - '//h1' 'List of all crates'
+//@ has - '//ul[@class="all-items"]//a[@href="foo/index.html"]' 'foo'
+//@ has - '//ul[@class="all-items"]//a[@href="all_item_types/index.html"]' 'all_item_types'
 pub struct Foo;
diff --git a/tests/rustdoc/infinite-redirection-16265-1.rs b/tests/rustdoc/infinite-redirection-16265-1.rs
index 7d72469bd72..5eefde7b919 100644
--- a/tests/rustdoc/infinite-redirection-16265-1.rs
+++ b/tests/rustdoc/infinite-redirection-16265-1.rs
@@ -3,7 +3,7 @@
 
 pub struct Foo;
 
-// @hasraw issue_16265_1/traits/index.html 'source'
+//@ hasraw issue_16265_1/traits/index.html 'source'
 pub mod traits {
     impl PartialEq for super::Foo {
         fn eq(&self, _: &super::Foo) -> bool {
diff --git a/tests/rustdoc/infinite-redirection-16265-2.rs b/tests/rustdoc/infinite-redirection-16265-2.rs
index 7a4791c5fd4..9c680e29f83 100644
--- a/tests/rustdoc/infinite-redirection-16265-2.rs
+++ b/tests/rustdoc/infinite-redirection-16265-2.rs
@@ -1,7 +1,7 @@
 // https://github.com/rust-lang/rust/issues/16265
 #![crate_name="issue_16265_2"]
 
-// @hasraw issue_16265_2/index.html 'source'
+//@ hasraw issue_16265_2/index.html 'source'
 
 trait Y {}
 impl Y for Option<u32> {}
diff --git a/tests/rustdoc/infinite-redirection.rs b/tests/rustdoc/infinite-redirection.rs
index f037a8e1a83..9ac559fbecf 100644
--- a/tests/rustdoc/infinite-redirection.rs
+++ b/tests/rustdoc/infinite-redirection.rs
@@ -4,12 +4,12 @@
 // file which redirects to itself).
 
 // We check it's not a redirection file.
-// @has 'foo/builders/struct.ActionRowBuilder.html'
-// @has - '//*[@id="synthetic-implementations"]' 'Auto Trait Implementations'
+//@ has 'foo/builders/struct.ActionRowBuilder.html'
+//@ has - '//*[@id="synthetic-implementations"]' 'Auto Trait Implementations'
 
 // And that the link in the module is targeting it.
-// @has 'foo/builders/index.html'
-// @has - '//a[@href="struct.ActionRowBuilder.html"]' 'ActionRowBuilder'
+//@ has 'foo/builders/index.html'
+//@ has - '//a[@href="struct.ActionRowBuilder.html"]' 'ActionRowBuilder'
 
 mod auto {
     mod action_row {
diff --git a/tests/rustdoc/inherent-projections.rs b/tests/rustdoc/inherent-projections.rs
index 25f51282617..4fc769f70f5 100644
--- a/tests/rustdoc/inherent-projections.rs
+++ b/tests/rustdoc/inherent-projections.rs
@@ -1,9 +1,9 @@
 #![feature(inherent_associated_types)]
 #![allow(incomplete_features)]
 
-// @has 'inherent_projections/fn.create.html'
-// @has - '//pre[@class="rust item-decl"]' "create() -> Owner::Metadata"
-// @has - '//pre[@class="rust item-decl"]//a[@class="associatedtype"]/@href' 'struct.Owner.html#associatedtype.Metadata'
+//@ has 'inherent_projections/fn.create.html'
+//@ has - '//pre[@class="rust item-decl"]' "create() -> Owner::Metadata"
+//@ has - '//pre[@class="rust item-decl"]//a[@class="associatedtype"]/@href' 'struct.Owner.html#associatedtype.Metadata'
 pub fn create() -> Owner::Metadata {}
 
 pub struct Owner;
@@ -13,7 +13,7 @@ impl Owner {
 }
 
 // Make sure we handle bound vars correctly.
-// @has 'inherent_projections/fn.user.html' '//pre[@class="rust item-decl"]' "user(_: for<'a> fn(_: Carrier<'a>::Focus))"
+//@ has 'inherent_projections/fn.user.html' '//pre[@class="rust item-decl"]' "user(_: for<'a> fn(_: Carrier<'a>::Focus))"
 pub fn user(_: for<'a> fn(Carrier<'a>::Focus)) {}
 
 pub struct Carrier<'a>(&'a ());
@@ -27,10 +27,10 @@ impl<'a> Carrier<'a> {
 // FIXME(inherent_associated_types): Below we link to `Proj` but we should link to `Proj-1`.
 // The current test checks for the buggy behavior for demonstration purposes.
 
-// @has 'inherent_projections/fn.test.html'
-// @has - '//pre[@class="rust item-decl"]' "test(_: Parametrized<i32>::Proj)"
-// @has - '//pre[@class="rust item-decl"]//a[@class="associatedtype"]/@href' 'struct.Parametrized.html#associatedtype.Proj'
-// @!has - '//pre[@class="rust item-decl"]//a[@class="associatedtype"]/@href' 'struct.Parametrized.html#associatedtype.Proj-1'
+//@ has 'inherent_projections/fn.test.html'
+//@ has - '//pre[@class="rust item-decl"]' "test(_: Parametrized<i32>::Proj)"
+//@ has - '//pre[@class="rust item-decl"]//a[@class="associatedtype"]/@href' 'struct.Parametrized.html#associatedtype.Proj'
+//@ !has - '//pre[@class="rust item-decl"]//a[@class="associatedtype"]/@href' 'struct.Parametrized.html#associatedtype.Proj-1'
 pub fn test(_: Parametrized<i32>::Proj) {}
 
 pub struct Parametrized<T>(T);
diff --git a/tests/rustdoc/inline-assoc-type-20727-bindings.rs b/tests/rustdoc/inline-assoc-type-20727-bindings.rs
index d270ccfc375..b3447a759df 100644
--- a/tests/rustdoc/inline-assoc-type-20727-bindings.rs
+++ b/tests/rustdoc/inline-assoc-type-20727-bindings.rs
@@ -6,20 +6,20 @@
 
 extern crate issue_20727;
 
-// @has issue_20727_2/trait.Add.html
+//@ has issue_20727_2/trait.Add.html
 pub trait Add<RHS = Self> {
-    // @has - '//pre[@class="rust item-decl"]' 'trait Add<RHS = Self> {'
-    // @has - '//pre[@class="rust item-decl"]' 'type Output;'
+    //@ has - '//pre[@class="rust item-decl"]' 'trait Add<RHS = Self> {'
+    //@ has - '//pre[@class="rust item-decl"]' 'type Output;'
     type Output;
 
-    // @has - '//pre[@class="rust item-decl"]' 'fn add(self, rhs: RHS) -> Self::Output;'
+    //@ has - '//pre[@class="rust item-decl"]' 'fn add(self, rhs: RHS) -> Self::Output;'
     fn add(self, rhs: RHS) -> Self::Output;
 }
 
-// @has issue_20727_2/reexport/trait.Add.html
+//@ has issue_20727_2/reexport/trait.Add.html
 pub mod reexport {
-    // @has - '//pre[@class="rust item-decl"]' 'trait Add<RHS = Self> {'
-    // @has - '//pre[@class="rust item-decl"]' 'type Output;'
-    // @has - '//pre[@class="rust item-decl"]' 'fn add(self, rhs: RHS) -> Self::Output;'
+    //@ has - '//pre[@class="rust item-decl"]' 'trait Add<RHS = Self> {'
+    //@ has - '//pre[@class="rust item-decl"]' 'type Output;'
+    //@ has - '//pre[@class="rust item-decl"]' 'fn add(self, rhs: RHS) -> Self::Output;'
     pub use issue_20727::Add;
 }
diff --git a/tests/rustdoc/inline-assoc-type-20727-bounds-deref.rs b/tests/rustdoc/inline-assoc-type-20727-bounds-deref.rs
index b8449860531..afb9087cc7a 100644
--- a/tests/rustdoc/inline-assoc-type-20727-bounds-deref.rs
+++ b/tests/rustdoc/inline-assoc-type-20727-bounds-deref.rs
@@ -8,20 +8,20 @@ extern crate issue_20727;
 
 pub trait Bar {}
 
-// @has issue_20727_3/trait.Deref2.html
+//@ has issue_20727_3/trait.Deref2.html
 pub trait Deref2 {
-    // @has - '//pre[@class="rust item-decl"]' 'trait Deref2 {'
-    // @has - '//pre[@class="rust item-decl"]' 'type Target: Bar;'
+    //@ has - '//pre[@class="rust item-decl"]' 'trait Deref2 {'
+    //@ has - '//pre[@class="rust item-decl"]' 'type Target: Bar;'
     type Target: Bar;
 
-    // @has - '//pre[@class="rust item-decl"]' 'fn deref(&self) -> Self::Target;'
+    //@ has - '//pre[@class="rust item-decl"]' 'fn deref(&self) -> Self::Target;'
     fn deref(&self) -> Self::Target;
 }
 
-// @has issue_20727_3/reexport/trait.Deref2.html
+//@ has issue_20727_3/reexport/trait.Deref2.html
 pub mod reexport {
-    // @has - '//pre[@class="rust item-decl"]' 'trait Deref2 {'
-    // @has - '//pre[@class="rust item-decl"]' 'type Target: Bar;'
-    // @has - '//pre[@class="rust item-decl"]' 'fn deref(&self) -> Self::Target;'
+    //@ has - '//pre[@class="rust item-decl"]' 'trait Deref2 {'
+    //@ has - '//pre[@class="rust item-decl"]' 'type Target: Bar;'
+    //@ has - '//pre[@class="rust item-decl"]' 'fn deref(&self) -> Self::Target;'
     pub use issue_20727::Deref2;
 }
diff --git a/tests/rustdoc/inline-assoc-type-20727-bounds-index.rs b/tests/rustdoc/inline-assoc-type-20727-bounds-index.rs
index 4905d0dc4c5..9dd234e8202 100644
--- a/tests/rustdoc/inline-assoc-type-20727-bounds-index.rs
+++ b/tests/rustdoc/inline-assoc-type-20727-bounds-index.rs
@@ -6,38 +6,38 @@
 
 extern crate issue_20727;
 
-// @has issue_20727_4/trait.Index.html
+//@ has issue_20727_4/trait.Index.html
 pub trait Index<Idx: ?Sized> {
-    // @has - '//pre[@class="rust item-decl"]' 'trait Index<Idx: ?Sized> {'
-    // @has - '//pre[@class="rust item-decl"]' 'type Output: ?Sized'
+    //@ has - '//pre[@class="rust item-decl"]' 'trait Index<Idx: ?Sized> {'
+    //@ has - '//pre[@class="rust item-decl"]' 'type Output: ?Sized'
     type Output: ?Sized;
 
-    // @has - '//pre[@class="rust item-decl"]' \
+    //@ has - '//pre[@class="rust item-decl"]' \
     //        'fn index(&self, index: Idx) -> &Self::Output'
     fn index(&self, index: Idx) -> &Self::Output;
 }
 
-// @has issue_20727_4/trait.IndexMut.html
+//@ has issue_20727_4/trait.IndexMut.html
 pub trait IndexMut<Idx: ?Sized>: Index<Idx> {
-    // @has - '//pre[@class="rust item-decl"]' \
+    //@ has - '//pre[@class="rust item-decl"]' \
     //        'trait IndexMut<Idx: ?Sized>: Index<Idx> {'
-    // @has - '//pre[@class="rust item-decl"]' \
+    //@ has - '//pre[@class="rust item-decl"]' \
     //        'fn index_mut(&mut self, index: Idx) -> &mut Self::Output;'
     fn index_mut(&mut self, index: Idx) -> &mut Self::Output;
 }
 
 pub mod reexport {
-    // @has issue_20727_4/reexport/trait.Index.html
-    // @has - '//pre[@class="rust item-decl"]' 'trait Index<Idx>where Idx: ?Sized,{'
-    // @has - '//pre[@class="rust item-decl"]' 'type Output: ?Sized'
-    // @has - '//pre[@class="rust item-decl"]' \
+    //@ has issue_20727_4/reexport/trait.Index.html
+    //@ has - '//pre[@class="rust item-decl"]' 'trait Index<Idx>where Idx: ?Sized,{'
+    //@ has - '//pre[@class="rust item-decl"]' 'type Output: ?Sized'
+    //@ has - '//pre[@class="rust item-decl"]' \
     //        'fn index(&self, index: Idx) -> &Self::Output'
     pub use issue_20727::Index;
 
-    // @has issue_20727_4/reexport/trait.IndexMut.html
-    // @has - '//pre[@class="rust item-decl"]' \
+    //@ has issue_20727_4/reexport/trait.IndexMut.html
+    //@ has - '//pre[@class="rust item-decl"]' \
     //        'trait IndexMut<Idx>: Index<Idx>where Idx: ?Sized,{'
-    // @has - '//pre[@class="rust item-decl"]' \
+    //@ has - '//pre[@class="rust item-decl"]' \
     //        'fn index_mut(&mut self, index: Idx) -> &mut Self::Output;'
     pub use issue_20727::IndexMut;
 }
diff --git a/tests/rustdoc/inline-assoc-type-20727-bounds.rs b/tests/rustdoc/inline-assoc-type-20727-bounds.rs
index e6e0490cdd8..bd8d46f4a56 100644
--- a/tests/rustdoc/inline-assoc-type-20727-bounds.rs
+++ b/tests/rustdoc/inline-assoc-type-20727-bounds.rs
@@ -6,22 +6,22 @@
 
 extern crate issue_20727;
 
-// @has issue_20727/trait.Deref.html
+//@ has issue_20727/trait.Deref.html
 pub trait Deref {
-    // @has - '//pre[@class="rust item-decl"]' 'trait Deref {'
-    // @has - '//pre[@class="rust item-decl"]' 'type Target: ?Sized;'
+    //@ has - '//pre[@class="rust item-decl"]' 'trait Deref {'
+    //@ has - '//pre[@class="rust item-decl"]' 'type Target: ?Sized;'
     type Target: ?Sized;
 
-    // @has - '//pre[@class="rust item-decl"]' \
+    //@ has - '//pre[@class="rust item-decl"]' \
     //        "fn deref<'a>(&'a self) -> &'a Self::Target;"
     fn deref<'a>(&'a self) -> &'a Self::Target;
 }
 
-// @has issue_20727/reexport/trait.Deref.html
+//@ has issue_20727/reexport/trait.Deref.html
 pub mod reexport {
-    // @has - '//pre[@class="rust item-decl"]' 'trait Deref {'
-    // @has - '//pre[@class="rust item-decl"]' 'type Target: ?Sized;'
-    // @has - '//pre[@class="rust item-decl"]' \
+    //@ has - '//pre[@class="rust item-decl"]' 'trait Deref {'
+    //@ has - '//pre[@class="rust item-decl"]' 'type Target: ?Sized;'
+    //@ has - '//pre[@class="rust item-decl"]' \
     //      "fn deref<'a>(&'a self) -> &'a Self::Target;"
     pub use issue_20727::Deref;
 }
diff --git a/tests/rustdoc/inline-default-methods.rs b/tests/rustdoc/inline-default-methods.rs
index a3779567376..2f4c0548c7e 100644
--- a/tests/rustdoc/inline-default-methods.rs
+++ b/tests/rustdoc/inline-default-methods.rs
@@ -3,19 +3,19 @@
 
 extern crate inline_default_methods;
 
-// @has inline_default_methods/trait.Foo.html
-// @has - '//pre[@class="rust item-decl"]' '// Required method fn bar(&self);'
-// @has - '//pre[@class="rust item-decl"]' '// Provided method fn foo(&mut self)'
+//@ has inline_default_methods/trait.Foo.html
+//@ has - '//pre[@class="rust item-decl"]' '// Required method fn bar(&self);'
+//@ has - '//pre[@class="rust item-decl"]' '// Provided method fn foo(&mut self)'
 pub use inline_default_methods::Foo;
 
-// @has inline_default_methods/trait.Bar.html
-// @has - '//pre[@class="rust item-decl"]' '// Required method fn bar(&self);'
-// @has - '//pre[@class="rust item-decl"]' '// Provided methods fn foo1(&mut self)'
-// @has - '//pre[@class="rust item-decl"]' 'fn foo2(&mut self)'
+//@ has inline_default_methods/trait.Bar.html
+//@ has - '//pre[@class="rust item-decl"]' '// Required method fn bar(&self);'
+//@ has - '//pre[@class="rust item-decl"]' '// Provided methods fn foo1(&mut self)'
+//@ has - '//pre[@class="rust item-decl"]' 'fn foo2(&mut self)'
 pub use inline_default_methods::Bar;
 
-// @has inline_default_methods/trait.Baz.html
-// @has - '//pre[@class="rust item-decl"]' '// Required methods fn bar1(&self);'
-// @has - '//pre[@class="rust item-decl"]' 'fn bar2(&self);'
-// @has - '//pre[@class="rust item-decl"]' '// Provided method fn foo(&mut self)'
+//@ has inline_default_methods/trait.Baz.html
+//@ has - '//pre[@class="rust item-decl"]' '// Required methods fn bar1(&self);'
+//@ has - '//pre[@class="rust item-decl"]' 'fn bar2(&self);'
+//@ has - '//pre[@class="rust item-decl"]' '// Provided method fn foo(&mut self)'
 pub use inline_default_methods::Baz;
diff --git a/tests/rustdoc/inline-private-with-intermediate-doc-hidden.rs b/tests/rustdoc/inline-private-with-intermediate-doc-hidden.rs
index ae830c03ea3..752f3843eea 100644
--- a/tests/rustdoc/inline-private-with-intermediate-doc-hidden.rs
+++ b/tests/rustdoc/inline-private-with-intermediate-doc-hidden.rs
@@ -4,12 +4,12 @@
 
 #![crate_name = "foo"]
 
-// @has 'foo/index.html'
+//@ has 'foo/index.html'
 // There should only be one struct displayed.
-// @count - '//*[@id="main-content"]/*[@class="section-header"]' 1
-// @has - '//*[@id="main-content"]/*[@class="section-header"]' 'Structs'
-// @has - '//*[@id="main-content"]//a[@href="struct.Reexport.html"]' 'Reexport'
-// @has - '//*[@id="main-content"]//*[@class="desc docblock-short"]' 'Visible. Original.'
+//@ count - '//*[@id="main-content"]/*[@class="section-header"]' 1
+//@ has - '//*[@id="main-content"]/*[@class="section-header"]' 'Structs'
+//@ has - '//*[@id="main-content"]//a[@href="struct.Reexport.html"]' 'Reexport'
+//@ has - '//*[@id="main-content"]//*[@class="desc docblock-short"]' 'Visible. Original.'
 
 mod private {
     /// Original.
diff --git a/tests/rustdoc/inline-rename-34473.rs b/tests/rustdoc/inline-rename-34473.rs
index 7bc92cca1af..7a065adb0db 100644
--- a/tests/rustdoc/inline-rename-34473.rs
+++ b/tests/rustdoc/inline-rename-34473.rs
@@ -6,8 +6,8 @@ mod second {
     pub struct SomeTypeWithLongName;
 }
 
-// @has foo/index.html
-// @!hasraw - SomeTypeWithLongName
-// @has foo/struct.SomeType.html
-// @!has foo/struct.SomeTypeWithLongName.html
+//@ has foo/index.html
+//@ !hasraw - SomeTypeWithLongName
+//@ has foo/struct.SomeType.html
+//@ !has foo/struct.SomeTypeWithLongName.html
 pub use second::{SomeTypeWithLongName as SomeType};
diff --git a/tests/rustdoc/inline_cross/add-docs.rs b/tests/rustdoc/inline_cross/add-docs.rs
index a7fbe3c6d0e..d4e0c539070 100644
--- a/tests/rustdoc/inline_cross/add-docs.rs
+++ b/tests/rustdoc/inline_cross/add-docs.rs
@@ -3,7 +3,7 @@
 extern crate inner;
 
 
-// @has add_docs/struct.MyStruct.html
-// @hasraw add_docs/struct.MyStruct.html "Doc comment from ‘pub use’, Doc comment from definition"
+//@ has add_docs/struct.MyStruct.html
+//@ hasraw add_docs/struct.MyStruct.html "Doc comment from ‘pub use’, Doc comment from definition"
 /// Doc comment from 'pub use',
 pub use inner::MyStruct;
diff --git a/tests/rustdoc/inline_cross/assoc-const-equality.rs b/tests/rustdoc/inline_cross/assoc-const-equality.rs
index cdf74389e76..ec5c2f748ef 100644
--- a/tests/rustdoc/inline_cross/assoc-const-equality.rs
+++ b/tests/rustdoc/inline_cross/assoc-const-equality.rs
@@ -4,6 +4,6 @@
 
 #![crate_name = "user"]
 
-// @has user/fn.accept.html
-// @has - '//pre[@class="rust item-decl"]' 'fn accept(_: impl Trait<K = 0>)'
+//@ has user/fn.accept.html
+//@ has - '//pre[@class="rust item-decl"]' 'fn accept(_: impl Trait<K = 0>)'
 pub use assoc_const_equality::accept;
diff --git a/tests/rustdoc/inline_cross/assoc-items.rs b/tests/rustdoc/inline_cross/assoc-items.rs
index 6b126964a78..94bd8950e75 100644
--- a/tests/rustdoc/inline_cross/assoc-items.rs
+++ b/tests/rustdoc/inline_cross/assoc-items.rs
@@ -6,37 +6,37 @@
 
 extern crate assoc_items;
 
-// @has foo/struct.MyStruct.html
-// @!hasraw - 'PrivateConst'
-// @has - '//*[@id="associatedconstant.PublicConst"]' 'pub const PublicConst: u8'
-// @has - '//*[@class="docblock"]' 'docs for PublicConst'
-// @!hasraw - 'private_method'
-// @has - '//*[@id="method.public_method"]' 'pub fn public_method()'
-// @has - '//*[@class="docblock"]' 'docs for public_method'
-// @has - '//*[@id="associatedconstant.ConstNoDefault"]' 'const ConstNoDefault: i16'
-// @has - '//*[@class="docblock"]' 'dox for ConstNoDefault'
-// @has - '//*[@id="associatedconstant.ConstWithDefault"]' 'const ConstWithDefault: u16'
-// @has - '//div[@class="docblock"]' 'docs for ConstWithDefault'
-// @has - '//*[@id="associatedtype.TypeNoDefault"]' 'type TypeNoDefault = i32'
-// @has - '//*[@class="docblock"]' 'dox for TypeNoDefault'
-// @has - '//*[@id="associatedtype.TypeWithDefault"]' 'type TypeWithDefault = u32'
-// @has - '//div[@class="docblock"]' 'docs for TypeWithDefault'
-// @has - '//*[@id="method.method_no_default"]' 'fn method_no_default()'
-// @has - '//*[@class="docblock"]' 'dox for method_no_default'
-// @has - '//*[@id="method.method_with_default"]' 'fn method_with_default()'
-// @has - '//div[@class="docblock"]' 'docs for method_with_default'
+//@ has foo/struct.MyStruct.html
+//@ !hasraw - 'PrivateConst'
+//@ has - '//*[@id="associatedconstant.PublicConst"]' 'pub const PublicConst: u8'
+//@ has - '//*[@class="docblock"]' 'docs for PublicConst'
+//@ !hasraw - 'private_method'
+//@ has - '//*[@id="method.public_method"]' 'pub fn public_method()'
+//@ has - '//*[@class="docblock"]' 'docs for public_method'
+//@ has - '//*[@id="associatedconstant.ConstNoDefault"]' 'const ConstNoDefault: i16'
+//@ has - '//*[@class="docblock"]' 'dox for ConstNoDefault'
+//@ has - '//*[@id="associatedconstant.ConstWithDefault"]' 'const ConstWithDefault: u16'
+//@ has - '//div[@class="docblock"]' 'docs for ConstWithDefault'
+//@ has - '//*[@id="associatedtype.TypeNoDefault"]' 'type TypeNoDefault = i32'
+//@ has - '//*[@class="docblock"]' 'dox for TypeNoDefault'
+//@ has - '//*[@id="associatedtype.TypeWithDefault"]' 'type TypeWithDefault = u32'
+//@ has - '//div[@class="docblock"]' 'docs for TypeWithDefault'
+//@ has - '//*[@id="method.method_no_default"]' 'fn method_no_default()'
+//@ has - '//*[@class="docblock"]' 'dox for method_no_default'
+//@ has - '//*[@id="method.method_with_default"]' 'fn method_with_default()'
+//@ has - '//div[@class="docblock"]' 'docs for method_with_default'
 pub use assoc_items::MyStruct;
 
-// @has foo/trait.MyTrait.html
-// @has - '//*[@id="associatedconstant.ConstNoDefault"]' 'const ConstNoDefault: i16'
-// @has - '//*[@class="docblock"]' 'docs for ConstNoDefault'
-// @has - '//*[@id="associatedconstant.ConstWithDefault"]' 'const ConstWithDefault: u16'
-// @has - '//*[@class="docblock"]' 'docs for ConstWithDefault'
-// @has - '//*[@id="associatedtype.TypeNoDefault"]' 'type TypeNoDefault'
-// @has - '//*[@class="docblock"]' 'docs for TypeNoDefault'
-// @has - '//*[@class="docblock"]' 'docs for TypeWithDefault'
-// @has - '//*[@id="tymethod.method_no_default"]' 'fn method_no_default()'
-// @has - '//*[@class="docblock"]' 'docs for method_no_default'
-// @has - '//*[@id="method.method_with_default"]' 'fn method_with_default()'
-// @has - '//*[@class="docblock"]' 'docs for method_with_default'
+//@ has foo/trait.MyTrait.html
+//@ has - '//*[@id="associatedconstant.ConstNoDefault"]' 'const ConstNoDefault: i16'
+//@ has - '//*[@class="docblock"]' 'docs for ConstNoDefault'
+//@ has - '//*[@id="associatedconstant.ConstWithDefault"]' 'const ConstWithDefault: u16'
+//@ has - '//*[@class="docblock"]' 'docs for ConstWithDefault'
+//@ has - '//*[@id="associatedtype.TypeNoDefault"]' 'type TypeNoDefault'
+//@ has - '//*[@class="docblock"]' 'docs for TypeNoDefault'
+//@ has - '//*[@class="docblock"]' 'docs for TypeWithDefault'
+//@ has - '//*[@id="tymethod.method_no_default"]' 'fn method_no_default()'
+//@ has - '//*[@class="docblock"]' 'docs for method_no_default'
+//@ has - '//*[@id="method.method_with_default"]' 'fn method_with_default()'
+//@ has - '//*[@class="docblock"]' 'docs for method_with_default'
 pub use assoc_items::MyTrait;
diff --git a/tests/rustdoc/inline_cross/assoc_item_trait_bounds.rs b/tests/rustdoc/inline_cross/assoc_item_trait_bounds.rs
index c030e344997..346f7120b5b 100644
--- a/tests/rustdoc/inline_cross/assoc_item_trait_bounds.rs
+++ b/tests/rustdoc/inline_cross/assoc_item_trait_bounds.rs
@@ -6,49 +6,49 @@
 //@ ignore-cross-compile
 extern crate assoc_item_trait_bounds as aux;
 
-// @has main/trait.Main.html
-// @has - '//*[@id="associatedtype.Out0"]' 'type Out0: Support<Item = ()>'
-// @has - '//*[@id="associatedtype.Out1"]' 'type Out1: Support<Item = Self::Item>'
-// @has - '//*[@id="associatedtype.Out2"]' 'type Out2<T>: Support<Item = T>'
-// @has - '//*[@id="associatedtype.Out3"]' 'type Out3: Support<Produce<()> = bool>'
-// @has - '//*[@id="associatedtype.Out4"]' 'type Out4<T>: Support<Produce<T> = T>'
-// @has - '//*[@id="associatedtype.Out5"]' "type Out5: Support<Output<'static> = &'static ()>"
-// @has - '//*[@id="associatedtype.Out6"]' "type Out6: for<'a> Support<Output<'a> = &'a ()>"
-// @has - '//*[@id="associatedtype.Out7"]' "type Out7: Support<Item = String, Produce<i32> = u32> + Unrelated"
-// @has - '//*[@id="associatedtype.Out8"]' "type Out8: Unrelated + Protocol<i16, Q1 = u128, Q0 = ()>"
-// @has - '//*[@id="associatedtype.Out9"]' "type Out9: FnMut(i32) -> bool + Clone"
-// @has - '//*[@id="associatedtype.Out10"]' "type Out10<'q>: Support<Output<'q> = ()>"
-// @has - '//*[@id="associatedtype.Out11"]' "type Out11: for<'r, 's> Helper<A<'s> = &'s (), B<'r> = ()>"
-// @has - '//*[@id="associatedtype.Out12"]' "type Out12: for<'w> Helper<B<'w> = Cow<'w, str>, A<'w> = bool>"
-// @has - '//*[@id="associatedtype.Out13"]' "type Out13: for<'fst, 'snd> Aid<'snd, Result<'fst> = &'fst mut str>"
-// @has - '//*[@id="associatedtype.Out14"]' "type Out14<P: Copy + Eq, Q: ?Sized>"
+//@ has main/trait.Main.html
+//@ has - '//*[@id="associatedtype.Out0"]' 'type Out0: Support<Item = ()>'
+//@ has - '//*[@id="associatedtype.Out1"]' 'type Out1: Support<Item = Self::Item>'
+//@ has - '//*[@id="associatedtype.Out2"]' 'type Out2<T>: Support<Item = T>'
+//@ has - '//*[@id="associatedtype.Out3"]' 'type Out3: Support<Produce<()> = bool>'
+//@ has - '//*[@id="associatedtype.Out4"]' 'type Out4<T>: Support<Produce<T> = T>'
+//@ has - '//*[@id="associatedtype.Out5"]' "type Out5: Support<Output<'static> = &'static ()>"
+//@ has - '//*[@id="associatedtype.Out6"]' "type Out6: for<'a> Support<Output<'a> = &'a ()>"
+//@ has - '//*[@id="associatedtype.Out7"]' "type Out7: Support<Item = String, Produce<i32> = u32> + Unrelated"
+//@ has - '//*[@id="associatedtype.Out8"]' "type Out8: Unrelated + Protocol<i16, Q1 = u128, Q0 = ()>"
+//@ has - '//*[@id="associatedtype.Out9"]' "type Out9: FnMut(i32) -> bool + Clone"
+//@ has - '//*[@id="associatedtype.Out10"]' "type Out10<'q>: Support<Output<'q> = ()>"
+//@ has - '//*[@id="associatedtype.Out11"]' "type Out11: for<'r, 's> Helper<A<'s> = &'s (), B<'r> = ()>"
+//@ has - '//*[@id="associatedtype.Out12"]' "type Out12: for<'w> Helper<B<'w> = Cow<'w, str>, A<'w> = bool>"
+//@ has - '//*[@id="associatedtype.Out13"]' "type Out13: for<'fst, 'snd> Aid<'snd, Result<'fst> = &'fst mut str>"
+//@ has - '//*[@id="associatedtype.Out14"]' "type Out14<P: Copy + Eq, Q: ?Sized>"
 //
 // Snapshots:
 // Check that we don't render any where-clauses for the following associated types since
 // all corresponding projection equality predicates should have already been re-sugared
 // to associated type bindings:
 //
-// @snapshot out0 - '//*[@id="associatedtype.Out0"]/*[@class="code-header"]'
-// @snapshot out2 - '//*[@id="associatedtype.Out2"]/*[@class="code-header"]'
-// @snapshot out9 - '//*[@id="associatedtype.Out9"]/*[@class="code-header"]'
+//@ snapshot out0 - '//*[@id="associatedtype.Out0"]/*[@class="code-header"]'
+//@ snapshot out2 - '//*[@id="associatedtype.Out2"]/*[@class="code-header"]'
+//@ snapshot out9 - '//*[@id="associatedtype.Out9"]/*[@class="code-header"]'
 //
-// @has - '//*[@id="tymethod.make"]' \
+//@ has - '//*[@id="tymethod.make"]' \
 // "fn make<F>(_: F, _: impl FnMut(&str) -> bool)\
 // where \
 //     F: FnOnce(u32) -> String, \
 //     Self::Out2<()>: Protocol<u8, Q0 = Self::Item, Q1 = ()>"
 pub use aux::Main;
 
-// @has main/trait.Aid.html
-// @has - '//*[@id="associatedtype.Result"]' "type Result<'inter: 'src>"
+//@ has main/trait.Aid.html
+//@ has - '//*[@id="associatedtype.Result"]' "type Result<'inter: 'src>"
 pub use aux::Aid;
 
 // Below, ensure that we correctly display generic parameters and where-clauses on
 // associated types inside trait *impls*. More particularly, check that we don't render
 // any bounds (here `Self::Alias<T>: ...`) as item bounds unlike all the trait test cases above.
 
-// @has main/struct.Implementor.html
-// @has - '//*[@id="associatedtype.Alias"]' \
+//@ has main/struct.Implementor.html
+//@ has - '//*[@id="associatedtype.Alias"]' \
 // "type Alias<T: Eq> = T \
 // where \
 //     String: From<T>, \
diff --git a/tests/rustdoc/inline_cross/async-fn.rs b/tests/rustdoc/inline_cross/async-fn.rs
index 20fa409a8dd..fb81c61be60 100644
--- a/tests/rustdoc/inline_cross/async-fn.rs
+++ b/tests/rustdoc/inline_cross/async-fn.rs
@@ -6,14 +6,14 @@
 //@ edition: 2021
 #![crate_name = "user"]
 
-// @has user/fn.load.html
-// @has - '//pre[@class="rust item-decl"]' "pub async fn load() -> i32"
+//@ has user/fn.load.html
+//@ has - '//pre[@class="rust item-decl"]' "pub async fn load() -> i32"
 pub use async_fn::load;
 
-// @has user/trait.Load.html
-// @has - '//*[@id="tymethod.run"]' 'async fn run(&self) -> i32'
+//@ has user/trait.Load.html
+//@ has - '//*[@id="tymethod.run"]' 'async fn run(&self) -> i32'
 pub use async_fn::Load;
 
-// @has user/struct.Loader.html
-// @has - '//*[@id="method.run"]' 'async fn run(&self) -> i32'
+//@ has user/struct.Loader.html
+//@ has - '//*[@id="method.run"]' 'async fn run(&self) -> i32'
 pub use async_fn::Loader;
diff --git a/tests/rustdoc/inline_cross/attributes.rs b/tests/rustdoc/inline_cross/attributes.rs
index ac9e6174dc1..4747f8ad67c 100644
--- a/tests/rustdoc/inline_cross/attributes.rs
+++ b/tests/rustdoc/inline_cross/attributes.rs
@@ -2,6 +2,6 @@
 //@ edition:2021
 #![crate_name = "user"]
 
-// @has 'user/struct.NonExhaustive.html'
-// @has - '//*[@class="rust item-decl"]//*[@class="code-attribute"]' '#[non_exhaustive]'
+//@ has 'user/struct.NonExhaustive.html'
+//@ has - '//*[@class="rust item-decl"]//*[@class="code-attribute"]' '#[non_exhaustive]'
 pub use attributes::NonExhaustive;
diff --git a/tests/rustdoc/inline_cross/auxiliary/issue-85454.rs b/tests/rustdoc/inline_cross/auxiliary/issue-85454.rs
index 5db4fe053af..be1ec49fdcc 100644
--- a/tests/rustdoc/inline_cross/auxiliary/issue-85454.rs
+++ b/tests/rustdoc/inline_cross/auxiliary/issue-85454.rs
@@ -1,5 +1,5 @@
-// @has issue_85454/trait.FromResidual.html
-// @has - '//pre[@class="rust item-decl"]' 'pub trait FromResidual<R = <Self as Try>::Residual> { fn from_residual(residual: R) -> Self; }'
+//@ has issue_85454/trait.FromResidual.html
+//@ has - '//pre[@class="rust item-decl"]' 'pub trait FromResidual<R = <Self as Try>::Residual> { fn from_residual(residual: R) -> Self; }'
 pub trait FromResidual<R = <Self as Try>::Residual> {
     fn from_residual(residual: R) -> Self;
 }
diff --git a/tests/rustdoc/inline_cross/const-effect-param.rs b/tests/rustdoc/inline_cross/const-effect-param.rs
index 72c90ab6968..a3dcbb3ff0f 100644
--- a/tests/rustdoc/inline_cross/const-effect-param.rs
+++ b/tests/rustdoc/inline_cross/const-effect-param.rs
@@ -6,23 +6,23 @@
 #![crate_name = "user"]
 
 // Don't render the host param on `load` and the host arg `host` passed to `Resource`.
-// @has user/fn.load.html
-// @has - '//pre[@class="rust item-decl"]' "pub const fn load<R>() -> i32\
+//@ has user/fn.load.html
+//@ has - '//pre[@class="rust item-decl"]' "pub const fn load<R>() -> i32\
 //     where \
 //         R: Resource"
 pub use const_effect_param::load;
 
 // Don't render the host arg `true` passed to `Resource`.
-// @has user/fn.lock.html
-// @has - '//pre[@class="rust item-decl"]' "pub const fn lock<R>()\
+//@ has user/fn.lock.html
+//@ has - '//pre[@class="rust item-decl"]' "pub const fn lock<R>()\
 //     where \
 //         R: Resource"
 pub use const_effect_param::lock;
 
 // Regression test for an issue introduced in PR #116670.
 // Don't hide the const param `host` since it actually isn't the host effect param.
-// @has user/fn.clash.html
-// @has - '//pre[@class="rust item-decl"]' \
+//@ has user/fn.clash.html
+//@ has - '//pre[@class="rust item-decl"]' \
 //    "pub const fn clash<T, const host: u64>()\
 //     where \
 //         T: Clash<host>"
diff --git a/tests/rustdoc/inline_cross/const-eval-46727.rs b/tests/rustdoc/inline_cross/const-eval-46727.rs
index 213664a90b9..e68bf6a9d27 100644
--- a/tests/rustdoc/inline_cross/const-eval-46727.rs
+++ b/tests/rustdoc/inline_cross/const-eval-46727.rs
@@ -5,6 +5,6 @@
 
 extern crate issue_46727;
 
-// @has foo/trait.Foo.html
-// @has - '//h3[@class="code-header"]' 'impl<T> Foo for Bar<[T; 3]>'
+//@ has foo/trait.Foo.html
+//@ has - '//h3[@class="code-header"]' 'impl<T> Foo for Bar<[T; 3]>'
 pub use issue_46727::{Foo, Bar};
diff --git a/tests/rustdoc/inline_cross/const-fn-27362.rs b/tests/rustdoc/inline_cross/const-fn-27362.rs
index 22b2fa30fec..bc2587b7f00 100644
--- a/tests/rustdoc/inline_cross/const-fn-27362.rs
+++ b/tests/rustdoc/inline_cross/const-fn-27362.rs
@@ -8,6 +8,6 @@ extern crate issue_27362_aux;
 
 pub use issue_27362_aux::*;
 
-// @matches issue_27362/fn.foo.html '//pre' "pub const fn foo()"
-// @matches issue_27362/fn.bar.html '//pre' "pub const unsafe fn bar()"
-// @matches issue_27362/struct.Foo.html '//h4[@class="code-header"]' "const unsafe fn baz()"
+//@ matches issue_27362/fn.foo.html '//pre' "pub const fn foo()"
+//@ matches issue_27362/fn.bar.html '//pre' "pub const unsafe fn bar()"
+//@ matches issue_27362/struct.Foo.html '//h4[@class="code-header"]' "const unsafe fn baz()"
diff --git a/tests/rustdoc/inline_cross/cross-glob.rs b/tests/rustdoc/inline_cross/cross-glob.rs
index ae36655936c..d22e48a5d76 100644
--- a/tests/rustdoc/inline_cross/cross-glob.rs
+++ b/tests/rustdoc/inline_cross/cross-glob.rs
@@ -4,13 +4,13 @@
 
 extern crate inner;
 
-// @has cross_glob/struct.SomeStruct.html
-// @has cross_glob/fn.some_fn.html
-// @!has cross_glob/enum.Shadowed.html
-// @!has cross_glob/index.html '//code' 'pub use inner::*;'
+//@ has cross_glob/struct.SomeStruct.html
+//@ has cross_glob/fn.some_fn.html
+//@ !has cross_glob/enum.Shadowed.html
+//@ !has cross_glob/index.html '//code' 'pub use inner::*;'
 #[doc(inline)]
 pub use inner::*;
 
 // This type shadows the glob-imported enum `Shadowed`.
-// @has cross_glob/type.Shadowed.html
+//@ has cross_glob/type.Shadowed.html
 pub type Shadowed = u8;
diff --git a/tests/rustdoc/inline_cross/deduplicate-inlined-items-23207.rs b/tests/rustdoc/inline_cross/deduplicate-inlined-items-23207.rs
index 374b4d28545..60c2e0f06d3 100644
--- a/tests/rustdoc/inline_cross/deduplicate-inlined-items-23207.rs
+++ b/tests/rustdoc/inline_cross/deduplicate-inlined-items-23207.rs
@@ -7,6 +7,6 @@
 
 extern crate issue_23207_2;
 
-// @has issue_23207/fmt/index.html
-// @count - '//*[@class="struct"]' 1
+//@ has issue_23207/fmt/index.html
+//@ count - '//*[@class="struct"]' 1
 pub use issue_23207_2::fmt;
diff --git a/tests/rustdoc/inline_cross/default-generic-args.rs b/tests/rustdoc/inline_cross/default-generic-args.rs
index f006915f153..0469221b3d8 100644
--- a/tests/rustdoc/inline_cross/default-generic-args.rs
+++ b/tests/rustdoc/inline_cross/default-generic-args.rs
@@ -2,113 +2,113 @@
 //@ aux-crate:default_generic_args=default-generic-args.rs
 //@ edition:2021
 
-// @has user/type.BoxedStr.html
-// @has - '//*[@class="rust item-decl"]//code' "Box<str>"
+//@ has user/type.BoxedStr.html
+//@ has - '//*[@class="rust item-decl"]//code' "Box<str>"
 pub use default_generic_args::BoxedStr;
 
-// @has user/type.IntMap.html
-// @has - '//*[@class="rust item-decl"]//code' "HashMap<i64, u64>"
+//@ has user/type.IntMap.html
+//@ has - '//*[@class="rust item-decl"]//code' "HashMap<i64, u64>"
 pub use default_generic_args::IntMap;
 
-// @has user/type.T0.html
-// @has - '//*[@class="rust item-decl"]//code' "TyPair<i32>"
+//@ has user/type.T0.html
+//@ has - '//*[@class="rust item-decl"]//code' "TyPair<i32>"
 pub use default_generic_args::T0;
 
-// @has user/type.T1.html
-// @has - '//*[@class="rust item-decl"]//code' "TyPair<i32, u32>"
+//@ has user/type.T1.html
+//@ has - '//*[@class="rust item-decl"]//code' "TyPair<i32, u32>"
 pub use default_generic_args::T1;
 
-// @has user/type.T2.html
-// @has - '//*[@class="rust item-decl"]//code' "TyPair<i32, K>"
+//@ has user/type.T2.html
+//@ has - '//*[@class="rust item-decl"]//code' "TyPair<i32, K>"
 pub use default_generic_args::T2;
 
-// @has user/type.T3.html
-// @has - '//*[@class="rust item-decl"]//code' "TyPair<Q>"
+//@ has user/type.T3.html
+//@ has - '//*[@class="rust item-decl"]//code' "TyPair<Q>"
 pub use default_generic_args::T3;
 
-// @has user/type.C0.html
-// @has - '//*[@class="rust item-decl"]//code' "CtPair<43>"
+//@ has user/type.C0.html
+//@ has - '//*[@class="rust item-decl"]//code' "CtPair<43>"
 pub use default_generic_args::C0;
 
-// @has user/type.C1.html
-// @has - '//*[@class="rust item-decl"]//code' "CtPair<0, 1>"
+//@ has user/type.C1.html
+//@ has - '//*[@class="rust item-decl"]//code' "CtPair<0, 1>"
 pub use default_generic_args::C1;
 
-// @has user/type.C2.html
-// @has - '//*[@class="rust item-decl"]//code' "CtPair<default_generic_args::::C2::{constant#0}, 3>"
+//@ has user/type.C2.html
+//@ has - '//*[@class="rust item-decl"]//code' "CtPair<default_generic_args::::C2::{constant#0}, 3>"
 pub use default_generic_args::C2;
 
-// @has user/type.R0.html
-// @has - '//*[@class="rust item-decl"]//code' "Re<'q>"
+//@ has user/type.R0.html
+//@ has - '//*[@class="rust item-decl"]//code' "Re<'q>"
 pub use default_generic_args::R0;
 
-// @has user/type.R1.html
-// @has - '//*[@class="rust item-decl"]//code' "Re<'q>"
+//@ has user/type.R1.html
+//@ has - '//*[@class="rust item-decl"]//code' "Re<'q>"
 pub use default_generic_args::R1;
 
-// @has user/type.R2.html
+//@ has user/type.R2.html
 // Check that we consider regions:
-// @has - '//*[@class="rust item-decl"]//code' "Re<'q, &'static ()>"
+//@ has - '//*[@class="rust item-decl"]//code' "Re<'q, &'static ()>"
 pub use default_generic_args::R2;
 
-// @has user/type.H0.html
+//@ has user/type.H0.html
 // Check that we handle higher-ranked regions correctly:
-// @has - '//*[@class="rust item-decl"]//code' "fn(_: for<'a> fn(_: Re<'a>))"
+//@ has - '//*[@class="rust item-decl"]//code' "fn(_: for<'a> fn(_: Re<'a>))"
 pub use default_generic_args::H0;
 
-// @has user/type.H1.html
+//@ has user/type.H1.html
 // Check that we don't conflate distinct universially quantified regions (#1):
-// @has - '//*[@class="rust item-decl"]//code' "for<'b> fn(_: for<'a> fn(_: Re<'a, &'b ()>))"
+//@ has - '//*[@class="rust item-decl"]//code' "for<'b> fn(_: for<'a> fn(_: Re<'a, &'b ()>))"
 pub use default_generic_args::H1;
 
-// @has user/type.H2.html
+//@ has user/type.H2.html
 // Check that we don't conflate distinct universially quantified regions (#2):
-// @has - '//*[@class="rust item-decl"]//code' "for<'a> fn(_: for<'b> fn(_: Re<'a, &'b ()>))"
+//@ has - '//*[@class="rust item-decl"]//code' "for<'a> fn(_: for<'b> fn(_: Re<'a, &'b ()>))"
 pub use default_generic_args::H2;
 
-// @has user/type.P0.html
-// @has - '//*[@class="rust item-decl"]//code' "Proj<()>"
+//@ has user/type.P0.html
+//@ has - '//*[@class="rust item-decl"]//code' "Proj<()>"
 pub use default_generic_args::P0;
 
-// @has user/type.P1.html
-// @has - '//*[@class="rust item-decl"]//code' "Proj<(), bool>"
+//@ has user/type.P1.html
+//@ has - '//*[@class="rust item-decl"]//code' "Proj<(), bool>"
 pub use default_generic_args::P1;
 
-// @has user/type.P2.html
-// @has - '//*[@class="rust item-decl"]//code' "Proj<(), ()>"
+//@ has user/type.P2.html
+//@ has - '//*[@class="rust item-decl"]//code' "Proj<(), ()>"
 pub use default_generic_args::P2;
 
-// @has user/type.A0.html
-// @has - '//*[@class="rust item-decl"]//code' "Alpha;"
+//@ has user/type.A0.html
+//@ has - '//*[@class="rust item-decl"]//code' "Alpha;"
 pub use default_generic_args::A0;
 
-// @has user/type.A1.html
+//@ has user/type.A1.html
 // Demonstrates that we currently don't elide generic arguments that are alpha-equivalent to their
 // respective generic parameter (after instantiation) for perf reasons (it would require us to
 // create an inference context).
-// @has - '//*[@class="rust item-decl"]//code' "Alpha<for<'arbitrary> fn(_: &'arbitrary ())>"
+//@ has - '//*[@class="rust item-decl"]//code' "Alpha<for<'arbitrary> fn(_: &'arbitrary ())>"
 pub use default_generic_args::A1;
 
-// @has user/type.M0.html
+//@ has user/type.M0.html
 // Test that we don't elide `u64` even if it coincides with `A`'s default precisely because
 // `()` is not the default of `B`. Mindlessly eliding `u64` would lead to `M<()>` which is a
 // different type (`M<(), u64>` versus `M<u64, ()>`).
-// @has - '//*[@class="rust item-decl"]//code' "Multi<u64, ()>"
+//@ has - '//*[@class="rust item-decl"]//code' "Multi<u64, ()>"
 pub use default_generic_args::M0;
 
-// @has user/type.D0.html
-// @has - '//*[@class="rust item-decl"]//code' "dyn for<'a> Trait0<'a>"
+//@ has user/type.D0.html
+//@ has - '//*[@class="rust item-decl"]//code' "dyn for<'a> Trait0<'a>"
 pub use default_generic_args::D0;
 
 // Regression test for issue #119529.
 // Check that we correctly elide def ty&const args inside trait object types.
 
-// @has user/type.D1.html
-// @has - '//*[@class="rust item-decl"]//code' "dyn Trait1<T>"
+//@ has user/type.D1.html
+//@ has - '//*[@class="rust item-decl"]//code' "dyn Trait1<T>"
 pub use default_generic_args::D1;
-// @has user/type.D2.html
-// @has - '//*[@class="rust item-decl"]//code' "dyn Trait1<(), K>"
+//@ has user/type.D2.html
+//@ has - '//*[@class="rust item-decl"]//code' "dyn Trait1<(), K>"
 pub use default_generic_args::D2;
-// @has user/type.D3.html
-// @has - '//*[@class="rust item-decl"]//code' "dyn Trait1;"
+//@ has user/type.D3.html
+//@ has - '//*[@class="rust item-decl"]//code' "dyn Trait1;"
 pub use default_generic_args::D3;
diff --git a/tests/rustdoc/inline_cross/default-trait-method.rs b/tests/rustdoc/inline_cross/default-trait-method.rs
index 3d943735031..e589fc6cb85 100644
--- a/tests/rustdoc/inline_cross/default-trait-method.rs
+++ b/tests/rustdoc/inline_cross/default-trait-method.rs
@@ -2,19 +2,19 @@
 
 extern crate foo;
 
-// @has default_trait_method/trait.Item.html
-// @has - '//*[@id="tymethod.foo"]' 'fn foo()'
-// @!has - '//*[@id="tymethod.foo"]' 'default fn foo()'
-// @has - '//*[@id="tymethod.bar"]' 'fn bar()'
-// @!has - '//*[@id="tymethod.bar"]' 'default fn bar()'
-// @has - '//*[@id="method.baz"]' 'fn baz()'
-// @!has - '//*[@id="method.baz"]' 'default fn baz()'
+//@ has default_trait_method/trait.Item.html
+//@ has - '//*[@id="tymethod.foo"]' 'fn foo()'
+//@ !has - '//*[@id="tymethod.foo"]' 'default fn foo()'
+//@ has - '//*[@id="tymethod.bar"]' 'fn bar()'
+//@ !has - '//*[@id="tymethod.bar"]' 'default fn bar()'
+//@ has - '//*[@id="method.baz"]' 'fn baz()'
+//@ !has - '//*[@id="method.baz"]' 'default fn baz()'
 pub use foo::Item;
 
-// @has default_trait_method/struct.Foo.html
-// @has - '//*[@id="method.foo"]' 'default fn foo()'
-// @has - '//*[@id="method.bar"]' 'fn bar()'
-// @!has - '//*[@id="method.bar"]' 'default fn bar()'
-// @has - '//*[@id="method.baz"]' 'fn baz()'
-// @!has - '//*[@id="method.baz"]' 'default fn baz()'
+//@ has default_trait_method/struct.Foo.html
+//@ has - '//*[@id="method.foo"]' 'default fn foo()'
+//@ has - '//*[@id="method.bar"]' 'fn bar()'
+//@ !has - '//*[@id="method.bar"]' 'default fn bar()'
+//@ has - '//*[@id="method.baz"]' 'fn baz()'
+//@ !has - '//*[@id="method.baz"]' 'default fn baz()'
 pub use foo::Foo;
diff --git a/tests/rustdoc/inline_cross/doc-hidden-extern-trait-impl-29584.rs b/tests/rustdoc/inline_cross/doc-hidden-extern-trait-impl-29584.rs
index 4643e8f4750..2459dbdaeed 100644
--- a/tests/rustdoc/inline_cross/doc-hidden-extern-trait-impl-29584.rs
+++ b/tests/rustdoc/inline_cross/doc-hidden-extern-trait-impl-29584.rs
@@ -6,6 +6,6 @@
 
 extern crate issue_29584;
 
-// @has issue_29584/struct.Foo.html
-// @!hasraw - 'impl Bar for'
+//@ has issue_29584/struct.Foo.html
+//@ !hasraw - 'impl Bar for'
 pub use issue_29584::Foo;
diff --git a/tests/rustdoc/inline_cross/dyn_trait.rs b/tests/rustdoc/inline_cross/dyn_trait.rs
index 18404556984..b93dc921212 100644
--- a/tests/rustdoc/inline_cross/dyn_trait.rs
+++ b/tests/rustdoc/inline_cross/dyn_trait.rs
@@ -6,140 +6,140 @@
 //@ aux-crate:dyn_trait=dyn_trait.rs
 //@ edition:2021
 
-// @has user/type.Ty0.html
-// @has - '//*[@class="rust item-decl"]//code' "dyn for<'any> FnOnce(&'any str) -> bool;"
+//@ has user/type.Ty0.html
+//@ has - '//*[@class="rust item-decl"]//code' "dyn for<'any> FnOnce(&'any str) -> bool;"
 pub use dyn_trait::Ty0;
 
-// @has user/type.Ty1.html
-// @has - '//*[@class="rust item-decl"]//code' "dyn Display + 'obj;"
+//@ has user/type.Ty1.html
+//@ has - '//*[@class="rust item-decl"]//code' "dyn Display + 'obj;"
 pub use dyn_trait::Ty1;
 
-// @has user/type.Ty2.html
-// @has - '//*[@class="rust item-decl"]//code' "dyn for<'a, 'r> Container<'r, Item<'a, 'static> = ()>;"
+//@ has user/type.Ty2.html
+//@ has - '//*[@class="rust item-decl"]//code' "dyn for<'a, 'r> Container<'r, Item<'a, 'static> = ()>;"
 pub use dyn_trait::Ty2;
 
-// @has user/type.Ty3.html
-// @has - '//*[@class="rust item-decl"]//code' "&'s dyn ToString;"
+//@ has user/type.Ty3.html
+//@ has - '//*[@class="rust item-decl"]//code' "&'s dyn ToString;"
 pub use dyn_trait::Ty3;
 
 // Below we check if we correctly elide trait-object lifetime bounds if they coincide with their
 // default (known as "object lifetime default" or "default trait object lifetime").
 
-// @has user/fn.lbwel.html
-// @has - '//pre[@class="rust item-decl"]' "lbwel(_: &dyn Fn())"
+//@ has user/fn.lbwel.html
+//@ has - '//pre[@class="rust item-decl"]' "lbwel(_: &dyn Fn())"
 pub use dyn_trait::late_bound_wrapped_elided as lbwel;
-// @has user/fn.lbwl0.html
-// has - '//pre[@class="rust item-decl"]' "lbwl0<'f>(_: &mut (dyn Fn() + 'f))"
+//@ has user/fn.lbwl0.html
+//@ has - '//pre[@class="rust item-decl"]' "lbwl0<'f>(_: &mut (dyn Fn() + 'f))"
 pub use dyn_trait::late_bound_wrapped_late0 as lbwl0;
-// @has user/fn.lbwd0.html
-// has - '//pre[@class="rust item-decl"]' "lbwd0<'f>(_: &'f mut dyn Fn())"
+//@ has user/fn.lbwd0.html
+//@ has - '//pre[@class="rust item-decl"]' "lbwd0<'f>(_: &'f mut dyn Fn())"
 pub use dyn_trait::late_bound_wrapped_defaulted0 as lbwd0;
-// @has user/type.EarlyBoundWrappedDefaulted0.html
-// @has - '//*[@class="rust item-decl"]//code' "Ref<'x, dyn Trait>;"
+//@ has user/type.EarlyBoundWrappedDefaulted0.html
+//@ has - '//*[@class="rust item-decl"]//code' "Ref<'x, dyn Trait>;"
 pub use dyn_trait::EarlyBoundWrappedDefaulted0;
-// @has user/type.EarlyBoundWrappedDefaulted1.html
-// @has - '//*[@class="rust item-decl"]//code' "&'x dyn Trait;"
+//@ has user/type.EarlyBoundWrappedDefaulted1.html
+//@ has - '//*[@class="rust item-decl"]//code' "&'x dyn Trait;"
 pub use dyn_trait::EarlyBoundWrappedDefaulted1;
-// @has user/type.EarlyBoundWrappedEarly.html
-// @has - '//*[@class="rust item-decl"]//code' "Ref<'x, dyn Trait + 'y>"
+//@ has user/type.EarlyBoundWrappedEarly.html
+//@ has - '//*[@class="rust item-decl"]//code' "Ref<'x, dyn Trait + 'y>"
 pub use dyn_trait::EarlyBoundWrappedEarly;
-// @has user/type.EarlyBoundWrappedStatic.html
-// @has - '//*[@class="rust item-decl"]//code' "Ref<'x, dyn Trait + 'static>"
+//@ has user/type.EarlyBoundWrappedStatic.html
+//@ has - '//*[@class="rust item-decl"]//code' "Ref<'x, dyn Trait + 'static>"
 pub use dyn_trait::EarlyBoundWrappedStatic;
-// @has user/fn.lbwd1.html
-// @has - '//pre[@class="rust item-decl"]' "lbwd1<'l>(_: Ref<'l, dyn Trait>)"
+//@ has user/fn.lbwd1.html
+//@ has - '//pre[@class="rust item-decl"]' "lbwd1<'l>(_: Ref<'l, dyn Trait>)"
 pub use dyn_trait::late_bound_wrapped_defaulted1 as lbwd1;
-// @has user/fn.lbwl1.html
-// @has - '//pre[@class="rust item-decl"]' "lbwl1<'l, 'm>(_: Ref<'l, dyn Trait + 'm>)"
+//@ has user/fn.lbwl1.html
+//@ has - '//pre[@class="rust item-decl"]' "lbwl1<'l, 'm>(_: Ref<'l, dyn Trait + 'm>)"
 pub use dyn_trait::late_bound_wrapped_late1 as lbwl1;
-// @has user/fn.lbwe.html
-// @has - '//pre[@class="rust item-decl"]' "lbwe<'e, 'l>(_: Ref<'l, dyn Trait + 'e>)"
+//@ has user/fn.lbwe.html
+//@ has - '//pre[@class="rust item-decl"]' "lbwe<'e, 'l>(_: Ref<'l, dyn Trait + 'e>)"
 pub use dyn_trait::late_bound_wrapped_early as lbwe;
-// @has user/fn.ebwd.html
-// @has - '//pre[@class="rust item-decl"]' "ebwd(_: Ref<'_, dyn Trait>)"
+//@ has user/fn.ebwd.html
+//@ has - '//pre[@class="rust item-decl"]' "ebwd(_: Ref<'_, dyn Trait>)"
 pub use dyn_trait::elided_bound_wrapped_defaulted as ebwd;
-// @has user/type.StaticBoundWrappedDefaulted0.html
-// @has - '//*[@class="rust item-decl"]//code' "Ref<'static, dyn Trait>;"
+//@ has user/type.StaticBoundWrappedDefaulted0.html
+//@ has - '//*[@class="rust item-decl"]//code' "Ref<'static, dyn Trait>;"
 pub use dyn_trait::StaticBoundWrappedDefaulted0;
-// @has user/type.StaticBoundWrappedDefaulted1.html
-// @has - '//*[@class="rust item-decl"]//code' "&'static dyn Trait;"
+//@ has user/type.StaticBoundWrappedDefaulted1.html
+//@ has - '//*[@class="rust item-decl"]//code' "&'static dyn Trait;"
 pub use dyn_trait::StaticBoundWrappedDefaulted1;
-// @has user/type.AmbiguousBoundWrappedEarly0.html
-// @has - '//*[@class="rust item-decl"]//code' "AmbiguousBoundWrapper<'s, 'r, dyn Trait + 's>;"
+//@ has user/type.AmbiguousBoundWrappedEarly0.html
+//@ has - '//*[@class="rust item-decl"]//code' "AmbiguousBoundWrapper<'s, 'r, dyn Trait + 's>;"
 pub use dyn_trait::AmbiguousBoundWrappedEarly0;
-// @has user/type.AmbiguousBoundWrappedEarly1.html
-// @has - '//*[@class="rust item-decl"]//code' "AmbiguousBoundWrapper<'s, 'r, dyn Trait + 'r>;"
+//@ has user/type.AmbiguousBoundWrappedEarly1.html
+//@ has - '//*[@class="rust item-decl"]//code' "AmbiguousBoundWrapper<'s, 'r, dyn Trait + 'r>;"
 pub use dyn_trait::AmbiguousBoundWrappedEarly1;
-// @has user/type.AmbiguousBoundWrappedStatic.html
-// @has - '//*[@class="rust item-decl"]//code' "AmbiguousBoundWrapper<'q, 'q, dyn Trait + 'static>;"
+//@ has user/type.AmbiguousBoundWrappedStatic.html
+//@ has - '//*[@class="rust item-decl"]//code' "AmbiguousBoundWrapper<'q, 'q, dyn Trait + 'static>;"
 pub use dyn_trait::AmbiguousBoundWrappedStatic;
 
-// @has user/type.NoBoundsWrappedDefaulted.html
-// @has - '//*[@class="rust item-decl"]//code' "Box<dyn Trait>;"
+//@ has user/type.NoBoundsWrappedDefaulted.html
+//@ has - '//*[@class="rust item-decl"]//code' "Box<dyn Trait>;"
 pub use dyn_trait::NoBoundsWrappedDefaulted;
-// @has user/type.NoBoundsWrappedEarly.html
-// @has - '//*[@class="rust item-decl"]//code' "Box<dyn Trait + 'e>;"
+//@ has user/type.NoBoundsWrappedEarly.html
+//@ has - '//*[@class="rust item-decl"]//code' "Box<dyn Trait + 'e>;"
 pub use dyn_trait::NoBoundsWrappedEarly;
-// @has user/fn.nbwl.html
-// @has - '//pre[@class="rust item-decl"]' "nbwl<'l>(_: Box<dyn Trait + 'l>)"
+//@ has user/fn.nbwl.html
+//@ has - '//pre[@class="rust item-decl"]' "nbwl<'l>(_: Box<dyn Trait + 'l>)"
 pub use dyn_trait::no_bounds_wrapped_late as nbwl;
-// @has user/fn.nbwel.html
-// @has - '//pre[@class="rust item-decl"]' "nbwel(_: Box<dyn Trait + '_>)"
+//@ has user/fn.nbwel.html
+//@ has - '//pre[@class="rust item-decl"]' "nbwel(_: Box<dyn Trait + '_>)"
 // NB: It might seem counterintuitive to display the explicitly elided lifetime `'_` here instead of
 // eliding it but this behavior is correct: The default is `'static` here which != `'_`.
 pub use dyn_trait::no_bounds_wrapped_elided as nbwel;
 
-// @has user/type.BareNoBoundsDefaulted.html
-// @has - '//*[@class="rust item-decl"]//code' "dyn Trait;"
+//@ has user/type.BareNoBoundsDefaulted.html
+//@ has - '//*[@class="rust item-decl"]//code' "dyn Trait;"
 pub use dyn_trait::BareNoBoundsDefaulted;
-// @has user/type.BareNoBoundsEarly.html
-// @has - '//*[@class="rust item-decl"]//code' "dyn Trait + 'p;"
+//@ has user/type.BareNoBoundsEarly.html
+//@ has - '//*[@class="rust item-decl"]//code' "dyn Trait + 'p;"
 pub use dyn_trait::BareNoBoundsEarly;
-// @has user/type.BareEarlyBoundDefaulted0.html
-// @has - '//*[@class="rust item-decl"]//code' "dyn EarlyBoundTrait0<'u>;"
+//@ has user/type.BareEarlyBoundDefaulted0.html
+//@ has - '//*[@class="rust item-decl"]//code' "dyn EarlyBoundTrait0<'u>;"
 pub use dyn_trait::BareEarlyBoundDefaulted0;
-// @has user/type.BareEarlyBoundDefaulted1.html
-// @has - '//*[@class="rust item-decl"]//code' "dyn for<'any> EarlyBoundTrait0<'any>;"
+//@ has user/type.BareEarlyBoundDefaulted1.html
+//@ has - '//*[@class="rust item-decl"]//code' "dyn for<'any> EarlyBoundTrait0<'any>;"
 pub use dyn_trait::BareEarlyBoundDefaulted1;
-// @has user/type.BareEarlyBoundDefaulted2.html
-// @has - '//*[@class="rust item-decl"]//code' "dyn EarlyBoundTrait1<'static, 'w>;"
+//@ has user/type.BareEarlyBoundDefaulted2.html
+//@ has - '//*[@class="rust item-decl"]//code' "dyn EarlyBoundTrait1<'static, 'w>;"
 pub use dyn_trait::BareEarlyBoundDefaulted2;
-// @has user/type.BareEarlyBoundEarly.html
-// @has - '//*[@class="rust item-decl"]//code' "dyn EarlyBoundTrait0<'i> + 'j;"
+//@ has user/type.BareEarlyBoundEarly.html
+//@ has - '//*[@class="rust item-decl"]//code' "dyn EarlyBoundTrait0<'i> + 'j;"
 pub use dyn_trait::BareEarlyBoundEarly;
-// @has user/type.BareEarlyBoundStatic.html
-// @has - '//*[@class="rust item-decl"]//code' "dyn EarlyBoundTrait0<'i> + 'static;"
+//@ has user/type.BareEarlyBoundStatic.html
+//@ has - '//*[@class="rust item-decl"]//code' "dyn EarlyBoundTrait0<'i> + 'static;"
 pub use dyn_trait::BareEarlyBoundStatic;
-// @has user/type.BareStaticBoundDefaulted.html
-// @has - '//*[@class="rust item-decl"]//code' "dyn StaticBoundTrait;"
+//@ has user/type.BareStaticBoundDefaulted.html
+//@ has - '//*[@class="rust item-decl"]//code' "dyn StaticBoundTrait;"
 pub use dyn_trait::BareStaticBoundDefaulted;
-// @has user/type.BareHigherRankedBoundDefaulted0.html
-// @has - '//*[@class="rust item-decl"]//code' "dyn HigherRankedBoundTrait0;"
+//@ has user/type.BareHigherRankedBoundDefaulted0.html
+//@ has - '//*[@class="rust item-decl"]//code' "dyn HigherRankedBoundTrait0;"
 pub use dyn_trait::BareHigherRankedBoundDefaulted0;
-// @has user/type.BareHigherRankedBoundDefaulted1.html
-// @has - '//*[@class="rust item-decl"]//code' "dyn HigherRankedBoundTrait1<'r>;"
+//@ has user/type.BareHigherRankedBoundDefaulted1.html
+//@ has - '//*[@class="rust item-decl"]//code' "dyn HigherRankedBoundTrait1<'r>;"
 pub use dyn_trait::BareHigherRankedBoundDefaulted1;
-// @has user/type.BareAmbiguousBoundEarly0.html
-// @has - '//*[@class="rust item-decl"]//code' "dyn AmbiguousBoundTrait<'m, 'n> + 'm;"
+//@ has user/type.BareAmbiguousBoundEarly0.html
+//@ has - '//*[@class="rust item-decl"]//code' "dyn AmbiguousBoundTrait<'m, 'n> + 'm;"
 pub use dyn_trait::BareAmbiguousBoundEarly0;
-// @has user/type.BareAmbiguousBoundEarly1.html
-// @has - '//*[@class="rust item-decl"]//code' "dyn AmbiguousBoundTrait<'m, 'n> + 'n;"
+//@ has user/type.BareAmbiguousBoundEarly1.html
+//@ has - '//*[@class="rust item-decl"]//code' "dyn AmbiguousBoundTrait<'m, 'n> + 'n;"
 pub use dyn_trait::BareAmbiguousBoundEarly1;
-// @has user/type.BareAmbiguousBoundStatic.html
-// @has - '//*[@class="rust item-decl"]//code' "dyn AmbiguousBoundTrait<'o, 'o> + 'static;"
+//@ has user/type.BareAmbiguousBoundStatic.html
+//@ has - '//*[@class="rust item-decl"]//code' "dyn AmbiguousBoundTrait<'o, 'o> + 'static;"
 pub use dyn_trait::BareAmbiguousBoundStatic;
 
 // Regression test for issue #115179:
 
-// @has user/type.NestedTraitObjects.html
-// @has - '//*[@class="rust item-decl"]//code' "dyn Outer<dyn Inner>;"
+//@ has user/type.NestedTraitObjects.html
+//@ has - '//*[@class="rust item-decl"]//code' "dyn Outer<dyn Inner>;"
 pub use dyn_trait::NestedTraitObjects;
 
-// @has user/fn.apit_rpit.html
-// @has - '//pre[@class="rust item-decl"]' \
+//@ has user/fn.apit_rpit.html
+//@ has - '//pre[@class="rust item-decl"]' \
 //     "apit_rpit(o: impl Outer<dyn Inner>) -> impl Outer<dyn Inner>"
 pub use dyn_trait::apit_rpit;
 
-// @has user/type.AssocTy.html
-// @has - '//*[@class="rust item-decl"]//code' "<() as Base>::Type<dyn Inner>"
+//@ has user/type.AssocTy.html
+//@ has - '//*[@class="rust item-decl"]//code' "<() as Base>::Type<dyn Inner>"
 pub use dyn_trait::AssocTy;
diff --git a/tests/rustdoc/inline_cross/early-late-bound-lifetime-params.rs b/tests/rustdoc/inline_cross/early-late-bound-lifetime-params.rs
index 97dd623bb07..36542a2d6fc 100644
--- a/tests/rustdoc/inline_cross/early-late-bound-lifetime-params.rs
+++ b/tests/rustdoc/inline_cross/early-late-bound-lifetime-params.rs
@@ -8,10 +8,10 @@
 //@ aux-crate:dep=early-late-bound-lifetime-params.rs
 //@ edition:2021
 
-// @has usr/fn.f.html
-// @has - '//pre[@class="rust item-decl"]' "fn f<'a, 'b, 'c, 'd, T, const N: usize>(_: impl Copy)"
+//@ has usr/fn.f.html
+//@ has - '//pre[@class="rust item-decl"]' "fn f<'a, 'b, 'c, 'd, T, const N: usize>(_: impl Copy)"
 pub use dep::f;
 
-// @has usr/struct.Ty.html
-// @has - '//*[@id="method.f"]' "fn f<'a, 'b, 'c, 'd, T, const N: usize>(_: impl Copy)"
+//@ has usr/struct.Ty.html
+//@ has - '//*[@id="method.f"]' "fn f<'a, 'b, 'c, 'd, T, const N: usize>(_: impl Copy)"
 pub use dep::Ty;
diff --git a/tests/rustdoc/inline_cross/fn-type.rs b/tests/rustdoc/inline_cross/fn-type.rs
index 222557a4663..8db6f65f421 100644
--- a/tests/rustdoc/inline_cross/fn-type.rs
+++ b/tests/rustdoc/inline_cross/fn-type.rs
@@ -6,7 +6,7 @@
 //@ edition: 2021
 #![crate_name = "user"]
 
-// @has user/type.F.html
-// @has - '//*[@class="rust item-decl"]//code' \
+//@ has user/type.F.html
+//@ has - '//*[@class="rust item-decl"]//code' \
 //     "for<'z, 'a, '_unused> fn(_: &'z for<'b> fn(_: &'b str), _: &'a ()) -> &'a ();"
 pub use fn_type::F;
diff --git a/tests/rustdoc/inline_cross/generic-const-items.rs b/tests/rustdoc/inline_cross/generic-const-items.rs
index 77011a05d2f..70018b6ddb5 100644
--- a/tests/rustdoc/inline_cross/generic-const-items.rs
+++ b/tests/rustdoc/inline_cross/generic-const-items.rs
@@ -3,23 +3,23 @@
 //@ aux-crate:generic_const_items=generic-const-items.rs
 //@ edition:2021
 
-// @has 'user/constant.K.html'
-// @has - '//*[@class="rust item-decl"]//code' \
+//@ has 'user/constant.K.html'
+//@ has - '//*[@class="rust item-decl"]//code' \
 // "pub const K<'a, T: 'a + Copy, const N: usize>: Option<[T; N]> \
 // where \
 //     String: From<T>;"
 pub use generic_const_items::K;
 
-// @has user/trait.Trait.html
-// @has - '//*[@id="associatedconstant.C"]' \
+//@ has user/trait.Trait.html
+//@ has - '//*[@id="associatedconstant.C"]' \
 // "const C<'a>: &'a T \
 // where \
 //     T: 'a + Eq"
 pub use generic_const_items::Trait;
 
-// @has user/struct.Implementor.html
-// @has - '//h3[@class="code-header"]' 'impl Trait<str> for Implementor'
-// @has - '//*[@id="associatedconstant.C"]' \
+//@ has user/struct.Implementor.html
+//@ has - '//h3[@class="code-header"]' 'impl Trait<str> for Implementor'
+//@ has - '//*[@id="associatedconstant.C"]' \
 // "const C<'a>: &'a str = \"C\" \
 // where \
 //     str: 'a"
diff --git a/tests/rustdoc/inline_cross/hidden-use.rs b/tests/rustdoc/inline_cross/hidden-use.rs
index f747c94915c..3f15881345c 100644
--- a/tests/rustdoc/inline_cross/hidden-use.rs
+++ b/tests/rustdoc/inline_cross/hidden-use.rs
@@ -4,9 +4,9 @@
 
 extern crate rustdoc_hidden;
 
-// @has hidden_use/index.html
-// @!hasraw - 'rustdoc_hidden'
-// @!hasraw - 'Bar'
-// @!has hidden_use/struct.Bar.html
+//@ has hidden_use/index.html
+//@ !hasraw - 'rustdoc_hidden'
+//@ !hasraw - 'Bar'
+//@ !has hidden_use/struct.Bar.html
 #[doc(hidden)]
 pub use rustdoc_hidden::Bar;
diff --git a/tests/rustdoc/inline_cross/impl-inline-without-trait.rs b/tests/rustdoc/inline_cross/impl-inline-without-trait.rs
index 60265b5df8f..d2f19400271 100644
--- a/tests/rustdoc/inline_cross/impl-inline-without-trait.rs
+++ b/tests/rustdoc/inline_cross/impl-inline-without-trait.rs
@@ -6,7 +6,7 @@
 
 extern crate impl_inline_without_trait;
 
-// @has 'foo/struct.MyStruct.html'
-// @has - '//*[@id="method.my_trait_method"]' 'fn my_trait_method()'
-// @has - '//div[@class="docblock"]' 'docs for my_trait_method'
+//@ has 'foo/struct.MyStruct.html'
+//@ has - '//*[@id="method.my_trait_method"]' 'fn my_trait_method()'
+//@ has - '//div[@class="docblock"]' 'docs for my_trait_method'
 pub use impl_inline_without_trait::MyStruct;
diff --git a/tests/rustdoc/inline_cross/impl-sized.rs b/tests/rustdoc/inline_cross/impl-sized.rs
index b62a1e61e2b..edef114422c 100644
--- a/tests/rustdoc/inline_cross/impl-sized.rs
+++ b/tests/rustdoc/inline_cross/impl-sized.rs
@@ -3,25 +3,25 @@
 //@ aux-crate:impl_sized=impl-sized.rs
 //@ edition:2021
 
-// @has user/fn.sized.html
-// @has - '//pre[@class="rust item-decl"]' "sized(x: impl Sized) -> impl Sized"
+//@ has user/fn.sized.html
+//@ has - '//pre[@class="rust item-decl"]' "sized(x: impl Sized) -> impl Sized"
 pub use impl_sized::sized;
 
-// @has user/fn.sized_outlives.html
-// @has - '//pre[@class="rust item-decl"]' \
+//@ has user/fn.sized_outlives.html
+//@ has - '//pre[@class="rust item-decl"]' \
 //     "sized_outlives<'a>(x: impl Sized + 'a) -> impl Sized + 'a"
 pub use impl_sized::sized_outlives;
 
-// @has user/fn.maybe_sized.html
-// @has - '//pre[@class="rust item-decl"]' "maybe_sized(x: &impl ?Sized) -> &impl ?Sized"
+//@ has user/fn.maybe_sized.html
+//@ has - '//pre[@class="rust item-decl"]' "maybe_sized(x: &impl ?Sized) -> &impl ?Sized"
 pub use impl_sized::maybe_sized;
 
-// @has user/fn.debug_maybe_sized.html
-// @has - '//pre[@class="rust item-decl"]' \
+//@ has user/fn.debug_maybe_sized.html
+//@ has - '//pre[@class="rust item-decl"]' \
 //     "debug_maybe_sized(x: &(impl Debug + ?Sized)) -> &(impl Debug + ?Sized)"
 pub use impl_sized::debug_maybe_sized;
 
-// @has user/fn.maybe_sized_outlives.html
-// @has - '//pre[@class="rust item-decl"]' \
+//@ has user/fn.maybe_sized_outlives.html
+//@ has - '//pre[@class="rust item-decl"]' \
 //     "maybe_sized_outlives<'t>(x: &(impl ?Sized + 't)) -> &(impl ?Sized + 't)"
 pub use impl_sized::maybe_sized_outlives;
diff --git a/tests/rustdoc/inline_cross/impl_trait.rs b/tests/rustdoc/inline_cross/impl_trait.rs
index 19d1673f2eb..e6baf33660a 100644
--- a/tests/rustdoc/inline_cross/impl_trait.rs
+++ b/tests/rustdoc/inline_cross/impl_trait.rs
@@ -3,37 +3,37 @@
 
 extern crate impl_trait_aux;
 
-// @has impl_trait/fn.func.html
-// @has - '//pre[@class="rust item-decl"]' "pub fn func<'a>(_x: impl Clone + Into<Vec<u8>> + 'a)"
-// @!has - '//pre[@class="rust item-decl"]' 'where'
+//@ has impl_trait/fn.func.html
+//@ has - '//pre[@class="rust item-decl"]' "pub fn func<'a>(_x: impl Clone + Into<Vec<u8>> + 'a)"
+//@ !has - '//pre[@class="rust item-decl"]' 'where'
 pub use impl_trait_aux::func;
 
-// @has impl_trait/fn.func2.html
-// @has - '//pre[@class="rust item-decl"]' "func2<T>("
-// @has - '//pre[@class="rust item-decl"]' "_x: impl Deref<Target = Option<T>> + Iterator<Item = T>,"
-// @has - '//pre[@class="rust item-decl"]' "_y: impl Iterator<Item = u8>, )"
-// @!has - '//pre[@class="rust item-decl"]' 'where'
+//@ has impl_trait/fn.func2.html
+//@ has - '//pre[@class="rust item-decl"]' "func2<T>("
+//@ has - '//pre[@class="rust item-decl"]' "_x: impl Deref<Target = Option<T>> + Iterator<Item = T>,"
+//@ has - '//pre[@class="rust item-decl"]' "_y: impl Iterator<Item = u8>, )"
+//@ !has - '//pre[@class="rust item-decl"]' 'where'
 pub use impl_trait_aux::func2;
 
-// @has impl_trait/fn.func3.html
-// @has - '//pre[@class="rust item-decl"]' "func3("
-// @has - '//pre[@class="rust item-decl"]' "_x: impl Iterator<Item = impl Iterator<Item = u8>> + Clone)"
-// @!has - '//pre[@class="rust item-decl"]' 'where'
+//@ has impl_trait/fn.func3.html
+//@ has - '//pre[@class="rust item-decl"]' "func3("
+//@ has - '//pre[@class="rust item-decl"]' "_x: impl Iterator<Item = impl Iterator<Item = u8>> + Clone)"
+//@ !has - '//pre[@class="rust item-decl"]' 'where'
 pub use impl_trait_aux::func3;
 
-// @has impl_trait/fn.func4.html
-// @has - '//pre[@class="rust item-decl"]' "func4<T>("
-// @has - '//pre[@class="rust item-decl"]' "T: Iterator<Item = impl Clone>,"
+//@ has impl_trait/fn.func4.html
+//@ has - '//pre[@class="rust item-decl"]' "func4<T>("
+//@ has - '//pre[@class="rust item-decl"]' "T: Iterator<Item = impl Clone>,"
 pub use impl_trait_aux::func4;
 
-// @has impl_trait/fn.func5.html
-// @has - '//pre[@class="rust item-decl"]' "func5("
-// @has - '//pre[@class="rust item-decl"]' "_f: impl for<'any> Fn(&'any str, &'any str) -> bool + for<'r> Other<T<'r> = ()>,"
-// @has - '//pre[@class="rust item-decl"]' "_a: impl for<'beta, 'alpha, '_gamma> Auxiliary<'alpha, Item<'beta> = fn(_: &'beta ())>"
-// @!has - '//pre[@class="rust item-decl"]' 'where'
+//@ has impl_trait/fn.func5.html
+//@ has - '//pre[@class="rust item-decl"]' "func5("
+//@ has - '//pre[@class="rust item-decl"]' "_f: impl for<'any> Fn(&'any str, &'any str) -> bool + for<'r> Other<T<'r> = ()>,"
+//@ has - '//pre[@class="rust item-decl"]' "_a: impl for<'beta, 'alpha, '_gamma> Auxiliary<'alpha, Item<'beta> = fn(_: &'beta ())>"
+//@ !has - '//pre[@class="rust item-decl"]' 'where'
 pub use impl_trait_aux::func5;
 
-// @has impl_trait/struct.Foo.html
-// @has - '//*[@id="method.method"]//h4[@class="code-header"]' "pub fn method<'a>(_x: impl Clone + Into<Vec<u8>> + 'a)"
-// @!has - '//*[@id="method.method"]//h4[@class="code-header"]' 'where'
+//@ has impl_trait/struct.Foo.html
+//@ has - '//*[@id="method.method"]//h4[@class="code-header"]' "pub fn method<'a>(_x: impl Clone + Into<Vec<u8>> + 'a)"
+//@ !has - '//*[@id="method.method"]//h4[@class="code-header"]' 'where'
 pub use impl_trait_aux::Foo;
diff --git a/tests/rustdoc/inline_cross/implementors-js.rs b/tests/rustdoc/inline_cross/implementors-js.rs
index 099da54093c..e5b1049ff56 100644
--- a/tests/rustdoc/inline_cross/implementors-js.rs
+++ b/tests/rustdoc/inline_cross/implementors-js.rs
@@ -4,13 +4,13 @@
 
 extern crate implementors_inline;
 
-// @!has trait.impl/implementors_js/trait.MyTrait.js
-// @has trait.impl/implementors_inline/my_trait/trait.MyTrait.js
-// @!has trait.impl/implementors_inline/prelude/trait.MyTrait.js
-// @has implementors_inline/my_trait/trait.MyTrait.html
-// @has - '//script/@src' '../../trait.impl/implementors_inline/my_trait/trait.MyTrait.js'
-// @has implementors_js/trait.MyTrait.html
-// @has - '//script/@src' '../trait.impl/implementors_inline/my_trait/trait.MyTrait.js'
+//@ !has trait.impl/implementors_js/trait.MyTrait.js
+//@ has trait.impl/implementors_inline/my_trait/trait.MyTrait.js
+//@ !has trait.impl/implementors_inline/prelude/trait.MyTrait.js
+//@ has implementors_inline/my_trait/trait.MyTrait.html
+//@ has - '//script/@src' '../../trait.impl/implementors_inline/my_trait/trait.MyTrait.js'
+//@ has implementors_js/trait.MyTrait.html
+//@ has - '//script/@src' '../trait.impl/implementors_inline/my_trait/trait.MyTrait.js'
 /// When re-exporting this trait, the HTML will be inlined,
 /// but, vitally, the JavaScript will be located only at the
 /// one canonical path.
diff --git a/tests/rustdoc/inline_cross/inline_hidden.rs b/tests/rustdoc/inline_cross/inline_hidden.rs
index 2a3dd72749c..095cd2d3c55 100644
--- a/tests/rustdoc/inline_cross/inline_hidden.rs
+++ b/tests/rustdoc/inline_cross/inline_hidden.rs
@@ -4,23 +4,23 @@
 
 extern crate rustdoc_hidden;
 
-// @has inline_hidden/index.html
+//@ has inline_hidden/index.html
 // Ensures this item is not inlined.
-// @has - '//*[@id="reexport.Foo"]/code' 'pub use rustdoc_hidden::Foo;'
+//@ has - '//*[@id="reexport.Foo"]/code' 'pub use rustdoc_hidden::Foo;'
 #[doc(no_inline)]
 pub use rustdoc_hidden::Foo;
 
 // Even if the foreign item has `doc(hidden)`, we should be able to inline it.
-// @has - '//*[@class="item-name"]/a[@class="struct"]' 'Inlined'
+//@ has - '//*[@class="item-name"]/a[@class="struct"]' 'Inlined'
 #[doc(inline)]
 pub use rustdoc_hidden::Foo as Inlined;
 
 // Even with this import, we should not see `Foo`.
-// @count - '//*[@class="item-name"]' 4
-// @has - '//*[@class="item-name"]/a[@class="struct"]' 'Bar'
-// @has - '//*[@class="item-name"]/a[@class="fn"]' 'foo'
+//@ count - '//*[@class="item-name"]' 4
+//@ has - '//*[@class="item-name"]/a[@class="struct"]' 'Bar'
+//@ has - '//*[@class="item-name"]/a[@class="fn"]' 'foo'
 pub use rustdoc_hidden::*;
 
-// @has inline_hidden/fn.foo.html
-// @!has - '//a/@title' 'Foo'
+//@ has inline_hidden/fn.foo.html
+//@ !has - '//a/@title' 'Foo'
 pub fn foo(_: Foo) {}
diff --git a/tests/rustdoc/inline_cross/issue-24183.rs b/tests/rustdoc/inline_cross/issue-24183.rs
index cd39cda718b..8299eecc575 100644
--- a/tests/rustdoc/inline_cross/issue-24183.rs
+++ b/tests/rustdoc/inline_cross/issue-24183.rs
@@ -4,15 +4,15 @@
 //@ aux-crate:issue_24183=issue-24183.rs
 //@ edition: 2021
 
-// @has usr/trait.U.html
-// @has - '//*[@class="rust item-decl"]' "pub trait U {"
-// @has - '//*[@id="method.modified"]' \
+//@ has usr/trait.U.html
+//@ has - '//*[@class="rust item-decl"]' "pub trait U {"
+//@ has - '//*[@id="method.modified"]' \
 // "fn modified(self) -> Self\
 // where \
 //     Self: Sized"
-// @snapshot method_no_where_self_sized - '//*[@id="method.touch"]/*[@class="code-header"]'
+//@ snapshot method_no_where_self_sized - '//*[@id="method.touch"]/*[@class="code-header"]'
 pub use issue_24183::U;
 
-// @has usr/trait.S.html
-// @has - '//*[@class="rust item-decl"]' 'pub trait S: Sized {'
+//@ has usr/trait.S.html
+//@ has - '//*[@class="rust item-decl"]' 'pub trait S: Sized {'
 pub use issue_24183::S;
diff --git a/tests/rustdoc/inline_cross/issue-28480.rs b/tests/rustdoc/inline_cross/issue-28480.rs
index 9d221a46d92..004510fd922 100644
--- a/tests/rustdoc/inline_cross/issue-28480.rs
+++ b/tests/rustdoc/inline_cross/issue-28480.rs
@@ -2,12 +2,12 @@
 //@ build-aux-docs
 //@ ignore-cross-compile
 
-// @has rustdoc_hidden_sig/struct.Bar.html
-// @!has -  '//a/@title' 'Hidden'
-// @has -  '//a' 'u8'
+//@ has rustdoc_hidden_sig/struct.Bar.html
+//@ !has -  '//a/@title' 'Hidden'
+//@ has -  '//a' 'u8'
 extern crate rustdoc_hidden_sig;
 
-// @has issue_28480/struct.Bar.html
-// @!has -  '//a/@title' 'Hidden'
-// @has -  '//a' 'u8'
+//@ has issue_28480/struct.Bar.html
+//@ !has -  '//a/@title' 'Hidden'
+//@ has -  '//a' 'u8'
 pub use rustdoc_hidden_sig::Bar;
diff --git a/tests/rustdoc/inline_cross/issue-31948-1.rs b/tests/rustdoc/inline_cross/issue-31948-1.rs
index ee053f40638..e59da87c29d 100644
--- a/tests/rustdoc/inline_cross/issue-31948-1.rs
+++ b/tests/rustdoc/inline_cross/issue-31948-1.rs
@@ -4,24 +4,24 @@
 
 extern crate rustdoc_nonreachable_impls;
 
-// @has issue_31948_1/struct.Wobble.html
-// @has - '//*[@class="impl"]//h3[@class="code-header"]' 'Bark for'
-// @has - '//*[@class="impl"]//h3[@class="code-header"]' 'Woof for'
-// @!has - '//*[@class="impl"]//h3[@class="code-header"]' 'Bar for'
-// @!has - '//*[@class="impl"]//h3[@class="code-header"]' 'Qux for'
+//@ has issue_31948_1/struct.Wobble.html
+//@ has - '//*[@class="impl"]//h3[@class="code-header"]' 'Bark for'
+//@ has - '//*[@class="impl"]//h3[@class="code-header"]' 'Woof for'
+//@ !has - '//*[@class="impl"]//h3[@class="code-header"]' 'Bar for'
+//@ !has - '//*[@class="impl"]//h3[@class="code-header"]' 'Qux for'
 pub use rustdoc_nonreachable_impls::hidden::Wobble;
 
-// @has issue_31948_1/trait.Bark.html
-// @has - '//h3[@class="code-header"]' 'for Foo'
-// @has - '//h3[@class="code-header"]' 'for Wobble'
-// @!has - '//h3[@class="code-header"]' 'for Wibble'
+//@ has issue_31948_1/trait.Bark.html
+//@ has - '//h3[@class="code-header"]' 'for Foo'
+//@ has - '//h3[@class="code-header"]' 'for Wobble'
+//@ !has - '//h3[@class="code-header"]' 'for Wibble'
 pub use rustdoc_nonreachable_impls::Bark;
 
-// @has issue_31948_1/trait.Woof.html
-// @has - '//h3[@class="code-header"]' 'for Foo'
-// @has - '//h3[@class="code-header"]' 'for Wobble'
-// @!has - '//h3[@class="code-header"]' 'for Wibble'
+//@ has issue_31948_1/trait.Woof.html
+//@ has - '//h3[@class="code-header"]' 'for Foo'
+//@ has - '//h3[@class="code-header"]' 'for Wobble'
+//@ !has - '//h3[@class="code-header"]' 'for Wibble'
 pub use rustdoc_nonreachable_impls::Woof;
 
-// @!has issue_31948_1/trait.Bar.html
-// @!has issue_31948_1/trait.Qux.html
+//@ !has issue_31948_1/trait.Bar.html
+//@ !has issue_31948_1/trait.Qux.html
diff --git a/tests/rustdoc/inline_cross/issue-31948-2.rs b/tests/rustdoc/inline_cross/issue-31948-2.rs
index 5019f0369b7..34b57052883 100644
--- a/tests/rustdoc/inline_cross/issue-31948-2.rs
+++ b/tests/rustdoc/inline_cross/issue-31948-2.rs
@@ -4,18 +4,18 @@
 
 extern crate rustdoc_nonreachable_impls;
 
-// @has issue_31948_2/struct.Wobble.html
-// @has - '//*[@class="impl"]//h3[@class="code-header"]' 'Qux for'
-// @has - '//*[@class="impl"]//h3[@class="code-header"]' 'Bark for'
-// @has - '//*[@class="impl"]//h3[@class="code-header"]' 'Woof for'
-// @!has - '//*[@class="impl"]//h3[@class="code-header"]' 'Bar for'
+//@ has issue_31948_2/struct.Wobble.html
+//@ has - '//*[@class="impl"]//h3[@class="code-header"]' 'Qux for'
+//@ has - '//*[@class="impl"]//h3[@class="code-header"]' 'Bark for'
+//@ has - '//*[@class="impl"]//h3[@class="code-header"]' 'Woof for'
+//@ !has - '//*[@class="impl"]//h3[@class="code-header"]' 'Bar for'
 pub use rustdoc_nonreachable_impls::hidden::Wobble;
 
-// @has issue_31948_2/trait.Qux.html
-// @has - '//h3[@class="code-header"]' 'for Foo'
-// @has - '//h3[@class="code-header"]' 'for Wobble'
+//@ has issue_31948_2/trait.Qux.html
+//@ has - '//h3[@class="code-header"]' 'for Foo'
+//@ has - '//h3[@class="code-header"]' 'for Wobble'
 pub use rustdoc_nonreachable_impls::hidden::Qux;
 
-// @!has issue_31948_2/trait.Bar.html
-// @!has issue_31948_2/trait.Woof.html
-// @!has issue_31948_2/trait.Bark.html
+//@ !has issue_31948_2/trait.Bar.html
+//@ !has issue_31948_2/trait.Woof.html
+//@ !has issue_31948_2/trait.Bark.html
diff --git a/tests/rustdoc/inline_cross/issue-31948.rs b/tests/rustdoc/inline_cross/issue-31948.rs
index eaed8509520..7a43fc7b279 100644
--- a/tests/rustdoc/inline_cross/issue-31948.rs
+++ b/tests/rustdoc/inline_cross/issue-31948.rs
@@ -4,26 +4,26 @@
 
 extern crate rustdoc_nonreachable_impls;
 
-// @has issue_31948/struct.Foo.html
-// @has - '//*[@class="impl"]//h3[@class="code-header"]' 'Bark for'
-// @has - '//*[@class="impl"]//h3[@class="code-header"]' 'Woof for'
-// @!has - '//*[@class="impl"]//h3[@class="code-header"]' 'Bar for'
-// @!has - '//*[@class="impl"]//h3[@class="code-header"]' 'Qux for'
+//@ has issue_31948/struct.Foo.html
+//@ has - '//*[@class="impl"]//h3[@class="code-header"]' 'Bark for'
+//@ has - '//*[@class="impl"]//h3[@class="code-header"]' 'Woof for'
+//@ !has - '//*[@class="impl"]//h3[@class="code-header"]' 'Bar for'
+//@ !has - '//*[@class="impl"]//h3[@class="code-header"]' 'Qux for'
 pub use rustdoc_nonreachable_impls::Foo;
 
-// @has issue_31948/trait.Bark.html
-// @has - '//h3[@class="code-header"]' 'for Foo'
-// @!has - '//h3[@class="code-header"]' 'for Wibble'
-// @!has - '//h3[@class="code-header"]' 'for Wobble'
+//@ has issue_31948/trait.Bark.html
+//@ has - '//h3[@class="code-header"]' 'for Foo'
+//@ !has - '//h3[@class="code-header"]' 'for Wibble'
+//@ !has - '//h3[@class="code-header"]' 'for Wobble'
 pub use rustdoc_nonreachable_impls::Bark;
 
-// @has issue_31948/trait.Woof.html
-// @has - '//h3[@class="code-header"]' 'for Foo'
-// @!has - '//h3[@class="code-header"]' 'for Wibble'
-// @!has - '//h3[@class="code-header"]' 'for Wobble'
+//@ has issue_31948/trait.Woof.html
+//@ has - '//h3[@class="code-header"]' 'for Foo'
+//@ !has - '//h3[@class="code-header"]' 'for Wibble'
+//@ !has - '//h3[@class="code-header"]' 'for Wobble'
 pub use rustdoc_nonreachable_impls::Woof;
 
-// @!has issue_31948/trait.Bar.html
-// @!has issue_31948/trait.Qux.html
-// @!has issue_31948/struct.Wibble.html
-// @!has issue_31948/struct.Wobble.html
+//@ !has issue_31948/trait.Bar.html
+//@ !has issue_31948/trait.Qux.html
+//@ !has issue_31948/struct.Wibble.html
+//@ !has issue_31948/struct.Wobble.html
diff --git a/tests/rustdoc/inline_cross/issue-32881.rs b/tests/rustdoc/inline_cross/issue-32881.rs
index 93e868b466a..d4ebf10a1ca 100644
--- a/tests/rustdoc/inline_cross/issue-32881.rs
+++ b/tests/rustdoc/inline_cross/issue-32881.rs
@@ -4,8 +4,8 @@
 
 extern crate rustdoc_trait_object_impl;
 
-// @has issue_32881/trait.Bar.html
-// @has - '//h3[@class="code-header"]' "impl<'a> dyn Bar"
-// @has - '//h3[@class="code-header"]' "impl<'a> Debug for dyn Bar"
+//@ has issue_32881/trait.Bar.html
+//@ has - '//h3[@class="code-header"]' "impl<'a> dyn Bar"
+//@ has - '//h3[@class="code-header"]' "impl<'a> Debug for dyn Bar"
 
 pub use rustdoc_trait_object_impl::Bar;
diff --git a/tests/rustdoc/inline_cross/issue-33113.rs b/tests/rustdoc/inline_cross/issue-33113.rs
index 807bbcbe9b8..05e87d962cb 100644
--- a/tests/rustdoc/inline_cross/issue-33113.rs
+++ b/tests/rustdoc/inline_cross/issue-33113.rs
@@ -4,7 +4,7 @@
 
 extern crate bar;
 
-// @has issue_33113/trait.Bar.html
-// @has - '//h3[@class="code-header"]' "for &'a char"
-// @has - '//h3[@class="code-header"]' "for Foo"
+//@ has issue_33113/trait.Bar.html
+//@ has - '//h3[@class="code-header"]' "for &'a char"
+//@ has - '//h3[@class="code-header"]' "for Foo"
 pub use bar::Bar;
diff --git a/tests/rustdoc/inline_cross/issue-76736-1.rs b/tests/rustdoc/inline_cross/issue-76736-1.rs
index 692677a3eee..fe52702fd6f 100644
--- a/tests/rustdoc/inline_cross/issue-76736-1.rs
+++ b/tests/rustdoc/inline_cross/issue-76736-1.rs
@@ -6,10 +6,10 @@
 extern crate issue_76736_1;
 extern crate issue_76736_2;
 
-// @has foo/struct.Foo.html
-// @!has - '//*[@class="impl"]//h3[@class="code-header"]' 'MaybeResult'
+//@ has foo/struct.Foo.html
+//@ !has - '//*[@class="impl"]//h3[@class="code-header"]' 'MaybeResult'
 pub struct Foo;
 
-// @has foo/struct.Bar.html
-// @!has - '//*[@class="impl"]//h3[@class="code-header"]' 'MaybeResult'
+//@ has foo/struct.Bar.html
+//@ !has - '//*[@class="impl"]//h3[@class="code-header"]' 'MaybeResult'
 pub use issue_76736_2::Bar;
diff --git a/tests/rustdoc/inline_cross/issue-76736-2.rs b/tests/rustdoc/inline_cross/issue-76736-2.rs
index d4e6a697fc8..df376ebe9a1 100644
--- a/tests/rustdoc/inline_cross/issue-76736-2.rs
+++ b/tests/rustdoc/inline_cross/issue-76736-2.rs
@@ -9,10 +9,10 @@
 extern crate issue_76736_1;
 extern crate issue_76736_2;
 
-// @has foo/struct.Foo.html
-// @!has - '//*[@class="impl"]//h3[@class="code-header"]' 'MaybeResult'
+//@ has foo/struct.Foo.html
+//@ !has - '//*[@class="impl"]//h3[@class="code-header"]' 'MaybeResult'
 pub struct Foo;
 
-// @has foo/struct.Bar.html
-// @!has - '//*[@class="impl"]//h3[@class="code-header"]' 'MaybeResult'
+//@ has foo/struct.Bar.html
+//@ !has - '//*[@class="impl"]//h3[@class="code-header"]' 'MaybeResult'
 pub use issue_76736_2::Bar;
diff --git a/tests/rustdoc/inline_cross/issue-76736-3.rs b/tests/rustdoc/inline_cross/issue-76736-3.rs
index cf75c8d0321..1bed4621c04 100644
--- a/tests/rustdoc/inline_cross/issue-76736-3.rs
+++ b/tests/rustdoc/inline_cross/issue-76736-3.rs
@@ -7,10 +7,10 @@
 extern crate issue_76736_1;
 extern crate issue_76736_2;
 
-// @has foo/struct.Foo.html
-// @has - '//*[@class="impl"]//h3[@class="code-header"]' 'MaybeResult'
+//@ has foo/struct.Foo.html
+//@ has - '//*[@class="impl"]//h3[@class="code-header"]' 'MaybeResult'
 pub struct Foo;
 
-// @has foo/struct.Bar.html
-// @has - '//*[@class="impl"]//h3[@class="code-header"]' 'MaybeResult'
+//@ has foo/struct.Bar.html
+//@ has - '//*[@class="impl"]//h3[@class="code-header"]' 'MaybeResult'
 pub use issue_76736_2::Bar;
diff --git a/tests/rustdoc/inline_cross/issue-76736-4.rs b/tests/rustdoc/inline_cross/issue-76736-4.rs
index 297657ef9de..487e9030108 100644
--- a/tests/rustdoc/inline_cross/issue-76736-4.rs
+++ b/tests/rustdoc/inline_cross/issue-76736-4.rs
@@ -10,10 +10,10 @@
 extern crate issue_76736_1;
 extern crate issue_76736_2;
 
-// @has foo/struct.Foo.html
-// @has - '//*[@class="impl"]//h3[@class="code-header"]' 'MaybeResult'
+//@ has foo/struct.Foo.html
+//@ has - '//*[@class="impl"]//h3[@class="code-header"]' 'MaybeResult'
 pub struct Foo;
 
-// @has foo/struct.Bar.html
-// @has - '//*[@class="impl"]//h3[@class="code-header"]' 'MaybeResult'
+//@ has foo/struct.Bar.html
+//@ has - '//*[@class="impl"]//h3[@class="code-header"]' 'MaybeResult'
 pub use issue_76736_2::Bar;
diff --git a/tests/rustdoc/inline_cross/macro-vis.rs b/tests/rustdoc/inline_cross/macro-vis.rs
index 6b811f1452a..b38748407b3 100644
--- a/tests/rustdoc/inline_cross/macro-vis.rs
+++ b/tests/rustdoc/inline_cross/macro-vis.rs
@@ -4,29 +4,29 @@
 
 #[macro_use] extern crate qwop;
 
-// @has macro_vis/macro.some_macro.html
-// @has macro_vis/index.html '//a/@href' 'macro.some_macro.html'
+//@ has macro_vis/macro.some_macro.html
+//@ has macro_vis/index.html '//a/@href' 'macro.some_macro.html'
 pub use qwop::some_macro;
 
-// @has macro_vis/macro.renamed_macro.html
-// @!has - '//pre' 'some_macro'
-// @has macro_vis/index.html '//a/@href' 'macro.renamed_macro.html'
+//@ has macro_vis/macro.renamed_macro.html
+//@ !has - '//pre' 'some_macro'
+//@ has macro_vis/index.html '//a/@href' 'macro.renamed_macro.html'
 #[doc(inline)]
 pub use qwop::some_macro as renamed_macro;
 
-// @!has macro_vis/macro.other_macro.html
-// @!has macro_vis/index.html '//a/@href' 'macro.other_macro.html'
-// @!has - '//code' 'pub use qwop::other_macro;'
+//@ !has macro_vis/macro.other_macro.html
+//@ !has macro_vis/index.html '//a/@href' 'macro.other_macro.html'
+//@ !has - '//code' 'pub use qwop::other_macro;'
 #[doc(hidden)]
 pub use qwop::other_macro;
 
-// @has macro_vis/index.html '//code' 'pub use qwop::super_macro;'
-// @!has macro_vis/macro.super_macro.html
+//@ has macro_vis/index.html '//code' 'pub use qwop::super_macro;'
+//@ !has macro_vis/macro.super_macro.html
 #[doc(no_inline)]
 pub use qwop::super_macro;
 
-// @has macro_vis/macro.this_is_dope.html
-// @has macro_vis/index.html '//a/@href' 'macro.this_is_dope.html'
+//@ has macro_vis/macro.this_is_dope.html
+//@ has macro_vis/index.html '//a/@href' 'macro.this_is_dope.html'
 /// What it says on the tin.
 #[macro_export]
 macro_rules! this_is_dope {
diff --git a/tests/rustdoc/inline_cross/macros.rs b/tests/rustdoc/inline_cross/macros.rs
index c711216d2b5..aab7a3650b1 100644
--- a/tests/rustdoc/inline_cross/macros.rs
+++ b/tests/rustdoc/inline_cross/macros.rs
@@ -6,14 +6,14 @@
 
 extern crate macros;
 
-// @has foo/index.html '//*[@class="item-name"]/span[@class="stab deprecated"]' \
+//@ has foo/index.html '//*[@class="item-name"]/span[@class="stab deprecated"]' \
 //         Deprecated
-// @has - '//*[@class="item-name"]/span[@class="stab unstable"]' \
+//@ has - '//*[@class="item-name"]/span[@class="stab unstable"]' \
 //         Experimental
 
-// @has foo/macro.my_macro.html
-// @has - '//*[@class="docblock"]' 'docs for my_macro'
-// @has - '//*[@class="stab deprecated"]' 'Deprecated since 1.2.3: text'
-// @has - '//*[@class="stab unstable"]' 'macro_test'
-// @has - '//a/@href' '../src/macros/macros.rs.html#8'
+//@ has foo/macro.my_macro.html
+//@ has - '//*[@class="docblock"]' 'docs for my_macro'
+//@ has - '//*[@class="stab deprecated"]' 'Deprecated since 1.2.3: text'
+//@ has - '//*[@class="stab unstable"]' 'macro_test'
+//@ has - '//a/@href' '../src/macros/macros.rs.html#8'
 pub use macros::my_macro;
diff --git a/tests/rustdoc/inline_cross/non_lifetime_binders.rs b/tests/rustdoc/inline_cross/non_lifetime_binders.rs
index edc48c88d9c..95723a61ce7 100644
--- a/tests/rustdoc/inline_cross/non_lifetime_binders.rs
+++ b/tests/rustdoc/inline_cross/non_lifetime_binders.rs
@@ -2,12 +2,12 @@
 //@ edition: 2021
 #![crate_name = "user"]
 
-// @has user/fn.f.html
-// @has - '//pre[@class="rust item-decl"]' "f(_: impl for<T> Trait<T>)"
+//@ has user/fn.f.html
+//@ has - '//pre[@class="rust item-decl"]' "f(_: impl for<T> Trait<T>)"
 pub use non_lifetime_binders::f;
 
-// @has user/fn.g.html
-// @has - '//pre[@class="rust item-decl"]' "g<T>(_: T)\
+//@ has user/fn.g.html
+//@ has - '//pre[@class="rust item-decl"]' "g<T>(_: T)\
 // where \
 //     T: for<U> Trait<U>"
 pub use non_lifetime_binders::g;
diff --git a/tests/rustdoc/inline_cross/proc_macro.rs b/tests/rustdoc/inline_cross/proc_macro.rs
index 4d3b0d554ab..de1a4b82cc4 100644
--- a/tests/rustdoc/inline_cross/proc_macro.rs
+++ b/tests/rustdoc/inline_cross/proc_macro.rs
@@ -3,34 +3,34 @@
 
 extern crate some_macros;
 
-// @has proc_macro/index.html
-// @has - '//a/@href' 'macro.some_proc_macro.html'
-// @has - '//a/@href' 'attr.some_proc_attr.html'
-// @has - '//a/@href' 'derive.SomeDerive.html'
-// @has proc_macro/macro.some_proc_macro.html
-// @has proc_macro/attr.some_proc_attr.html
-// @has proc_macro/derive.SomeDerive.html
-
-// @has proc_macro/macro.some_proc_macro.html
-// @hasraw - 'a proc-macro that swallows its input and does nothing.'
+//@ has proc_macro/index.html
+//@ has - '//a/@href' 'macro.some_proc_macro.html'
+//@ has - '//a/@href' 'attr.some_proc_attr.html'
+//@ has - '//a/@href' 'derive.SomeDerive.html'
+//@ has proc_macro/macro.some_proc_macro.html
+//@ has proc_macro/attr.some_proc_attr.html
+//@ has proc_macro/derive.SomeDerive.html
+
+//@ has proc_macro/macro.some_proc_macro.html
+//@ hasraw - 'a proc-macro that swallows its input and does nothing.'
 pub use some_macros::some_proc_macro;
 
-// @has proc_macro/macro.reexported_macro.html
-// @hasraw - 'Doc comment from the original crate'
+//@ has proc_macro/macro.reexported_macro.html
+//@ hasraw - 'Doc comment from the original crate'
 pub use some_macros::reexported_macro;
 
-// @has proc_macro/attr.some_proc_attr.html
-// @hasraw - 'a proc-macro attribute that passes its item through verbatim.'
+//@ has proc_macro/attr.some_proc_attr.html
+//@ hasraw - 'a proc-macro attribute that passes its item through verbatim.'
 pub use some_macros::some_proc_attr;
 
-// @has proc_macro/derive.SomeDerive.html
-// @hasraw - 'a derive attribute that adds nothing to its input.'
+//@ has proc_macro/derive.SomeDerive.html
+//@ hasraw - 'a derive attribute that adds nothing to its input.'
 pub use some_macros::SomeDerive;
 
-// @has proc_macro/attr.first_attr.html
-// @hasraw - 'Generated doc comment'
+//@ has proc_macro/attr.first_attr.html
+//@ hasraw - 'Generated doc comment'
 pub use some_macros::first_attr;
 
-// @has proc_macro/attr.second_attr.html
-// @hasraw - 'Generated doc comment'
+//@ has proc_macro/attr.second_attr.html
+//@ hasraw - 'Generated doc comment'
 pub use some_macros::second_attr;
diff --git a/tests/rustdoc/inline_cross/qpath-self-85454.rs b/tests/rustdoc/inline_cross/qpath-self-85454.rs
index de806db7709..4751b7b1db4 100644
--- a/tests/rustdoc/inline_cross/qpath-self-85454.rs
+++ b/tests/rustdoc/inline_cross/qpath-self-85454.rs
@@ -5,8 +5,8 @@
 
 extern crate issue_85454;
 
-// @has foo/trait.FromResidual.html
-// @has - '//pre[@class="rust item-decl"]' 'pub trait FromResidual<R = <Self as Try>::Residual> { // Required method fn from_residual(residual: R) -> Self; }'
+//@ has foo/trait.FromResidual.html
+//@ has - '//pre[@class="rust item-decl"]' 'pub trait FromResidual<R = <Self as Try>::Residual> { // Required method fn from_residual(residual: R) -> Self; }'
 pub trait FromResidual<R = <Self as Try>::Residual> {
     fn from_residual(residual: R) -> Self;
 }
@@ -24,7 +24,7 @@ pub enum ControlFlow<B, C = ()> {
 }
 
 pub mod reexport {
-    // @has foo/reexport/trait.FromResidual.html
-    // @has - '//pre[@class="rust item-decl"]' 'pub trait FromResidual<R = <Self as Try>::Residual> { // Required method fn from_residual(residual: R) -> Self; }'
+    //@ has foo/reexport/trait.FromResidual.html
+    //@ has - '//pre[@class="rust item-decl"]' 'pub trait FromResidual<R = <Self as Try>::Residual> { // Required method fn from_residual(residual: R) -> Self; }'
     pub use issue_85454::*;
 }
diff --git a/tests/rustdoc/inline_cross/reexport-with-anonymous-lifetime-98697.rs b/tests/rustdoc/inline_cross/reexport-with-anonymous-lifetime-98697.rs
index fe6e5a39c81..bb4ced085c3 100644
--- a/tests/rustdoc/inline_cross/reexport-with-anonymous-lifetime-98697.rs
+++ b/tests/rustdoc/inline_cross/reexport-with-anonymous-lifetime-98697.rs
@@ -9,10 +9,10 @@
 
 extern crate reexport_with_anonymous_lifetime_98697;
 
-// @has foo/fn.repro.html '//pre[@class="rust item-decl"]/code' 'fn repro<F>()where F: Fn(&str)'
-// @!has foo/fn.repro.html '//pre[@class="rust item-decl"]/code' 'for<'
+//@ has foo/fn.repro.html '//pre[@class="rust item-decl"]/code' 'fn repro<F>()where F: Fn(&str)'
+//@ !has foo/fn.repro.html '//pre[@class="rust item-decl"]/code' 'for<'
 pub use reexport_with_anonymous_lifetime_98697::repro;
 
-// @has foo/struct.Extra.html '//div[@id="trait-implementations-list"]//h3[@class="code-header"]' 'impl MyTrait<&Extra> for Extra'
-// @!has foo/struct.Extra.html '//div[@id="trait-implementations-list"]//h3[@class="code-header"]' 'impl<'
+//@ has foo/struct.Extra.html '//div[@id="trait-implementations-list"]//h3[@class="code-header"]' 'impl MyTrait<&Extra> for Extra'
+//@ !has foo/struct.Extra.html '//div[@id="trait-implementations-list"]//h3[@class="code-header"]' 'impl<'
 pub use reexport_with_anonymous_lifetime_98697::Extra;
diff --git a/tests/rustdoc/inline_cross/renamed-via-module.rs b/tests/rustdoc/inline_cross/renamed-via-module.rs
index 1f6a9cff8ce..bdaf2cf1f62 100644
--- a/tests/rustdoc/inline_cross/renamed-via-module.rs
+++ b/tests/rustdoc/inline_cross/renamed-via-module.rs
@@ -6,19 +6,19 @@
 
 extern crate foo;
 
-// @has foo/iter/index.html
-// @has - '//a/[@href="struct.DeprecatedStepBy.html"]' "DeprecatedStepBy"
-// @has - '//a/[@href="struct.StepBy.html"]' "StepBy"
-// @has foo/iter/struct.DeprecatedStepBy.html
-// @has - '//h1' "Struct foo::iter::DeprecatedStepBy"
-// @has foo/iter/struct.StepBy.html
-// @has - '//h1' "Struct foo::iter::StepBy"
+//@ has foo/iter/index.html
+//@ has - '//a/[@href="struct.DeprecatedStepBy.html"]' "DeprecatedStepBy"
+//@ has - '//a/[@href="struct.StepBy.html"]' "StepBy"
+//@ has foo/iter/struct.DeprecatedStepBy.html
+//@ has - '//h1' "Struct foo::iter::DeprecatedStepBy"
+//@ has foo/iter/struct.StepBy.html
+//@ has - '//h1' "Struct foo::iter::StepBy"
 
-// @has bar/iter/index.html
-// @has - '//a/[@href="struct.DeprecatedStepBy.html"]' "DeprecatedStepBy"
-// @has - '//a/[@href="struct.StepBy.html"]' "StepBy"
-// @has bar/iter/struct.DeprecatedStepBy.html
-// @has - '//h1' "Struct bar::iter::DeprecatedStepBy"
-// @has bar/iter/struct.StepBy.html
-// @has - '//h1' "Struct bar::iter::StepBy"
+//@ has bar/iter/index.html
+//@ has - '//a/[@href="struct.DeprecatedStepBy.html"]' "DeprecatedStepBy"
+//@ has - '//a/[@href="struct.StepBy.html"]' "StepBy"
+//@ has bar/iter/struct.DeprecatedStepBy.html
+//@ has - '//h1' "Struct bar::iter::DeprecatedStepBy"
+//@ has bar/iter/struct.StepBy.html
+//@ has - '//h1' "Struct bar::iter::StepBy"
 pub use foo::iter;
diff --git a/tests/rustdoc/inline_cross/repr.rs b/tests/rustdoc/inline_cross/repr.rs
index 1d63bd1d7cb..d13e560b8d7 100644
--- a/tests/rustdoc/inline_cross/repr.rs
+++ b/tests/rustdoc/inline_cross/repr.rs
@@ -7,34 +7,34 @@
 
 extern crate repr;
 
-// @has 'foo/struct.ReprC.html'
-// @has - '//*[@class="rust item-decl"]//*[@class="code-attribute"]' '#[repr(C, align(8))]'
+//@ has 'foo/struct.ReprC.html'
+//@ has - '//*[@class="rust item-decl"]//*[@class="code-attribute"]' '#[repr(C, align(8))]'
 pub use repr::ReprC;
-// @has 'foo/struct.ReprSimd.html'
-// @has - '//*[@class="rust item-decl"]//*[@class="code-attribute"]' '#[repr(simd, packed(2))]'
+//@ has 'foo/struct.ReprSimd.html'
+//@ has - '//*[@class="rust item-decl"]//*[@class="code-attribute"]' '#[repr(simd, packed(2))]'
 pub use repr::ReprSimd;
-// @has 'foo/struct.ReprTransparent.html'
-// @has - '//*[@class="rust item-decl"]//*[@class="code-attribute"]' '#[repr(transparent)]'
+//@ has 'foo/struct.ReprTransparent.html'
+//@ has - '//*[@class="rust item-decl"]//*[@class="code-attribute"]' '#[repr(transparent)]'
 pub use repr::ReprTransparent;
-// @has 'foo/enum.ReprIsize.html'
-// @has - '//*[@class="rust item-decl"]//*[@class="code-attribute"]' '#[repr(isize)]'
+//@ has 'foo/enum.ReprIsize.html'
+//@ has - '//*[@class="rust item-decl"]//*[@class="code-attribute"]' '#[repr(isize)]'
 pub use repr::ReprIsize;
-// @has 'foo/enum.ReprU8.html'
-// @has - '//*[@class="rust item-decl"]//*[@class="code-attribute"]' '#[repr(u8)]'
+//@ has 'foo/enum.ReprU8.html'
+//@ has - '//*[@class="rust item-decl"]//*[@class="code-attribute"]' '#[repr(u8)]'
 pub use repr::ReprU8;
 
 // Regression test for <https://github.com/rust-lang/rust/issues/90435>.
 // Check that we show `#[repr(transparent)]` iff the non-1-ZST field is public or at least one
 // field is public in case all fields are 1-ZST fields.
 
-// @has 'foo/struct.ReprTransparentPrivField.html'
-// @!has - '//*[@class="rust item-decl"]//*[@class="code-attribute"]' '#[repr(transparent)]'
+//@ has 'foo/struct.ReprTransparentPrivField.html'
+//@ !has - '//*[@class="rust item-decl"]//*[@class="code-attribute"]' '#[repr(transparent)]'
 pub use repr::ReprTransparentPrivField;
 
-// @has 'foo/struct.ReprTransparentPriv1ZstFields.html'
-// @has - '//*[@class="rust item-decl"]//*[@class="code-attribute"]' '#[repr(transparent)]'
+//@ has 'foo/struct.ReprTransparentPriv1ZstFields.html'
+//@ has - '//*[@class="rust item-decl"]//*[@class="code-attribute"]' '#[repr(transparent)]'
 pub use repr::ReprTransparentPriv1ZstFields;
 
-// @has 'foo/struct.ReprTransparentPrivFieldPub1ZstFields.html'
-// @!has - '//*[@class="rust item-decl"]//*[@class="code-attribute"]' '#[repr(transparent)]'
+//@ has 'foo/struct.ReprTransparentPrivFieldPub1ZstFields.html'
+//@ !has - '//*[@class="rust item-decl"]//*[@class="code-attribute"]' '#[repr(transparent)]'
 pub use repr::ReprTransparentPrivFieldPub1ZstFields;
diff --git a/tests/rustdoc/inline_cross/ret-pos-impl-trait-in-trait.rs b/tests/rustdoc/inline_cross/ret-pos-impl-trait-in-trait.rs
index 1292e7c74ed..fba39ca8358 100644
--- a/tests/rustdoc/inline_cross/ret-pos-impl-trait-in-trait.rs
+++ b/tests/rustdoc/inline_cross/ret-pos-impl-trait-in-trait.rs
@@ -7,29 +7,29 @@
 // their desugaring. We count the number of associated items and ensure that it is exactly one.
 // This is more robust than checking for the absence of the associated type.
 
-// @has user/trait.Trait.html
-// @has - '//*[@id="method.create"]' 'fn create() -> impl Iterator<Item = u64>'
+//@ has user/trait.Trait.html
+//@ has - '//*[@id="method.create"]' 'fn create() -> impl Iterator<Item = u64>'
 // The class "method" is used for all three kinds of associated items at the time of writing.
-// @count - '//*[@id="main-content"]//section[@class="method"]' 1
+//@ count - '//*[@id="main-content"]//section[@class="method"]' 1
 pub use rpitit::Trait;
 
-// @has user/struct.Basic.html
-// @has - '//*[@id="method.create"]' 'fn create() -> impl Iterator<Item = u64>'
-// @count - '//*[@id="trait-implementations-list"]//*[@class="impl-items"]' 1
+//@ has user/struct.Basic.html
+//@ has - '//*[@id="method.create"]' 'fn create() -> impl Iterator<Item = u64>'
+//@ count - '//*[@id="trait-implementations-list"]//*[@class="impl-items"]' 1
 pub use rpitit::Basic;
 
-// @has user/struct.Intermediate.html
-// @has - '//*[@id="method.create"]' 'fn create() -> Range<u64>'
-// @count - '//*[@id="trait-implementations-list"]//*[@class="impl-items"]' 1
+//@ has user/struct.Intermediate.html
+//@ has - '//*[@id="method.create"]' 'fn create() -> Range<u64>'
+//@ count - '//*[@id="trait-implementations-list"]//*[@class="impl-items"]' 1
 pub use rpitit::Intermediate;
 
-// @has user/struct.Advanced.html
-// @has - '//*[@id="method.create"]' 'fn create() -> impl Iterator<Item = u64>'
-// @count - '//*[@id="trait-implementations-list"]//*[@class="impl-items"]' 1
+//@ has user/struct.Advanced.html
+//@ has - '//*[@id="method.create"]' 'fn create() -> impl Iterator<Item = u64>'
+//@ count - '//*[@id="trait-implementations-list"]//*[@class="impl-items"]' 1
 pub use rpitit::Advanced;
 
 // Regression test for issue #113929:
 
-// @has user/trait.Def.html
-// @has - '//*[@id="method.def"]' 'fn def<T>() -> impl Default'
+//@ has user/trait.Def.html
+//@ has - '//*[@id="method.def"]' 'fn def<T>() -> impl Default'
 pub use rpitit::Def;
diff --git a/tests/rustdoc/inline_cross/sugar-closure-crate-21801.rs b/tests/rustdoc/inline_cross/sugar-closure-crate-21801.rs
index a00dcaf409b..0cd400c03ec 100644
--- a/tests/rustdoc/inline_cross/sugar-closure-crate-21801.rs
+++ b/tests/rustdoc/inline_cross/sugar-closure-crate-21801.rs
@@ -6,7 +6,7 @@
 
 extern crate issue_21801;
 
-// @has issue_21801/struct.Foo.html
-// @has - '//*[@id="method.new"]' \
+//@ has issue_21801/struct.Foo.html
+//@ has - '//*[@id="method.new"]' \
 //        'fn new<F>(f: F) -> Foowhere F: FnMut() -> i32'
 pub use issue_21801::Foo;
diff --git a/tests/rustdoc/inline_cross/trait-vis.rs b/tests/rustdoc/inline_cross/trait-vis.rs
index fc992ab3110..1fae6305b04 100644
--- a/tests/rustdoc/inline_cross/trait-vis.rs
+++ b/tests/rustdoc/inline_cross/trait-vis.rs
@@ -2,6 +2,6 @@
 
 extern crate inner;
 
-// @has trait_vis/struct.SomeStruct.html
-// @has - '//h3[@class="code-header"]' 'impl Clone for SomeStruct'
+//@ has trait_vis/struct.SomeStruct.html
+//@ has - '//h3[@class="code-header"]' 'impl Clone for SomeStruct'
 pub use inner::SomeStruct;
diff --git a/tests/rustdoc/inline_cross/use_crate.rs b/tests/rustdoc/inline_cross/use_crate.rs
index 38cbcfa6b84..fdbc41c0bb0 100644
--- a/tests/rustdoc/inline_cross/use_crate.rs
+++ b/tests/rustdoc/inline_cross/use_crate.rs
@@ -10,18 +10,18 @@
 
 #![crate_name = "local"]
 
-// @!has-dir local/use_crate
-// @has local/index.html
-// @has - '//code' 'pub use use_crate'
+//@ !has-dir local/use_crate
+//@ has local/index.html
+//@ has - '//code' 'pub use use_crate'
 pub use use_crate;
 
-// @has-dir local/asdf
-// @has local/asdf/index.html
-// @has local/index.html '//a/@href' 'asdf/index.html'
+//@ has-dir local/asdf
+//@ has local/asdf/index.html
+//@ has local/index.html '//a/@href' 'asdf/index.html'
 pub use use_crate::asdf;
 
-// @has-dir local/use_crate_2
-// @has local/use_crate_2/index.html
-// @has local/index.html '//a/@href' 'use_crate_2/index.html'
+//@ has-dir local/use_crate_2
+//@ has local/use_crate_2/index.html
+//@ has local/index.html '//a/@href' 'use_crate_2/index.html'
 #[doc(inline)]
 pub use use_crate_2;
diff --git a/tests/rustdoc/inline_local/blanket-impl-reexported-trait-94183.rs b/tests/rustdoc/inline_local/blanket-impl-reexported-trait-94183.rs
index 343e030da9e..66d313a4506 100644
--- a/tests/rustdoc/inline_local/blanket-impl-reexported-trait-94183.rs
+++ b/tests/rustdoc/inline_local/blanket-impl-reexported-trait-94183.rs
@@ -5,28 +5,28 @@
 // https://github.com/rust-lang/rust/issues/94183
 #![crate_name = "foo"]
 
-// @has 'foo/struct.S.html'
+//@ has 'foo/struct.S.html'
 
 mod actual_sub {
     pub trait Actual {}
     pub trait Another {}
 
     // `Another` is publicly re-exported so it should appear in the blanket impl list.
-    // @has - '//*[@id="blanket-implementations-list"]//*[@class="code-header"]' 'impl<T> Another for T'
+    //@ has - '//*[@id="blanket-implementations-list"]//*[@class="code-header"]' 'impl<T> Another for T'
     impl<T> Another for T {}
 
     trait Foo {}
 
     // `Foo` is not publicly re-exported nor reachable so it shouldn't appear in the
     // blanket impl list.
-    // @!has - '//*[@id="blanket-implementations-list"]//*[@class="code-header"]' 'impl<T> Foo for T'
+    //@ !has - '//*[@id="blanket-implementations-list"]//*[@class="code-header"]' 'impl<T> Foo for T'
     impl<T> Foo for T {}
 }
 
 pub use actual_sub::{Actual, Another};
 
 // `Actual` is publicly re-exported so it should appear in the blanket impl list.
-// @has - '//*[@id="blanket-implementations-list"]//*[@class="code-header"]' 'impl<T> Actual for T'
+//@ has - '//*[@id="blanket-implementations-list"]//*[@class="code-header"]' 'impl<T> Actual for T'
 impl<T> Actual for T {}
 
 pub struct S;
diff --git a/tests/rustdoc/inline_local/enum-variant-reexport-46766.rs b/tests/rustdoc/inline_local/enum-variant-reexport-46766.rs
index ea6b7bac4c7..8a41f9d1fc5 100644
--- a/tests/rustdoc/inline_local/enum-variant-reexport-46766.rs
+++ b/tests/rustdoc/inline_local/enum-variant-reexport-46766.rs
@@ -4,4 +4,4 @@
 pub enum Enum{Variant}
 pub use self::Enum::Variant;
 
-// @!has foo/index.html '//a/@href' './Enum/index.html'
+//@ !has foo/index.html '//a/@href' './Enum/index.html'
diff --git a/tests/rustdoc/inline_local/glob-extern-document-private-items.rs b/tests/rustdoc/inline_local/glob-extern-document-private-items.rs
index 9a11f88c81a..f58474bf5f9 100644
--- a/tests/rustdoc/inline_local/glob-extern-document-private-items.rs
+++ b/tests/rustdoc/inline_local/glob-extern-document-private-items.rs
@@ -11,15 +11,15 @@ mod mod1 {
 
 pub use mod1::*;
 
-// @has foo/index.html
-// @hasraw - "mod1"
-// @hasraw - "public_fn"
-// @!hasraw - "private_fn"
-// @has foo/fn.public_fn.html
-// @!has foo/fn.private_fn.html
+//@ has foo/index.html
+//@ hasraw - "mod1"
+//@ hasraw - "public_fn"
+//@ !hasraw - "private_fn"
+//@ has foo/fn.public_fn.html
+//@ !has foo/fn.private_fn.html
 
-// @has foo/mod1/index.html
-// @hasraw - "public_fn"
-// @hasraw - "private_fn"
-// @has foo/mod1/fn.public_fn.html
-// @has foo/mod1/fn.private_fn.html
+//@ has foo/mod1/index.html
+//@ hasraw - "public_fn"
+//@ hasraw - "private_fn"
+//@ has foo/mod1/fn.public_fn.html
+//@ has foo/mod1/fn.private_fn.html
diff --git a/tests/rustdoc/inline_local/glob-extern.rs b/tests/rustdoc/inline_local/glob-extern.rs
index c592a4db19d..5e7a631ad18 100644
--- a/tests/rustdoc/inline_local/glob-extern.rs
+++ b/tests/rustdoc/inline_local/glob-extern.rs
@@ -9,13 +9,13 @@ mod mod1 {
 
 pub use mod1::*;
 
-// @has foo/index.html
-// @!hasraw - "mod1"
-// @hasraw - "public_fn"
-// @!hasraw - "private_fn"
-// @has foo/fn.public_fn.html
-// @!has foo/fn.private_fn.html
+//@ has foo/index.html
+//@ !hasraw - "mod1"
+//@ hasraw - "public_fn"
+//@ !hasraw - "private_fn"
+//@ has foo/fn.public_fn.html
+//@ !has foo/fn.private_fn.html
 
-// @!has foo/mod1/index.html
-// @has foo/mod1/fn.public_fn.html
-// @!has foo/mod1/fn.private_fn.html
+//@ !has foo/mod1/index.html
+//@ has foo/mod1/fn.public_fn.html
+//@ !has foo/mod1/fn.private_fn.html
diff --git a/tests/rustdoc/inline_local/glob-private-document-private-items.rs b/tests/rustdoc/inline_local/glob-private-document-private-items.rs
index 4ad217d2270..4ad36da843f 100644
--- a/tests/rustdoc/inline_local/glob-private-document-private-items.rs
+++ b/tests/rustdoc/inline_local/glob-private-document-private-items.rs
@@ -14,35 +14,35 @@ mod mod1 {
 }
 pub use mod1::*;
 
-// @has foo/index.html
-// @hasraw - "mod1"
-// @hasraw - "Mod1Public"
-// @!hasraw - "Mod1Private"
-// @!hasraw - "mod2"
-// @hasraw - "Mod2Public"
-// @!hasraw - "Mod2Private"
-// @has foo/struct.Mod1Public.html
-// @!has foo/struct.Mod1Private.html
-// @has foo/struct.Mod2Public.html
-// @!has foo/struct.Mod2Private.html
+//@ has foo/index.html
+//@ hasraw - "mod1"
+//@ hasraw - "Mod1Public"
+//@ !hasraw - "Mod1Private"
+//@ !hasraw - "mod2"
+//@ hasraw - "Mod2Public"
+//@ !hasraw - "Mod2Private"
+//@ has foo/struct.Mod1Public.html
+//@ !has foo/struct.Mod1Private.html
+//@ has foo/struct.Mod2Public.html
+//@ !has foo/struct.Mod2Private.html
 
-// @has foo/mod1/index.html
-// @hasraw - "mod2"
-// @hasraw - "Mod1Public"
-// @hasraw - "Mod1Private"
-// @!hasraw - "Mod2Public"
-// @!hasraw - "Mod2Private"
-// @has foo/mod1/struct.Mod1Public.html
-// @has foo/mod1/struct.Mod1Private.html
-// @!has foo/mod1/struct.Mod2Public.html
-// @!has foo/mod1/struct.Mod2Private.html
+//@ has foo/mod1/index.html
+//@ hasraw - "mod2"
+//@ hasraw - "Mod1Public"
+//@ hasraw - "Mod1Private"
+//@ !hasraw - "Mod2Public"
+//@ !hasraw - "Mod2Private"
+//@ has foo/mod1/struct.Mod1Public.html
+//@ has foo/mod1/struct.Mod1Private.html
+//@ !has foo/mod1/struct.Mod2Public.html
+//@ !has foo/mod1/struct.Mod2Private.html
 
-// @has foo/mod1/mod2/index.html
-// @hasraw - "Mod2Public"
-// @hasraw - "Mod2Private"
-// @has foo/mod1/mod2/struct.Mod2Public.html
-// @has foo/mod1/mod2/struct.Mod2Private.html
+//@ has foo/mod1/mod2/index.html
+//@ hasraw - "Mod2Public"
+//@ hasraw - "Mod2Private"
+//@ has foo/mod1/mod2/struct.Mod2Public.html
+//@ has foo/mod1/mod2/struct.Mod2Private.html
 
-// @!has foo/mod2/index.html
-// @!has foo/mod2/struct.Mod2Public.html
-// @!has foo/mod2/struct.Mod2Private.html
+//@ !has foo/mod2/index.html
+//@ !has foo/mod2/struct.Mod2Public.html
+//@ !has foo/mod2/struct.Mod2Private.html
diff --git a/tests/rustdoc/inline_local/glob-private.rs b/tests/rustdoc/inline_local/glob-private.rs
index 303f1d61048..d6499d27a25 100644
--- a/tests/rustdoc/inline_local/glob-private.rs
+++ b/tests/rustdoc/inline_local/glob-private.rs
@@ -12,31 +12,31 @@ mod mod1 {
 }
 pub use mod1::*;
 
-// @has foo/index.html
-// @!hasraw - "mod1"
-// @hasraw - "Mod1Public"
-// @!hasraw - "Mod1Private"
-// @!hasraw - "mod2"
-// @hasraw - "Mod2Public"
-// @!hasraw - "Mod2Private"
-// @has foo/struct.Mod1Public.html
-// @!has foo/struct.Mod1Private.html
-// @has foo/struct.Mod2Public.html
-// @!has foo/struct.Mod2Private.html
+//@ has foo/index.html
+//@ !hasraw - "mod1"
+//@ hasraw - "Mod1Public"
+//@ !hasraw - "Mod1Private"
+//@ !hasraw - "mod2"
+//@ hasraw - "Mod2Public"
+//@ !hasraw - "Mod2Private"
+//@ has foo/struct.Mod1Public.html
+//@ !has foo/struct.Mod1Private.html
+//@ has foo/struct.Mod2Public.html
+//@ !has foo/struct.Mod2Private.html
 
-// @has-dir foo/mod1
-// @!has foo/mod1/index.html
-// @has foo/mod1/struct.Mod1Public.html
-// @!has foo/mod1/struct.Mod1Private.html
-// @!has foo/mod1/struct.Mod2Public.html
-// @!has foo/mod1/struct.Mod2Private.html
+//@ has-dir foo/mod1
+//@ !has foo/mod1/index.html
+//@ has foo/mod1/struct.Mod1Public.html
+//@ !has foo/mod1/struct.Mod1Private.html
+//@ !has foo/mod1/struct.Mod2Public.html
+//@ !has foo/mod1/struct.Mod2Private.html
 
-// @has-dir foo/mod1/mod2
-// @!has foo/mod1/mod2/index.html
-// @has foo/mod1/mod2/struct.Mod2Public.html
-// @!has foo/mod1/mod2/struct.Mod2Private.html
+//@ has-dir foo/mod1/mod2
+//@ !has foo/mod1/mod2/index.html
+//@ has foo/mod1/mod2/struct.Mod2Public.html
+//@ !has foo/mod1/mod2/struct.Mod2Private.html
 
-// @!has-dir foo/mod2
-// @!has foo/mod2/index.html
-// @!has foo/mod2/struct.Mod2Public.html
-// @!has foo/mod2/struct.Mod2Private.html
+//@ !has-dir foo/mod2
+//@ !has foo/mod2/index.html
+//@ !has foo/mod2/struct.Mod2Public.html
+//@ !has foo/mod2/struct.Mod2Private.html
diff --git a/tests/rustdoc/inline_local/hidden-use.rs b/tests/rustdoc/inline_local/hidden-use.rs
index de512fb26e6..35bce2932f9 100644
--- a/tests/rustdoc/inline_local/hidden-use.rs
+++ b/tests/rustdoc/inline_local/hidden-use.rs
@@ -2,9 +2,9 @@ mod private {
     pub struct Foo {}
 }
 
-// @has hidden_use/index.html
-// @!hasraw - 'private'
-// @!hasraw - 'Foo'
-// @!has hidden_use/struct.Foo.html
+//@ has hidden_use/index.html
+//@ !hasraw - 'private'
+//@ !hasraw - 'Foo'
+//@ !has hidden_use/struct.Foo.html
 #[doc(hidden)]
 pub use private::Foo;
diff --git a/tests/rustdoc/inline_local/issue-28537.rs b/tests/rustdoc/inline_local/issue-28537.rs
index da9cc4c940d..d5ba94d2e6c 100644
--- a/tests/rustdoc/inline_local/issue-28537.rs
+++ b/tests/rustdoc/inline_local/issue-28537.rs
@@ -10,8 +10,8 @@ mod bar {
     }
 }
 
-// @has issue_28537/struct.Foo.html
+//@ has issue_28537/struct.Foo.html
 pub use foo::Foo;
 
-// @has issue_28537/struct.Bar.html
+//@ has issue_28537/struct.Bar.html
 pub use self::bar::Bar;
diff --git a/tests/rustdoc/inline_local/issue-32343.rs b/tests/rustdoc/inline_local/issue-32343.rs
index 5620ae0dced..2ec123fdc5c 100644
--- a/tests/rustdoc/inline_local/issue-32343.rs
+++ b/tests/rustdoc/inline_local/issue-32343.rs
@@ -1,14 +1,14 @@
-// @!has issue_32343/struct.Foo.html
-// @has issue_32343/index.html
-// @has - '//code' 'pub use foo::Foo'
-// @!has - '//code/a' 'Foo'
+//@ !has issue_32343/struct.Foo.html
+//@ has issue_32343/index.html
+//@ has - '//code' 'pub use foo::Foo'
+//@ !has - '//code/a' 'Foo'
 #[doc(no_inline)]
 pub use foo::Foo;
 
-// @!has issue_32343/struct.Bar.html
-// @has issue_32343/index.html
-// @has - '//code' 'pub use foo::Bar'
-// @has - '//code/a' 'Bar'
+//@ !has issue_32343/struct.Bar.html
+//@ has issue_32343/index.html
+//@ has - '//code' 'pub use foo::Bar'
+//@ has - '//code/a' 'Bar'
 #[doc(no_inline)]
 pub use foo::Bar;
 
@@ -18,6 +18,6 @@ mod foo {
 }
 
 pub mod bar {
-    // @has issue_32343/bar/struct.Bar.html
+    //@ has issue_32343/bar/struct.Bar.html
     pub use ::foo::Bar;
 }
diff --git a/tests/rustdoc/inline_local/macro_by_example.rs b/tests/rustdoc/inline_local/macro_by_example.rs
index 5c33c0037e4..584a149968e 100644
--- a/tests/rustdoc/inline_local/macro_by_example.rs
+++ b/tests/rustdoc/inline_local/macro_by_example.rs
@@ -5,13 +5,13 @@ macro_rules! foo {
     ($($tt:tt)*) => {}
 }
 
-// @has macro_by_example/macros/index.html
+//@ has macro_by_example/macros/index.html
 pub mod macros {
-    // @!hasraw - 'pub use foo as bar;'
-    // @has macro_by_example/macros/macro.bar.html
-    // @has - '//*[@class="docblock"]' 'docs for foo'
-    // @has - '//*[@class="stab deprecated"]' 'Deprecated since 1.2.3: text'
-    // @has - '//a/@href' 'macro_by_example.rs.html#4-6'
+    //@ !hasraw - 'pub use foo as bar;'
+    //@ has macro_by_example/macros/macro.bar.html
+    //@ has - '//*[@class="docblock"]' 'docs for foo'
+    //@ has - '//*[@class="stab deprecated"]' 'Deprecated since 1.2.3: text'
+    //@ has - '//a/@href' 'macro_by_example.rs.html#4-6'
     #[doc(inline)]
     pub use foo as bar;
 }
diff --git a/tests/rustdoc/inline_local/please_inline.rs b/tests/rustdoc/inline_local/please_inline.rs
index e4429ef33a9..ad7a30012a8 100644
--- a/tests/rustdoc/inline_local/please_inline.rs
+++ b/tests/rustdoc/inline_local/please_inline.rs
@@ -2,18 +2,18 @@ pub mod foo {
     pub struct Foo;
 }
 
-// @has please_inline/a/index.html
+//@ has please_inline/a/index.html
 pub mod a {
-    // @!hasraw - 'pub use foo::'
-    // @has please_inline/a/struct.Foo.html
+    //@ !hasraw - 'pub use foo::'
+    //@ has please_inline/a/struct.Foo.html
     #[doc(inline)]
     pub use foo::Foo;
 }
 
-// @has please_inline/b/index.html
+//@ has please_inline/b/index.html
 pub mod b {
-    // @hasraw - 'pub use foo::'
-    // @!has please_inline/b/struct.Foo.html
+    //@ hasraw - 'pub use foo::'
+    //@ !has please_inline/b/struct.Foo.html
     #[feature(inline)]
     pub use foo::Foo;
 }
diff --git a/tests/rustdoc/inline_local/private-reexport-in-public-api-81141-2.rs b/tests/rustdoc/inline_local/private-reexport-in-public-api-81141-2.rs
index c066f54b32b..9dcdc6a0f34 100644
--- a/tests/rustdoc/inline_local/private-reexport-in-public-api-81141-2.rs
+++ b/tests/rustdoc/inline_local/private-reexport-in-public-api-81141-2.rs
@@ -8,7 +8,7 @@ use external::Public as Private;
 pub mod external {
     pub struct Public;
 
-    // @has 'foo/external/fn.make.html'
-    // @has - '//*[@class="rust item-decl"]/code' 'pub fn make() -> Public'
+    //@ has 'foo/external/fn.make.html'
+    //@ has - '//*[@class="rust item-decl"]/code' 'pub fn make() -> Public'
     pub fn make() -> ::Private { super::Private }
 }
diff --git a/tests/rustdoc/inline_local/private-reexport-in-public-api-81141.rs b/tests/rustdoc/inline_local/private-reexport-in-public-api-81141.rs
index d695ed7fbfa..55d95c32ce2 100644
--- a/tests/rustdoc/inline_local/private-reexport-in-public-api-81141.rs
+++ b/tests/rustdoc/inline_local/private-reexport-in-public-api-81141.rs
@@ -16,57 +16,57 @@ mod bar {
     pub use self::Bar as Inner;
 }
 
-// @has 'foo/fn.bar.html'
-// @has - '//*[@class="rust item-decl"]/code' 'pub fn bar() -> Bar'
+//@ has 'foo/fn.bar.html'
+//@ has - '//*[@class="rust item-decl"]/code' 'pub fn bar() -> Bar'
 pub fn bar() -> Alias {
     Alias
 }
 
-// @has 'foo/fn.bar2.html'
-// @has - '//*[@class="rust item-decl"]/code' 'pub fn bar2() -> Whatever'
+//@ has 'foo/fn.bar2.html'
+//@ has - '//*[@class="rust item-decl"]/code' 'pub fn bar2() -> Whatever'
 pub fn bar2() -> Whatever3 {
     Whatever
 }
 
-// @has 'foo/fn.bar3.html'
-// @has - '//*[@class="rust item-decl"]/code' 'pub fn bar3() -> Whatever4'
+//@ has 'foo/fn.bar3.html'
+//@ has - '//*[@class="rust item-decl"]/code' 'pub fn bar3() -> Whatever4'
 pub fn bar3() -> Whatever4 {
     Whatever
 }
 
-// @has 'foo/fn.bar4.html'
-// @has - '//*[@class="rust item-decl"]/code' 'pub fn bar4() -> Bar'
+//@ has 'foo/fn.bar4.html'
+//@ has - '//*[@class="rust item-decl"]/code' 'pub fn bar4() -> Bar'
 pub fn bar4() -> crate::Alias {
     Alias
 }
 
-// @has 'foo/fn.bar5.html'
-// @has - '//*[@class="rust item-decl"]/code' 'pub fn bar5() -> Whatever'
+//@ has 'foo/fn.bar5.html'
+//@ has - '//*[@class="rust item-decl"]/code' 'pub fn bar5() -> Whatever'
 pub fn bar5() -> crate::Whatever3 {
     Whatever
 }
 
-// @has 'foo/fn.bar6.html'
-// @has - '//*[@class="rust item-decl"]/code' 'pub fn bar6() -> Whatever4'
+//@ has 'foo/fn.bar6.html'
+//@ has - '//*[@class="rust item-decl"]/code' 'pub fn bar6() -> Whatever4'
 pub fn bar6() -> crate::Whatever4 {
     Whatever
 }
 
 
-// @has 'foo/fn.bar7.html'
-// @has - '//*[@class="rust item-decl"]/code' 'pub fn bar7() -> Bar'
+//@ has 'foo/fn.bar7.html'
+//@ has - '//*[@class="rust item-decl"]/code' 'pub fn bar7() -> Bar'
 pub fn bar7() -> self::Alias {
     Alias
 }
 
-// @has 'foo/fn.bar8.html'
-// @has - '//*[@class="rust item-decl"]/code' 'pub fn bar8() -> Whatever'
+//@ has 'foo/fn.bar8.html'
+//@ has - '//*[@class="rust item-decl"]/code' 'pub fn bar8() -> Whatever'
 pub fn bar8() -> self::Whatever3 {
     Whatever
 }
 
-// @has 'foo/fn.bar9.html'
-// @has - '//*[@class="rust item-decl"]/code' 'pub fn bar9() -> Whatever4'
+//@ has 'foo/fn.bar9.html'
+//@ has - '//*[@class="rust item-decl"]/code' 'pub fn bar9() -> Whatever4'
 pub fn bar9() -> self::Whatever4 {
     Whatever
 }
@@ -78,38 +78,38 @@ mod nested {
     pub(crate) use crate::nested as nested2;
 }
 
-// @has 'foo/fn.bar10.html'
-// @has - '//*[@class="rust item-decl"]/code' 'pub fn bar10() -> Bar'
+//@ has 'foo/fn.bar10.html'
+//@ has - '//*[@class="rust item-decl"]/code' 'pub fn bar10() -> Bar'
 pub fn bar10() -> nested::Alias {
     Alias
 }
 
-// @has 'foo/fn.bar11.html'
-// @has - '//*[@class="rust item-decl"]/code' 'pub fn bar11() -> Whatever'
+//@ has 'foo/fn.bar11.html'
+//@ has - '//*[@class="rust item-decl"]/code' 'pub fn bar11() -> Whatever'
 pub fn bar11() -> nested::Whatever3 {
     Whatever
 }
 
-// @has 'foo/fn.bar12.html'
-// @has - '//*[@class="rust item-decl"]/code' 'pub fn bar12() -> Whatever4'
+//@ has 'foo/fn.bar12.html'
+//@ has - '//*[@class="rust item-decl"]/code' 'pub fn bar12() -> Whatever4'
 pub fn bar12() -> nested::Whatever4 {
     Whatever
 }
 
-// @has 'foo/fn.bar13.html'
-// @has - '//*[@class="rust item-decl"]/code' 'pub fn bar13() -> Bar'
+//@ has 'foo/fn.bar13.html'
+//@ has - '//*[@class="rust item-decl"]/code' 'pub fn bar13() -> Bar'
 pub fn bar13() -> nested::nested2::Alias {
     Alias
 }
 
-// @has 'foo/fn.bar14.html'
-// @has - '//*[@class="rust item-decl"]/code' 'pub fn bar14() -> Whatever'
+//@ has 'foo/fn.bar14.html'
+//@ has - '//*[@class="rust item-decl"]/code' 'pub fn bar14() -> Whatever'
 pub fn bar14() -> nested::nested2::Whatever3 {
     Whatever
 }
 
-// @has 'foo/fn.bar15.html'
-// @has - '//*[@class="rust item-decl"]/code' 'pub fn bar15() -> Whatever4'
+//@ has 'foo/fn.bar15.html'
+//@ has - '//*[@class="rust item-decl"]/code' 'pub fn bar15() -> Whatever4'
 pub fn bar15() -> nested::nested2::Whatever4 {
     Whatever
 }
@@ -119,7 +119,7 @@ use external::Public as Private;
 pub mod external {
     pub struct Public;
 
-    // @has 'foo/external/fn.make.html'
-    // @has - '//*[@class="rust item-decl"]/code' 'pub fn make() -> Public'
+    //@ has 'foo/external/fn.make.html'
+    //@ has - '//*[@class="rust item-decl"]/code' 'pub fn make() -> Public'
     pub fn make() -> super::Private { super::Private }
 }
diff --git a/tests/rustdoc/inline_local/private-reexport-in-public-api-generics-81141.rs b/tests/rustdoc/inline_local/private-reexport-in-public-api-generics-81141.rs
index 1c86c769a12..a0b637f0992 100644
--- a/tests/rustdoc/inline_local/private-reexport-in-public-api-generics-81141.rs
+++ b/tests/rustdoc/inline_local/private-reexport-in-public-api-generics-81141.rs
@@ -7,8 +7,8 @@ pub mod bar {
     pub struct Foo<'a, T>(&'a T);
 }
 
-// @has "foo/fn.foo.html"
-// @has - '//*[@class="rust item-decl"]/code' "pub fn foo<'a, T>(f: Foo<'a, T>) -> Foo<'a, usize>"
+//@ has "foo/fn.foo.html"
+//@ has - '//*[@class="rust item-decl"]/code' "pub fn foo<'a, T>(f: Foo<'a, T>) -> Foo<'a, usize>"
 pub fn foo<'a, T>(f: Alias<'a, T>) -> Alias<'a, usize> {
     Alias(&0)
 }
diff --git a/tests/rustdoc/inline_local/private-reexport-in-public-api-hidden-81141.rs b/tests/rustdoc/inline_local/private-reexport-in-public-api-hidden-81141.rs
index 7d6fadf26e2..62127daaec8 100644
--- a/tests/rustdoc/inline_local/private-reexport-in-public-api-hidden-81141.rs
+++ b/tests/rustdoc/inline_local/private-reexport-in-public-api-hidden-81141.rs
@@ -10,8 +10,8 @@ mod bar {
     pub struct Bar;
 }
 
-// @has 'foo/fn.bar.html'
-// @has - '//*[@class="rust item-decl"]/code' 'pub fn bar() -> Alias'
+//@ has 'foo/fn.bar.html'
+//@ has - '//*[@class="rust item-decl"]/code' 'pub fn bar() -> Alias'
 pub fn bar() -> Alias {
     Alias
 }
diff --git a/tests/rustdoc/inline_local/private-reexport-in-public-api-private-81141.rs b/tests/rustdoc/inline_local/private-reexport-in-public-api-private-81141.rs
index 6bf507838d5..adf41aa10cb 100644
--- a/tests/rustdoc/inline_local/private-reexport-in-public-api-private-81141.rs
+++ b/tests/rustdoc/inline_local/private-reexport-in-public-api-private-81141.rs
@@ -12,22 +12,22 @@ mod bar {
 }
 
 // It's a fully private re-export so it should not be displayed.
-// @has 'foo/fn.bar.html'
-// @has - '//*[@class="rust item-decl"]/code' 'pub fn bar() -> Bar'
+//@ has 'foo/fn.bar.html'
+//@ has - '//*[@class="rust item-decl"]/code' 'pub fn bar() -> Bar'
 pub fn bar() -> Alias {
     Alias
 }
 
 // It's public re-export inside a private module so it should be visible.
-// @has 'foo/fn.bar2.html'
-// @has - '//*[@class="rust item-decl"]/code' 'pub fn bar2() -> Inner'
+//@ has 'foo/fn.bar2.html'
+//@ has - '//*[@class="rust item-decl"]/code' 'pub fn bar2() -> Inner'
 pub fn bar2() -> crate::bar::Inner {
     Alias
 }
 
 // It's a non-public, so it doesn't appear in documentation so it should not be visible.
-// @has 'foo/fn.bar3.html'
-// @has - '//*[@class="rust item-decl"]/code' 'pub fn bar3() -> Bar'
+//@ has 'foo/fn.bar3.html'
+//@ has - '//*[@class="rust item-decl"]/code' 'pub fn bar3() -> Bar'
 pub fn bar3() -> CrateAlias {
     Alias
 }
diff --git a/tests/rustdoc/inline_local/reexported-macro-and-macro-export-sidebar-89852.rs b/tests/rustdoc/inline_local/reexported-macro-and-macro-export-sidebar-89852.rs
index cffe1289ce8..6cdfc71b13f 100644
--- a/tests/rustdoc/inline_local/reexported-macro-and-macro-export-sidebar-89852.rs
+++ b/tests/rustdoc/inline_local/reexported-macro-and-macro-export-sidebar-89852.rs
@@ -5,8 +5,8 @@
 #![no_core]
 #![feature(no_core)]
 
-// @matchesraw 'foo/sidebar-items.js' '"repro"'
-// @!matchesraw 'foo/sidebar-items.js' '"repro".*"repro"'
+//@ matchesraw 'foo/sidebar-items.js' '"repro"'
+//@ !matchesraw 'foo/sidebar-items.js' '"repro".*"repro"'
 
 #[macro_export]
 macro_rules! repro {
diff --git a/tests/rustdoc/inline_local/trait-vis.rs b/tests/rustdoc/inline_local/trait-vis.rs
index 19b69da1513..1e5929a9ccf 100644
--- a/tests/rustdoc/inline_local/trait-vis.rs
+++ b/tests/rustdoc/inline_local/trait-vis.rs
@@ -12,7 +12,7 @@ mod asdf {
     impl PrivateTrait for SomeStruct {}
 }
 
-// @has trait_vis/struct.SomeStruct.html
-// @has - '//h3[@class="code-header"]' 'impl ThisTrait for SomeStruct'
-// @!has - '//h3[@class="code-header"]' 'impl PrivateTrait for SomeStruct'
+//@ has trait_vis/struct.SomeStruct.html
+//@ has - '//h3[@class="code-header"]' 'impl ThisTrait for SomeStruct'
+//@ !has - '//h3[@class="code-header"]' 'impl PrivateTrait for SomeStruct'
 pub use asdf::SomeStruct;
diff --git a/tests/rustdoc/internal.rs b/tests/rustdoc/internal.rs
index 4663965f621..e0bccefda1d 100644
--- a/tests/rustdoc/internal.rs
+++ b/tests/rustdoc/internal.rs
@@ -2,16 +2,16 @@
 
 // Check that the unstable marker is not added for "rustc_private".
 
-// @!matches internal/index.html \
+//@ !matches internal/index.html \
 //      '//*[@class="desc docblock-short"]/span[@class="stab unstable"]' \
 //      ''
-// @!matches internal/index.html \
+//@ !matches internal/index.html \
 //      '//*[@class="desc docblock-short"]/span[@class="stab internal"]' \
 //      ''
-// @matches - '//*[@class="desc docblock-short"]' 'Docs'
+//@ matches - '//*[@class="desc docblock-short"]' 'Docs'
 
-// @!has internal/struct.S.html '//*[@class="stab unstable"]' ''
-// @!has internal/struct.S.html '//*[@class="stab internal"]' ''
+//@ !has internal/struct.S.html '//*[@class="stab unstable"]' ''
+//@ !has internal/struct.S.html '//*[@class="stab internal"]' ''
 /// Docs
 pub struct S;
 
diff --git a/tests/rustdoc/intra-doc-crate/self.rs b/tests/rustdoc/intra-doc-crate/self.rs
index 015611610ac..95b21a3303f 100644
--- a/tests/rustdoc/intra-doc-crate/self.rs
+++ b/tests/rustdoc/intra-doc-crate/self.rs
@@ -3,7 +3,7 @@
 
 extern crate cross_crate_self;
 
-// @has self/struct.S.html '//a[@href="struct.S.html#method.f"]' "Self::f"
-// @has self/struct.S.html '//a[@href="struct.S.html"]' "Self"
-// @has self/struct.S.html '//a[@href="../cross_crate_self/index.html"]' "crate"
+//@ has self/struct.S.html '//a[@href="struct.S.html#method.f"]' "Self::f"
+//@ has self/struct.S.html '//a[@href="struct.S.html"]' "Self"
+//@ has self/struct.S.html '//a[@href="../cross_crate_self/index.html"]' "crate"
 pub use cross_crate_self::S;
diff --git a/tests/rustdoc/intra-doc-link-method-trait-impl-72340.rs b/tests/rustdoc/intra-doc-link-method-trait-impl-72340.rs
index 880a308f9ab..0cf46bb3f95 100644
--- a/tests/rustdoc/intra-doc-link-method-trait-impl-72340.rs
+++ b/tests/rustdoc/intra-doc-link-method-trait-impl-72340.rs
@@ -12,7 +12,7 @@ impl Body {
 }
 
 impl Default for Body {
-    // @has foo/struct.Body.html '//a/@href' 'struct.Body.html#method.empty'
+    //@ has foo/struct.Body.html '//a/@href' 'struct.Body.html#method.empty'
 
     /// Returns [`Body::empty()`](Body::empty).
     fn default() -> Body {
diff --git a/tests/rustdoc/intra-doc/anchors.rs b/tests/rustdoc/intra-doc/anchors.rs
index 3d4c464960b..68f8c4fefd9 100644
--- a/tests/rustdoc/intra-doc/anchors.rs
+++ b/tests/rustdoc/intra-doc/anchors.rs
@@ -3,8 +3,8 @@
 /// # Anchor!
 pub struct Something;
 
-// @has anchors/struct.SomeOtherType.html
-// @has - '//a/@href' 'struct.Something.html#Anchor!'
+//@ has anchors/struct.SomeOtherType.html
+//@ has - '//a/@href' 'struct.Something.html#Anchor!'
 
 /// I want...
 ///
@@ -14,11 +14,11 @@ pub struct SomeOtherType;
 /// Primitives?
 ///
 /// [u32#hello]
-// @has anchors/fn.x.html
-// @has - '//a/@href' '{{channel}}/std/primitive.u32.html#hello'
+//@ has anchors/fn.x.html
+//@ has - '//a/@href' '{{channel}}/std/primitive.u32.html#hello'
 pub fn x() {}
 
 /// [prim@usize#x]
-// @has anchors/usize/index.html
-// @has - '//a/@href' '{{channel}}/std/primitive.usize.html#x'
+//@ has anchors/usize/index.html
+//@ has - '//a/@href' '{{channel}}/std/primitive.usize.html#x'
 pub mod usize {}
diff --git a/tests/rustdoc/intra-doc/assoc-reexport-super.rs b/tests/rustdoc/intra-doc/assoc-reexport-super.rs
index a7bc1c6a29f..2a55586925f 100644
--- a/tests/rustdoc/intra-doc/assoc-reexport-super.rs
+++ b/tests/rustdoc/intra-doc/assoc-reexport-super.rs
@@ -14,7 +14,7 @@ pub use generated::MyNewType;
 mod prelude {
     impl super::MyNewType {
         /// An alias for [`Self::FOO`].
-        // @has 'foo/struct.MyNewType.html' '//a[@href="struct.MyNewType.html#associatedconstant.FOO"]' 'Self::FOO'
+        //@ has 'foo/struct.MyNewType.html' '//a[@href="struct.MyNewType.html#associatedconstant.FOO"]' 'Self::FOO'
         pub const FOO2: Self = Self::FOO;
     }
 }
diff --git a/tests/rustdoc/intra-doc/associated-defaults.rs b/tests/rustdoc/intra-doc/associated-defaults.rs
index c7e66c826be..b5ba55dd30f 100644
--- a/tests/rustdoc/intra-doc/associated-defaults.rs
+++ b/tests/rustdoc/intra-doc/associated-defaults.rs
@@ -9,14 +9,14 @@ pub trait TraitWithDefault {
 }
 
 /// Link to [UsesDefaults::T] and [UsesDefaults::f]
-// @has 'associated_defaults/struct.UsesDefaults.html' '//a[@href="struct.UsesDefaults.html#associatedtype.T"]' 'UsesDefaults::T'
-// @has 'associated_defaults/struct.UsesDefaults.html' '//a[@href="struct.UsesDefaults.html#method.f"]' 'UsesDefaults::f'
+//@ has 'associated_defaults/struct.UsesDefaults.html' '//a[@href="struct.UsesDefaults.html#associatedtype.T"]' 'UsesDefaults::T'
+//@ has 'associated_defaults/struct.UsesDefaults.html' '//a[@href="struct.UsesDefaults.html#method.f"]' 'UsesDefaults::f'
 pub struct UsesDefaults;
 impl TraitWithDefault for UsesDefaults {}
 
 /// Link to [OverridesDefaults::T] and [OverridesDefaults::f]
-// @has 'associated_defaults/struct.OverridesDefaults.html' '//a[@href="struct.OverridesDefaults.html#associatedtype.T"]' 'OverridesDefaults::T'
-// @has 'associated_defaults/struct.OverridesDefaults.html' '//a[@href="struct.OverridesDefaults.html#method.f"]' 'OverridesDefaults::f'
+//@ has 'associated_defaults/struct.OverridesDefaults.html' '//a[@href="struct.OverridesDefaults.html#associatedtype.T"]' 'OverridesDefaults::T'
+//@ has 'associated_defaults/struct.OverridesDefaults.html' '//a[@href="struct.OverridesDefaults.html#method.f"]' 'OverridesDefaults::f'
 pub struct OverridesDefaults;
 impl TraitWithDefault for OverridesDefaults {
     type T = bool;
diff --git a/tests/rustdoc/intra-doc/associated-items.rs b/tests/rustdoc/intra-doc/associated-items.rs
index 0b958eb8eac..84cfd06111d 100644
--- a/tests/rustdoc/intra-doc/associated-items.rs
+++ b/tests/rustdoc/intra-doc/associated-items.rs
@@ -3,16 +3,16 @@
 /// [`std::collections::BTreeMap::into_iter`]
 /// [`String::from`] is ambiguous as to which `From` impl
 /// [Vec::into_iter()] uses a disambiguator
-// @has 'associated_items/fn.foo.html' '//a[@href="{{channel}}/alloc/collections/btree/map/struct.BTreeMap.html#method.into_iter"]' 'std::collections::BTreeMap::into_iter'
-// @has 'associated_items/fn.foo.html' '//a[@href="{{channel}}/alloc/string/struct.String.html#method.from"]' 'String::from'
-// @has 'associated_items/fn.foo.html' '//a[@href="{{channel}}/alloc/vec/struct.Vec.html#method.into_iter"]' 'Vec::into_iter'
+//@ has 'associated_items/fn.foo.html' '//a[@href="{{channel}}/alloc/collections/btree/map/struct.BTreeMap.html#method.into_iter"]' 'std::collections::BTreeMap::into_iter'
+//@ has 'associated_items/fn.foo.html' '//a[@href="{{channel}}/alloc/string/struct.String.html#method.from"]' 'String::from'
+//@ has 'associated_items/fn.foo.html' '//a[@href="{{channel}}/alloc/vec/struct.Vec.html#method.into_iter"]' 'Vec::into_iter'
 pub fn foo() {}
 
 /// Link to [MyStruct], [link from struct][MyStruct::method], [MyStruct::clone], [MyStruct::Input]
-// @has 'associated_items/struct.MyStruct.html' '//a[@href="struct.MyStruct.html"]' 'MyStruct'
-// @has 'associated_items/struct.MyStruct.html' '//a[@href="struct.MyStruct.html#method.method"]' 'link from struct'
-// @has 'associated_items/struct.MyStruct.html' '//a[@href="struct.MyStruct.html#method.clone"]' 'MyStruct::clone'
-// @has 'associated_items/struct.MyStruct.html' '//a[@href="struct.MyStruct.html#associatedtype.Input"]' 'MyStruct::Input'
+//@ has 'associated_items/struct.MyStruct.html' '//a[@href="struct.MyStruct.html"]' 'MyStruct'
+//@ has 'associated_items/struct.MyStruct.html' '//a[@href="struct.MyStruct.html#method.method"]' 'link from struct'
+//@ has 'associated_items/struct.MyStruct.html' '//a[@href="struct.MyStruct.html#method.clone"]' 'MyStruct::clone'
+//@ has 'associated_items/struct.MyStruct.html' '//a[@href="struct.MyStruct.html#associatedtype.Input"]' 'MyStruct::Input'
 pub struct MyStruct { foo: () }
 
 impl Clone for MyStruct {
@@ -30,7 +30,7 @@ impl T for MyStruct {
     type Input = usize;
 
     /// [link from method][MyStruct::method] on method
-    // @has 'associated_items/struct.MyStruct.html' '//a[@href="struct.MyStruct.html#method.method"]' 'link from method'
+    //@ has 'associated_items/struct.MyStruct.html' '//a[@href="struct.MyStruct.html#method.method"]' 'link from method'
     fn method(i: usize) {
     }
 }
@@ -57,7 +57,7 @@ impl T2 for S {
     fn ambiguous_method() {}
 }
 
-// @has associated_items/enum.MyEnum.html '//a/@href' 'enum.MyEnum.html#variant.MyVariant'
+//@ has associated_items/enum.MyEnum.html '//a/@href' 'enum.MyEnum.html#variant.MyVariant'
 /// Link to [MyEnumAlias::MyVariant]
 pub enum MyEnum {
     MyVariant,
diff --git a/tests/rustdoc/intra-doc/basic.rs b/tests/rustdoc/intra-doc/basic.rs
index c88a7887f11..9d0d1d51647 100644
--- a/tests/rustdoc/intra-doc/basic.rs
+++ b/tests/rustdoc/intra-doc/basic.rs
@@ -1,44 +1,44 @@
 #![allow(rustdoc::redundant_explicit_links)]
 
-// @has basic/index.html
-// @has - '//a/@href' 'struct.ThisType.html'
-// @has - '//a/@title' 'struct basic::ThisType'
-// @has - '//a/@href' 'struct.ThisType.html#method.this_method'
-// @has - '//a/@title' 'method basic::ThisType::this_method'
-// @has - '//a/@href' 'struct.ThisType.html#method.this_assoc_fn'
-// @has - '//a/@title' 'associated function basic::ThisType::this_assoc_fn'
-// @has - '//a/@href' 'enum.ThisEnum.html'
-// @has - '//a/@title' 'enum basic::ThisEnum'
-// @has - '//a/@href' 'enum.ThisEnum.html#variant.ThisVariant'
-// @has - '//a/@title' 'variant basic::ThisEnum::ThisVariant'
-// @has - '//a/@href' 'trait.ThisTrait.html'
-// @has - '//a/@title' 'trait basic::ThisTrait'
-// @has - '//a/@href' 'trait.ThisTrait.html#tymethod.this_associated_method'
-// @has - '//a/@title' 'method basic::ThisTrait::this_associated_method'
-// @has - '//a/@href' 'trait.ThisTrait.html#tymethod.this_associated_fn'
-// @has - '//a/@title' 'associated function basic::ThisTrait::this_associated_fn'
-// @has - '//a/@href' 'trait.ThisTrait.html#associatedtype.ThisAssociatedType'
-// @has - '//a/@title' 'associated type basic::ThisTrait::ThisAssociatedType'
-// @has - '//a/@href' 'trait.ThisTrait.html#associatedconstant.THIS_ASSOCIATED_CONST'
-// @has - '//a/@title' 'associated constant basic::ThisTrait::THIS_ASSOCIATED_CONST'
-// @has - '//a/@href' 'trait.ThisTrait.html'
-// @has - '//a/@title' 'trait basic::ThisTrait'
-// @has - '//a/@href' 'type.ThisAlias.html'
-// @has - '//a/@title' 'type basic::ThisAlias'
-// @has - '//a/@href' 'union.ThisUnion.html'
-// @has - '//a/@title' 'union basic::ThisUnion'
-// @has - '//a/@href' 'fn.this_function.html'
-// @has - '//a/@title' 'fn basic::this_function'
-// @has - '//a/@href' 'constant.THIS_CONST.html'
-// @has - '//a/@title' 'constant basic::THIS_CONST'
-// @has - '//a/@href' 'static.THIS_STATIC.html'
-// @has - '//a/@title' 'static basic::THIS_STATIC'
-// @has - '//a/@href' 'macro.this_macro.html'
-// @has - '//a/@title' 'macro basic::this_macro'
-// @has - '//a/@href' 'trait.SoAmbiguous.html'
-// @has - '//a/@title' 'trait basic::SoAmbiguous'
-// @has - '//a/@href' 'fn.SoAmbiguous.html'
-// @has - '//a/@title' 'fn basic::SoAmbiguous'
+//@ has basic/index.html
+//@ has - '//a/@href' 'struct.ThisType.html'
+//@ has - '//a/@title' 'struct basic::ThisType'
+//@ has - '//a/@href' 'struct.ThisType.html#method.this_method'
+//@ has - '//a/@title' 'method basic::ThisType::this_method'
+//@ has - '//a/@href' 'struct.ThisType.html#method.this_assoc_fn'
+//@ has - '//a/@title' 'associated function basic::ThisType::this_assoc_fn'
+//@ has - '//a/@href' 'enum.ThisEnum.html'
+//@ has - '//a/@title' 'enum basic::ThisEnum'
+//@ has - '//a/@href' 'enum.ThisEnum.html#variant.ThisVariant'
+//@ has - '//a/@title' 'variant basic::ThisEnum::ThisVariant'
+//@ has - '//a/@href' 'trait.ThisTrait.html'
+//@ has - '//a/@title' 'trait basic::ThisTrait'
+//@ has - '//a/@href' 'trait.ThisTrait.html#tymethod.this_associated_method'
+//@ has - '//a/@title' 'method basic::ThisTrait::this_associated_method'
+//@ has - '//a/@href' 'trait.ThisTrait.html#tymethod.this_associated_fn'
+//@ has - '//a/@title' 'associated function basic::ThisTrait::this_associated_fn'
+//@ has - '//a/@href' 'trait.ThisTrait.html#associatedtype.ThisAssociatedType'
+//@ has - '//a/@title' 'associated type basic::ThisTrait::ThisAssociatedType'
+//@ has - '//a/@href' 'trait.ThisTrait.html#associatedconstant.THIS_ASSOCIATED_CONST'
+//@ has - '//a/@title' 'associated constant basic::ThisTrait::THIS_ASSOCIATED_CONST'
+//@ has - '//a/@href' 'trait.ThisTrait.html'
+//@ has - '//a/@title' 'trait basic::ThisTrait'
+//@ has - '//a/@href' 'type.ThisAlias.html'
+//@ has - '//a/@title' 'type basic::ThisAlias'
+//@ has - '//a/@href' 'union.ThisUnion.html'
+//@ has - '//a/@title' 'union basic::ThisUnion'
+//@ has - '//a/@href' 'fn.this_function.html'
+//@ has - '//a/@title' 'fn basic::this_function'
+//@ has - '//a/@href' 'constant.THIS_CONST.html'
+//@ has - '//a/@title' 'constant basic::THIS_CONST'
+//@ has - '//a/@href' 'static.THIS_STATIC.html'
+//@ has - '//a/@title' 'static basic::THIS_STATIC'
+//@ has - '//a/@href' 'macro.this_macro.html'
+//@ has - '//a/@title' 'macro basic::this_macro'
+//@ has - '//a/@href' 'trait.SoAmbiguous.html'
+//@ has - '//a/@title' 'trait basic::SoAmbiguous'
+//@ has - '//a/@href' 'fn.SoAmbiguous.html'
+//@ has - '//a/@title' 'fn basic::SoAmbiguous'
 //! In this crate we would like to link to:
 //!
 //! * [`ThisType`](ThisType)
@@ -71,7 +71,7 @@ macro_rules! this_macro {
     () => {};
 }
 
-// @has basic/struct.ThisType.html '//a/@href' 'macro.this_macro.html'
+//@ has basic/struct.ThisType.html '//a/@href' 'macro.this_macro.html'
 /// another link to [`this_macro!()`]
 pub struct ThisType;
 
@@ -99,10 +99,10 @@ pub trait SoAmbiguous {}
 pub fn SoAmbiguous() {}
 
 
-// @has basic/struct.SomeOtherType.html '//a/@href' 'struct.ThisType.html'
-// @has - '//a/@href' 'struct.ThisType.html#method.this_method'
-// @has - '//a/@href' 'enum.ThisEnum.html'
-// @has - '//a/@href' 'enum.ThisEnum.html#variant.ThisVariant'
+//@ has basic/struct.SomeOtherType.html '//a/@href' 'struct.ThisType.html'
+//@ has - '//a/@href' 'struct.ThisType.html#method.this_method'
+//@ has - '//a/@href' 'enum.ThisEnum.html'
+//@ has - '//a/@href' 'enum.ThisEnum.html#variant.ThisVariant'
 /// Shortcut links for:
 /// * [`ThisType`]
 /// * [`ThisType::this_method`]
diff --git a/tests/rustdoc/intra-doc/builtin-macros.rs b/tests/rustdoc/intra-doc/builtin-macros.rs
index bbdbe246bbc..12fc7c600ff 100644
--- a/tests/rustdoc/intra-doc/builtin-macros.rs
+++ b/tests/rustdoc/intra-doc/builtin-macros.rs
@@ -1,3 +1,3 @@
-// @has builtin_macros/index.html
-// @has - '//a/@href' '{{channel}}/core/macro.cfg.html'
+//@ has builtin_macros/index.html
+//@ has - '//a/@href' '{{channel}}/core/macro.cfg.html'
 //! [cfg]
diff --git a/tests/rustdoc/intra-doc/crate-relative-assoc.rs b/tests/rustdoc/intra-doc/crate-relative-assoc.rs
index d4a0ecc35ae..1625b98dea6 100644
--- a/tests/rustdoc/intra-doc/crate-relative-assoc.rs
+++ b/tests/rustdoc/intra-doc/crate-relative-assoc.rs
@@ -5,7 +5,7 @@ pub mod io {
 }
 
 pub mod bufreader {
-    // @has crate_relative_assoc/bufreader/index.html '//a/@href' 'struct.TcpStream.html#method.read'
+    //@ has crate_relative_assoc/bufreader/index.html '//a/@href' 'struct.TcpStream.html#method.read'
     //! [`crate::TcpStream::read`]
     use crate::io::Read;
 }
diff --git a/tests/rustdoc/intra-doc/crate-relative.rs b/tests/rustdoc/intra-doc/crate-relative.rs
index bacbcabfc60..b4cae5e5585 100644
--- a/tests/rustdoc/intra-doc/crate-relative.rs
+++ b/tests/rustdoc/intra-doc/crate-relative.rs
@@ -6,8 +6,8 @@ impl<'a> Test<'a> {
     pub fn do_test(&self) {}
 }
 
-// @has crate_relative/demo/index.html
-// @has - '//a/@href' '../struct.Test.html#method.do_test'
+//@ has crate_relative/demo/index.html
+//@ has - '//a/@href' '../struct.Test.html#method.do_test'
 pub mod demo {
     //! [`crate::Test::do_test`]
 }
diff --git a/tests/rustdoc/intra-doc/cross-crate/additional_doc.rs b/tests/rustdoc/intra-doc/cross-crate/additional_doc.rs
index dc928c64f6d..02e4ada14a3 100644
--- a/tests/rustdoc/intra-doc/cross-crate/additional_doc.rs
+++ b/tests/rustdoc/intra-doc/cross-crate/additional_doc.rs
@@ -4,7 +4,7 @@
 
 extern crate my_rand;
 
-// @has 'additional_doc/trait.Rng.html' '//a[@href="trait.Rng.html"]' 'Rng'
-// @has 'additional_doc/trait.Rng.html' '//a[@href="../my_rand/trait.RngCore.html"]' 'RngCore'
+//@ has 'additional_doc/trait.Rng.html' '//a[@href="trait.Rng.html"]' 'Rng'
+//@ has 'additional_doc/trait.Rng.html' '//a[@href="../my_rand/trait.RngCore.html"]' 'RngCore'
 /// This is an [`Rng`].
 pub use my_rand::Rng;
diff --git a/tests/rustdoc/intra-doc/cross-crate/basic.rs b/tests/rustdoc/intra-doc/cross-crate/basic.rs
index f17c638b578..45f7a8a2b6b 100644
--- a/tests/rustdoc/intra-doc/cross-crate/basic.rs
+++ b/tests/rustdoc/intra-doc/cross-crate/basic.rs
@@ -5,5 +5,5 @@
 // from https://github.com/rust-lang/rust/issues/65983
 extern crate a;
 
-// @has 'basic/struct.Bar.html' '//a[@href="../a/struct.Foo.html"]' 'Foo'
+//@ has 'basic/struct.Bar.html' '//a[@href="../a/struct.Foo.html"]' 'Foo'
 pub use a::Bar;
diff --git a/tests/rustdoc/intra-doc/cross-crate/crate.rs b/tests/rustdoc/intra-doc/cross-crate/crate.rs
index 34fff1f1f26..511812f2bdb 100644
--- a/tests/rustdoc/intra-doc/cross-crate/crate.rs
+++ b/tests/rustdoc/intra-doc/cross-crate/crate.rs
@@ -2,5 +2,5 @@
 //@ build-aux-docs
 #![crate_name = "outer"]
 extern crate inner;
-// @has outer/fn.f.html '//a[@href="../inner/fn.g.html"]' "crate::g"
+//@ has outer/fn.f.html '//a[@href="../inner/fn.g.html"]' "crate::g"
 pub use inner::f;
diff --git a/tests/rustdoc/intra-doc/cross-crate/hidden.rs b/tests/rustdoc/intra-doc/cross-crate/hidden.rs
index 026c0fb4fdb..490f1d23ca0 100644
--- a/tests/rustdoc/intra-doc/cross-crate/hidden.rs
+++ b/tests/rustdoc/intra-doc/cross-crate/hidden.rs
@@ -6,5 +6,5 @@
 
 extern crate hidden_dep;
 
-// @has 'hidden/struct.Ready.html' '//a/@href' 'fn.ready.html'
+//@ has 'hidden/struct.Ready.html' '//a/@href' 'fn.ready.html'
 pub use hidden_dep::future::{ready, Ready};
diff --git a/tests/rustdoc/intra-doc/cross-crate/macro.rs b/tests/rustdoc/intra-doc/cross-crate/macro.rs
index cd8f1c3969f..19ca5f6f243 100644
--- a/tests/rustdoc/intra-doc/cross-crate/macro.rs
+++ b/tests/rustdoc/intra-doc/cross-crate/macro.rs
@@ -5,7 +5,7 @@
 extern crate macro_inner;
 extern crate proc_macro_inner;
 
-// @has 'macro/macro.my_macro.html' '//a[@href="../macro_inner/struct.Foo.html"]' 'Foo'
+//@ has 'macro/macro.my_macro.html' '//a[@href="../macro_inner/struct.Foo.html"]' 'Foo'
 pub use macro_inner::my_macro;
-// @has 'macro/derive.DeriveA.html' '//a[@href="../proc_macro_inner/derive.OtherDerive.html"]' 'OtherDerive'
+//@ has 'macro/derive.DeriveA.html' '//a[@href="../proc_macro_inner/derive.OtherDerive.html"]' 'OtherDerive'
 pub use proc_macro_inner::DeriveA;
diff --git a/tests/rustdoc/intra-doc/cross-crate/module.rs b/tests/rustdoc/intra-doc/cross-crate/module.rs
index 2323cc94f8a..0f9fa4e2276 100644
--- a/tests/rustdoc/intra-doc/cross-crate/module.rs
+++ b/tests/rustdoc/intra-doc/cross-crate/module.rs
@@ -3,6 +3,6 @@
 //@ build-aux-docs
 #![deny(rustdoc::broken_intra_doc_links)]
 extern crate module_inner;
-// @has 'module/bar/index.html' '//a[@href="../../module_inner/trait.SomeTrait.html"]' 'SomeTrait'
-// @has 'module/bar/index.html' '//a[@href="../../module_inner/struct.SomeType.html"]' 'SomeType'
+//@ has 'module/bar/index.html' '//a[@href="../../module_inner/trait.SomeTrait.html"]' 'SomeTrait'
+//@ has 'module/bar/index.html' '//a[@href="../../module_inner/struct.SomeType.html"]' 'SomeType'
 pub use module_inner::bar;
diff --git a/tests/rustdoc/intra-doc/cross-crate/submodule-inner.rs b/tests/rustdoc/intra-doc/cross-crate/submodule-inner.rs
index 08996826561..cc139e3daaf 100644
--- a/tests/rustdoc/intra-doc/cross-crate/submodule-inner.rs
+++ b/tests/rustdoc/intra-doc/cross-crate/submodule-inner.rs
@@ -4,5 +4,5 @@
 
 extern crate a;
 
-// @has 'submodule_inner/struct.Foo.html' '//a[@href="../a/bar/struct.Bar.html"]' 'Bar'
+//@ has 'submodule_inner/struct.Foo.html' '//a[@href="../a/bar/struct.Bar.html"]' 'Bar'
 pub use a::foo::Foo;
diff --git a/tests/rustdoc/intra-doc/cross-crate/submodule-outer.rs b/tests/rustdoc/intra-doc/cross-crate/submodule-outer.rs
index 29b98036a96..93121a6938d 100644
--- a/tests/rustdoc/intra-doc/cross-crate/submodule-outer.rs
+++ b/tests/rustdoc/intra-doc/cross-crate/submodule-outer.rs
@@ -11,6 +11,6 @@ pub mod bar {
 
 // NOTE: we re-exported both `Foo` and `Bar` here,
 // NOTE: so they are inlined and therefore we link to the current module.
-// @has 'submodule_outer/trait.Foo.html' '//a[@href="bar/trait.Bar.html"]' 'Bar'
-// @has 'submodule_outer/trait.Foo.html' '//a[@href="trait.Baz.html"]' 'Baz'
+//@ has 'submodule_outer/trait.Foo.html' '//a[@href="bar/trait.Bar.html"]' 'Bar'
+//@ has 'submodule_outer/trait.Foo.html' '//a[@href="trait.Baz.html"]' 'Baz'
 pub use ::bar_::{Foo, Baz};
diff --git a/tests/rustdoc/intra-doc/cross-crate/traits.rs b/tests/rustdoc/intra-doc/cross-crate/traits.rs
index 4b1625e5a51..70382062a61 100644
--- a/tests/rustdoc/intra-doc/cross-crate/traits.rs
+++ b/tests/rustdoc/intra-doc/cross-crate/traits.rs
@@ -7,8 +7,8 @@ use inner::SomeTrait;
 
 pub struct SomeStruct;
 
- // @has 'traits/struct.SomeStruct.html' '//a[@href="../inner/trait.SomeTrait.html"]' 'SomeTrait'
+ //@ has 'traits/struct.SomeStruct.html' '//a[@href="../inner/trait.SomeTrait.html"]' 'SomeTrait'
 impl SomeTrait for SomeStruct {
-    // @has 'traits/struct.SomeStruct.html' '//a[@href="../inner/trait.SomeTrait.html"]' 'a trait'
+    //@ has 'traits/struct.SomeStruct.html' '//a[@href="../inner/trait.SomeTrait.html"]' 'a trait'
     fn foo() {}
 }
diff --git a/tests/rustdoc/intra-doc/disambiguators-removed.rs b/tests/rustdoc/intra-doc/disambiguators-removed.rs
index 331a314130a..613156222ed 100644
--- a/tests/rustdoc/intra-doc/disambiguators-removed.rs
+++ b/tests/rustdoc/intra-doc/disambiguators-removed.rs
@@ -1,50 +1,50 @@
 #![deny(rustdoc::broken_intra_doc_links)]
 // first try backticks
 /// Trait: [`trait@Name`], fn: [`fn@Name`], [`Name`][`macro@Name`]
-// @has disambiguators_removed/struct.AtDisambiguator.html
-// @has - '//a[@href="trait.Name.html"][code]' "Name"
-// @has - '//a[@href="fn.Name.html"][code]' "Name"
-// @has - '//a[@href="macro.Name.html"][code]' "Name"
+//@ has disambiguators_removed/struct.AtDisambiguator.html
+//@ has - '//a[@href="trait.Name.html"][code]' "Name"
+//@ has - '//a[@href="fn.Name.html"][code]' "Name"
+//@ has - '//a[@href="macro.Name.html"][code]' "Name"
 pub struct AtDisambiguator;
 
 /// fn: [`Name()`], macro: [`Name!`]
-// @has disambiguators_removed/struct.SymbolDisambiguator.html
-// @has - '//a[@href="fn.Name.html"][code]' "Name()"
-// @has - '//a[@href="macro.Name.html"][code]' "Name!"
+//@ has disambiguators_removed/struct.SymbolDisambiguator.html
+//@ has - '//a[@href="fn.Name.html"][code]' "Name()"
+//@ has - '//a[@href="macro.Name.html"][code]' "Name!"
 pub struct SymbolDisambiguator;
 
 // Now make sure that backticks aren't added if they weren't already there
 /// [fn@Name]
-// @has disambiguators_removed/trait.Name.html
-// @has - '//a[@href="fn.Name.html"]' "Name"
-// @!has - '//a[@href="fn.Name.html"][code]' "Name"
+//@ has disambiguators_removed/trait.Name.html
+//@ has - '//a[@href="fn.Name.html"]' "Name"
+//@ !has - '//a[@href="fn.Name.html"][code]' "Name"
 
 // FIXME: this will turn !() into ! alone
 /// [Name!()]
-// @has - '//a[@href="macro.Name.html"]' "Name!"
+//@ has - '//a[@href="macro.Name.html"]' "Name!"
 pub trait Name {}
 
 #[allow(non_snake_case)]
 
 // Try collapsed reference links
 /// [macro@Name][]
-// @has disambiguators_removed/fn.Name.html
-// @has - '//a[@href="macro.Name.html"]' "Name"
+//@ has disambiguators_removed/fn.Name.html
+//@ has - '//a[@href="macro.Name.html"]' "Name"
 
 // Try links that have the same text as a generated URL
 /// Weird URL aligned [macro.Name.html][trait@Name]
-// @has - '//a[@href="trait.Name.html"]' "macro.Name.html"
+//@ has - '//a[@href="trait.Name.html"]' "macro.Name.html"
 pub fn Name() {}
 
 #[macro_export]
 // Rustdoc doesn't currently handle links that have weird interspersing of inline code blocks.
 /// [fn@Na`m`e]
-// @has disambiguators_removed/macro.Name.html
-// @has - '//a[@href="fn.Name.html"]' "fn@Name"
+//@ has disambiguators_removed/macro.Name.html
+//@ has - '//a[@href="fn.Name.html"]' "fn@Name"
 
 // It also doesn't handle any case where the code block isn't the whole link text:
 /// [trait@`Name`]
-// @has - '//a[@href="trait.Name.html"]' "trait@Name"
+//@ has - '//a[@href="trait.Name.html"]' "trait@Name"
 macro_rules! Name {
     () => ()
 }
diff --git a/tests/rustdoc/intra-doc/email-address.rs b/tests/rustdoc/intra-doc/email-address.rs
index 24161c3bb48..f689139357e 100644
--- a/tests/rustdoc/intra-doc/email-address.rs
+++ b/tests/rustdoc/intra-doc/email-address.rs
@@ -4,7 +4,7 @@
 //! Email me at <hello-world@example.com>.
 //! Email me at <hello@localhost>.
 //! Email me at <prim@i32>.
-// @has email_address/index.html '//a[@href="mailto:hello@example.com"]' 'hello@example.com'
-// @has email_address/index.html '//a[@href="mailto:hello-world@example.com"]' 'hello-world@example.com'
-// @has email_address/index.html '//a[@href="mailto:hello@localhost"]' 'hello@localhost'
-// @has email_address/index.html '//a[@href="mailto:prim@i32"]' 'prim@i32'
+//@ has email_address/index.html '//a[@href="mailto:hello@example.com"]' 'hello@example.com'
+//@ has email_address/index.html '//a[@href="mailto:hello-world@example.com"]' 'hello-world@example.com'
+//@ has email_address/index.html '//a[@href="mailto:hello@localhost"]' 'hello@localhost'
+//@ has email_address/index.html '//a[@href="mailto:prim@i32"]' 'prim@i32'
diff --git a/tests/rustdoc/intra-doc/enum-struct-field.rs b/tests/rustdoc/intra-doc/enum-struct-field.rs
index 2270a1fafa1..71ba53b877f 100644
--- a/tests/rustdoc/intra-doc/enum-struct-field.rs
+++ b/tests/rustdoc/intra-doc/enum-struct-field.rs
@@ -11,4 +11,4 @@ pub enum Foo {
 /// I want [Foo::X::y].
 pub fn foo() {}
 
-// @has foo/fn.foo.html '//a/@href' 'enum.Foo.html#variant.X.field.y'
+//@ has foo/fn.foo.html '//a/@href' 'enum.Foo.html#variant.X.field.y'
diff --git a/tests/rustdoc/intra-doc/extern-crate-only-used-in-link.rs b/tests/rustdoc/intra-doc/extern-crate-only-used-in-link.rs
index cbe5bf912a5..7cec30c8b74 100644
--- a/tests/rustdoc/intra-doc/extern-crate-only-used-in-link.rs
+++ b/tests/rustdoc/intra-doc/extern-crate-only-used-in-link.rs
@@ -8,12 +8,12 @@
 //@ build-aux-docs
 //@ compile-flags:-Z unstable-options --edition 2018
 
-// @has extern_crate_only_used_in_link/index.html
-// @has - '//a[@href="../issue_66159_1/struct.Something.html"]' 'issue_66159_1::Something'
+//@ has extern_crate_only_used_in_link/index.html
+//@ has - '//a[@href="../issue_66159_1/struct.Something.html"]' 'issue_66159_1::Something'
 //! [issue_66159_1::Something]
 
-// @has - '//a[@href="../empty/index.html"]' 'empty'
+//@ has - '//a[@href="../empty/index.html"]' 'empty'
 //! [`empty`]
 
-// @has - '//a[@href="../empty2/index.html"]' 'empty2'
+//@ has - '//a[@href="../empty2/index.html"]' 'empty2'
 //! [`empty2<x>`]
diff --git a/tests/rustdoc/intra-doc/extern-type.rs b/tests/rustdoc/intra-doc/extern-type.rs
index 5440f582dff..198ac8e43e0 100644
--- a/tests/rustdoc/intra-doc/extern-type.rs
+++ b/tests/rustdoc/intra-doc/extern-type.rs
@@ -24,12 +24,12 @@ impl G<usize> for ExternType {
     fn g(&self, n: usize) {}
 }
 
-// @has 'extern_type/foreigntype.ExternType.html'
-// @hasraw 'extern_type/fn.links_to_extern_type.html' \
+//@ has 'extern_type/foreigntype.ExternType.html'
+//@ hasraw 'extern_type/fn.links_to_extern_type.html' \
 // 'href="foreigntype.ExternType.html#method.f"'
-// @hasraw 'extern_type/fn.links_to_extern_type.html' \
+//@ hasraw 'extern_type/fn.links_to_extern_type.html' \
 // 'href="foreigntype.ExternType.html#method.test"'
-// @hasraw 'extern_type/fn.links_to_extern_type.html' \
+//@ hasraw 'extern_type/fn.links_to_extern_type.html' \
 // 'href="foreigntype.ExternType.html#method.g"'
 /// See also [ExternType::f]
 /// See also [ExternType::test]
diff --git a/tests/rustdoc/intra-doc/field.rs b/tests/rustdoc/intra-doc/field.rs
index 00114348924..ba6b320e560 100644
--- a/tests/rustdoc/intra-doc/field.rs
+++ b/tests/rustdoc/intra-doc/field.rs
@@ -1,4 +1,4 @@
-// @has field/index.html '//a[@href="{{channel}}/core/ops/range/struct.Range.html#structfield.start"]' 'start'
-// @has field/index.html '//a[@href="{{channel}}/std/io/error/enum.ErrorKind.html#variant.NotFound"]' 'not_found'
+//@ has field/index.html '//a[@href="{{channel}}/core/ops/range/struct.Range.html#structfield.start"]' 'start'
+//@ has field/index.html '//a[@href="{{channel}}/std/io/error/enum.ErrorKind.html#variant.NotFound"]' 'not_found'
 //! [start][std::ops::Range::start]
 //! [not_found][std::io::ErrorKind::NotFound]
diff --git a/tests/rustdoc/intra-doc/generic-params.rs b/tests/rustdoc/intra-doc/generic-params.rs
index 359f775f97f..64e13c2e3ca 100644
--- a/tests/rustdoc/intra-doc/generic-params.rs
+++ b/tests/rustdoc/intra-doc/generic-params.rs
@@ -6,40 +6,40 @@
 //! Here's a link to [`Vec<T>`] and one to [`Box<Vec<Option<T>>>`].
 //! Here's a link to [`Iterator<Box<T>>::Item`].
 //!
-// @has foo/index.html '//a[@href="{{channel}}/alloc/vec/struct.Vec.html"]' 'Vec<T>'
-// @has foo/index.html '//a[@href="{{channel}}/alloc/boxed/struct.Box.html"]' 'Box<Vec<Option<T>>>'
-// @has foo/index.html '//a[@href="{{channel}}/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item"]' 'Iterator<Box<T>>::Item'
+//@ has foo/index.html '//a[@href="{{channel}}/alloc/vec/struct.Vec.html"]' 'Vec<T>'
+//@ has foo/index.html '//a[@href="{{channel}}/alloc/boxed/struct.Box.html"]' 'Box<Vec<Option<T>>>'
+//@ has foo/index.html '//a[@href="{{channel}}/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item"]' 'Iterator<Box<T>>::Item'
 
 //! And what about a link to [just `Option`](Option) and, [with the generic, `Option<T>`](Option<T>)?
 //!
-// @has foo/index.html '//a[@href="{{channel}}/core/option/enum.Option.html"]' 'just Option'
-// @has foo/index.html '//a[@href="{{channel}}/core/option/enum.Option.html"]' 'with the generic, Option<T>'
+//@ has foo/index.html '//a[@href="{{channel}}/core/option/enum.Option.html"]' 'just Option'
+//@ has foo/index.html '//a[@href="{{channel}}/core/option/enum.Option.html"]' 'with the generic, Option<T>'
 
 //! We should also try linking to [`Result<T, E>`]; it has *two* generics!
 //! And [`Result<T, !>`] and [`Result<!, E>`].
 //!
-// @has foo/index.html '//a[@href="{{channel}}/core/result/enum.Result.html"]' 'Result<T, E>'
-// @has foo/index.html '//a[@href="{{channel}}/core/result/enum.Result.html"]' 'Result<T, !>'
-// @has foo/index.html '//a[@href="{{channel}}/core/result/enum.Result.html"]' 'Result<!, E>'
+//@ has foo/index.html '//a[@href="{{channel}}/core/result/enum.Result.html"]' 'Result<T, E>'
+//@ has foo/index.html '//a[@href="{{channel}}/core/result/enum.Result.html"]' 'Result<T, !>'
+//@ has foo/index.html '//a[@href="{{channel}}/core/result/enum.Result.html"]' 'Result<!, E>'
 
 //! Now let's test a trickier case: [`Vec::<T>::new`], or you could write it
 //! [with parentheses as `Vec::<T>::new()`][Vec::<T>::new()].
 //! And what about something even harder? That would be [`Vec::<Box<T>>::new()`].
 //!
-// @has foo/index.html '//a[@href="{{channel}}/alloc/vec/struct.Vec.html#method.new"]' 'Vec::<T>::new'
-// @has foo/index.html '//a[@href="{{channel}}/alloc/vec/struct.Vec.html#method.new"]' 'with parentheses as Vec::<T>::new()'
-// @has foo/index.html '//a[@href="{{channel}}/alloc/vec/struct.Vec.html#method.new"]' 'Vec::<Box<T>>::new()'
+//@ has foo/index.html '//a[@href="{{channel}}/alloc/vec/struct.Vec.html#method.new"]' 'Vec::<T>::new'
+//@ has foo/index.html '//a[@href="{{channel}}/alloc/vec/struct.Vec.html#method.new"]' 'with parentheses as Vec::<T>::new()'
+//@ has foo/index.html '//a[@href="{{channel}}/alloc/vec/struct.Vec.html#method.new"]' 'Vec::<Box<T>>::new()'
 
 //! This is also pretty tricky: [`TypeId::of::<String>()`].
 //! And this too: [`Vec::<std::error::Error>::len`].
 //!
-// @has foo/index.html '//a[@href="{{channel}}/core/any/struct.TypeId.html#method.of"]' 'TypeId::of::<String>()'
-// @has foo/index.html '//a[@href="{{channel}}/alloc/vec/struct.Vec.html#method.len"]' 'Vec::<std::error::Error>::len'
+//@ has foo/index.html '//a[@href="{{channel}}/core/any/struct.TypeId.html#method.of"]' 'TypeId::of::<String>()'
+//@ has foo/index.html '//a[@href="{{channel}}/alloc/vec/struct.Vec.html#method.len"]' 'Vec::<std::error::Error>::len'
 
 //! We unofficially and implicitly support things that aren't valid in the actual Rust syntax, like
 //! [`Box::<T>new()`]. We may not support them in the future!
 //!
-// @has foo/index.html '//a[@href="{{channel}}/alloc/boxed/struct.Box.html#method.new"]' 'Box::<T>new()'
+//@ has foo/index.html '//a[@href="{{channel}}/alloc/boxed/struct.Box.html#method.new"]' 'Box::<T>new()'
 
 //! These will be resolved as regular links:
 //! - [`this is <invalid syntax> first`](https://www.rust-lang.org)
@@ -53,11 +53,11 @@
 //! [rlo]: https://www.rust-lang.org
 //! [c > d]: https://www.rust-lang.org
 //!
-// @has foo/index.html '//a[@href="https://www.rust-lang.org"]' 'this is <invalid syntax> first'
-// @has foo/index.html '//a[@href="https://www.rust-lang.org"]' 'this is <invalid syntax> twice'
-// @has foo/index.html '//a[@href="https://www.rust-lang.org"]' '<invalid syntax> thrice'
-// @has foo/index.html '//a[@href="https://www.rust-lang.org"]' '<invalid syntax> four times'
-// @has foo/index.html '//a[@href="https://www.rust-lang.org"]' 'a < b'
-// @has foo/index.html '//a[@href="https://www.rust-lang.org"]' 'c > d'
+//@ has foo/index.html '//a[@href="https://www.rust-lang.org"]' 'this is <invalid syntax> first'
+//@ has foo/index.html '//a[@href="https://www.rust-lang.org"]' 'this is <invalid syntax> twice'
+//@ has foo/index.html '//a[@href="https://www.rust-lang.org"]' '<invalid syntax> thrice'
+//@ has foo/index.html '//a[@href="https://www.rust-lang.org"]' '<invalid syntax> four times'
+//@ has foo/index.html '//a[@href="https://www.rust-lang.org"]' 'a < b'
+//@ has foo/index.html '//a[@href="https://www.rust-lang.org"]' 'c > d'
 
 use std::any::TypeId;
diff --git a/tests/rustdoc/intra-doc/generic-trait-impl.rs b/tests/rustdoc/intra-doc/generic-trait-impl.rs
index ba8595abfa9..314b6321cbb 100644
--- a/tests/rustdoc/intra-doc/generic-trait-impl.rs
+++ b/tests/rustdoc/intra-doc/generic-trait-impl.rs
@@ -15,6 +15,6 @@ impl<T, U> Bar<T> for Foo<U> {
     fn bar(&self) {}
 }
 
-// @has generic_trait_impl/fn.main.html '//a[@href="struct.Foo.html#method.bar"]' 'Foo::bar'
+//@ has generic_trait_impl/fn.main.html '//a[@href="struct.Foo.html#method.bar"]' 'Foo::bar'
 /// link to [`Foo::bar`]
 pub fn main() {}
diff --git a/tests/rustdoc/intra-doc/inherent-associated-types.rs b/tests/rustdoc/intra-doc/inherent-associated-types.rs
index 2b28d2ae60b..b7eedee2c17 100644
--- a/tests/rustdoc/intra-doc/inherent-associated-types.rs
+++ b/tests/rustdoc/intra-doc/inherent-associated-types.rs
@@ -3,9 +3,9 @@
 #![allow(incomplete_features)]
 #![deny(rustdoc::broken_intra_doc_links)]
 
-// @has inherent_associated_types/index.html
+//@ has inherent_associated_types/index.html
 
-// @has - '//a/@href' 'enum.Simple.html#associatedtype.Type'
+//@ has - '//a/@href' 'enum.Simple.html#associatedtype.Type'
 //! [`Simple::Type`]
 
 pub enum Simple {}
@@ -16,7 +16,7 @@ impl Simple {
 
 ////////////////////////////////////////
 
-// @has 'inherent_associated_types/type.Test0.html' '//a/@href' \
+//@ has 'inherent_associated_types/type.Test0.html' '//a/@href' \
 //          'struct.Parametrized.html#associatedtype.Proj'
 /// [`Parametrized<bool>::Proj`]
 pub type Test0 = ();
@@ -28,9 +28,9 @@ pub type Test0 = ();
 // Further, at some point we should reject the intra-doc link `Parametrized::Proj`.
 // It currently links to `Parametrized<bool>::Proj`.
 
-// @has 'inherent_associated_types/type.Test1.html'
-// @has - '//a/@href' 'struct.Parametrized.html#associatedtype.Proj'
-// @!has - '//a/@href' 'struct.Parametrized.html#associatedtype.Proj-1'
+//@ has 'inherent_associated_types/type.Test1.html'
+//@ has - '//a/@href' 'struct.Parametrized.html#associatedtype.Proj'
+//@ !has - '//a/@href' 'struct.Parametrized.html#associatedtype.Proj-1'
 /// [`Parametrized<i32>::Proj`]
 pub type Test1 = ();
 
diff --git a/tests/rustdoc/intra-doc/issue-108459.rs b/tests/rustdoc/intra-doc/issue-108459.rs
index b8cd478b4df..18424c069d3 100644
--- a/tests/rustdoc/intra-doc/issue-108459.rs
+++ b/tests/rustdoc/intra-doc/issue-108459.rs
@@ -13,26 +13,26 @@ pub struct MyStruct1;
 // the same target but different text
 
 /// See also [crate::char] and [mod@char] and [prim@char]
-// @has issue_108459/struct.MyStruct2.html '//*[@href="char/index.html"]' 'crate::char'
-// @has - '//*[@href="char/index.html"]' 'char'
-// @has - '//*[@href="{{channel}}/std/primitive.char.html"]' 'char'
+//@ has issue_108459/struct.MyStruct2.html '//*[@href="char/index.html"]' 'crate::char'
+//@ has - '//*[@href="char/index.html"]' 'char'
+//@ has - '//*[@href="{{channel}}/std/primitive.char.html"]' 'char'
 pub struct MyStruct2;
 
 /// See also [mod@char] and [prim@char] and [crate::char]
-// @has issue_108459/struct.MyStruct3.html '//*[@href="char/index.html"]' 'crate::char'
-// @has - '//*[@href="char/index.html"]' 'char'
-// @has - '//*[@href="{{channel}}/std/primitive.char.html"]' 'char'
+//@ has issue_108459/struct.MyStruct3.html '//*[@href="char/index.html"]' 'crate::char'
+//@ has - '//*[@href="char/index.html"]' 'char'
+//@ has - '//*[@href="{{channel}}/std/primitive.char.html"]' 'char'
 pub struct MyStruct3;
 
 // Ensure that links are correct even if there are multiple links with the same text but
 // different targets
 
 /// See also [char][mod@char] and [char][prim@char]
-// @has issue_108459/struct.MyStruct4.html '//*[@href="char/index.html"]' 'char'
-// @has - '//*[@href="{{channel}}/std/primitive.char.html"]' 'char'
+//@ has issue_108459/struct.MyStruct4.html '//*[@href="char/index.html"]' 'char'
+//@ has - '//*[@href="{{channel}}/std/primitive.char.html"]' 'char'
 pub struct MyStruct4;
 
 /// See also [char][prim@char] and [char][crate::char]
-// @has issue_108459/struct.MyStruct5.html '//*[@href="char/index.html"]' 'char'
-// @has - '//*[@href="{{channel}}/std/primitive.char.html"]' 'char'
+//@ has issue_108459/struct.MyStruct5.html '//*[@href="char/index.html"]' 'char'
+//@ has - '//*[@href="{{channel}}/std/primitive.char.html"]' 'char'
 pub struct MyStruct5;
diff --git a/tests/rustdoc/intra-doc/issue-66159.rs b/tests/rustdoc/intra-doc/issue-66159.rs
index b3e7f9171ad..5d50f63f299 100644
--- a/tests/rustdoc/intra-doc/issue-66159.rs
+++ b/tests/rustdoc/intra-doc/issue-66159.rs
@@ -6,5 +6,5 @@
 // Since we don't generate the docs for the auxiliary files, we can't actually
 // verify that the struct is linked correctly.
 
-// @has issue_66159/index.html
+//@ has issue_66159/index.html
 //! [pub_struct::SomeStruct]
diff --git a/tests/rustdoc/intra-doc/issue-82209.rs b/tests/rustdoc/intra-doc/issue-82209.rs
index a5fe855cb36..46d028e535c 100644
--- a/tests/rustdoc/intra-doc/issue-82209.rs
+++ b/tests/rustdoc/intra-doc/issue-82209.rs
@@ -8,4 +8,4 @@ pub enum Foo {
     },
 }
 
-// @has foo/enum.Foo.html '//a/@href' 'enum.Foo.html#variant.Bar.field.abc'
+//@ has foo/enum.Foo.html '//a/@href' 'enum.Foo.html#variant.Bar.field.abc'
diff --git a/tests/rustdoc/intra-doc/macros-disambiguators.rs b/tests/rustdoc/intra-doc/macros-disambiguators.rs
index cd4caa6a894..d84ab8011dc 100644
--- a/tests/rustdoc/intra-doc/macros-disambiguators.rs
+++ b/tests/rustdoc/intra-doc/macros-disambiguators.rs
@@ -2,22 +2,22 @@
 #![deny(rustdoc::broken_intra_doc_links)]
 
 //! [foo!()]
-// @has foo/index.html '//a[@href="macro.foo.html"]' 'foo!()'
+//@ has foo/index.html '//a[@href="macro.foo.html"]' 'foo!()'
 
 //! [foo!{}]
-// @has - '//a[@href="macro.foo.html"]' 'foo!{}'
+//@ has - '//a[@href="macro.foo.html"]' 'foo!{}'
 
 //! [foo![]](foo![])
-// @has - '//a[@href="macro.foo.html"]' 'foo![]'
+//@ has - '//a[@href="macro.foo.html"]' 'foo![]'
 
 //! [foo1](foo!())
-// @has - '//a[@href="macro.foo.html"]' 'foo1'
+//@ has - '//a[@href="macro.foo.html"]' 'foo1'
 
 //! [foo2](foo!{})
-// @has - '//a[@href="macro.foo.html"]' 'foo2'
+//@ has - '//a[@href="macro.foo.html"]' 'foo2'
 
 //! [foo3](foo![])
-// @has - '//a[@href="macro.foo.html"]' 'foo3'
+//@ has - '//a[@href="macro.foo.html"]' 'foo3'
 
 #[macro_export]
 macro_rules! foo {
diff --git a/tests/rustdoc/intra-doc/mod-ambiguity.rs b/tests/rustdoc/intra-doc/mod-ambiguity.rs
index 0c7acbaf093..5e2b1ffe6f2 100644
--- a/tests/rustdoc/intra-doc/mod-ambiguity.rs
+++ b/tests/rustdoc/intra-doc/mod-ambiguity.rs
@@ -6,11 +6,11 @@ pub fn foo() {
 }
 
 pub mod foo {}
-// @has mod_ambiguity/struct.A.html '//a/@href' 'foo/index.html'
+//@ has mod_ambiguity/struct.A.html '//a/@href' 'foo/index.html'
 /// Module is [`module@foo`]
 pub struct A;
 
 
-// @has mod_ambiguity/struct.B.html '//a/@href' 'fn.foo.html'
+//@ has mod_ambiguity/struct.B.html '//a/@href' 'fn.foo.html'
 /// Function is [`fn@foo`]
 pub struct B;
diff --git a/tests/rustdoc/intra-doc/mod-relative.rs b/tests/rustdoc/intra-doc/mod-relative.rs
index 49d3399b972..d3239973d1c 100644
--- a/tests/rustdoc/intra-doc/mod-relative.rs
+++ b/tests/rustdoc/intra-doc/mod-relative.rs
@@ -8,8 +8,8 @@ pub mod wrapper {
         pub fn do_test(&self) {}
     }
 
-    // @has mod_relative/wrapper/demo/index.html
-    // @has - '//a/@href' '../struct.Test.html#method.do_test'
+    //@ has mod_relative/wrapper/demo/index.html
+    //@ has - '//a/@href' '../struct.Test.html#method.do_test'
     /// [`Test::do_test`]
     pub mod demo {
     }
diff --git a/tests/rustdoc/intra-doc/module-scope-name-resolution-55364.rs b/tests/rustdoc/intra-doc/module-scope-name-resolution-55364.rs
index c07aba628c9..06cb764423e 100644
--- a/tests/rustdoc/intra-doc/module-scope-name-resolution-55364.rs
+++ b/tests/rustdoc/intra-doc/module-scope-name-resolution-55364.rs
@@ -3,50 +3,50 @@
 
 // First a module with inner documentation
 
-// @has foo/subone/index.html
+//@ has foo/subone/index.html
 // These foo/bar links in the module's documentation should refer inside `subone`
-// @has - '//section[@id="main-content"]/details[@open=""]/div[@class="docblock"]//a[@href="fn.foo.html"]' 'foo'
-// @has - '//section[@id="main-content"]/details[@open=""]/div[@class="docblock"]//a[@href="fn.bar.html"]' 'bar'
+//@ has - '//section[@id="main-content"]/details[@open=""]/div[@class="docblock"]//a[@href="fn.foo.html"]' 'foo'
+//@ has - '//section[@id="main-content"]/details[@open=""]/div[@class="docblock"]//a[@href="fn.bar.html"]' 'bar'
 pub mod subone {
     //! See either [foo] or [bar].
 
     // This should refer to subone's `bar`
-    // @has foo/subone/fn.foo.html
-    // @has - '//section[@id="main-content"]/details/div[@class="docblock"]//a[@href="fn.bar.html"]' 'bar'
+    //@ has foo/subone/fn.foo.html
+    //@ has - '//section[@id="main-content"]/details/div[@class="docblock"]//a[@href="fn.bar.html"]' 'bar'
     /// See [bar]
     pub fn foo() {}
     // This should refer to subone's `foo`
-    // @has foo/subone/fn.bar.html
-    // @has - '//section[@id="main-content"]/details/div[@class="docblock"]//a[@href="fn.foo.html"]' 'foo'
+    //@ has foo/subone/fn.bar.html
+    //@ has - '//section[@id="main-content"]/details/div[@class="docblock"]//a[@href="fn.foo.html"]' 'foo'
     /// See [foo]
     pub fn bar() {}
 }
 
 // A module with outer documentation
 
-// @has foo/subtwo/index.html
+//@ has foo/subtwo/index.html
 // These foo/bar links in the module's documentation should not reference inside `subtwo`
-// @!has - '//section[@id="main-content"]/div[@class="docblock"]//a[@href="fn.foo.html"]' 'foo'
-// @!has - '//section[@id="main-content"]/div[@class="docblock"]//a[@href="fn.bar.html"]' 'bar'
+//@ !has - '//section[@id="main-content"]/div[@class="docblock"]//a[@href="fn.foo.html"]' 'foo'
+//@ !has - '//section[@id="main-content"]/div[@class="docblock"]//a[@href="fn.bar.html"]' 'bar'
 // Instead it should be referencing the top level functions
-// @has - '//section[@id="main-content"]/details/div[@class="docblock"]//a[@href="../fn.foo.html"]' 'foo'
-// @has - '//section[@id="main-content"]/details/div[@class="docblock"]//a[@href="../fn.bar.html"]' 'bar'
+//@ has - '//section[@id="main-content"]/details/div[@class="docblock"]//a[@href="../fn.foo.html"]' 'foo'
+//@ has - '//section[@id="main-content"]/details/div[@class="docblock"]//a[@href="../fn.bar.html"]' 'bar'
 // Though there should be such links later
-// @has - '//section[@id="main-content"]/ul[@class="item-table"]//div[@class="item-name"]/a[@class="fn"][@href="fn.foo.html"]' 'foo'
-// @has - '//section[@id="main-content"]/ul[@class="item-table"]//div[@class="item-name"]/a[@class="fn"][@href="fn.bar.html"]' 'bar'
+//@ has - '//section[@id="main-content"]/ul[@class="item-table"]//div[@class="item-name"]/a[@class="fn"][@href="fn.foo.html"]' 'foo'
+//@ has - '//section[@id="main-content"]/ul[@class="item-table"]//div[@class="item-name"]/a[@class="fn"][@href="fn.bar.html"]' 'bar'
 /// See either [foo] or [bar].
 pub mod subtwo {
 
     // Despite the module's docs referring to the top level foo/bar,
     // this should refer to subtwo's `bar`
-    // @has foo/subtwo/fn.foo.html
-    // @has - '//section[@id="main-content"]/details/div[@class="docblock"]//a[@href="fn.bar.html"]' 'bar'
+    //@ has foo/subtwo/fn.foo.html
+    //@ has - '//section[@id="main-content"]/details/div[@class="docblock"]//a[@href="fn.bar.html"]' 'bar'
     /// See [bar]
     pub fn foo() {}
     // Despite the module's docs referring to the top level foo/bar,
     // this should refer to subtwo's `foo`
-    // @has foo/subtwo/fn.bar.html
-    // @has - '//section[@id="main-content"]/details/div[@class="docblock"]//a[@href="fn.foo.html"]' 'foo'
+    //@ has foo/subtwo/fn.bar.html
+    //@ has - '//section[@id="main-content"]/details/div[@class="docblock"]//a[@href="fn.foo.html"]' 'foo'
     /// See [foo]
     pub fn bar() {}
 }
@@ -60,19 +60,19 @@ pub fn bar() {}
 
 // This module refers to the outer foo/bar by means of `super::`
 
-// @has foo/subthree/index.html
+//@ has foo/subthree/index.html
 // This module should also refer to the top level foo/bar
-// @has - '//section[@id="main-content"]/details/div[@class="docblock"]//a[@href="../fn.foo.html"]' 'foo'
-// @has - '//section[@id="main-content"]/details/div[@class="docblock"]//a[@href="../fn.bar.html"]' 'bar'
+//@ has - '//section[@id="main-content"]/details/div[@class="docblock"]//a[@href="../fn.foo.html"]' 'foo'
+//@ has - '//section[@id="main-content"]/details/div[@class="docblock"]//a[@href="../fn.bar.html"]' 'bar'
 pub mod subthree {
     //! See either [foo][super::foo] or [bar][super::bar]
 }
 
 // Next we go *deeper* - In order to ensure it's not just "this or parent"
 // we test `crate::` and a `super::super::...` chain
-// @has foo/subfour/subfive/subsix/subseven/subeight/index.html
-// @has - '//section[@id="main-content"]/ul[@class="item-table"]//div[@class="desc docblock-short"]//a[@href="../../../../../subone/fn.foo.html"]' 'other foo'
-// @has - '//section[@id="main-content"]/ul[@class="item-table"]//div[@class="desc docblock-short"]//a[@href="../../../../../subtwo/fn.bar.html"]' 'other bar'
+//@ has foo/subfour/subfive/subsix/subseven/subeight/index.html
+//@ has - '//section[@id="main-content"]/ul[@class="item-table"]//div[@class="desc docblock-short"]//a[@href="../../../../../subone/fn.foo.html"]' 'other foo'
+//@ has - '//section[@id="main-content"]/ul[@class="item-table"]//div[@class="desc docblock-short"]//a[@href="../../../../../subtwo/fn.bar.html"]' 'other bar'
 pub mod subfour {
     pub mod subfive {
         pub mod subsix {
diff --git a/tests/rustdoc/intra-doc/nested-use.rs b/tests/rustdoc/intra-doc/nested-use.rs
index 19ebfff1bce..2aaaed196fd 100644
--- a/tests/rustdoc/intra-doc/nested-use.rs
+++ b/tests/rustdoc/intra-doc/nested-use.rs
@@ -2,9 +2,9 @@
 
 #![crate_name = "foo"]
 
-// @has foo/struct.Foo.html
-// @has - '//a[@href="struct.Foo.html"]' 'Foo'
-// @has - '//a[@href="struct.Bar.html"]' 'Bar'
+//@ has foo/struct.Foo.html
+//@ has - '//a[@href="struct.Foo.html"]' 'Foo'
+//@ has - '//a[@href="struct.Bar.html"]' 'Bar'
 
 /// [`Foo`]
 pub use m::{Foo, Bar};
diff --git a/tests/rustdoc/intra-doc/no-doc-primitive.rs b/tests/rustdoc/intra-doc/no-doc-primitive.rs
index 711ac09ba9a..1f8622ab867 100644
--- a/tests/rustdoc/intra-doc/no-doc-primitive.rs
+++ b/tests/rustdoc/intra-doc/no-doc-primitive.rs
@@ -6,7 +6,7 @@
 #![rustc_coherence_is_core]
 #![crate_type = "rlib"]
 
-// @has no_doc_primitive/index.html
+//@ has no_doc_primitive/index.html
 //! A [`char`] and its [`char::len_utf8`].
 impl char {
     pub fn len_utf8(self) -> usize {
diff --git a/tests/rustdoc/intra-doc/non-path-primitives.rs b/tests/rustdoc/intra-doc/non-path-primitives.rs
index be4b44b3142..88edf12bfb5 100644
--- a/tests/rustdoc/intra-doc/non-path-primitives.rs
+++ b/tests/rustdoc/intra-doc/non-path-primitives.rs
@@ -2,45 +2,45 @@
 #![feature(intra_doc_pointers)]
 #![deny(rustdoc::broken_intra_doc_links)]
 
-// @has foo/index.html '//a[@href="{{channel}}/std/primitive.slice.html#method.rotate_left"]' 'slice::rotate_left'
+//@ has foo/index.html '//a[@href="{{channel}}/std/primitive.slice.html#method.rotate_left"]' 'slice::rotate_left'
 //! [slice::rotate_left]
 
-// @has - '//a[@href="{{channel}}/std/primitive.array.html#method.map"]' 'array::map'
+//@ has - '//a[@href="{{channel}}/std/primitive.array.html#method.map"]' 'array::map'
 //! [array::map]
 
-// @has - '//a[@href="{{channel}}/std/primitive.str.html"]' 'owned str'
-// @has - '//a[@href="{{channel}}/std/primitive.str.html"]' 'str ref'
-// @has - '//a[@href="{{channel}}/std/primitive.str.html#method.is_empty"]' 'str::is_empty'
-// @has - '//a[@href="{{channel}}/std/primitive.str.html#method.len"]' '&str::len'
+//@ has - '//a[@href="{{channel}}/std/primitive.str.html"]' 'owned str'
+//@ has - '//a[@href="{{channel}}/std/primitive.str.html"]' 'str ref'
+//@ has - '//a[@href="{{channel}}/std/primitive.str.html#method.is_empty"]' 'str::is_empty'
+//@ has - '//a[@href="{{channel}}/std/primitive.str.html#method.len"]' '&str::len'
 //! [owned str][str]
 //! [str ref][&str]
 //! [str::is_empty]
 //! [&str::len]
 
-// @has - '//a[@href="{{channel}}/std/primitive.pointer.html#method.is_null"]' 'pointer::is_null'
-// @has - '//a[@href="{{channel}}/std/primitive.pointer.html#method.is_null"]' '*const::is_null'
-// @has - '//a[@href="{{channel}}/std/primitive.pointer.html#method.is_null"]' '*mut::is_null'
+//@ has - '//a[@href="{{channel}}/std/primitive.pointer.html#method.is_null"]' 'pointer::is_null'
+//@ has - '//a[@href="{{channel}}/std/primitive.pointer.html#method.is_null"]' '*const::is_null'
+//@ has - '//a[@href="{{channel}}/std/primitive.pointer.html#method.is_null"]' '*mut::is_null'
 //! [pointer::is_null]
 //! [*const::is_null]
 //! [*mut::is_null]
 
-// @has - '//a[@href="{{channel}}/std/primitive.unit.html"]' 'unit'
+//@ has - '//a[@href="{{channel}}/std/primitive.unit.html"]' 'unit'
 //! [unit]
 
-// @has - '//a[@href="{{channel}}/std/primitive.tuple.html"]' 'tuple'
+//@ has - '//a[@href="{{channel}}/std/primitive.tuple.html"]' 'tuple'
 //! [tuple]
 
-// @has - '//a[@href="{{channel}}/std/primitive.reference.html"]' 'reference'
-// @has - '//a[@href="{{channel}}/std/primitive.reference.html"]' '&'
-// @has - '//a[@href="{{channel}}/std/primitive.reference.html"]' '&mut'
+//@ has - '//a[@href="{{channel}}/std/primitive.reference.html"]' 'reference'
+//@ has - '//a[@href="{{channel}}/std/primitive.reference.html"]' '&'
+//@ has - '//a[@href="{{channel}}/std/primitive.reference.html"]' '&mut'
 //! [reference]
 //! [&]
 //! [&mut]
 
-// @has - '//a[@href="{{channel}}/std/primitive.fn.html"]' 'fn'
+//@ has - '//a[@href="{{channel}}/std/primitive.fn.html"]' 'fn'
 //! [fn]
 
-// @has - '//a[@href="{{channel}}/std/primitive.never.html"]' 'never'
-// @has - '//a[@href="{{channel}}/std/primitive.never.html"]' '!'
+//@ has - '//a[@href="{{channel}}/std/primitive.never.html"]' 'never'
+//@ has - '//a[@href="{{channel}}/std/primitive.never.html"]' '!'
 //! [never]
 //! [!]
diff --git a/tests/rustdoc/intra-doc/prim-assoc.rs b/tests/rustdoc/intra-doc/prim-assoc.rs
index dfa7db8a558..41695205d9d 100644
--- a/tests/rustdoc/intra-doc/prim-assoc.rs
+++ b/tests/rustdoc/intra-doc/prim-assoc.rs
@@ -1,4 +1,4 @@
 #![deny(rustdoc::broken_intra_doc_links)]
 
 //! [i32::MAX]
-// @has prim_assoc/index.html '//a[@href="{{channel}}/std/primitive.i32.html#associatedconstant.MAX"]' "i32::MAX"
+//@ has prim_assoc/index.html '//a[@href="{{channel}}/std/primitive.i32.html#associatedconstant.MAX"]' "i32::MAX"
diff --git a/tests/rustdoc/intra-doc/prim-associated-traits.rs b/tests/rustdoc/intra-doc/prim-associated-traits.rs
index 71d7d2189e6..41a3931222f 100644
--- a/tests/rustdoc/intra-doc/prim-associated-traits.rs
+++ b/tests/rustdoc/intra-doc/prim-associated-traits.rs
@@ -1,24 +1,24 @@
 #![feature(never_type)]
 use std::str::FromStr;
 
-// @has 'prim_associated_traits/struct.Number.html' '//a[@href="{{channel}}/std/primitive.f64.html#method.from_str"]' 'f64::from_str()'
-// @has 'prim_associated_traits/struct.Number.html' '//a[@href="{{channel}}/std/primitive.f32.html#method.from_str"]' 'f32::from_str()'
-// @has 'prim_associated_traits/struct.Number.html' '//a[@href="{{channel}}/std/primitive.isize.html#method.from_str"]' 'isize::from_str()'
-// @has 'prim_associated_traits/struct.Number.html' '//a[@href="{{channel}}/std/primitive.i8.html#method.from_str"]' 'i8::from_str()'
-// @has 'prim_associated_traits/struct.Number.html' '//a[@href="{{channel}}/std/primitive.i16.html#method.from_str"]' 'i16::from_str()'
-// @has 'prim_associated_traits/struct.Number.html' '//a[@href="{{channel}}/std/primitive.i32.html#method.from_str"]' 'i32::from_str()'
-// @has 'prim_associated_traits/struct.Number.html' '//a[@href="{{channel}}/std/primitive.i64.html#method.from_str"]' 'i64::from_str()'
-// @has 'prim_associated_traits/struct.Number.html' '//a[@href="{{channel}}/std/primitive.i128.html#method.from_str"]' 'i128::from_str()'
-// @has 'prim_associated_traits/struct.Number.html' '//a[@href="{{channel}}/std/primitive.usize.html#method.from_str"]' 'usize::from_str()'
-// @has 'prim_associated_traits/struct.Number.html' '//a[@href="{{channel}}/std/primitive.u8.html#method.from_str"]' 'u8::from_str()'
-// @has 'prim_associated_traits/struct.Number.html' '//a[@href="{{channel}}/std/primitive.u16.html#method.from_str"]' 'u16::from_str()'
-// @has 'prim_associated_traits/struct.Number.html' '//a[@href="{{channel}}/std/primitive.u32.html#method.from_str"]' 'u32::from_str()'
-// @has 'prim_associated_traits/struct.Number.html' '//a[@href="{{channel}}/std/primitive.u64.html#method.from_str"]' 'u64::from_str()'
-// @has 'prim_associated_traits/struct.Number.html' '//a[@href="{{channel}}/std/primitive.u128.html#method.from_str"]' 'u128::from_str()'
-// @has 'prim_associated_traits/struct.Number.html' '//a[@href="{{channel}}/std/primitive.char.html#method.from_str"]' 'char::from_str()'
-// @has 'prim_associated_traits/struct.Number.html' '//a[@href="{{channel}}/std/primitive.bool.html#method.from_str"]' 'bool::from_str()'
-// @has 'prim_associated_traits/struct.Number.html' '//a[@href="{{channel}}/std/primitive.str.html#method.eq"]' 'str::eq()'
-// @has 'prim_associated_traits/struct.Number.html' '//a[@href="{{channel}}/std/primitive.never.html#method.eq"]' 'never::eq()'
+//@ has 'prim_associated_traits/struct.Number.html' '//a[@href="{{channel}}/std/primitive.f64.html#method.from_str"]' 'f64::from_str()'
+//@ has 'prim_associated_traits/struct.Number.html' '//a[@href="{{channel}}/std/primitive.f32.html#method.from_str"]' 'f32::from_str()'
+//@ has 'prim_associated_traits/struct.Number.html' '//a[@href="{{channel}}/std/primitive.isize.html#method.from_str"]' 'isize::from_str()'
+//@ has 'prim_associated_traits/struct.Number.html' '//a[@href="{{channel}}/std/primitive.i8.html#method.from_str"]' 'i8::from_str()'
+//@ has 'prim_associated_traits/struct.Number.html' '//a[@href="{{channel}}/std/primitive.i16.html#method.from_str"]' 'i16::from_str()'
+//@ has 'prim_associated_traits/struct.Number.html' '//a[@href="{{channel}}/std/primitive.i32.html#method.from_str"]' 'i32::from_str()'
+//@ has 'prim_associated_traits/struct.Number.html' '//a[@href="{{channel}}/std/primitive.i64.html#method.from_str"]' 'i64::from_str()'
+//@ has 'prim_associated_traits/struct.Number.html' '//a[@href="{{channel}}/std/primitive.i128.html#method.from_str"]' 'i128::from_str()'
+//@ has 'prim_associated_traits/struct.Number.html' '//a[@href="{{channel}}/std/primitive.usize.html#method.from_str"]' 'usize::from_str()'
+//@ has 'prim_associated_traits/struct.Number.html' '//a[@href="{{channel}}/std/primitive.u8.html#method.from_str"]' 'u8::from_str()'
+//@ has 'prim_associated_traits/struct.Number.html' '//a[@href="{{channel}}/std/primitive.u16.html#method.from_str"]' 'u16::from_str()'
+//@ has 'prim_associated_traits/struct.Number.html' '//a[@href="{{channel}}/std/primitive.u32.html#method.from_str"]' 'u32::from_str()'
+//@ has 'prim_associated_traits/struct.Number.html' '//a[@href="{{channel}}/std/primitive.u64.html#method.from_str"]' 'u64::from_str()'
+//@ has 'prim_associated_traits/struct.Number.html' '//a[@href="{{channel}}/std/primitive.u128.html#method.from_str"]' 'u128::from_str()'
+//@ has 'prim_associated_traits/struct.Number.html' '//a[@href="{{channel}}/std/primitive.char.html#method.from_str"]' 'char::from_str()'
+//@ has 'prim_associated_traits/struct.Number.html' '//a[@href="{{channel}}/std/primitive.bool.html#method.from_str"]' 'bool::from_str()'
+//@ has 'prim_associated_traits/struct.Number.html' '//a[@href="{{channel}}/std/primitive.str.html#method.eq"]' 'str::eq()'
+//@ has 'prim_associated_traits/struct.Number.html' '//a[@href="{{channel}}/std/primitive.never.html#method.eq"]' 'never::eq()'
 /// [`f64::from_str()`] [`f32::from_str()`] [`isize::from_str()`] [`i8::from_str()`]
 /// [`i16::from_str()`] [`i32::from_str()`] [`i64::from_str()`] [`i128::from_str()`]
 /// [`u16::from_str()`] [`u32::from_str()`] [`u64::from_str()`] [`u128::from_str()`]
diff --git a/tests/rustdoc/intra-doc/prim-methods-external-core.rs b/tests/rustdoc/intra-doc/prim-methods-external-core.rs
index 76e96d7037f..41a07460b06 100644
--- a/tests/rustdoc/intra-doc/prim-methods-external-core.rs
+++ b/tests/rustdoc/intra-doc/prim-methods-external-core.rs
@@ -8,9 +8,9 @@
 #![no_core]
 #![crate_type = "rlib"]
 
-// @has prim_methods_external_core/index.html
-// @has - '//*[@id="main-content"]//a[@href="../my_core/primitive.char.html"]' 'char'
-// @has - '//*[@id="main-content"]//a[@href="../my_core/primitive.char.html#method.len_utf8"]' 'char::len_utf8'
+//@ has prim_methods_external_core/index.html
+//@ has - '//*[@id="main-content"]//a[@href="../my_core/primitive.char.html"]' 'char'
+//@ has - '//*[@id="main-content"]//a[@href="../my_core/primitive.char.html#method.len_utf8"]' 'char::len_utf8'
 
 //! A [`char`] and its [`char::len_utf8`].
 
diff --git a/tests/rustdoc/intra-doc/prim-methods-local.rs b/tests/rustdoc/intra-doc/prim-methods-local.rs
index 6de4ec1802f..a9e71c58be3 100644
--- a/tests/rustdoc/intra-doc/prim-methods-local.rs
+++ b/tests/rustdoc/intra-doc/prim-methods-local.rs
@@ -4,9 +4,9 @@
 #![rustc_coherence_is_core]
 #![crate_type = "rlib"]
 
-// @has prim_methods_local/index.html
-// @has - '//*[@id="main-content"]//a[@href="primitive.char.html"]' 'char'
-// @has - '//*[@id="main-content"]//a[@href="primitive.char.html#method.len_utf8"]' 'char::len_utf8'
+//@ has prim_methods_local/index.html
+//@ has - '//*[@id="main-content"]//a[@href="primitive.char.html"]' 'char'
+//@ has - '//*[@id="main-content"]//a[@href="primitive.char.html#method.len_utf8"]' 'char::len_utf8'
 
 //! A [prim@`char`] and its [`char::len_utf8`].
 
diff --git a/tests/rustdoc/intra-doc/prim-methods.rs b/tests/rustdoc/intra-doc/prim-methods.rs
index bc1965aac55..3ee7eba86ad 100644
--- a/tests/rustdoc/intra-doc/prim-methods.rs
+++ b/tests/rustdoc/intra-doc/prim-methods.rs
@@ -1,9 +1,9 @@
 #![deny(rustdoc::broken_intra_doc_links)]
 
-// @has prim_methods/index.html
-// @has - '//*[@id="main-content"]//a[@href="{{channel}}/std/primitive.char.html"]' 'char'
-// @has - '//*[@id="main-content"]//a[@href="{{channel}}/std/primitive.char.html"]/@title' 'primitive char'
-// @has - '//*[@id="main-content"]//a[@href="{{channel}}/std/primitive.char.html#method.len_utf8"]' 'char::len_utf8'
-// @has - '//*[@id="main-content"]//a[@href="{{channel}}/std/primitive.char.html#method.len_utf8"]/@title' 'method char::len_utf8'
+//@ has prim_methods/index.html
+//@ has - '//*[@id="main-content"]//a[@href="{{channel}}/std/primitive.char.html"]' 'char'
+//@ has - '//*[@id="main-content"]//a[@href="{{channel}}/std/primitive.char.html"]/@title' 'primitive char'
+//@ has - '//*[@id="main-content"]//a[@href="{{channel}}/std/primitive.char.html#method.len_utf8"]' 'char::len_utf8'
+//@ has - '//*[@id="main-content"]//a[@href="{{channel}}/std/primitive.char.html#method.len_utf8"]/@title' 'method char::len_utf8'
 
 //! A [`char`] and its [`char::len_utf8`].
diff --git a/tests/rustdoc/intra-doc/prim-precedence.rs b/tests/rustdoc/intra-doc/prim-precedence.rs
index c5a64e42a01..56d556e8f1d 100644
--- a/tests/rustdoc/intra-doc/prim-precedence.rs
+++ b/tests/rustdoc/intra-doc/prim-precedence.rs
@@ -2,15 +2,15 @@
 
 pub mod char {
     /// [char]
-    // @has prim_precedence/char/struct.Inner.html '//a/@href' '{{channel}}/std/primitive.char.html'
+    //@ has prim_precedence/char/struct.Inner.html '//a/@href' '{{channel}}/std/primitive.char.html'
     pub struct Inner;
 }
 
 /// See [prim@char]
-// @has prim_precedence/struct.MyString.html '//a/@href' '{{channel}}/std/primitive.char.html'
+//@ has prim_precedence/struct.MyString.html '//a/@href' '{{channel}}/std/primitive.char.html'
 pub struct MyString;
 
 /// See also [crate::char] and [mod@char]
-// @has prim_precedence/struct.MyString2.html '//*[@href="char/index.html"]' 'crate::char'
-// @has - '//*[@href="char/index.html"]' 'char'
+//@ has prim_precedence/struct.MyString2.html '//*[@href="char/index.html"]' 'crate::char'
+//@ has - '//*[@href="char/index.html"]' 'char'
 pub struct MyString2;
diff --git a/tests/rustdoc/intra-doc/prim-self.rs b/tests/rustdoc/intra-doc/prim-self.rs
index d13858a53cf..d5bfd570d54 100644
--- a/tests/rustdoc/intra-doc/prim-self.rs
+++ b/tests/rustdoc/intra-doc/prim-self.rs
@@ -10,9 +10,9 @@
 
 /// [Self::f]
 /// [Self::MAX]
-// @has prim_self/primitive.usize.html
-// @has - '//a[@href="primitive.usize.html#method.f"]' 'Self::f'
-// @has - '//a[@href="primitive.usize.html#associatedconstant.MAX"]' 'Self::MAX'
+//@ has prim_self/primitive.usize.html
+//@ has - '//a[@href="primitive.usize.html#method.f"]' 'Self::f'
+//@ has - '//a[@href="primitive.usize.html#associatedconstant.MAX"]' 'Self::MAX'
 impl usize {
     /// Some docs
     pub fn f() {}
@@ -20,7 +20,7 @@ impl usize {
     /// 10 and 2^32 are basically the same.
     pub const MAX: usize = 10;
 
-    // @has - '//a[@href="primitive.usize.html#associatedtype.ME"]' 'Self::ME'
+    //@ has - '//a[@href="primitive.usize.html#associatedtype.ME"]' 'Self::ME'
     /// [Self::ME]
     pub type ME = usize;
 }
diff --git a/tests/rustdoc/intra-doc/primitive-disambiguators.rs b/tests/rustdoc/intra-doc/primitive-disambiguators.rs
index adcab767d0b..1d657b32f8b 100644
--- a/tests/rustdoc/intra-doc/primitive-disambiguators.rs
+++ b/tests/rustdoc/intra-doc/primitive-disambiguators.rs
@@ -1,4 +1,4 @@
 #![deny(rustdoc::broken_intra_doc_links)]
-// @has primitive_disambiguators/index.html
-// @has - '//a/@href' '{{channel}}/std/primitive.str.html#method.trim'
+//@ has primitive_disambiguators/index.html
+//@ has - '//a/@href' '{{channel}}/std/primitive.str.html#method.trim'
 //! [str::trim()]
diff --git a/tests/rustdoc/intra-doc/primitive-non-default-impl.rs b/tests/rustdoc/intra-doc/primitive-non-default-impl.rs
index 474bf347750..66d82d04d7d 100644
--- a/tests/rustdoc/intra-doc/primitive-non-default-impl.rs
+++ b/tests/rustdoc/intra-doc/primitive-non-default-impl.rs
@@ -1,31 +1,31 @@
 #![deny(rustdoc::broken_intra_doc_links)]
 
 
-// @has primitive_non_default_impl/fn.str_methods.html
+//@ has primitive_non_default_impl/fn.str_methods.html
 /// [`str::trim`]
-// @has - '//*[@href="{{channel}}/std/primitive.str.html#method.trim"]' 'str::trim'
+//@ has - '//*[@href="{{channel}}/std/primitive.str.html#method.trim"]' 'str::trim'
 /// [`str::to_lowercase`]
-// @has - '//*[@href="{{channel}}/std/primitive.str.html#method.to_lowercase"]' 'str::to_lowercase'
+//@ has - '//*[@href="{{channel}}/std/primitive.str.html#method.to_lowercase"]' 'str::to_lowercase'
 /// [`str::into_boxed_bytes`]
-// @has - '//*[@href="{{channel}}/std/primitive.str.html#method.into_boxed_bytes"]' 'str::into_boxed_bytes'
+//@ has - '//*[@href="{{channel}}/std/primitive.str.html#method.into_boxed_bytes"]' 'str::into_boxed_bytes'
 /// [`str::replace`]
-// @has - '//*[@href="{{channel}}/std/primitive.str.html#method.replace"]' 'str::replace'
+//@ has - '//*[@href="{{channel}}/std/primitive.str.html#method.replace"]' 'str::replace'
 pub fn str_methods() {}
 
-// @has primitive_non_default_impl/fn.f32_methods.html
+//@ has primitive_non_default_impl/fn.f32_methods.html
 /// [f32::powi]
-// @has - '//*[@href="{{channel}}/std/primitive.f32.html#method.powi"]' 'f32::powi'
+//@ has - '//*[@href="{{channel}}/std/primitive.f32.html#method.powi"]' 'f32::powi'
 /// [f32::sqrt]
-// @has - '//*[@href="{{channel}}/std/primitive.f32.html#method.sqrt"]' 'f32::sqrt'
+//@ has - '//*[@href="{{channel}}/std/primitive.f32.html#method.sqrt"]' 'f32::sqrt'
 /// [f32::mul_add]
-// @has - '//*[@href="{{channel}}/std/primitive.f32.html#method.mul_add"]' 'f32::mul_add'
+//@ has - '//*[@href="{{channel}}/std/primitive.f32.html#method.mul_add"]' 'f32::mul_add'
 pub fn f32_methods() {}
 
-// @has primitive_non_default_impl/fn.f64_methods.html
+//@ has primitive_non_default_impl/fn.f64_methods.html
 /// [`f64::powi`]
-// @has - '//*[@href="{{channel}}/std/primitive.f64.html#method.powi"]' 'f64::powi'
+//@ has - '//*[@href="{{channel}}/std/primitive.f64.html#method.powi"]' 'f64::powi'
 /// [`f64::sqrt`]
-// @has - '//*[@href="{{channel}}/std/primitive.f64.html#method.sqrt"]' 'f64::sqrt'
+//@ has - '//*[@href="{{channel}}/std/primitive.f64.html#method.sqrt"]' 'f64::sqrt'
 /// [`f64::mul_add`]
-// @has - '//*[@href="{{channel}}/std/primitive.f64.html#method.mul_add"]' 'f64::mul_add'
+//@ has - '//*[@href="{{channel}}/std/primitive.f64.html#method.mul_add"]' 'f64::mul_add'
 pub fn f64_methods() {}
diff --git a/tests/rustdoc/intra-doc/private.rs b/tests/rustdoc/intra-doc/private.rs
index d1ad210dc31..48d86a30768 100644
--- a/tests/rustdoc/intra-doc/private.rs
+++ b/tests/rustdoc/intra-doc/private.rs
@@ -7,9 +7,9 @@
 #![crate_name = "private"]
 
 /// docs [DontDocMe] [DontDocMe::f] [DontDocMe::x]
-// @has private/struct.DocMe.html '//*a[@href="struct.DontDocMe.html"]' 'DontDocMe'
-// @has private/struct.DocMe.html '//*a[@href="struct.DontDocMe.html#method.f"]' 'DontDocMe::f'
-// @has private/struct.DocMe.html '//*a[@href="struct.DontDocMe.html#structfield.x"]' 'DontDocMe::x'
+//@ has private/struct.DocMe.html '//*a[@href="struct.DontDocMe.html"]' 'DontDocMe'
+//@ has private/struct.DocMe.html '//*a[@href="struct.DontDocMe.html#method.f"]' 'DontDocMe::f'
+//@ has private/struct.DocMe.html '//*a[@href="struct.DontDocMe.html#structfield.x"]' 'DontDocMe::x'
 pub struct DocMe;
 struct DontDocMe {
     x: usize,
diff --git a/tests/rustdoc/intra-doc/proc-macro.rs b/tests/rustdoc/intra-doc/proc-macro.rs
index e7c92259da1..ed18b9dbcfa 100644
--- a/tests/rustdoc/intra-doc/proc-macro.rs
+++ b/tests/rustdoc/intra-doc/proc-macro.rs
@@ -8,18 +8,18 @@ extern crate proc_macro_macro;
 pub use proc_macro_macro::{DeriveA, attr_a};
 use proc_macro_macro::{DeriveB, attr_b};
 
-// @has proc_macro/struct.Foo.html
-// @has - '//a/@href' 'derive.DeriveA.html'
-// @has - '//a/@href' 'attr.attr_a.html'
-// @has - '//a/@href' 'trait.DeriveTrait.html'
-// @has - '//a/@href' '../proc_macro_macro/derive.DeriveB.html'
-// @has - '//a/@href' '../proc_macro_macro/attr.attr_b.html'
+//@ has proc_macro/struct.Foo.html
+//@ has - '//a/@href' 'derive.DeriveA.html'
+//@ has - '//a/@href' 'attr.attr_a.html'
+//@ has - '//a/@href' 'trait.DeriveTrait.html'
+//@ has - '//a/@href' '../proc_macro_macro/derive.DeriveB.html'
+//@ has - '//a/@href' '../proc_macro_macro/attr.attr_b.html'
 /// Link to [DeriveA], [attr_a], [DeriveB], [attr_b], [DeriveTrait]
 pub struct Foo;
 
-// @has proc_macro/struct.Bar.html
-// @has - '//a/@href' 'derive.DeriveA.html'
-// @has - '//a/@href' 'attr.attr_a.html'
+//@ has proc_macro/struct.Bar.html
+//@ has - '//a/@href' 'derive.DeriveA.html'
+//@ has - '//a/@href' 'attr.attr_a.html'
 /// Link to [deriveA](derive@DeriveA) [attr](macro@attr_a)
 pub struct Bar;
 
diff --git a/tests/rustdoc/intra-doc/pub-use.rs b/tests/rustdoc/intra-doc/pub-use.rs
index f6347ed2eab..7c70adad7d9 100644
--- a/tests/rustdoc/intra-doc/pub-use.rs
+++ b/tests/rustdoc/intra-doc/pub-use.rs
@@ -5,13 +5,13 @@
 extern crate inner;
 
 /// [mod@std::env] [g]
-// @has outer/index.html
-// @has - '//a[@href="{{channel}}/std/env/index.html"]' "std::env"
-// @has - '//a[@href="fn.f.html"]' "g"
+//@ has outer/index.html
+//@ has - '//a[@href="{{channel}}/std/env/index.html"]' "std::env"
+//@ has - '//a[@href="fn.f.html"]' "g"
 pub use f as g;
 
 // Make sure the documentation is actually correct by documenting an inlined re-export
 /// [mod@std::env]
-// @has outer/fn.f.html
-// @has - '//a[@href="{{channel}}/std/env/index.html"]' "std::env"
+//@ has outer/fn.f.html
+//@ has - '//a[@href="{{channel}}/std/env/index.html"]' "std::env"
 pub use inner::f;
diff --git a/tests/rustdoc/intra-doc/raw-ident-self.rs b/tests/rustdoc/intra-doc/raw-ident-self.rs
index 1ed33db9300..5aecfadb362 100644
--- a/tests/rustdoc/intra-doc/raw-ident-self.rs
+++ b/tests/rustdoc/intra-doc/raw-ident-self.rs
@@ -4,8 +4,8 @@ pub mod r#impl {
 
     impl S {
         /// See [Self::b].
-        // @has raw_ident_self/impl/struct.S.html
-        // @has - '//a[@href="struct.S.html#method.b"]' 'Self::b'
+        //@ has raw_ident_self/impl/struct.S.html
+        //@ has - '//a[@href="struct.S.html#method.b"]' 'Self::b'
         pub fn a() {}
 
         pub fn b() {}
diff --git a/tests/rustdoc/intra-doc/reexport-additional-docs.rs b/tests/rustdoc/intra-doc/reexport-additional-docs.rs
index 7912fd3681e..1caa109d1fd 100644
--- a/tests/rustdoc/intra-doc/reexport-additional-docs.rs
+++ b/tests/rustdoc/intra-doc/reexport-additional-docs.rs
@@ -3,19 +3,19 @@
 #![crate_name = "foo"]
 extern crate inner;
 
-// @has foo/struct.Inner.html '//a[@href="fn.with_code.html"]' 'crate::with_code'
+//@ has foo/struct.Inner.html '//a[@href="fn.with_code.html"]' 'crate::with_code'
 /// [crate::with_code]
-// @has - '//a[@href="fn.with_code.html"]' 'different text'
+//@ has - '//a[@href="fn.with_code.html"]' 'different text'
 /// [different text][with_code]
-// @has - '//a[@href="fn.me_too.html"]' 'me_too'
+//@ has - '//a[@href="fn.me_too.html"]' 'me_too'
 #[doc = "[me_too]"]
-// @has - '//a[@href="fn.me_three.html"]' 'reference link'
+//@ has - '//a[@href="fn.me_three.html"]' 'reference link'
 /// This [reference link]
 #[doc = "has an attr in the way"]
 ///
 /// [reference link]: me_three
 // Should still resolve links from the original module in that scope
-// @has - '//a[@href="../inner/fn.f.html"]' 'f()'
+//@ has - '//a[@href="../inner/fn.f.html"]' 'f()'
 pub use inner::Inner;
 
 pub fn with_code() {}
diff --git a/tests/rustdoc/intra-doc/self-cache.rs b/tests/rustdoc/intra-doc/self-cache.rs
index 63bf7fa5768..26cbeb56ad5 100644
--- a/tests/rustdoc/intra-doc/self-cache.rs
+++ b/tests/rustdoc/intra-doc/self-cache.rs
@@ -1,12 +1,12 @@
 #![crate_name = "foo"]
-// @has foo/enum.E1.html '//a/@href' 'enum.E1.html#variant.A'
+//@ has foo/enum.E1.html '//a/@href' 'enum.E1.html#variant.A'
 
 /// [Self::A::b]
 pub enum E1 {
     A { b: usize }
 }
 
-// @has foo/enum.E2.html '//a/@href' 'enum.E2.html#variant.A'
+//@ has foo/enum.E2.html '//a/@href' 'enum.E2.html#variant.A'
 
 /// [Self::A::b]
 pub enum E2 {
diff --git a/tests/rustdoc/intra-doc/self.rs b/tests/rustdoc/intra-doc/self.rs
index 0ba7df8a78a..2c33be781e2 100644
--- a/tests/rustdoc/intra-doc/self.rs
+++ b/tests/rustdoc/intra-doc/self.rs
@@ -1,8 +1,8 @@
 #![crate_name = "foo"]
 
 
-// @has foo/index.html '//a/@href' 'struct.Foo.html#method.new'
-// @has foo/struct.Foo.html '//a/@href' 'struct.Foo.html#method.new'
+//@ has foo/index.html '//a/@href' 'struct.Foo.html#method.new'
+//@ has foo/struct.Foo.html '//a/@href' 'struct.Foo.html#method.new'
 
 /// Use [`new`] to create a new instance.
 ///
@@ -15,8 +15,8 @@ impl Foo {
     }
 }
 
-// @has foo/index.html '//a/@href' 'struct.Bar.html#method.new2'
-// @has foo/struct.Bar.html '//a/@href' 'struct.Bar.html#method.new2'
+//@ has foo/index.html '//a/@href' 'struct.Bar.html#method.new2'
+//@ has foo/struct.Bar.html '//a/@href' 'struct.Bar.html#method.new2'
 
 /// Use [`new2`] to create a new instance.
 ///
@@ -30,7 +30,7 @@ impl Bar {
 }
 
 pub struct MyStruct {
-    // @has foo/struct.MyStruct.html '//a/@href' 'struct.MyStruct.html#structfield.struct_field'
+    //@ has foo/struct.MyStruct.html '//a/@href' 'struct.MyStruct.html#structfield.struct_field'
 
     /// [`struct_field`]
     ///
@@ -39,7 +39,7 @@ pub struct MyStruct {
 }
 
 pub enum MyEnum {
-    // @has foo/enum.MyEnum.html '//a/@href' 'enum.MyEnum.html#variant.EnumVariant'
+    //@ has foo/enum.MyEnum.html '//a/@href' 'enum.MyEnum.html#variant.EnumVariant'
 
     /// [`EnumVariant`]
     ///
@@ -48,7 +48,7 @@ pub enum MyEnum {
 }
 
 pub union MyUnion {
-    // @has foo/union.MyUnion.html '//a/@href' 'union.MyUnion.html#structfield.union_field'
+    //@ has foo/union.MyUnion.html '//a/@href' 'union.MyUnion.html#structfield.union_field'
 
     /// [`union_field`]
     ///
@@ -57,21 +57,21 @@ pub union MyUnion {
 }
 
 pub trait MyTrait {
-    // @has foo/trait.MyTrait.html '//a/@href' 'trait.MyTrait.html#associatedtype.AssoType'
+    //@ has foo/trait.MyTrait.html '//a/@href' 'trait.MyTrait.html#associatedtype.AssoType'
 
     /// [`AssoType`]
     ///
     /// [`AssoType`]: Self::AssoType
     type AssoType;
 
-    // @has foo/trait.MyTrait.html '//a/@href' 'trait.MyTrait.html#associatedconstant.ASSO_CONST'
+    //@ has foo/trait.MyTrait.html '//a/@href' 'trait.MyTrait.html#associatedconstant.ASSO_CONST'
 
     /// [`ASSO_CONST`]
     ///
     /// [`ASSO_CONST`]: Self::ASSO_CONST
     const ASSO_CONST: i32 = 1;
 
-    // @has foo/trait.MyTrait.html '//a/@href' 'trait.MyTrait.html#method.asso_fn'
+    //@ has foo/trait.MyTrait.html '//a/@href' 'trait.MyTrait.html#method.asso_fn'
 
     /// [`asso_fn`]
     ///
@@ -80,7 +80,7 @@ pub trait MyTrait {
 }
 
 impl MyStruct {
-    // @has foo/struct.MyStruct.html '//a/@href' 'struct.MyStruct.html#method.for_impl'
+    //@ has foo/struct.MyStruct.html '//a/@href' 'struct.MyStruct.html#method.for_impl'
 
     /// [`for_impl`]
     ///
@@ -91,21 +91,21 @@ impl MyStruct {
 }
 
 impl MyTrait for MyStruct {
-    // @has foo/struct.MyStruct.html '//a/@href' 'struct.MyStruct.html#associatedtype.AssoType'
+    //@ has foo/struct.MyStruct.html '//a/@href' 'struct.MyStruct.html#associatedtype.AssoType'
 
     /// [`AssoType`]
     ///
     /// [`AssoType`]: Self::AssoType
     type AssoType = u32;
 
-    // @has foo/struct.MyStruct.html '//a/@href' 'struct.MyStruct.html#associatedconstant.ASSO_CONST'
+    //@ has foo/struct.MyStruct.html '//a/@href' 'struct.MyStruct.html#associatedconstant.ASSO_CONST'
 
     /// [`ASSO_CONST`]
     ///
     /// [`ASSO_CONST`]: Self::ASSO_CONST
     const ASSO_CONST: i32 = 10;
 
-    // @has foo/struct.MyStruct.html '//a/@href' 'struct.MyStruct.html#method.asso_fn'
+    //@ has foo/struct.MyStruct.html '//a/@href' 'struct.MyStruct.html#method.asso_fn'
 
     /// [`asso_fn`]
     ///
diff --git a/tests/rustdoc/intra-doc/trait-impl.rs b/tests/rustdoc/intra-doc/trait-impl.rs
index cf60dc1dbd5..925a63187f4 100644
--- a/tests/rustdoc/intra-doc/trait-impl.rs
+++ b/tests/rustdoc/intra-doc/trait-impl.rs
@@ -5,21 +5,21 @@ pub struct MyStruct;
 
 impl MyTrait for MyStruct {
 
-// @has foo/struct.MyStruct.html '//a/@href' 'struct.MyStruct.html#associatedtype.AssoType'
+//@ has foo/struct.MyStruct.html '//a/@href' 'struct.MyStruct.html#associatedtype.AssoType'
 
     /// [`AssoType`]
     ///
     /// [`AssoType`]: MyStruct::AssoType
     type AssoType = u32;
 
-// @has foo/struct.MyStruct.html '//a/@href' 'struct.MyStruct.html#associatedconstant.ASSO_CONST'
+//@ has foo/struct.MyStruct.html '//a/@href' 'struct.MyStruct.html#associatedconstant.ASSO_CONST'
 
     /// [`ASSO_CONST`]
     ///
     /// [`ASSO_CONST`]: MyStruct::ASSO_CONST
     const ASSO_CONST: i32 = 10;
 
-// @has foo/struct.MyStruct.html '//a/@href' 'struct.MyStruct.html#method.trait_fn'
+//@ has foo/struct.MyStruct.html '//a/@href' 'struct.MyStruct.html#method.trait_fn'
 
     /// [`trait_fn`]
     ///
diff --git a/tests/rustdoc/intra-doc/trait-item.rs b/tests/rustdoc/intra-doc/trait-item.rs
index e95dba33b5f..2563a768cc3 100644
--- a/tests/rustdoc/intra-doc/trait-item.rs
+++ b/tests/rustdoc/intra-doc/trait-item.rs
@@ -2,8 +2,8 @@
 
 /// Link to [S::assoc_fn()]
 /// Link to [Default::default()]
-// @has trait_item/struct.S.html '//*[@href="struct.S.html#method.assoc_fn"]' 'S::assoc_fn()'
-// @has - '//*[@href="{{channel}}/core/default/trait.Default.html#tymethod.default"]' 'Default::default()'
+//@ has trait_item/struct.S.html '//*[@href="struct.S.html#method.assoc_fn"]' 'S::assoc_fn()'
+//@ has - '//*[@href="{{channel}}/core/default/trait.Default.html#tymethod.default"]' 'Default::default()'
 pub struct S;
 
 impl S {
diff --git a/tests/rustdoc/intra-doc/true-false.rs b/tests/rustdoc/intra-doc/true-false.rs
index e02be9cabd2..ce38ee11d5c 100644
--- a/tests/rustdoc/intra-doc/true-false.rs
+++ b/tests/rustdoc/intra-doc/true-false.rs
@@ -1,8 +1,8 @@
 #![deny(rustdoc::broken_intra_doc_links)]
 #![crate_name = "foo"]
 
-// @has foo/index.html
-// @has - '//*[@id="main-content"]//a[@href="{{channel}}/std/primitive.bool.html"]' 'true'
-// @has - '//*[@id="main-content"]//a[@href="{{channel}}/std/primitive.bool.html"]' 'false'
+//@ has foo/index.html
+//@ has - '//*[@id="main-content"]//a[@href="{{channel}}/std/primitive.bool.html"]' 'true'
+//@ has - '//*[@id="main-content"]//a[@href="{{channel}}/std/primitive.bool.html"]' 'false'
 
 //! A `bool` is either [`true`] or [`false`].
diff --git a/tests/rustdoc/intra-doc/type-alias.rs b/tests/rustdoc/intra-doc/type-alias.rs
index 6c52082a277..43e27483445 100644
--- a/tests/rustdoc/intra-doc/type-alias.rs
+++ b/tests/rustdoc/intra-doc/type-alias.rs
@@ -15,5 +15,5 @@ impl Bar {
 /// The minimum is [`Self::MIN`].
 pub type Int = i32;
 
-// @has foo/type.Bar.html '//a[@href="struct.Foo.html#method.bar"]' 'Self::bar'
-// @has foo/type.Int.html '//a[@href="{{channel}}/std/primitive.i32.html#associatedconstant.MIN"]' 'Self::MIN'
+//@ has foo/type.Bar.html '//a[@href="struct.Foo.html#method.bar"]' 'Self::bar'
+//@ has foo/type.Int.html '//a[@href="{{channel}}/std/primitive.i32.html#associatedconstant.MIN"]' 'Self::MIN'
diff --git a/tests/rustdoc/issue-100204-inline-impl-through-glob-import.rs b/tests/rustdoc/issue-100204-inline-impl-through-glob-import.rs
index 95fd3c12d6f..7f05e57ec09 100644
--- a/tests/rustdoc/issue-100204-inline-impl-through-glob-import.rs
+++ b/tests/rustdoc/issue-100204-inline-impl-through-glob-import.rs
@@ -8,7 +8,7 @@ extern crate first;
 
 pub mod prelude {}
 
-// @has first/struct.Bot.html '//h4[@class="code-header"]' 'pub fn new() -> Bot'
-// @has second/struct.Bot.html '//h4[@class="code-header"]' 'pub fn new() -> Bot'
+//@ has first/struct.Bot.html '//h4[@class="code-header"]' 'pub fn new() -> Bot'
+//@ has second/struct.Bot.html '//h4[@class="code-header"]' 'pub fn new() -> Bot'
 #[doc(inline)]
 pub use first::*;
diff --git a/tests/rustdoc/issue-101743-bold-tag.rs b/tests/rustdoc/issue-101743-bold-tag.rs
index 631181fec66..a81767eeeeb 100644
--- a/tests/rustdoc/issue-101743-bold-tag.rs
+++ b/tests/rustdoc/issue-101743-bold-tag.rs
@@ -14,6 +14,6 @@ impl<const B: Word> Repr<B> {
     // If we change back to rendering the value of consts, check this doesn't add
     // a <b> tag, but escapes correctly
 
-    // @has foo/struct.Repr.html '//section[@id="associatedconstant.BASE"]/h4' '= _'
+    //@ has foo/struct.Repr.html '//section[@id="associatedconstant.BASE"]/h4' '= _'
     pub const BASE: IBig = base_as_ibig::<B>();
 }
diff --git a/tests/rustdoc/issue-105735-overlapping-reexport-2.rs b/tests/rustdoc/issue-105735-overlapping-reexport-2.rs
index 2905e7d44bc..946184c5a04 100644
--- a/tests/rustdoc/issue-105735-overlapping-reexport-2.rs
+++ b/tests/rustdoc/issue-105735-overlapping-reexport-2.rs
@@ -3,13 +3,13 @@
 #![crate_name = "foo"]
 #![no_std]
 
-// @has 'foo/index.html'
-// @has - '//*[@class="item-name"]/a[@class="type"]' 'AtomicU8'
-// @has - '//*[@class="item-name"]/a[@class="constant"]' 'AtomicU8'
+//@ has 'foo/index.html'
+//@ has - '//*[@class="item-name"]/a[@class="type"]' 'AtomicU8'
+//@ has - '//*[@class="item-name"]/a[@class="constant"]' 'AtomicU8'
 // We also ensure we don't have another item displayed.
-// @count - '//*[@id="main-content"]/*[@class="section-header"]' 2
-// @has - '//*[@id="main-content"]/*[@class="section-header"]' 'Type Aliases'
-// @has - '//*[@id="main-content"]/*[@class="section-header"]' 'Constants'
+//@ count - '//*[@id="main-content"]/*[@class="section-header"]' 2
+//@ has - '//*[@id="main-content"]/*[@class="section-header"]' 'Type Aliases'
+//@ has - '//*[@id="main-content"]/*[@class="section-header"]' 'Constants'
 
 mod other {
     pub type AtomicU8 = ();
diff --git a/tests/rustdoc/issue-105735-overlapping-reexport.rs b/tests/rustdoc/issue-105735-overlapping-reexport.rs
index 7fa7df7701a..0fd17fd9577 100644
--- a/tests/rustdoc/issue-105735-overlapping-reexport.rs
+++ b/tests/rustdoc/issue-105735-overlapping-reexport.rs
@@ -3,13 +3,13 @@
 #![crate_name = "foo"]
 #![no_std]
 
-// @has 'foo/index.html'
-// @has - '//*[@class="item-name"]/a[@class="struct"]' 'AtomicU8'
-// @has - '//*[@class="item-name"]/a[@class="constant"]' 'AtomicU8'
+//@ has 'foo/index.html'
+//@ has - '//*[@class="item-name"]/a[@class="struct"]' 'AtomicU8'
+//@ has - '//*[@class="item-name"]/a[@class="constant"]' 'AtomicU8'
 // We also ensure we don't have another item displayed.
-// @count - '//*[@id="main-content"]/*[@class="section-header"]' 2
-// @has - '//*[@id="main-content"]/*[@class="section-header"]' 'Structs'
-// @has - '//*[@id="main-content"]/*[@class="section-header"]' 'Constants'
+//@ count - '//*[@id="main-content"]/*[@class="section-header"]' 2
+//@ has - '//*[@id="main-content"]/*[@class="section-header"]' 'Structs'
+//@ has - '//*[@id="main-content"]/*[@class="section-header"]' 'Constants'
 
 mod thing {
     pub use core::sync::atomic::AtomicU8;
diff --git a/tests/rustdoc/issue-105952.rs b/tests/rustdoc/issue-105952.rs
index e3f1df0063d..173efb82f4b 100644
--- a/tests/rustdoc/issue-105952.rs
+++ b/tests/rustdoc/issue-105952.rs
@@ -9,6 +9,6 @@ pub trait Parse {
 }
 pub trait RenderRaw {}
 
-// @hasraw foo/trait.RenderRaw.html 'impl'
-// @hasraw foo/trait.RenderRaw.html 'ParseMode::Raw'
+//@ hasraw foo/trait.RenderRaw.html 'impl'
+//@ hasraw foo/trait.RenderRaw.html 'ParseMode::Raw'
 impl<T: Parse<PARSE_MODE = { ParseMode::Raw }>> RenderRaw for T {}
diff --git a/tests/rustdoc/issue-106142.rs b/tests/rustdoc/issue-106142.rs
index 41505e72405..52adc5dbbf1 100644
--- a/tests/rustdoc/issue-106142.rs
+++ b/tests/rustdoc/issue-106142.rs
@@ -1,5 +1,5 @@
-// @has 'issue_106142/a/index.html'
-// @count 'issue_106142/a/index.html' '//ul[@class="item-table"]//li//a' 1
+//@ has 'issue_106142/a/index.html'
+//@ count 'issue_106142/a/index.html' '//ul[@class="item-table"]//li//a' 1
 
 #![allow(rustdoc::broken_intra_doc_links)]
 
diff --git a/tests/rustdoc/issue-106421-not-internal.rs b/tests/rustdoc/issue-106421-not-internal.rs
index 1d744fba53f..f328a1036eb 100644
--- a/tests/rustdoc/issue-106421-not-internal.rs
+++ b/tests/rustdoc/issue-106421-not-internal.rs
@@ -4,5 +4,5 @@
 // In this case, the item shouldn't be documented, because regular users can't get at it.
 extern crate foo;
 
-// @!has issue_106421_not_internal/struct.FatalError.html '//*[@id="method.raise"]' 'fn raise'
+//@ !has issue_106421_not_internal/struct.FatalError.html '//*[@id="method.raise"]' 'fn raise'
 pub use foo::FatalError;
diff --git a/tests/rustdoc/issue-106421.rs b/tests/rustdoc/issue-106421.rs
index d4141a4ab0c..c2064c71090 100644
--- a/tests/rustdoc/issue-106421.rs
+++ b/tests/rustdoc/issue-106421.rs
@@ -4,5 +4,5 @@
 
 extern crate foo;
 
-// @has issue_106421/struct.FatalError.html '//*[@id="method.raise"]' 'fn raise'
+//@ has issue_106421/struct.FatalError.html '//*[@id="method.raise"]' 'fn raise'
 pub use foo::FatalError;
diff --git a/tests/rustdoc/issue-107350.rs b/tests/rustdoc/issue-107350.rs
index 75f378ed249..4ec9133e2d2 100644
--- a/tests/rustdoc/issue-107350.rs
+++ b/tests/rustdoc/issue-107350.rs
@@ -3,7 +3,7 @@
 
 #![crate_name = "foo"]
 
-// @has 'foo/oops/enum.OhNo.html'
+//@ has 'foo/oops/enum.OhNo.html'
 
 pub mod oops {
     pub use crate::oops::OhNo;
diff --git a/tests/rustdoc/issue-107995.rs b/tests/rustdoc/issue-107995.rs
index 1273e4fdd12..57669909aa1 100644
--- a/tests/rustdoc/issue-107995.rs
+++ b/tests/rustdoc/issue-107995.rs
@@ -2,26 +2,26 @@
 
 #![crate_name = "foo"]
 
-// @has 'foo/fn.foo.html'
-// @has - '//*[@class="docblock"]//a[@href="fn.bar.html"]' 'bar`'
+//@ has 'foo/fn.foo.html'
+//@ has - '//*[@class="docblock"]//a[@href="fn.bar.html"]' 'bar`'
 /// A foo, see also [ bar`]
 pub fn foo() {}
 
-// @has 'foo/fn.bar.html'
-// @has - '//*[@class="docblock"]' 'line Path line'
-// @has - '//*[@class="docblock"]//a[@href="struct.Path.html"]' 'Path'
+//@ has 'foo/fn.bar.html'
+//@ has - '//*[@class="docblock"]' 'line Path line'
+//@ has - '//*[@class="docblock"]//a[@href="struct.Path.html"]' 'Path'
 #[doc = "line ["]
 #[doc = "Path"]
 #[doc = "] line"]
 pub fn bar() {}
 
-// @has 'foo/fn.another.html'
-// @has - '//*[@class="docblock"]//a[@href="struct.Path.html"]' 'Path'
+//@ has 'foo/fn.another.html'
+//@ has - '//*[@class="docblock"]//a[@href="struct.Path.html"]' 'Path'
 /// [ `Path`]
 pub fn another() {}
 
-// @has 'foo/fn.last.html'
-// @has - '//*[@class="docblock"]//a[@href="struct.Path.html"]' 'Path'
+//@ has 'foo/fn.last.html'
+//@ has - '//*[@class="docblock"]//a[@href="struct.Path.html"]' 'Path'
 /// [ Path`]
 pub fn last() {}
 
diff --git a/tests/rustdoc/issue-108231.rs b/tests/rustdoc/issue-108231.rs
index 684f0494fd5..0d3ad1b0571 100644
--- a/tests/rustdoc/issue-108231.rs
+++ b/tests/rustdoc/issue-108231.rs
@@ -4,9 +4,9 @@
 
 #![crate_name = "foo"]
 
-// @has 'foo/index.html'
-// @count - '//*[@id="main-content"]//a[@class="macro"]' 1
-// @has - '//*[@id="main-content"]//a[@class="macro"]' 'foo'
+//@ has 'foo/index.html'
+//@ count - '//*[@id="main-content"]//a[@class="macro"]' 1
+//@ has - '//*[@id="main-content"]//a[@class="macro"]' 'foo'
 
 #[doc(hidden)]
 pub mod __internal {
diff --git a/tests/rustdoc/issue-108281.rs b/tests/rustdoc/issue-108281.rs
index 8e1b6ba88a6..ba6c570b59b 100644
--- a/tests/rustdoc/issue-108281.rs
+++ b/tests/rustdoc/issue-108281.rs
@@ -3,7 +3,7 @@
 
 #![crate_name = "foo"]
 
-// @has 'foo/index.html'
+//@ has 'foo/index.html'
 
 #[doc(hidden)]
 pub fn bar() {}
@@ -11,15 +11,15 @@ mod sub {
     pub fn public() {}
 }
 
-// @matches - '//*[@class="desc docblock-short"]' '^Displayed$'
+//@ matches - '//*[@class="desc docblock-short"]' '^Displayed$'
 /// Displayed
 #[doc(inline)]
 pub use crate::bar as Bar;
-// @matches - '//*[@class="desc docblock-short"]' '^Hello\sDisplayed$'
+//@ matches - '//*[@class="desc docblock-short"]' '^Hello\sDisplayed$'
 #[doc(inline)]
 /// Hello
 pub use crate::Bar as Bar2;
 
-// @matches - '//*[@class="desc docblock-short"]' '^Public$'
+//@ matches - '//*[@class="desc docblock-short"]' '^Public$'
 /// Public
 pub use crate::sub::public as Public;
diff --git a/tests/rustdoc/issue-108679-reexport-of-reexport.rs b/tests/rustdoc/issue-108679-reexport-of-reexport.rs
index 5f977801cfd..5c1b4bcbd83 100644
--- a/tests/rustdoc/issue-108679-reexport-of-reexport.rs
+++ b/tests/rustdoc/issue-108679-reexport-of-reexport.rs
@@ -5,12 +5,12 @@
 #![crate_name = "foo"]
 
 pub mod a {
-    // @has 'foo/a/index.html'
+    //@ has 'foo/a/index.html'
     // Should only contain "Structs".
-    // @count - '//*[@id="main-content"]//*[@class="item-table"]' 1
-    // @has - '//*[@id="structs"]' 'Structs'
-    // @has - '//*[@id="main-content"]//a[@href="struct.A.html"]' 'A'
-    // @has - '//*[@id="main-content"]//a[@href="struct.B.html"]' 'B'
+    //@ count - '//*[@id="main-content"]//*[@class="item-table"]' 1
+    //@ has - '//*[@id="structs"]' 'Structs'
+    //@ has - '//*[@id="main-content"]//a[@href="struct.A.html"]' 'A'
+    //@ has - '//*[@id="main-content"]//a[@href="struct.B.html"]' 'B'
     mod b {
         pub struct B;
     }
@@ -18,12 +18,12 @@ pub mod a {
     pub struct A;
 }
 
-// @has 'foo/index.html'
-// @!has - '//*[@id="structs"]' 'Structs'
-// @has - '//*[@id="reexports"]' 'Re-exports'
-// @has - '//*[@id="modules"]' 'Modules'
-// @has - '//*[@id="main-content"]//*[@id="reexport.A"]' 'pub use self::a::A;'
-// @has - '//*[@id="main-content"]//*[@id="reexport.B"]' 'pub use self::a::B;'
+//@ has 'foo/index.html'
+//@ !has - '//*[@id="structs"]' 'Structs'
+//@ has - '//*[@id="reexports"]' 'Re-exports'
+//@ has - '//*[@id="modules"]' 'Modules'
+//@ has - '//*[@id="main-content"]//*[@id="reexport.A"]' 'pub use self::a::A;'
+//@ has - '//*[@id="main-content"]//*[@id="reexport.B"]' 'pub use self::a::B;'
 // Should only contain "Modules" and "Re-exports".
-// @count - '//*[@id="main-content"]//*[@class="item-table"]' 2
+//@ count - '//*[@id="main-content"]//*[@class="item-table"]' 2
 pub use self::a::{A, B};
diff --git a/tests/rustdoc/issue-108925.rs b/tests/rustdoc/issue-108925.rs
index 9c36d0d71c4..a332771616d 100644
--- a/tests/rustdoc/issue-108925.rs
+++ b/tests/rustdoc/issue-108925.rs
@@ -1,7 +1,7 @@
-// @has issue_108925/enum.MyThing.html
-// @has - '//code' 'Shown'
-// @!has - '//code' 'NotShown'
-// @!has - '//code' '// some variants omitted'
+//@ has issue_108925/enum.MyThing.html
+//@ has - '//code' 'Shown'
+//@ !has - '//code' 'NotShown'
+//@ !has - '//code' '// some variants omitted'
 #[non_exhaustive]
 pub enum MyThing {
     Shown,
diff --git a/tests/rustdoc/issue-108931-anonymous-reexport.rs b/tests/rustdoc/issue-108931-anonymous-reexport.rs
index 302f7413398..300ee3baf05 100644
--- a/tests/rustdoc/issue-108931-anonymous-reexport.rs
+++ b/tests/rustdoc/issue-108931-anonymous-reexport.rs
@@ -10,12 +10,12 @@ mod bar {
     pub struct Bar;
 }
 
-// @has 'foo/index.html'
+//@ has 'foo/index.html'
 // We check that the only "h2" present are "Re-exports" and "Modules".
-// @count - '//*[@id="main-content"]/h2' 2
-// @has - '//*[@id="main-content"]/h2' 'Re-exports'
-// @has - '//*[@id="main-content"]/h2' 'Modules'
-// @has - '//*[@id="main-content"]//*[@class="item-table"]//li//code' 'pub use foo::Foo as _;'
-// @has - '//*[@id="main-content"]//*[@class="item-table"]//li//code' 'pub use bar::Bar as _;'
+//@ count - '//*[@id="main-content"]/h2' 2
+//@ has - '//*[@id="main-content"]/h2' 'Re-exports'
+//@ has - '//*[@id="main-content"]/h2' 'Modules'
+//@ has - '//*[@id="main-content"]//*[@class="item-table"]//li//code' 'pub use foo::Foo as _;'
+//@ has - '//*[@id="main-content"]//*[@class="item-table"]//li//code' 'pub use bar::Bar as _;'
 pub use foo::Foo as _;
 pub use bar::Bar as _;
diff --git a/tests/rustdoc/issue-109258-missing-private-inlining.rs b/tests/rustdoc/issue-109258-missing-private-inlining.rs
index 12c5556f132..7f010f160c4 100644
--- a/tests/rustdoc/issue-109258-missing-private-inlining.rs
+++ b/tests/rustdoc/issue-109258-missing-private-inlining.rs
@@ -2,23 +2,23 @@
 
 #![crate_name = "foo"]
 
-// @has 'foo/index.html'
+//@ has 'foo/index.html'
 // We should only have a "Re-exports" and a "Modules" headers.
-// @count - '//*[@id="main-content"]/h2[@class="section-header"]' 2
-// @has - '//*[@id="main-content"]/h2[@class="section-header"]' 'Re-exports'
-// @has - '//*[@id="main-content"]/h2[@class="section-header"]' 'Modules'
+//@ count - '//*[@id="main-content"]/h2[@class="section-header"]' 2
+//@ has - '//*[@id="main-content"]/h2[@class="section-header"]' 'Re-exports'
+//@ has - '//*[@id="main-content"]/h2[@class="section-header"]' 'Modules'
 
-// @has - '//*[@id="reexport.Foo"]' 'pub use crate::issue_109258::Foo;'
-// @has - '//*[@id="reexport.Foo"]//a[@href="issue_109258/struct.Foo.html"]' 'Foo'
-// @!has 'foo/struct.Foo.html'
+//@ has - '//*[@id="reexport.Foo"]' 'pub use crate::issue_109258::Foo;'
+//@ has - '//*[@id="reexport.Foo"]//a[@href="issue_109258/struct.Foo.html"]' 'Foo'
+//@ !has 'foo/struct.Foo.html'
 pub use crate::issue_109258::Foo;
 
-// @has 'foo/issue_109258/index.html'
+//@ has 'foo/issue_109258/index.html'
 // We should only have a "Structs" header.
-// @count - '//*[@id="main-content"]/h2[@class="section-header"]' 1
-// @has - '//*[@id="main-content"]/h2[@class="section-header"]' 'Structs'
-// @has - '//*[@id="main-content"]//a[@href="struct.Foo.html"]' 'Foo'
-// @has 'foo/issue_109258/struct.Foo.html'
+//@ count - '//*[@id="main-content"]/h2[@class="section-header"]' 1
+//@ has - '//*[@id="main-content"]/h2[@class="section-header"]' 'Structs'
+//@ has - '//*[@id="main-content"]//a[@href="struct.Foo.html"]' 'Foo'
+//@ has 'foo/issue_109258/struct.Foo.html'
 pub mod issue_109258 {
     mod priv_mod {
         pub struct Foo;
diff --git a/tests/rustdoc/issue-109449-doc-hidden-reexports.rs b/tests/rustdoc/issue-109449-doc-hidden-reexports.rs
index 9fb2f7c7c05..cc3679f6196 100644
--- a/tests/rustdoc/issue-109449-doc-hidden-reexports.rs
+++ b/tests/rustdoc/issue-109449-doc-hidden-reexports.rs
@@ -23,75 +23,75 @@ pub struct FooFoo;
 
 // Checking that re-exporting a `#[doc(hidden)]` item will NOT inline it.
 pub mod single_reexport {
-    // @has 'foo/single_reexport/index.html'
+    //@ has 'foo/single_reexport/index.html'
 
     // First we check that we have 4 type aliases.
-    // @count - '//*[@id="main-content"]/*[@class="item-table"]//code' 4
+    //@ count - '//*[@id="main-content"]/*[@class="item-table"]//code' 4
 
     // Then we check that we have the correct link for each re-export.
 
-    // @!has - '//*[@href="struct.Foo.html"]' 'Foo'
-    // @has - '//*[@id="reexport.Foo"]/code' 'pub use crate::private_module::Public as Foo;'
+    //@ !has - '//*[@href="struct.Foo.html"]' 'Foo'
+    //@ has - '//*[@id="reexport.Foo"]/code' 'pub use crate::private_module::Public as Foo;'
     pub use crate::private_module::Public as Foo;
-    // @!has - '//*[@href="type.Foo2.html"]' 'Foo2'
-    // @has - '//*[@id="reexport.Foo2"]/code' 'pub use crate::private_module::Bar as Foo2;'
+    //@ !has - '//*[@href="type.Foo2.html"]' 'Foo2'
+    //@ has - '//*[@id="reexport.Foo2"]/code' 'pub use crate::private_module::Bar as Foo2;'
     pub use crate::private_module::Bar as Foo2;
-    // @!has - '//*[@href="type.Yo.html"]' 'Yo'
-    // @has - '//*[@id="reexport.Yo"]/code' 'pub use crate::Bar3 as Yo;'
+    //@ !has - '//*[@href="type.Yo.html"]' 'Yo'
+    //@ has - '//*[@id="reexport.Yo"]/code' 'pub use crate::Bar3 as Yo;'
     pub use crate::Bar3 as Yo;
-    // @!has - '//*[@href="struct.Yo2.html"]' 'Yo2'
-    // @has - '//*[@id="reexport.Yo2"]/code' 'pub use crate::FooFoo as Yo2;'
+    //@ !has - '//*[@href="struct.Yo2.html"]' 'Yo2'
+    //@ has - '//*[@id="reexport.Yo2"]/code' 'pub use crate::FooFoo as Yo2;'
     pub use crate::FooFoo as Yo2;
 
     // Checking that each file is also created as expected.
-    // @!has 'foo/single_reexport/struct.Foo.html'
-    // @!has 'foo/single_reexport/type.Foo2.html'
-    // @!has 'foo/single_reexport/type.Yo.html'
-    // @!has 'foo/single_reexport/struct.Yo2.html'
+    //@ !has 'foo/single_reexport/struct.Foo.html'
+    //@ !has 'foo/single_reexport/type.Foo2.html'
+    //@ !has 'foo/single_reexport/type.Yo.html'
+    //@ !has 'foo/single_reexport/struct.Yo2.html'
 }
 
 // However, re-exporting an item inheriting `#[doc(hidden)]` will inline it.
 pub mod single_reexport_inherit_hidden {
-    // @has 'foo/single_reexport_inherit_hidden/index.html'
+    //@ has 'foo/single_reexport_inherit_hidden/index.html'
 
-    // @has - '//*[@href="struct.Foo3.html"]' 'Foo3'
+    //@ has - '//*[@href="struct.Foo3.html"]' 'Foo3'
     pub use crate::module::Public2 as Foo3;
-    // @has - '//*[@href="type.Foo4.html"]' 'Foo4'
+    //@ has - '//*[@href="type.Foo4.html"]' 'Foo4'
     pub use crate::module::Bar2 as Foo4;
 
-    // @has 'foo/single_reexport_inherit_hidden/struct.Foo3.html'
-    // @has 'foo/single_reexport_inherit_hidden/type.Foo4.html'
+    //@ has 'foo/single_reexport_inherit_hidden/struct.Foo3.html'
+    //@ has 'foo/single_reexport_inherit_hidden/type.Foo4.html'
 }
 
 pub mod single_reexport_no_inline {
     // First we ensure that we only have re-exports and no inlined items.
-    // @has 'foo/single_reexport_no_inline/index.html'
-    // @count - '//*[@id="main-content"]/*[@class="section-header"]' 1
-    // @has - '//*[@id="main-content"]/*[@class="section-header"]' 'Re-exports'
+    //@ has 'foo/single_reexport_no_inline/index.html'
+    //@ count - '//*[@id="main-content"]/*[@class="section-header"]' 1
+    //@ has - '//*[@id="main-content"]/*[@class="section-header"]' 'Re-exports'
 
     // Now we check that we don't have links to the items, just `pub use`.
-    // @has - '//*[@id="main-content"]//*' 'pub use crate::private_module::Public as XFoo;'
-    // @!has - '//*[@id="main-content"]//a' 'XFoo'
+    //@ has - '//*[@id="main-content"]//*' 'pub use crate::private_module::Public as XFoo;'
+    //@ !has - '//*[@id="main-content"]//a' 'XFoo'
     #[doc(no_inline)]
     pub use crate::private_module::Public as XFoo;
-    // @has - '//*[@id="main-content"]//*' 'pub use crate::private_module::Bar as Foo2;'
-    // @!has - '//*[@id="main-content"]//a' 'Foo2'
+    //@ has - '//*[@id="main-content"]//*' 'pub use crate::private_module::Bar as Foo2;'
+    //@ !has - '//*[@id="main-content"]//a' 'Foo2'
     #[doc(no_inline)]
     pub use crate::private_module::Bar as Foo2;
-    // @has - '//*[@id="main-content"]//*' 'pub use crate::Bar3 as Yo;'
-    // @!has - '//*[@id="main-content"]//a' 'Yo'
+    //@ has - '//*[@id="main-content"]//*' 'pub use crate::Bar3 as Yo;'
+    //@ !has - '//*[@id="main-content"]//a' 'Yo'
     #[doc(no_inline)]
     pub use crate::Bar3 as Yo;
-    // @has - '//*[@id="main-content"]//*' 'pub use crate::FooFoo as Yo2;'
-    // @!has - '//*[@id="main-content"]//a' 'Yo2'
+    //@ has - '//*[@id="main-content"]//*' 'pub use crate::FooFoo as Yo2;'
+    //@ !has - '//*[@id="main-content"]//a' 'Yo2'
     #[doc(no_inline)]
     pub use crate::FooFoo as Yo2;
-    // @has - '//*[@id="main-content"]//*' 'pub use crate::module::Public2 as Foo3;'
-    // @!has - '//*[@id="main-content"]//a' 'Foo3'
+    //@ has - '//*[@id="main-content"]//*' 'pub use crate::module::Public2 as Foo3;'
+    //@ !has - '//*[@id="main-content"]//a' 'Foo3'
     #[doc(no_inline)]
     pub use crate::module::Public2 as Foo3;
-    // @has - '//*[@id="main-content"]//*' 'pub use crate::module::Bar2 as Foo4;'
-    // @!has - '//*[@id="main-content"]//a' 'Foo4'
+    //@ has - '//*[@id="main-content"]//*' 'pub use crate::module::Bar2 as Foo4;'
+    //@ !has - '//*[@id="main-content"]//a' 'Foo4'
     #[doc(no_inline)]
     pub use crate::module::Bar2 as Foo4;
 }
@@ -100,25 +100,25 @@ pub mod single_reexport_no_inline {
 pub mod glob_reexport {
     // With glob re-exports, we don't inline `#[doc(hidden)]` items so only `module` items
     // should be inlined.
-    // @has 'foo/glob_reexport/index.html'
-    // @count - '//*[@id="main-content"]/*[@class="section-header"]' 3
-    // @has - '//*[@id="main-content"]/*[@class="section-header"]' 'Re-exports'
-    // @has - '//*[@id="main-content"]/*[@class="section-header"]' 'Structs'
-    // @has - '//*[@id="main-content"]/*[@class="section-header"]' 'Type Aliases'
+    //@ has 'foo/glob_reexport/index.html'
+    //@ count - '//*[@id="main-content"]/*[@class="section-header"]' 3
+    //@ has - '//*[@id="main-content"]/*[@class="section-header"]' 'Re-exports'
+    //@ has - '//*[@id="main-content"]/*[@class="section-header"]' 'Structs'
+    //@ has - '//*[@id="main-content"]/*[@class="section-header"]' 'Type Aliases'
 
     // Now we check we have 1 re-export and 2 inlined items.
     // If not item from a glob re-export is visible, we don't show the re-export.
-    // @!has - '//*[@id="main-content"]//*' 'pub use crate::private_module::*;'
+    //@ !has - '//*[@id="main-content"]//*' 'pub use crate::private_module::*;'
     pub use crate::private_module::*;
-    // @has - '//*[@id="main-content"]//*' 'pub use crate::*;'
+    //@ has - '//*[@id="main-content"]//*' 'pub use crate::*;'
     pub use crate::*;
     // This one should be inlined.
-    // @!has - '//*[@id="main-content"]//*' 'pub use crate::module::*;'
-    // @has - '//*[@id="main-content"]//a[@href="struct.Public2.html"]' 'Public2'
-    // @has - '//*[@id="main-content"]//a[@href="type.Bar2.html"]' 'Bar2'
+    //@ !has - '//*[@id="main-content"]//*' 'pub use crate::module::*;'
+    //@ has - '//*[@id="main-content"]//a[@href="struct.Public2.html"]' 'Public2'
+    //@ has - '//*[@id="main-content"]//a[@href="type.Bar2.html"]' 'Bar2'
     // And we check that the two files were created too.
-    // @has 'foo/glob_reexport/struct.Public2.html'
-    // @has 'foo/glob_reexport/type.Bar2.html'
+    //@ has 'foo/glob_reexport/struct.Public2.html'
+    //@ has 'foo/glob_reexport/type.Bar2.html'
     pub use crate::module::*;
 }
 
@@ -129,12 +129,12 @@ mod private {
 
 // Checking that `#[doc(hidden)]` re-exports documentation isn't generated.
 pub mod doc_hidden_reexport {
-    // @has 'foo/doc_hidden_reexport/index.html'
+    //@ has 'foo/doc_hidden_reexport/index.html'
     // Ensure there is only one item in this page and that it's a struct.
-    // @count - '//*[@class="item-name"]' 1
-    // @has - '//a[@class="struct"]' 'Reexport'
+    //@ count - '//*[@class="item-name"]' 1
+    //@ has - '//a[@class="struct"]' 'Reexport'
     // Check that the `#[doc(hidden)]` re-export's attributes are not taken into account.
-    // @has - '//*[@class="desc docblock-short"]' 'Visible. Original.'
+    //@ has - '//*[@class="desc docblock-short"]' 'Visible. Original.'
     /// Visible.
     pub use self::Bar3 as Reexport;
     /// Hidden.
diff --git a/tests/rustdoc/issue-109695-crate-doc-hidden.rs b/tests/rustdoc/issue-109695-crate-doc-hidden.rs
index 7a3e53a0d32..8dc077d1565 100644
--- a/tests/rustdoc/issue-109695-crate-doc-hidden.rs
+++ b/tests/rustdoc/issue-109695-crate-doc-hidden.rs
@@ -1,8 +1,8 @@
 // This test ensures that even if the crate module is `#[doc(hidden)]`, the file
 // is generated.
 
-// @has 'foo/index.html'
-// @has 'foo/all.html'
+//@ has 'foo/index.html'
+//@ has 'foo/all.html'
 
 #![crate_name = "foo"]
 #![doc(hidden)]
diff --git a/tests/rustdoc/issue-110422-inner-private.rs b/tests/rustdoc/issue-110422-inner-private.rs
index ca9ec70aaa4..31e28676879 100644
--- a/tests/rustdoc/issue-110422-inner-private.rs
+++ b/tests/rustdoc/issue-110422-inner-private.rs
@@ -6,22 +6,22 @@
 
 #![crate_name = "foo"]
 
-// @has 'foo/index.html'
+//@ has 'foo/index.html'
 // Checking there is no "trait" entry.
-// @count - '//*[@id="main-content"]/*[@class="section-header"]' 4
-// @has - '//*[@id="main-content"]/*[@class="section-header"]' 'Structs'
-// @has - '//*[@id="main-content"]/*[@class="section-header"]' 'Constants'
-// @has - '//*[@id="main-content"]/*[@class="section-header"]' 'Functions'
-// @has - '//*[@id="main-content"]/*[@class="section-header"]' 'Macros'
+//@ count - '//*[@id="main-content"]/*[@class="section-header"]' 4
+//@ has - '//*[@id="main-content"]/*[@class="section-header"]' 'Structs'
+//@ has - '//*[@id="main-content"]/*[@class="section-header"]' 'Constants'
+//@ has - '//*[@id="main-content"]/*[@class="section-header"]' 'Functions'
+//@ has - '//*[@id="main-content"]/*[@class="section-header"]' 'Macros'
 
-// @has - '//a[@href="fn.foo.html"]' 'foo'
+//@ has - '//a[@href="fn.foo.html"]' 'foo'
 fn foo() {
     fn bar() {}
 
-    // @has - '//a[@class="macro"]' 'visible_macro'
-    // @!has - '//a[@class="macro"]' 'non_visible_macro'
-    // @has 'foo/macro.visible_macro.html'
-    // @!has 'foo/macro.non_visible_macro.html'
+    //@ has - '//a[@class="macro"]' 'visible_macro'
+    //@ !has - '//a[@class="macro"]' 'non_visible_macro'
+    //@ has 'foo/macro.visible_macro.html'
+    //@ !has 'foo/macro.non_visible_macro.html'
     #[macro_export]
     macro_rules! visible_macro {
         () => {}
@@ -32,30 +32,30 @@ fn foo() {
     }
 }
 
-// @has 'foo/index.html'
-// @has - '//a[@href="struct.Bar.html"]' 'Bar'
+//@ has 'foo/index.html'
+//@ has - '//a[@href="struct.Bar.html"]' 'Bar'
 struct Bar;
 
 const BAR: i32 = {
-    // @!has - '//a[@href="fn.yo.html"]' 'yo'
-    // @!has 'foo/fn.yo.html'
+    //@ !has - '//a[@href="fn.yo.html"]' 'yo'
+    //@ !has 'foo/fn.yo.html'
     fn yo() {}
 
-    // @!has 'foo/index.html' '//a[@href="trait.Foo.html"]' 'Foo'
-    // @!has 'foo/trait.Foo.html'
+    //@ !has 'foo/index.html' '//a[@href="trait.Foo.html"]' 'Foo'
+    //@ !has 'foo/trait.Foo.html'
     trait Foo {
         fn babar() {}
     }
     impl Foo for Bar {}
 
-    // @has 'foo/struct.Bar.html'
-    // @has - '//*[@id="method.foo"]/*[@class="code-header"]' 'pub(crate) fn foo()'
-    // @count - '//*[@id="main-content"]/*[@class="section-header"]' 3
+    //@ has 'foo/struct.Bar.html'
+    //@ has - '//*[@id="method.foo"]/*[@class="code-header"]' 'pub(crate) fn foo()'
+    //@ count - '//*[@id="main-content"]/*[@class="section-header"]' 3
     // We now check that the `Foo` trait is not documented nor visible on `Bar` page.
-    // @has - '//*[@id="main-content"]/*[@class="section-header"]' 'Implementations'
-    // @has - '//*[@id="main-content"]/*[@class="section-header"]' 'Auto Trait Implementations'
-    // @has - '//*[@id="main-content"]/*[@class="section-header"]' 'Blanket Implementations'
-    // @!has - '//*[@href="trait.Foo.html#method.babar"]/*[@class="code-header"]' 'fn babar()'
+    //@ has - '//*[@id="main-content"]/*[@class="section-header"]' 'Implementations'
+    //@ has - '//*[@id="main-content"]/*[@class="section-header"]' 'Auto Trait Implementations'
+    //@ has - '//*[@id="main-content"]/*[@class="section-header"]' 'Blanket Implementations'
+    //@ !has - '//*[@href="trait.Foo.html#method.babar"]/*[@class="code-header"]' 'fn babar()'
     impl Bar {
         fn foo() {}
     }
diff --git a/tests/rustdoc/issue-110629-private-type-cycle.rs b/tests/rustdoc/issue-110629-private-type-cycle.rs
index e8847d7f125..22ea721fd44 100644
--- a/tests/rustdoc/issue-110629-private-type-cycle.rs
+++ b/tests/rustdoc/issue-110629-private-type-cycle.rs
@@ -4,8 +4,8 @@
 
 type Bar<'a, 'b> = impl PartialEq<Bar<'a, 'b>> + std::fmt::Debug;
 
-// @has issue_110629_private_type_cycle/type.Bar.html
-// @has - '//pre[@class="rust item-decl"]' \
+//@ has issue_110629_private_type_cycle/type.Bar.html
+//@ has - '//pre[@class="rust item-decl"]' \
 //     "pub(crate) type Bar<'a, 'b> = impl PartialEq<Bar<'a, 'b>> + Debug;"
 
 fn bar<'a, 'b>(i: &'a i32) -> Bar<'a, 'b> {
diff --git a/tests/rustdoc/issue-111064-reexport-trait-from-hidden-2.rs b/tests/rustdoc/issue-111064-reexport-trait-from-hidden-2.rs
index 65c26d6a837..4b80f508e7f 100644
--- a/tests/rustdoc/issue-111064-reexport-trait-from-hidden-2.rs
+++ b/tests/rustdoc/issue-111064-reexport-trait-from-hidden-2.rs
@@ -2,17 +2,17 @@
 #![no_core]
 #![crate_name = "foo"]
 
-// @files "foo" "['sidebar-items.js', 'all.html', 'hidden', 'index.html', 'struct.Bar.html', \
+//@ files "foo" "['sidebar-items.js', 'all.html', 'hidden', 'index.html', 'struct.Bar.html', \
 //        'visible']"
-// @files "foo/hidden" "['inner']"
-// @files "foo/hidden/inner" "['trait.Foo.html']"
-// @files "foo/visible" "['index.html', 'sidebar-items.js', 'trait.Foo.html']"
+//@ files "foo/hidden" "['inner']"
+//@ files "foo/hidden/inner" "['trait.Foo.html']"
+//@ files "foo/visible" "['index.html', 'sidebar-items.js', 'trait.Foo.html']"
 
-// @!has 'foo/hidden/index.html'
-// @!has 'foo/hidden/inner/index.html'
+//@ !has 'foo/hidden/index.html'
+//@ !has 'foo/hidden/inner/index.html'
 // FIXME: Should be `@!has`: https://github.com/rust-lang/rust/issues/111249
-// @has 'foo/hidden/inner/trait.Foo.html'
-// @matchesraw - '<meta http-equiv="refresh" content="0;URL=../../../foo/visible/trait.Foo.html">'
+//@ has 'foo/hidden/inner/trait.Foo.html'
+//@ matchesraw - '<meta http-equiv="refresh" content="0;URL=../../../foo/visible/trait.Foo.html">'
 #[doc(hidden)]
 pub mod hidden {
     pub mod inner {
@@ -23,13 +23,13 @@ pub mod hidden {
     }
 }
 
-// @has 'foo/visible/index.html'
-// @has 'foo/visible/trait.Foo.html'
+//@ has 'foo/visible/index.html'
+//@ has 'foo/visible/trait.Foo.html'
 #[doc(inline)]
 pub use hidden::inner as visible;
 
-// @has 'foo/struct.Bar.html'
-// @count - '//*[@id="impl-Foo-for-Bar"]' 1
+//@ has 'foo/struct.Bar.html'
+//@ count - '//*[@id="impl-Foo-for-Bar"]' 1
 pub struct Bar;
 
 impl visible::Foo for Bar {
diff --git a/tests/rustdoc/issue-111064-reexport-trait-from-hidden.rs b/tests/rustdoc/issue-111064-reexport-trait-from-hidden.rs
index a9ce4a34507..84ec818ef33 100644
--- a/tests/rustdoc/issue-111064-reexport-trait-from-hidden.rs
+++ b/tests/rustdoc/issue-111064-reexport-trait-from-hidden.rs
@@ -4,11 +4,11 @@
 
 #![crate_name = "foo"]
 
-// @has 'foo/index.html'
-// @has - '//*[@id="main-content"]//*[@class="item-name"]/a[@href="trait.Foo.html"]' 'Foo'
+//@ has 'foo/index.html'
+//@ has - '//*[@id="main-content"]//*[@class="item-name"]/a[@href="trait.Foo.html"]' 'Foo'
 
-// @has 'foo/trait.Foo.html'
-// @has - '//*[@id="main-content"]//*[@class="code-header"]' 'fn test()'
+//@ has 'foo/trait.Foo.html'
+//@ has - '//*[@id="main-content"]//*[@class="code-header"]' 'fn test()'
 
 #[doc(hidden)]
 mod hidden {
diff --git a/tests/rustdoc/issue-111249-file-creation.rs b/tests/rustdoc/issue-111249-file-creation.rs
index afd65ddaf94..89a25aef97d 100644
--- a/tests/rustdoc/issue-111249-file-creation.rs
+++ b/tests/rustdoc/issue-111249-file-creation.rs
@@ -2,20 +2,20 @@
 #![feature(no_core)]
 #![no_core]
 
-// @files "foo" "['all.html', 'visible', 'index.html', 'sidebar-items.js', 'hidden', \
+//@ files "foo" "['all.html', 'visible', 'index.html', 'sidebar-items.js', 'hidden', \
 //        'struct.Bar.html']"
-// @files "foo/visible" "['trait.Foo.html', 'index.html', 'sidebar-items.js']"
-// @files "foo/hidden" "['inner']"
-// @files "foo/hidden/inner" "['trait.Foo.html']"
+//@ files "foo/visible" "['trait.Foo.html', 'index.html', 'sidebar-items.js']"
+//@ files "foo/hidden" "['inner']"
+//@ files "foo/hidden/inner" "['trait.Foo.html']"
 
 // The following five should not fail!
-// @!has 'foo/hidden/index.html'
-// @!has 'foo/hidden/inner/index.html'
+//@ !has 'foo/hidden/index.html'
+//@ !has 'foo/hidden/inner/index.html'
 // FIXME: Should be `@!has`: https://github.com/rust-lang/rust/issues/111249
-// @has 'foo/hidden/inner/trait.Foo.html'
-// @matchesraw - '<meta http-equiv="refresh" content="0;URL=../../../foo/visible/trait.Foo.html">'
-// @!has 'foo/hidden/inner/inner_hidden/index.html'
-// @!has 'foo/hidden/inner/inner_hidden/trait.HiddenFoo.html'
+//@ has 'foo/hidden/inner/trait.Foo.html'
+//@ matchesraw - '<meta http-equiv="refresh" content="0;URL=../../../foo/visible/trait.Foo.html">'
+//@ !has 'foo/hidden/inner/inner_hidden/index.html'
+//@ !has 'foo/hidden/inner/inner_hidden/trait.HiddenFoo.html'
 #[doc(hidden)]
 pub mod hidden {
     pub mod inner {
@@ -28,13 +28,13 @@ pub mod hidden {
     }
 }
 
-// @has 'foo/visible/index.html'
-// @has 'foo/visible/trait.Foo.html'
+//@ has 'foo/visible/index.html'
+//@ has 'foo/visible/trait.Foo.html'
 #[doc(inline)]
 pub use hidden::inner as visible;
 
-// @has 'foo/struct.Bar.html'
-// @count - '//*[@id="impl-Foo-for-Bar"]' 1
+//@ has 'foo/struct.Bar.html'
+//@ count - '//*[@id="impl-Foo-for-Bar"]' 1
 pub struct Bar;
 
 impl visible::Foo for Bar {}
diff --git a/tests/rustdoc/issue-113982-doc_auto_cfg-reexport-foreign.rs b/tests/rustdoc/issue-113982-doc_auto_cfg-reexport-foreign.rs
index 6d84ceb0165..c083d9495f4 100644
--- a/tests/rustdoc/issue-113982-doc_auto_cfg-reexport-foreign.rs
+++ b/tests/rustdoc/issue-113982-doc_auto_cfg-reexport-foreign.rs
@@ -6,14 +6,14 @@
 
 extern crate colors;
 
-// @has 'foo/index.html' '//*[@class="stab portability"]' 'Non-colors'
-// @has 'foo/struct.Color.html' '//*[@class="stab portability"]' \
+//@ has 'foo/index.html' '//*[@class="stab portability"]' 'Non-colors'
+//@ has 'foo/struct.Color.html' '//*[@class="stab portability"]' \
 //      'Available on non-crate feature colors only.'
 #[cfg(not(feature = "colors"))]
 pub use colors::*;
 
-// @has 'foo/index.html' '//*[@class="stab portability"]' 'Non-fruits'
-// @has 'foo/struct.Red.html' '//*[@class="stab portability"]' \
+//@ has 'foo/index.html' '//*[@class="stab portability"]' 'Non-fruits'
+//@ has 'foo/struct.Red.html' '//*[@class="stab portability"]' \
 //      'Available on non-crate feature fruits only.'
 #[cfg(not(feature = "fruits"))]
 pub use colors::Color as Red;
diff --git a/tests/rustdoc/issue-115295-macro-const-display.rs b/tests/rustdoc/issue-115295-macro-const-display.rs
index 2916c7a84a1..0dadb76ae5c 100644
--- a/tests/rustdoc/issue-115295-macro-const-display.rs
+++ b/tests/rustdoc/issue-115295-macro-const-display.rs
@@ -1,9 +1,9 @@
 #![crate_name = "foo"]
 
-// @has foo/trait.Trait.html
+//@ has foo/trait.Trait.html
 pub trait Trait<T> {}
 
-// @has foo/struct.WithConst.html
+//@ has foo/struct.WithConst.html
 pub struct WithConst<const N: usize>;
 
 macro_rules! spans_from_macro {
@@ -22,19 +22,19 @@ macro_rules! spans_from_macro {
     };
 }
 
-// @has - '//*[@class="impl"]//h3[@class="code-header"]' \
+//@ has - '//*[@class="impl"]//h3[@class="code-header"]' \
 //     "impl Trait<WithConst<41>> for WithConst<41>"
 impl Trait<WithConst<41>> for WithConst<41> {}
 
-// @has - '//*[@class="impl"]//h3[@class="code-header"]' \
+//@ has - '//*[@class="impl"]//h3[@class="code-header"]' \
 //     "impl WithConst<42>"
-// @has - '//*[@class="impl"]//h3[@class="code-header"]' \
+//@ has - '//*[@class="impl"]//h3[@class="code-header"]' \
 //     "impl Trait<WithConst<42>> for WithConst<42>"
-// @has - '//*[@class="impl"]//h3[@class="code-header"]' \
+//@ has - '//*[@class="impl"]//h3[@class="code-header"]' \
 //     "impl Trait<WithConst<43>> for WithConst<{ 43 }>"
-// @has - '//*[@class="impl"]//h3[@class="code-header"]' \
+//@ has - '//*[@class="impl"]//h3[@class="code-header"]' \
 //     "impl Trait<WithConst<44>> for WithConst<44>"
 
-// @has foo/struct.Other.html
-// @has - //pre "pub field: WithConst<42>"
+//@ has foo/struct.Other.html
+//@ has - //pre "pub field: WithConst<42>"
 spans_from_macro!();
diff --git a/tests/rustdoc/issue-118180-empty-tuple-struct.rs b/tests/rustdoc/issue-118180-empty-tuple-struct.rs
index bc6ddbe5def..2cd1df27b2b 100644
--- a/tests/rustdoc/issue-118180-empty-tuple-struct.rs
+++ b/tests/rustdoc/issue-118180-empty-tuple-struct.rs
@@ -1,9 +1,9 @@
-// @has issue_118180_empty_tuple_struct/enum.Enum.html
+//@ has issue_118180_empty_tuple_struct/enum.Enum.html
 pub enum Enum {
-    // @has - '//*[@id="variant.Empty"]//h3' 'Empty()'
+    //@ has - '//*[@id="variant.Empty"]//h3' 'Empty()'
     Empty(),
 }
 
-// @has issue_118180_empty_tuple_struct/struct.Empty.html
-// @has - '//pre/code' 'Empty()'
+//@ has issue_118180_empty_tuple_struct/struct.Empty.html
+//@ has - '//pre/code' 'Empty()'
 pub struct Empty();
diff --git a/tests/rustdoc/issue-99221-multiple-macro-rules-w-same-name.rs b/tests/rustdoc/issue-99221-multiple-macro-rules-w-same-name.rs
index f4f62717cea..e7fb4fb3f0e 100644
--- a/tests/rustdoc/issue-99221-multiple-macro-rules-w-same-name.rs
+++ b/tests/rustdoc/issue-99221-multiple-macro-rules-w-same-name.rs
@@ -9,7 +9,7 @@ extern crate issue_99221_aux;
 
 pub use issue_99221_aux::*;
 
-// @count foo/index.html '//a[@class="macro"]' 1
+//@ count foo/index.html '//a[@class="macro"]' 1
 
 #[macro_export]
 macro_rules! print {
diff --git a/tests/rustdoc/issue-99221-multiple-structs-w-same-name.rs b/tests/rustdoc/issue-99221-multiple-structs-w-same-name.rs
index 4852ee71da7..8758342fe07 100644
--- a/tests/rustdoc/issue-99221-multiple-structs-w-same-name.rs
+++ b/tests/rustdoc/issue-99221-multiple-structs-w-same-name.rs
@@ -9,6 +9,6 @@ extern crate issue_99221_aux;
 
 pub use issue_99221_aux::*;
 
-// @count foo/index.html '//a[@class="struct"][@title="struct foo::Print"]' 1
+//@ count foo/index.html '//a[@class="struct"][@title="struct foo::Print"]' 1
 
 pub struct Print;
diff --git a/tests/rustdoc/issue-99734-multiple-foreigns-w-same-name.rs b/tests/rustdoc/issue-99734-multiple-foreigns-w-same-name.rs
index 9c94fdd9160..d7c4f1db320 100644
--- a/tests/rustdoc/issue-99734-multiple-foreigns-w-same-name.rs
+++ b/tests/rustdoc/issue-99734-multiple-foreigns-w-same-name.rs
@@ -9,7 +9,7 @@ extern crate issue_99734_aux;
 
 pub use issue_99734_aux::*;
 
-// @count foo/index.html '//a[@class="fn"][@title="fn foo::main"]' 1
+//@ count foo/index.html '//a[@class="fn"][@title="fn foo::main"]' 1
 
 extern "C" {
     pub fn main() -> std::ffi::c_int;
diff --git a/tests/rustdoc/issue-99734-multiple-mods-w-same-name.rs b/tests/rustdoc/issue-99734-multiple-mods-w-same-name.rs
index 41aeb30a461..627cfc0b80b 100644
--- a/tests/rustdoc/issue-99734-multiple-mods-w-same-name.rs
+++ b/tests/rustdoc/issue-99734-multiple-mods-w-same-name.rs
@@ -9,6 +9,6 @@ extern crate issue_99734_aux;
 
 pub use issue_99734_aux::*;
 
-// @count foo/index.html '//a[@class="mod"][@title="mod foo::task"]' 1
+//@ count foo/index.html '//a[@class="mod"][@title="mod foo::task"]' 1
 
 pub mod task {}
diff --git a/tests/rustdoc/item-desc-list-at-start.rs b/tests/rustdoc/item-desc-list-at-start.rs
index d88c61d333e..fbcc36066f1 100644
--- a/tests/rustdoc/item-desc-list-at-start.rs
+++ b/tests/rustdoc/item-desc-list-at-start.rs
@@ -1,7 +1,7 @@
-// @has item_desc_list_at_start/index.html
-// @count - '//ul[@class="item-table"]/li/div/li' 0
-// @count - '//ul[@class="item-table"]/li' 1
-// @snapshot item-table - '//ul[@class="item-table"]'
+//@ has item_desc_list_at_start/index.html
+//@ count - '//ul[@class="item-table"]/li/div/li' 0
+//@ count - '//ul[@class="item-table"]/li' 1
+//@ snapshot item-table - '//ul[@class="item-table"]'
 
 // based on https://docs.rs/gl_constants/0.1.1/src/gl_constants/lib.rs.html#16
 
diff --git a/tests/rustdoc/jump-to-def-doc-links-calls.rs b/tests/rustdoc/jump-to-def-doc-links-calls.rs
index 4101058edbf..61856978773 100644
--- a/tests/rustdoc/jump-to-def-doc-links-calls.rs
+++ b/tests/rustdoc/jump-to-def-doc-links-calls.rs
@@ -2,21 +2,21 @@
 
 #![crate_name = "foo"]
 
-// @has 'src/foo/jump-to-def-doc-links-calls.rs.html'
+//@ has 'src/foo/jump-to-def-doc-links-calls.rs.html'
 
-// @has - '//a[@href="../../foo/struct.Bar.html"]' 'Bar'
+//@ has - '//a[@href="../../foo/struct.Bar.html"]' 'Bar'
 pub struct Bar;
 
 impl std::default::Default for Bar {
-    // @has - '//a[@href="#20-22"]' 'Self::new'
+    //@ has - '//a[@href="#20-22"]' 'Self::new'
     fn default() -> Self {
         Self::new()
     }
 }
 
-// @has - '//a[@href="#8"]' 'Bar'
+//@ has - '//a[@href="#8"]' 'Bar'
 impl Bar {
-     // @has - '//a[@href="#24-26"]' 'Self::bar'
+     //@ has - '//a[@href="#24-26"]' 'Self::bar'
      pub fn new()-> Self {
          Self::bar()
      }
diff --git a/tests/rustdoc/jump-to-def-doc-links.rs b/tests/rustdoc/jump-to-def-doc-links.rs
index 1722aa40437..2abb52e0a00 100644
--- a/tests/rustdoc/jump-to-def-doc-links.rs
+++ b/tests/rustdoc/jump-to-def-doc-links.rs
@@ -2,19 +2,19 @@
 
 #![crate_name = "foo"]
 
-// @has 'src/foo/jump-to-def-doc-links.rs.html'
+//@ has 'src/foo/jump-to-def-doc-links.rs.html'
 
-// @has - '//a[@href="../../foo/struct.Bar.html"]' 'Bar'
-// @has - '//a[@href="../../foo/struct.Foo.html"]' 'Foo'
+//@ has - '//a[@href="../../foo/struct.Bar.html"]' 'Bar'
+//@ has - '//a[@href="../../foo/struct.Foo.html"]' 'Foo'
 pub struct Bar; pub struct Foo;
 
-// @has - '//a[@href="../../foo/enum.Enum.html"]' 'Enum'
+//@ has - '//a[@href="../../foo/enum.Enum.html"]' 'Enum'
 pub enum Enum {
     Variant1(String),
     Variant2(u8),
 }
 
-// @has - '//a[@href="../../foo/struct.Struct.html"]' 'Struct'
+//@ has - '//a[@href="../../foo/struct.Struct.html"]' 'Struct'
 pub struct Struct {
     pub a: u8,
     b: Foo,
@@ -27,7 +27,7 @@ impl Struct {
     fn bar(&self) {}
 }
 
-// @has - '//a[@href="../../foo/trait.Trait.html"]' 'Trait'
+//@ has - '//a[@href="../../foo/trait.Trait.html"]' 'Trait'
 pub trait Trait {
     fn foo();
 }
@@ -36,16 +36,16 @@ impl Trait for Struct {
     fn foo() {}
 }
 
-// @has - '//a[@href="../../foo/union.Union.html"]' 'Union'
+//@ has - '//a[@href="../../foo/union.Union.html"]' 'Union'
 pub union Union {
     pub a: u16,
     pub f: u32,
 }
 
-// @has - '//a[@href="../../foo/fn.bar.html"]' 'bar'
+//@ has - '//a[@href="../../foo/fn.bar.html"]' 'bar'
 pub fn bar(b: Bar) {
      let x = Foo;
 }
 
-// @has - '//a[@href="../../foo/bar/index.html"]' 'bar'
+//@ has - '//a[@href="../../foo/bar/index.html"]' 'bar'
 pub mod bar {}
diff --git a/tests/rustdoc/jump-to-def-macro.rs b/tests/rustdoc/jump-to-def-macro.rs
index e8e97a442dd..680477937c6 100644
--- a/tests/rustdoc/jump-to-def-macro.rs
+++ b/tests/rustdoc/jump-to-def-macro.rs
@@ -4,12 +4,12 @@
 
 #![crate_name = "foo"]
 
-// @has 'src/foo/jump-to-def-macro.rs.html'
+//@ has 'src/foo/jump-to-def-macro.rs.html'
 
 #[macro_use]
 extern crate jump_to_def_macro;
 
-// @has - '//a[@href="../../jump_to_def_macro/macro.symbols.html"]' 'symbols!'
+//@ has - '//a[@href="../../jump_to_def_macro/macro.symbols.html"]' 'symbols!'
 symbols! {
     A = 12
 }
diff --git a/tests/rustdoc/jump-to-non-local-method.rs b/tests/rustdoc/jump-to-non-local-method.rs
index bc44d9a9708..e2f530425f0 100644
--- a/tests/rustdoc/jump-to-non-local-method.rs
+++ b/tests/rustdoc/jump-to-non-local-method.rs
@@ -2,46 +2,46 @@
 
 #![crate_name = "foo"]
 
-// @has 'src/foo/jump-to-non-local-method.rs.html'
+//@ has 'src/foo/jump-to-non-local-method.rs.html'
 
-// @has - '//a[@href="{{channel}}/core/sync/atomic/struct.AtomicIsize.html"]' 'std::sync::atomic::AtomicIsize'
+//@ has - '//a[@href="{{channel}}/core/sync/atomic/struct.AtomicIsize.html"]' 'std::sync::atomic::AtomicIsize'
 use std::sync::atomic::AtomicIsize;
-// @has - '//a[@href="{{channel}}/std/io/trait.Read.html"]' 'std::io::Read'
+//@ has - '//a[@href="{{channel}}/std/io/trait.Read.html"]' 'std::io::Read'
 use std::io::Read;
-// @has - '//a[@href="{{channel}}/std/io/index.html"]' 'std::io'
+//@ has - '//a[@href="{{channel}}/std/io/index.html"]' 'std::io'
 use std::io;
-// @has - '//a[@href="{{channel}}/std/process/fn.exit.html"]' 'std::process::exit'
+//@ has - '//a[@href="{{channel}}/std/process/fn.exit.html"]' 'std::process::exit'
 use std::process::exit;
 use std::cmp::Ordering;
 use std::marker::PhantomData;
 
 pub fn bar2<T: Read>(readable: T) {
-    // @has - '//a[@href="{{channel}}/std/io/trait.Read.html#tymethod.read"]' 'read'
+    //@ has - '//a[@href="{{channel}}/std/io/trait.Read.html#tymethod.read"]' 'read'
     let _ = readable.read(&mut []);
 }
 
 pub fn bar() {
-    // @has - '//a[@href="{{channel}}/core/sync/atomic/struct.AtomicIsize.html#method.new"]' 'AtomicIsize::new'
+    //@ has - '//a[@href="{{channel}}/core/sync/atomic/struct.AtomicIsize.html#method.new"]' 'AtomicIsize::new'
     let _ = AtomicIsize::new(0);
-    // @has - '//a[@href="#48"]' 'local_private'
+    //@ has - '//a[@href="#48"]' 'local_private'
     local_private();
 }
 
 pub fn extern_call() {
-    // @has - '//a[@href="{{channel}}/std/process/fn.exit.html"]' 'exit'
+    //@ has - '//a[@href="{{channel}}/std/process/fn.exit.html"]' 'exit'
     exit(0);
 }
 
 pub fn macro_call() -> Result<(), ()> {
-    // @has - '//a[@href="{{channel}}/core/macro.try.html"]' 'try!'
+    //@ has - '//a[@href="{{channel}}/core/macro.try.html"]' 'try!'
     try!(Err(()));
     Ok(())
 }
 
 pub fn variant() {
-    // @has - '//a[@href="{{channel}}/core/cmp/enum.Ordering.html#variant.Less"]' 'Ordering::Less'
+    //@ has - '//a[@href="{{channel}}/core/cmp/enum.Ordering.html#variant.Less"]' 'Ordering::Less'
     let _ = Ordering::Less;
-    // @has - '//a[@href="{{channel}}/core/marker/struct.PhantomData.html"]' 'PhantomData'
+    //@ has - '//a[@href="{{channel}}/core/marker/struct.PhantomData.html"]' 'PhantomData'
     let _: PhantomData::<usize> = PhantomData;
 }
 
diff --git a/tests/rustdoc/keyword.rs b/tests/rustdoc/keyword.rs
index 4d047af3255..0157c35288e 100644
--- a/tests/rustdoc/keyword.rs
+++ b/tests/rustdoc/keyword.rs
@@ -2,22 +2,22 @@
 
 #![feature(rustdoc_internals)]
 
-// @has foo/index.html '//h2[@id="keywords"]' 'Keywords'
-// @has foo/index.html '//a[@href="keyword.match.html"]' 'match'
-// @has foo/index.html '//div[@class="sidebar-elems"]//li/a' 'Keywords'
-// @has foo/index.html '//div[@class="sidebar-elems"]//li/a/@href' '#keywords'
-// @has foo/keyword.match.html '//a[@class="keyword"]' 'match'
-// @has foo/keyword.match.html '//h1' 'Keyword match'
-// @has foo/keyword.match.html '//section[@id="main-content"]//div[@class="docblock"]//p' 'this is a test!'
-// @has foo/index.html '//a/@href' '../foo/index.html'
-// @!has foo/foo/index.html
-// @!has-dir foo/foo
-// @!has foo/index.html '//span' '🔒'
+//@ has foo/index.html '//h2[@id="keywords"]' 'Keywords'
+//@ has foo/index.html '//a[@href="keyword.match.html"]' 'match'
+//@ has foo/index.html '//div[@class="sidebar-elems"]//li/a' 'Keywords'
+//@ has foo/index.html '//div[@class="sidebar-elems"]//li/a/@href' '#keywords'
+//@ has foo/keyword.match.html '//a[@class="keyword"]' 'match'
+//@ has foo/keyword.match.html '//h1' 'Keyword match'
+//@ has foo/keyword.match.html '//section[@id="main-content"]//div[@class="docblock"]//p' 'this is a test!'
+//@ has foo/index.html '//a/@href' '../foo/index.html'
+//@ !has foo/foo/index.html
+//@ !has-dir foo/foo
+//@ !has foo/index.html '//span' '🔒'
 #[doc(keyword = "match")]
 /// this is a test!
 mod foo{}
 
-// @has foo/keyword.foo.html '//section[@id="main-content"]//div[@class="docblock"]//p' 'hello'
+//@ has foo/keyword.foo.html '//section[@id="main-content"]//div[@class="docblock"]//p' 'hello'
 #[doc(keyword = "foo")]
 /// hello
 mod bar {}
diff --git a/tests/rustdoc/legacy-const-generic.rs b/tests/rustdoc/legacy-const-generic.rs
index 3a488bdd208..41df535f3e0 100644
--- a/tests/rustdoc/legacy-const-generic.rs
+++ b/tests/rustdoc/legacy-const-generic.rs
@@ -1,15 +1,15 @@
 #![crate_name = "foo"]
 #![feature(rustc_attrs)]
 
-// @has 'foo/fn.foo.html'
-// @has - '//pre[@class="rust item-decl"]' 'fn foo(x: usize, const Y: usize, z: usize) -> [usize; 3]'
+//@ has 'foo/fn.foo.html'
+//@ has - '//pre[@class="rust item-decl"]' 'fn foo(x: usize, const Y: usize, z: usize) -> [usize; 3]'
 #[rustc_legacy_const_generics(1)]
 pub fn foo<const Y: usize>(x: usize, z: usize) -> [usize; 3] {
     [x, Y, z]
 }
 
-// @has 'foo/fn.bar.html'
-// @has - '//pre[@class="rust item-decl"]' 'fn bar(x: usize, const Y: usize, const Z: usize) -> [usize; 3]'
+//@ has 'foo/fn.bar.html'
+//@ has - '//pre[@class="rust item-decl"]' 'fn bar(x: usize, const Y: usize, const Z: usize) -> [usize; 3]'
 #[rustc_legacy_const_generics(1, 2)]
 pub fn bar<const Y: usize, const Z: usize>(x: usize) -> [usize; 3] {
     [x, Y, z]
diff --git a/tests/rustdoc/lifetime-name.rs b/tests/rustdoc/lifetime-name.rs
index 15e09f5165a..1e583f1811d 100644
--- a/tests/rustdoc/lifetime-name.rs
+++ b/tests/rustdoc/lifetime-name.rs
@@ -1,5 +1,5 @@
 #![crate_name = "foo"]
 
-// @has 'foo/type.Resolutions.html'
-// @has - '//pre[@class="rust item-decl"]' "pub type Resolutions<'tcx> = &'tcx u8;"
+//@ has 'foo/type.Resolutions.html'
+//@ has - '//pre[@class="rust item-decl"]' "pub type Resolutions<'tcx> = &'tcx u8;"
 pub type Resolutions<'tcx> = &'tcx u8;
diff --git a/tests/rustdoc/line-breaks.rs b/tests/rustdoc/line-breaks.rs
index 0f760d51973..b82894ab68f 100644
--- a/tests/rustdoc/line-breaks.rs
+++ b/tests/rustdoc/line-breaks.rs
@@ -3,7 +3,7 @@
 use std::fmt::Display;
 use std::ops::Add;
 
-// @matches foo/fn.function_with_a_really_long_name.html '//*[@class="rust item-decl"]//code' "\
+//@ matches foo/fn.function_with_a_really_long_name.html '//*[@class="rust item-decl"]//code' "\
 //     function_with_a_really_long_name\(\n\
 //    \    parameter_one: i32,\n\
 //    \    parameter_two: i32,\n\
@@ -12,13 +12,13 @@ pub fn function_with_a_really_long_name(parameter_one: i32, parameter_two: i32)
     Some(parameter_one + parameter_two)
 }
 
-// @matches foo/fn.short_name.html '//*[@class="rust item-decl"]//code' \
+//@ matches foo/fn.short_name.html '//*[@class="rust item-decl"]//code' \
 //     "short_name\(param: i32\) -> i32$"
 pub fn short_name(param: i32) -> i32 {
     param + 1
 }
 
-// @matches foo/fn.where_clause.html '//*[@class="rust item-decl"]//code' "\
+//@ matches foo/fn.where_clause.html '//*[@class="rust item-decl"]//code' "\
 //     where_clause<T, U>\(param_one: T, param_two: U\)where\n\
 //    \    T: Add<U> \+ Display \+ Copy,\n\
 //    \    U: Add<T> \+ Display \+ Copy,\n\
diff --git a/tests/rustdoc/link-assoc-const.rs b/tests/rustdoc/link-assoc-const.rs
index 75a2531a308..56b82fb2d39 100644
--- a/tests/rustdoc/link-assoc-const.rs
+++ b/tests/rustdoc/link-assoc-const.rs
@@ -1,7 +1,7 @@
 #![crate_name = "foo"]
 
-// @has foo/index.html '//a[@href="foo/constant.FIRSTCONST.html"]' 'foo::FIRSTCONST'
-// @has foo/index.html '//a[@href="struct.Bar.html#associatedconstant.CONST"]' 'Bar::CONST'
+//@ has foo/index.html '//a[@href="foo/constant.FIRSTCONST.html"]' 'foo::FIRSTCONST'
+//@ has foo/index.html '//a[@href="struct.Bar.html#associatedconstant.CONST"]' 'Bar::CONST'
 
 //! We have here [`foo::FIRSTCONST`] and [`Bar::CONST`].
 
diff --git a/tests/rustdoc/link-extern-crate-33178.rs b/tests/rustdoc/link-extern-crate-33178.rs
index d62bab5111f..94822798af3 100644
--- a/tests/rustdoc/link-extern-crate-33178.rs
+++ b/tests/rustdoc/link-extern-crate-33178.rs
@@ -6,12 +6,12 @@
 // https://github.com/rust-lang/rust/issues/33178
 #![crate_name="issue_33178"]
 
-// @has issue_33178/index.html
-// @has - '//a[@title="mod empty"][@href="../empty/index.html"]' empty
+//@ has issue_33178/index.html
+//@ has - '//a[@title="mod empty"][@href="../empty/index.html"]' empty
 pub extern crate empty;
 
-// @has - '//a[@title="mod variant_struct"][@href="../variant_struct/index.html"]' variant_struct
+//@ has - '//a[@title="mod variant_struct"][@href="../variant_struct/index.html"]' variant_struct
 pub extern crate variant_struct as foo;
 
-// @has - '//a[@title="mod issue_33178"][@href="index.html"]' self
+//@ has - '//a[@title="mod issue_33178"][@href="index.html"]' self
 pub extern crate self as bar;
diff --git a/tests/rustdoc/link-extern-crate-item-30109.rs b/tests/rustdoc/link-extern-crate-item-30109.rs
index a57d16da820..544cfa14971 100644
--- a/tests/rustdoc/link-extern-crate-item-30109.rs
+++ b/tests/rustdoc/link-extern-crate-item-30109.rs
@@ -11,7 +11,7 @@ pub mod quux {
 
     pub trait Foo {}
 
-    // @has issue_30109/quux/trait.Foo.html \
+    //@ has issue_30109/quux/trait.Foo.html \
     //          '//a/@href' '../issue_30109_1/struct.Bar.html'
     impl Foo for Bar {}
 }
diff --git a/tests/rustdoc/link-extern-crate-title-33178.rs b/tests/rustdoc/link-extern-crate-title-33178.rs
index e85ddb2c891..39c4fec1cd9 100644
--- a/tests/rustdoc/link-extern-crate-title-33178.rs
+++ b/tests/rustdoc/link-extern-crate-title-33178.rs
@@ -5,9 +5,9 @@
 // https://github.com/rust-lang/rust/issues/33178
 #![crate_name="issue_33178_1"]
 
-// @has issue_33178_1/index.html
-// @!has - //a/@title empty
+//@ has issue_33178_1/index.html
+//@ !has - //a/@title empty
 pub extern crate empty;
 
-// @!has - //a/@title variant_struct
+//@ !has - //a/@title variant_struct
 pub extern crate variant_struct as foo;
diff --git a/tests/rustdoc/link-title-escape.rs b/tests/rustdoc/link-title-escape.rs
index 7a322ea6d34..35e55c0f904 100644
--- a/tests/rustdoc/link-title-escape.rs
+++ b/tests/rustdoc/link-title-escape.rs
@@ -6,4 +6,4 @@
 //!
 //! [foo]: url 'title & <stuff> & "things"'
 
-// @hasraw 'foo/index.html' 'title &amp; &lt;stuff&gt; &amp; &quot;things&quot;'
+//@ hasraw 'foo/index.html' 'title &amp; &lt;stuff&gt; &amp; &quot;things&quot;'
diff --git a/tests/rustdoc/links-in-headings.rs b/tests/rustdoc/links-in-headings.rs
index c5bee1a7975..5a23af0e797 100644
--- a/tests/rustdoc/links-in-headings.rs
+++ b/tests/rustdoc/links-in-headings.rs
@@ -8,7 +8,7 @@
 //!
 //! !
 
-// @has 'foo/index.html'
-// @has - '//h2/a[@href="https://a.com"]' 'a link'
-// @has - '//h3/a[@href="https://b.com"]' 'multiple'
-// @has - '//h3/a[@href="https://c.com"]' 'links'
+//@ has 'foo/index.html'
+//@ has - '//h2/a[@href="https://a.com"]' 'a link'
+//@ has - '//h3/a[@href="https://b.com"]' 'multiple'
+//@ has - '//h3/a[@href="https://c.com"]' 'links'
diff --git a/tests/rustdoc/local-reexport-doc.rs b/tests/rustdoc/local-reexport-doc.rs
index 5dc857773a3..6db8f999d29 100644
--- a/tests/rustdoc/local-reexport-doc.rs
+++ b/tests/rustdoc/local-reexport-doc.rs
@@ -3,8 +3,8 @@
 
 #![crate_name = "foo"]
 
-// @has 'foo/fn.g.html'
-// @has - '//*[@class="toggle top-doc"]/*[@class="docblock"]' \
+//@ has 'foo/fn.g.html'
+//@ has - '//*[@class="toggle top-doc"]/*[@class="docblock"]' \
 // 'outer module inner module'
 
 mod inner_mod {
diff --git a/tests/rustdoc/logo-class-default.rs b/tests/rustdoc/logo-class-default.rs
index 6b46b46051f..cabf95569ee 100644
--- a/tests/rustdoc/logo-class-default.rs
+++ b/tests/rustdoc/logo-class-default.rs
@@ -1,4 +1,4 @@
 // Note: this test is paired with logo-class.rs and logo-class-rust.rs.
-// @!has logo_class_default/struct.SomeStruct.html '//*[@class="logo-container"]/img' ''
-// @!has src/logo_class_default/logo-class-default.rs.html '//*[@class="sub-logo-container"]/img' ''
+//@ !has logo_class_default/struct.SomeStruct.html '//*[@class="logo-container"]/img' ''
+//@ !has src/logo_class_default/logo-class-default.rs.html '//*[@class="sub-logo-container"]/img' ''
 pub struct SomeStruct;
diff --git a/tests/rustdoc/logo-class-rust.rs b/tests/rustdoc/logo-class-rust.rs
index c8f7f063dde..d37438f7619 100644
--- a/tests/rustdoc/logo-class-rust.rs
+++ b/tests/rustdoc/logo-class-rust.rs
@@ -2,5 +2,5 @@
 #![allow(internal_features)]
 #![doc(rust_logo)]
 // Note: this test is paired with logo-class.rs and logo-class-default.rs.
-// @has logo_class_rust/struct.SomeStruct.html '//*[@class="logo-container"]/img[@class="rust-logo"]' ''
+//@ has logo_class_rust/struct.SomeStruct.html '//*[@class="logo-container"]/img[@class="rust-logo"]' ''
 pub struct SomeStruct;
diff --git a/tests/rustdoc/logo-class.rs b/tests/rustdoc/logo-class.rs
index 816f40df014..73d5244fc41 100644
--- a/tests/rustdoc/logo-class.rs
+++ b/tests/rustdoc/logo-class.rs
@@ -2,6 +2,6 @@
     "https://raw.githubusercontent.com/sagebind/isahc/master/media/isahc.svg.png")]
 // Note: this test is paired with logo-class-default.rs and logo-class-rust.rs.
 
-// @has logo_class/struct.SomeStruct.html '//*[@class="logo-container"]/img[@src="https://raw.githubusercontent.com/sagebind/isahc/master/media/isahc.svg.png"]' ''
-// @!has logo_class/struct.SomeStruct.html '//*[@class="logo-container"]/img[@class="rust-logo"]' ''
+//@ has logo_class/struct.SomeStruct.html '//*[@class="logo-container"]/img[@src="https://raw.githubusercontent.com/sagebind/isahc/master/media/isahc.svg.png"]' ''
+//@ !has logo_class/struct.SomeStruct.html '//*[@class="logo-container"]/img[@class="rust-logo"]' ''
 pub struct SomeStruct;
diff --git a/tests/rustdoc/macro-doc-comment-23812.rs b/tests/rustdoc/macro-doc-comment-23812.rs
index 57c18510b1e..03fda4a25b9 100644
--- a/tests/rustdoc/macro-doc-comment-23812.rs
+++ b/tests/rustdoc/macro-doc-comment-23812.rs
@@ -18,11 +18,11 @@ doc! {
     }
 }
 
-// @has issue_23812/Foo/index.html
-// @hasraw - 'Outer comment'
-// @!hasraw - '/// Outer comment'
-// @hasraw - 'Inner comment'
-// @!hasraw - '//! Inner comment'
+//@ has issue_23812/Foo/index.html
+//@ hasraw - 'Outer comment'
+//@ !hasraw - '/// Outer comment'
+//@ hasraw - 'Inner comment'
+//@ !hasraw - '//! Inner comment'
 
 
 doc! {
@@ -32,8 +32,8 @@ doc! {
     }
 }
 
-// @has issue_23812/Bar/index.html
-// @hasraw - 'Outer block comment'
-// @!hasraw - '/** Outer block comment */'
-// @hasraw - 'Inner block comment'
-// @!hasraw - '/*! Inner block comment */'
+//@ has issue_23812/Bar/index.html
+//@ hasraw - 'Outer block comment'
+//@ !hasraw - '/** Outer block comment */'
+//@ hasraw - 'Inner block comment'
+//@ !hasraw - '/*! Inner block comment */'
diff --git a/tests/rustdoc/macro-document-private-duplicate.rs b/tests/rustdoc/macro-document-private-duplicate.rs
index 703317be8c9..35cdc60dfdc 100644
--- a/tests/rustdoc/macro-document-private-duplicate.rs
+++ b/tests/rustdoc/macro-document-private-duplicate.rs
@@ -10,15 +10,15 @@
 //
 //@ compile-flags: --document-private-items
 
-// @hasraw macro_document_private_duplicate/index.html 'Doc 1.'
-// @hasraw macro_document_private_duplicate/macro.a_macro.html 'Doc 1.'
+//@ hasraw macro_document_private_duplicate/index.html 'Doc 1.'
+//@ hasraw macro_document_private_duplicate/macro.a_macro.html 'Doc 1.'
 /// Doc 1.
 macro_rules! a_macro {
     () => ()
 }
 
-// @hasraw macro_document_private_duplicate/index.html 'Doc 2.'
-// @!hasraw macro_document_private_duplicate/macro.a_macro.html 'Doc 2.'
+//@ hasraw macro_document_private_duplicate/index.html 'Doc 2.'
+//@ !hasraw macro_document_private_duplicate/macro.a_macro.html 'Doc 2.'
 /// Doc 2.
 macro_rules! a_macro {
     () => ()
diff --git a/tests/rustdoc/macro-document-private.rs b/tests/rustdoc/macro-document-private.rs
index 2252aa87eba..224e31f8312 100644
--- a/tests/rustdoc/macro-document-private.rs
+++ b/tests/rustdoc/macro-document-private.rs
@@ -8,12 +8,12 @@
 #![feature(decl_macro)]
 
 
-// @has macro_document_private/macro.some_macro.html
+//@ has macro_document_private/macro.some_macro.html
 macro some_macro {
     (a: tt) => {}
 }
 
-// @has macro_document_private/macro.another_macro.html
+//@ has macro_document_private/macro.another_macro.html
 macro_rules! another_macro {
     (a: tt) => {}
 }
diff --git a/tests/rustdoc/macro-generated-macro.rs b/tests/rustdoc/macro-generated-macro.rs
index 1a423cac1b5..e77d0cf89e7 100644
--- a/tests/rustdoc/macro-generated-macro.rs
+++ b/tests/rustdoc/macro-generated-macro.rs
@@ -7,23 +7,23 @@ macro_rules! make_macro {
     }
 }
 
-// @has macro_generated_macro/macro.interpolations.html //pre 'macro_rules! interpolations {'
-// @has - //pre '(<= type $($i:ident)::* + $e:expr =>) => { ... };'
+//@ has macro_generated_macro/macro.interpolations.html //pre 'macro_rules! interpolations {'
+//@ has - //pre '(<= type $($i:ident)::* + $e:expr =>) => { ... };'
 make_macro!(interpolations type $($i:ident)::* + $e:expr);
 interpolations!(<= type foo::bar + x.sort() =>);
 
-// @has macro_generated_macro/macro.attributes.html //pre 'macro_rules! attributes {'
-// @has - //pre '(<= #![no_std] #[cfg(feature = "alloc")] =>) => { ... };'
+//@ has macro_generated_macro/macro.attributes.html //pre 'macro_rules! attributes {'
+//@ has - //pre '(<= #![no_std] #[cfg(feature = "alloc")] =>) => { ... };'
 make_macro!(attributes #![no_std] #[cfg(feature = "alloc")]);
 
-// @has macro_generated_macro/macro.groups.html //pre 'macro_rules! groups {'
-// @has - //pre '(<= fn {} () { foo[0] } =>) => { ... };'
+//@ has macro_generated_macro/macro.groups.html //pre 'macro_rules! groups {'
+//@ has - //pre '(<= fn {} () { foo[0] } =>) => { ... };'
 make_macro!(groups fn {}() {foo[0]});
 
-// @snapshot macro_linebreak_pre macro_generated_macro/macro.linebreak.html //pre/text()
+//@ snapshot macro_linebreak_pre macro_generated_macro/macro.linebreak.html //pre/text()
 make_macro!(linebreak 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28);
 
-// @snapshot macro_morestuff_pre macro_generated_macro/macro.morestuff.html //pre/text()
+//@ snapshot macro_morestuff_pre macro_generated_macro/macro.morestuff.html //pre/text()
 make_macro!(morestuff
     "space between most kinds of tokens": 1 $x + @ :: >>= 'static
     "no space inside paren or bracket": (2 a) [2 a] $(2 $a:tt)*
diff --git a/tests/rustdoc/macro-higher-kinded-function.rs b/tests/rustdoc/macro-higher-kinded-function.rs
index a45ef37a7fc..f14125d1309 100644
--- a/tests/rustdoc/macro-higher-kinded-function.rs
+++ b/tests/rustdoc/macro-higher-kinded-function.rs
@@ -10,11 +10,11 @@ macro_rules! gen {
     }
 }
 
-// @has 'foo/struct.Providers.html'
-// @has - '//*[@class="rust item-decl"]//code' "pub a: for<'tcx> fn(_: TyCtxt<'tcx>, _: u8) -> i8,"
-// @has - '//*[@class="rust item-decl"]//code' "pub b: for<'tcx> fn(_: TyCtxt<'tcx>, _: u16) -> i16,"
-// @has - '//*[@id="structfield.a"]/code' "a: for<'tcx> fn(_: TyCtxt<'tcx>, _: u8) -> i8"
-// @has - '//*[@id="structfield.b"]/code' "b: for<'tcx> fn(_: TyCtxt<'tcx>, _: u16) -> i16"
+//@ has 'foo/struct.Providers.html'
+//@ has - '//*[@class="rust item-decl"]//code' "pub a: for<'tcx> fn(_: TyCtxt<'tcx>, _: u8) -> i8,"
+//@ has - '//*[@class="rust item-decl"]//code' "pub b: for<'tcx> fn(_: TyCtxt<'tcx>, _: u16) -> i16,"
+//@ has - '//*[@id="structfield.a"]/code' "a: for<'tcx> fn(_: TyCtxt<'tcx>, _: u8) -> i8"
+//@ has - '//*[@id="structfield.b"]/code' "b: for<'tcx> fn(_: TyCtxt<'tcx>, _: u16) -> i16"
 gen! {
     (a, 'tcx, [u8], [i8])
     (b, 'tcx, [u16], [i16])
diff --git a/tests/rustdoc/macro-indirect-use.rs b/tests/rustdoc/macro-indirect-use.rs
index b2d9336cffc..e410e96ae6a 100644
--- a/tests/rustdoc/macro-indirect-use.rs
+++ b/tests/rustdoc/macro-indirect-use.rs
@@ -11,6 +11,6 @@ mod outer {
     }
 }
 
-// @has macro_indirect_use/inner/index.html
-// @has macro_indirect_use/inner/macro.some_macro.html
+//@ has macro_indirect_use/inner/index.html
+//@ has macro_indirect_use/inner/macro.some_macro.html
 pub use outer::inner;
diff --git a/tests/rustdoc/macro-private-not-documented.rs b/tests/rustdoc/macro-private-not-documented.rs
index f135a3a9ca6..bd97be5d366 100644
--- a/tests/rustdoc/macro-private-not-documented.rs
+++ b/tests/rustdoc/macro-private-not-documented.rs
@@ -6,14 +6,14 @@
 // This is a regression text for issue #88453.
 #![feature(decl_macro)]
 
-// @!hasraw macro_private_not_documented/index.html 'a_macro'
-// @!has macro_private_not_documented/macro.a_macro.html
+//@ !hasraw macro_private_not_documented/index.html 'a_macro'
+//@ !has macro_private_not_documented/macro.a_macro.html
 macro_rules! a_macro {
     () => ()
 }
 
-// @!hasraw macro_private_not_documented/index.html 'another_macro'
-// @!has macro_private_not_documented/macro.another_macro.html
+//@ !hasraw macro_private_not_documented/index.html 'another_macro'
+//@ !has macro_private_not_documented/macro.another_macro.html
 macro another_macro {
     () => ()
 }
diff --git a/tests/rustdoc/macro_pub_in_module.rs b/tests/rustdoc/macro_pub_in_module.rs
index 06b7047893b..2dce73c2cf2 100644
--- a/tests/rustdoc/macro_pub_in_module.rs
+++ b/tests/rustdoc/macro_pub_in_module.rs
@@ -7,79 +7,79 @@
 #![crate_name = "krate"]
 #![no_core]
 
-// @has external_crate/some_module/macro.external_macro.html
-// @!has external_crate/macro.external_macro.html
+//@ has external_crate/some_module/macro.external_macro.html
+//@ !has external_crate/macro.external_macro.html
 extern crate external_crate;
 
 pub mod inner {
-    // @has krate/inner/macro.raw_const.html
-    // @!has krate/macro.raw_const.html
+    //@ has krate/inner/macro.raw_const.html
+    //@ !has krate/macro.raw_const.html
     pub macro raw_const() {}
 
-    // @has krate/inner/attr.test.html
-    // @!has krate/macro.test.html
-    // @!has krate/inner/macro.test.html
-    // @!has krate/attr.test.html
+    //@ has krate/inner/attr.test.html
+    //@ !has krate/macro.test.html
+    //@ !has krate/inner/macro.test.html
+    //@ !has krate/attr.test.html
     #[rustc_builtin_macro]
     pub macro test($item:item) {}
 
-    // @has krate/inner/derive.Clone.html
-    // @!has krate/inner/macro.Clone.html
-    // @!has krate/macro.Clone.html
-    // @!has krate/derive.Clone.html
+    //@ has krate/inner/derive.Clone.html
+    //@ !has krate/inner/macro.Clone.html
+    //@ !has krate/macro.Clone.html
+    //@ !has krate/derive.Clone.html
     #[rustc_builtin_macro]
     pub macro Clone($item:item) {}
 
     // Make sure the logic is not affected by re-exports.
     mod unrenamed {
-        // @!has krate/macro.unrenamed.html
+        //@ !has krate/macro.unrenamed.html
         #[rustc_macro_transparency = "semitransparent"]
         pub macro unrenamed() {}
     }
-    // @has krate/inner/macro.unrenamed.html
+    //@ has krate/inner/macro.unrenamed.html
     pub use unrenamed::unrenamed;
 
     mod private {
-        // @!has krate/macro.m.html
+        //@ !has krate/macro.m.html
         pub macro m() {}
     }
-    // @has krate/inner/macro.renamed.html
-    // @!has krate/macro.renamed.html
+    //@ has krate/inner/macro.renamed.html
+    //@ !has krate/macro.renamed.html
     pub use private::m as renamed;
 
     mod private2 {
-        // @!has krate/macro.m2.html
+        //@ !has krate/macro.m2.html
         pub macro m2() {}
     }
     use private2 as renamed_mod;
-    // @has krate/inner/macro.m2.html
+    //@ has krate/inner/macro.m2.html
     pub use renamed_mod::m2;
 
-    // @has krate/inner/macro.external_macro.html
-    // @!has krate/macro.external_macro.html
+    //@ has krate/inner/macro.external_macro.html
+    //@ !has krate/macro.external_macro.html
     pub use ::external_crate::some_module::external_macro;
 }
 
 // Namespaces: Make sure the logic does not mix up a function name with a module name…
 fn both_fn_and_mod() {
-    // @!has krate/macro.in_both_fn_and_mod.html
+    //@ !has krate/macro.in_both_fn_and_mod.html
     pub macro in_both_fn_and_mod() {}
 }
 pub mod both_fn_and_mod {
-    // @!has krate/both_fn_and_mod/macro.in_both_fn_and_mod.html
+    //@ !has krate/both_fn_and_mod/macro.in_both_fn_and_mod.html
 }
 
 const __: () = {
-    // @!has krate/macro.in_both_const_and_mod.html
+    //@ !has krate/macro.in_both_const_and_mod.html
     pub macro in_both_const_and_mod() {}
 };
 pub mod __ {
-    // @!has krate/__/macro.in_both_const_and_mod.html
+    //@ !has krate/__/macro.in_both_const_and_mod.html
 }
 
 enum Enum {
     Crazy = {
-        // @!has krate/macro.this_is_getting_weird.html;
+        //@ !has krate/macro.this_is_getting_weird.html;
         pub macro this_is_getting_weird() {}
         42
     },
diff --git a/tests/rustdoc/macro_rules-matchers.rs b/tests/rustdoc/macro_rules-matchers.rs
index 96f4126c7c2..c3ee8febdf5 100644
--- a/tests/rustdoc/macro_rules-matchers.rs
+++ b/tests/rustdoc/macro_rules-matchers.rs
@@ -3,29 +3,29 @@
 
 #![crate_name = "foo"]
 
-// @has 'foo/macro.todo.html'
-// @has - '//span[@class="macro"]' 'macro_rules!'
-// @hasraw - ' todo {'
+//@ has 'foo/macro.todo.html'
+//@ has - '//span[@class="macro"]' 'macro_rules!'
+//@ hasraw - ' todo {'
 
-// @hasraw - '{ () =&gt; { ... }; ($('
-// @has - '//span[@class="macro-nonterminal"]' '$'
-// @has - '//span[@class="macro-nonterminal"]' 'arg'
-// @hasraw - ':tt)+'
-// @hasraw - ') =&gt; { ... }; }'
+//@ hasraw - '{ () =&gt; { ... }; ($('
+//@ has - '//span[@class="macro-nonterminal"]' '$'
+//@ has - '//span[@class="macro-nonterminal"]' 'arg'
+//@ hasraw - ':tt)+'
+//@ hasraw - ') =&gt; { ... }; }'
 pub use std::todo;
 
 mod mod1 {
-    // @has 'foo/macro.macro1.html'
-    // @hasraw - 'macro_rules!'
-    // @hasraw - 'macro1'
-    // @hasraw - '{ () =&gt; { ... }; ($('
-    // @has - '//span[@class="macro-nonterminal"]' '$'
-    // @has - '//span[@class="macro-nonterminal"]' 'arg'
-    // @hasraw - ':'
-    // @hasraw - 'expr'
-    // @hasraw - '),'
-    // @hasraw - '+'
-    // @hasraw - ') =&gt; { ... }; }'
+    //@ has 'foo/macro.macro1.html'
+    //@ hasraw - 'macro_rules!'
+    //@ hasraw - 'macro1'
+    //@ hasraw - '{ () =&gt; { ... }; ($('
+    //@ has - '//span[@class="macro-nonterminal"]' '$'
+    //@ has - '//span[@class="macro-nonterminal"]' 'arg'
+    //@ hasraw - ':'
+    //@ hasraw - 'expr'
+    //@ hasraw - '),'
+    //@ hasraw - '+'
+    //@ hasraw - ') =&gt; { ... }; }'
     #[macro_export]
     macro_rules! macro1 {
         () => {};
diff --git a/tests/rustdoc/macros.rs b/tests/rustdoc/macros.rs
index ae0cf7a1478..d08babc25f8 100644
--- a/tests/rustdoc/macros.rs
+++ b/tests/rustdoc/macros.rs
@@ -1,7 +1,7 @@
-// @has macros/macro.my_macro.html //pre 'macro_rules! my_macro {'
-// @has - //pre '() => { ... };'
-// @has - //pre '($a:tt) => { ... };'
-// @has - //pre '($e:expr) => { ... };'
+//@ has macros/macro.my_macro.html //pre 'macro_rules! my_macro {'
+//@ has - //pre '() => { ... };'
+//@ has - //pre '($a:tt) => { ... };'
+//@ has - //pre '($e:expr) => { ... };'
 #[macro_export]
 macro_rules! my_macro {
     () => [];
@@ -10,10 +10,10 @@ macro_rules! my_macro {
 }
 
 // Check that exported macro defined in a module are shown at crate root.
-// @has macros/macro.my_sub_macro.html //pre 'macro_rules! my_sub_macro {'
-// @has - //pre '() => { ... };'
-// @has - //pre '($a:tt) => { ... };'
-// @has - //pre '($e:expr) => { ... };'
+//@ has macros/macro.my_sub_macro.html //pre 'macro_rules! my_sub_macro {'
+//@ has - //pre '() => { ... };'
+//@ has - //pre '($a:tt) => { ... };'
+//@ has - //pre '($e:expr) => { ... };'
 mod sub {
     #[macro_export]
     macro_rules! my_sub_macro {
diff --git a/tests/rustdoc/manual_impl.rs b/tests/rustdoc/manual_impl.rs
index b2ee077bc6b..281262bb40a 100644
--- a/tests/rustdoc/manual_impl.rs
+++ b/tests/rustdoc/manual_impl.rs
@@ -1,7 +1,7 @@
-// @has manual_impl/trait.T.html
-// @has  - '//*[@class="docblock"]' 'Docs associated with the trait definition.'
-// @has  - '//*[@class="docblock"]' 'Docs associated with the trait a_method definition.'
-// @has  - '//*[@class="docblock"]' 'Docs associated with the trait b_method definition.'
+//@ has manual_impl/trait.T.html
+//@ has  - '//*[@class="docblock"]' 'Docs associated with the trait definition.'
+//@ has  - '//*[@class="docblock"]' 'Docs associated with the trait a_method definition.'
+//@ has  - '//*[@class="docblock"]' 'Docs associated with the trait b_method definition.'
 /// Docs associated with the trait definition.
 pub trait T {
     /// Docs associated with the trait a_method definition.
@@ -20,14 +20,14 @@ pub trait T {
     }
 }
 
-// @has manual_impl/struct.S1.html '//*[@class="trait"]' 'T'
-// @has  - '//*[@class="docblock"]' 'Docs associated with the S1 trait implementation.'
-// @has  - '//*[@class="docblock"]' 'Docs associated with the S1 trait a_method implementation.'
-// @!has - '//*[@class="docblock"]' 'Docs associated with the trait a_method definition.'
-// @has - '//div[@class="impl-items"]//div[@class="docblock"]' 'Docs associated with the trait b_method definition.'
-// @has - '//div[@class="impl-items"]//div[@class="docblock"]' 'Docs associated with the trait c_method definition.'
-// @!has - '//*[@class="docblock"]' 'There is another line'
-// @has - '//div[@class="impl-items"]//div[@class="docblock"]' 'Read more'
+//@ has manual_impl/struct.S1.html '//*[@class="trait"]' 'T'
+//@ has  - '//*[@class="docblock"]' 'Docs associated with the S1 trait implementation.'
+//@ has  - '//*[@class="docblock"]' 'Docs associated with the S1 trait a_method implementation.'
+//@ !has - '//*[@class="docblock"]' 'Docs associated with the trait a_method definition.'
+//@ has - '//div[@class="impl-items"]//div[@class="docblock"]' 'Docs associated with the trait b_method definition.'
+//@ has - '//div[@class="impl-items"]//div[@class="docblock"]' 'Docs associated with the trait c_method definition.'
+//@ !has - '//*[@class="docblock"]' 'There is another line'
+//@ has - '//div[@class="impl-items"]//div[@class="docblock"]' 'Read more'
 pub struct S1(usize);
 
 /// Docs associated with the S1 trait implementation.
@@ -38,11 +38,11 @@ impl T for S1 {
     }
 }
 
-// @has manual_impl/struct.S2.html '//*[@class="trait"]' 'T'
-// @has  - '//*[@class="docblock"]' 'Docs associated with the S2 trait implementation.'
-// @has  - '//*[@class="docblock"]' 'Docs associated with the S2 trait a_method implementation.'
-// @has  - '//*[@class="docblock"]' 'Docs associated with the S2 trait c_method implementation.'
-// @has - '//div[@class="impl-items"]//div[@class="docblock"]' 'Docs associated with the trait b_method definition.'
+//@ has manual_impl/struct.S2.html '//*[@class="trait"]' 'T'
+//@ has  - '//*[@class="docblock"]' 'Docs associated with the S2 trait implementation.'
+//@ has  - '//*[@class="docblock"]' 'Docs associated with the S2 trait a_method implementation.'
+//@ has  - '//*[@class="docblock"]' 'Docs associated with the S2 trait c_method implementation.'
+//@ has - '//div[@class="impl-items"]//div[@class="docblock"]' 'Docs associated with the trait b_method definition.'
 pub struct S2(usize);
 
 /// Docs associated with the S2 trait implementation.
@@ -58,10 +58,10 @@ impl T for S2 {
     }
 }
 
-// @has manual_impl/struct.S3.html '//*[@class="trait"]' 'T'
-// @has  - '//div[@class="docblock"]' 'Docs associated with the S3 trait implementation.'
-// @has  - '//div[@class="docblock"]' 'Docs associated with the S3 trait b_method implementation.'
-// @has - '//div[@class="impl-items"]//div[@class="docblock"]' 'Docs associated with the trait a_method definition.'
+//@ has manual_impl/struct.S3.html '//*[@class="trait"]' 'T'
+//@ has  - '//div[@class="docblock"]' 'Docs associated with the S3 trait implementation.'
+//@ has  - '//div[@class="docblock"]' 'Docs associated with the S3 trait b_method implementation.'
+//@ has - '//div[@class="impl-items"]//div[@class="docblock"]' 'Docs associated with the trait a_method definition.'
 pub struct S3(usize);
 
 /// Docs associated with the S3 trait implementation.
diff --git a/tests/rustdoc/markdown-table-escape-pipe-27862.rs b/tests/rustdoc/markdown-table-escape-pipe-27862.rs
index 9af75d24888..bf4c75a97a8 100644
--- a/tests/rustdoc/markdown-table-escape-pipe-27862.rs
+++ b/tests/rustdoc/markdown-table-escape-pipe-27862.rs
@@ -4,4 +4,4 @@
 /// Tests  | Table
 /// ------|-------------
 /// t = b | id = \|x\| x
-pub struct Foo; // @has issue_27862/struct.Foo.html //td 'id = |x| x'
+pub struct Foo; //@ has issue_27862/struct.Foo.html //td 'id = |x| x'
diff --git a/tests/rustdoc/masked.rs b/tests/rustdoc/masked.rs
index 03e5e53f424..4f361ca881e 100644
--- a/tests/rustdoc/masked.rs
+++ b/tests/rustdoc/masked.rs
@@ -7,25 +7,25 @@
 #[doc(masked)]
 extern crate masked;
 
-// @!hasraw 'search-index.js' 'masked_method'
+//@ !hasraw 'search-index.js' 'masked_method'
 
-// @!hasraw 'foo/struct.String.html' 'MaskedTrait'
-// @!hasraw 'foo/struct.String.html' 'MaskedBlanketTrait'
-// @!hasraw 'foo/struct.String.html' 'masked_method'
+//@ !hasraw 'foo/struct.String.html' 'MaskedTrait'
+//@ !hasraw 'foo/struct.String.html' 'MaskedBlanketTrait'
+//@ !hasraw 'foo/struct.String.html' 'masked_method'
 pub use std::string::String;
 
-// @!hasraw 'foo/trait.Clone.html' 'MaskedStruct'
+//@ !hasraw 'foo/trait.Clone.html' 'MaskedStruct'
 pub use std::clone::Clone;
 
-// @!hasraw 'foo/struct.MyStruct.html' 'MaskedTrait'
-// @!hasraw 'foo/struct.MyStruct.html' 'masked_method'
+//@ !hasraw 'foo/struct.MyStruct.html' 'MaskedTrait'
+//@ !hasraw 'foo/struct.MyStruct.html' 'masked_method'
 pub struct MyStruct;
 
 impl masked::MaskedTrait for MyStruct {
     fn masked_method() {}
 }
 
-// @!hasraw 'foo/trait.MyTrait.html' 'MaskedStruct'
+//@ !hasraw 'foo/trait.MyTrait.html' 'MaskedStruct'
 pub trait MyTrait {}
 
 impl MyTrait for masked::MaskedStruct {}
diff --git a/tests/rustdoc/method-anchor-in-blanket-impl-86620.rs b/tests/rustdoc/method-anchor-in-blanket-impl-86620.rs
index 537dadd2124..89e8712169a 100644
--- a/tests/rustdoc/method-anchor-in-blanket-impl-86620.rs
+++ b/tests/rustdoc/method-anchor-in-blanket-impl-86620.rs
@@ -6,6 +6,6 @@ extern crate issue_86620_1;
 
 use issue_86620_1::*;
 
-// @!has foo/struct.S.html '//*[@id="method.vzip"]//a[@class="fnname"]/@href' #tymethod.vzip
-// @has foo/struct.S.html '//*[@id="method.vzip"]//a[@class="anchor"]/@href' #method.vzip
+//@ !has foo/struct.S.html '//*[@id="method.vzip"]//a[@class="fnname"]/@href' #tymethod.vzip
+//@ has foo/struct.S.html '//*[@id="method.vzip"]//a[@class="anchor"]/@href' #method.vzip
 pub struct S;
diff --git a/tests/rustdoc/method-link-foreign-trait-impl-17476.rs b/tests/rustdoc/method-link-foreign-trait-impl-17476.rs
index 5f341e6c21c..cda828d3967 100644
--- a/tests/rustdoc/method-link-foreign-trait-impl-17476.rs
+++ b/tests/rustdoc/method-link-foreign-trait-impl-17476.rs
@@ -8,7 +8,7 @@ extern crate issue_17476;
 
 pub struct Foo;
 
-// @has issue_17476/struct.Foo.html \
+//@ has issue_17476/struct.Foo.html \
 //      '//*[@href="http://example.com/issue_17476/trait.Foo.html#method.foo"]' \
 //      'foo'
 impl issue_17476::Foo for Foo {}
diff --git a/tests/rustdoc/method-list.rs b/tests/rustdoc/method-list.rs
index 50f4af3aaaf..b7a0bc3c260 100644
--- a/tests/rustdoc/method-list.rs
+++ b/tests/rustdoc/method-list.rs
@@ -1,8 +1,8 @@
 #![crate_name = "foo"]
 
-// @has foo/struct.Foo.html
-// @has - '//*[@class="sidebar-elems"]//section//a' 'super_long_name'
-// @has - '//*[@class="sidebar-elems"]//section//a' 'Disp'
+//@ has foo/struct.Foo.html
+//@ has - '//*[@class="sidebar-elems"]//section//a' 'super_long_name'
+//@ has - '//*[@class="sidebar-elems"]//section//a' 'Disp'
 pub struct Foo(usize);
 
 impl Foo {
diff --git a/tests/rustdoc/mixing-doc-comments-and-attrs.rs b/tests/rustdoc/mixing-doc-comments-and-attrs.rs
index 010058361fa..076a59c426b 100644
--- a/tests/rustdoc/mixing-doc-comments-and-attrs.rs
+++ b/tests/rustdoc/mixing-doc-comments-and-attrs.rs
@@ -1,15 +1,15 @@
 #![crate_name = "foo"]
 
-// @has 'foo/struct.S1.html'
-// @snapshot S1_top-doc - '//details[@class="toggle top-doc"]/div[@class="docblock"]'
+//@ has 'foo/struct.S1.html'
+//@ snapshot S1_top-doc - '//details[@class="toggle top-doc"]/div[@class="docblock"]'
 
 #[doc = "Hello world!\n\n"]
 /// Goodbye!
 #[doc = "  Hello again!\n"]
 pub struct S1;
 
-// @has 'foo/struct.S2.html'
-// @snapshot S2_top-doc - '//details[@class="toggle top-doc"]/div[@class="docblock"]'
+//@ has 'foo/struct.S2.html'
+//@ snapshot S2_top-doc - '//details[@class="toggle top-doc"]/div[@class="docblock"]'
 
 /// Hello world!
 ///
@@ -17,8 +17,8 @@ pub struct S1;
 /// Hello again!
 pub struct S2;
 
-// @has 'foo/struct.S3.html'
-// @snapshot S3_top-doc - '//details[@class="toggle top-doc"]/div[@class="docblock"]'
+//@ has 'foo/struct.S3.html'
+//@ snapshot S3_top-doc - '//details[@class="toggle top-doc"]/div[@class="docblock"]'
 /** Par 1
 */ ///
 /// Par 2
diff --git a/tests/rustdoc/module-impls.rs b/tests/rustdoc/module-impls.rs
index 852f444e99b..b66721ecb13 100644
--- a/tests/rustdoc/module-impls.rs
+++ b/tests/rustdoc/module-impls.rs
@@ -2,4 +2,4 @@
 
 pub use std::marker::Send;
 
-// @!hasraw foo/index.html 'Implementations'
+//@ !hasraw foo/index.html 'Implementations'
diff --git a/tests/rustdoc/multiple-import-levels.rs b/tests/rustdoc/multiple-import-levels.rs
index 29b67c6b2b1..ac00f1fbdfc 100644
--- a/tests/rustdoc/multiple-import-levels.rs
+++ b/tests/rustdoc/multiple-import-levels.rs
@@ -20,15 +20,15 @@ mod c {
     pub use crate::b::Type as Woof;
 }
 
-// @has 'foo/struct.Type.html'
-// @has - '//*[@class="toggle top-doc"]/*[@class="docblock"]' 'foo 2 1'
+//@ has 'foo/struct.Type.html'
+//@ has - '//*[@class="toggle top-doc"]/*[@class="docblock"]' 'foo 2 1'
 /// foo
 pub use b::Type;
-// @has 'foo/struct.Whatever.html'
-// @has - '//*[@class="toggle top-doc"]/*[@class="docblock"]' 'whatever 3 2 1'
+//@ has 'foo/struct.Whatever.html'
+//@ has - '//*[@class="toggle top-doc"]/*[@class="docblock"]' 'whatever 3 2 1'
 /// whatever
 pub use c::Type as Whatever;
-// @has 'foo/struct.Woof.html'
-// @has - '//*[@class="toggle top-doc"]/*[@class="docblock"]' 'a dog 4 2 1'
+//@ has 'foo/struct.Woof.html'
+//@ has - '//*[@class="toggle top-doc"]/*[@class="docblock"]' 'a dog 4 2 1'
 /// a dog
 pub use c::Woof;
diff --git a/tests/rustdoc/multiple-macro-rules-w-same-name-submodule-99221.rs b/tests/rustdoc/multiple-macro-rules-w-same-name-submodule-99221.rs
index ed1e42c1f4e..bf59788073e 100644
--- a/tests/rustdoc/multiple-macro-rules-w-same-name-submodule-99221.rs
+++ b/tests/rustdoc/multiple-macro-rules-w-same-name-submodule-99221.rs
@@ -10,7 +10,7 @@ extern crate issue_99221_aux;
 
 pub use issue_99221_aux::*;
 
-// @count foo/index.html '//a[@class="macro"]' 1
+//@ count foo/index.html '//a[@class="macro"]' 1
 
 mod inner {
     #[macro_export]
diff --git a/tests/rustdoc/multiple-mods-w-same-name-doc-inline-83375.rs b/tests/rustdoc/multiple-mods-w-same-name-doc-inline-83375.rs
index 9b3dfd45370..6d255ed6004 100644
--- a/tests/rustdoc/multiple-mods-w-same-name-doc-inline-83375.rs
+++ b/tests/rustdoc/multiple-mods-w-same-name-doc-inline-83375.rs
@@ -9,8 +9,8 @@ pub mod sub {
     }
 }
 
-// @count foo/index.html '//a[@class="mod"][@title="mod foo::prelude"]' 1
-// @count foo/prelude/index.html '//div[@class="item-row"]' 0
+//@ count foo/index.html '//a[@class="mod"][@title="mod foo::prelude"]' 1
+//@ count foo/prelude/index.html '//div[@class="item-row"]' 0
 pub mod prelude {}
 
 #[doc(inline)]
diff --git a/tests/rustdoc/multiple-mods-w-same-name-doc-inline-last-item-83375.rs b/tests/rustdoc/multiple-mods-w-same-name-doc-inline-last-item-83375.rs
index 7bad825b35f..a59b48232a3 100644
--- a/tests/rustdoc/multiple-mods-w-same-name-doc-inline-last-item-83375.rs
+++ b/tests/rustdoc/multiple-mods-w-same-name-doc-inline-last-item-83375.rs
@@ -12,6 +12,6 @@ pub mod sub {
 #[doc(inline)]
 pub use sub::*;
 
-// @count foo/index.html '//a[@class="mod"][@title="mod foo::prelude"]' 1
-// @count foo/prelude/index.html '//div[@class="item-row"]' 0
+//@ count foo/index.html '//a[@class="mod"][@title="mod foo::prelude"]' 1
+//@ count foo/prelude/index.html '//div[@class="item-row"]' 0
 pub mod prelude {}
diff --git a/tests/rustdoc/must_implement_one_of.rs b/tests/rustdoc/must_implement_one_of.rs
index 1f1dd5d5796..ab965bab356 100644
--- a/tests/rustdoc/must_implement_one_of.rs
+++ b/tests/rustdoc/must_implement_one_of.rs
@@ -2,7 +2,7 @@
 #![feature(rustc_attrs)]
 
 #[rustc_must_implement_one_of(a, b)]
-// @matches c/trait.Trait.html '//*[@class="stab must_implement"]' \
+//@ matches c/trait.Trait.html '//*[@class="stab must_implement"]' \
 //      'At least one of the `a`, `b` methods is required.$'
 pub trait Trait {
     fn a() {}
diff --git a/tests/rustdoc/mut-params.rs b/tests/rustdoc/mut-params.rs
index e403b7b78c9..b3d4fe8c059 100644
--- a/tests/rustdoc/mut-params.rs
+++ b/tests/rustdoc/mut-params.rs
@@ -5,14 +5,14 @@
 
 pub struct Foo;
 
-// @count foo/struct.Foo.html '//*[@class="impl-items"]//*[@class="method"]' 2
-// @!has - '//*[@class="impl-items"]//*[@class="method"]' 'mut'
+//@ count foo/struct.Foo.html '//*[@class="impl-items"]//*[@class="method"]' 2
+//@ !has - '//*[@class="impl-items"]//*[@class="method"]' 'mut'
 impl Foo {
     pub fn foo(mut self) {}
 
     pub fn bar(mut bar: ()) {}
 }
 
-// @count foo/fn.baz.html '//pre[@class="rust item-decl"]' 1
-// @!has - '//pre[@class="rust item-decl"]' 'mut'
+//@ count foo/fn.baz.html '//pre[@class="rust item-decl"]' 1
+//@ !has - '//pre[@class="rust item-decl"]' 'mut'
 pub fn baz(mut foo: Foo) {}
diff --git a/tests/rustdoc/namespaces.rs b/tests/rustdoc/namespaces.rs
index ad828e5ee3e..12248509d07 100644
--- a/tests/rustdoc/namespaces.rs
+++ b/tests/rustdoc/namespaces.rs
@@ -8,9 +8,9 @@ mod inner {
     pub fn sync() {}
 }
 
-// @has namespaces/sync/index.html
-// @has namespaces/fn.sync.html
-// @has namespaces/index.html '//a/@href' 'sync/index.html'
-// @has - '//a/@href' 'fn.sync.html'
+//@ has namespaces/sync/index.html
+//@ has namespaces/fn.sync.html
+//@ has namespaces/index.html '//a/@href' 'sync/index.html'
+//@ has - '//a/@href' 'fn.sync.html'
 #[doc(inline)]
 pub use inner::sync;
diff --git a/tests/rustdoc/negative-impl-sidebar.rs b/tests/rustdoc/negative-impl-sidebar.rs
index 4af6d008492..1742dce1945 100644
--- a/tests/rustdoc/negative-impl-sidebar.rs
+++ b/tests/rustdoc/negative-impl-sidebar.rs
@@ -3,7 +3,7 @@
 
 pub struct Foo;
 
-// @has foo/struct.Foo.html
-// @has - '//div[@class="sidebar-elems"]//h3/a[@href="#trait-implementations"]' 'Trait Implementations'
-// @has - '//*[@class="sidebar-elems"]//section//a' '!Sync'
+//@ has foo/struct.Foo.html
+//@ has - '//div[@class="sidebar-elems"]//h3/a[@href="#trait-implementations"]' 'Trait Implementations'
+//@ has - '//*[@class="sidebar-elems"]//section//a' '!Sync'
 impl !Sync for Foo {}
diff --git a/tests/rustdoc/negative-impl.rs b/tests/rustdoc/negative-impl.rs
index 51223af6737..f057a749b72 100644
--- a/tests/rustdoc/negative-impl.rs
+++ b/tests/rustdoc/negative-impl.rs
@@ -1,14 +1,14 @@
 #![feature(negative_impls)]
 
-// @matches negative_impl/struct.Alpha.html '//pre' "pub struct Alpha"
+//@ matches negative_impl/struct.Alpha.html '//pre' "pub struct Alpha"
 pub struct Alpha;
-// @matches negative_impl/struct.Bravo.html '//pre' "pub struct Bravo<B>"
+//@ matches negative_impl/struct.Bravo.html '//pre' "pub struct Bravo<B>"
 pub struct Bravo<B>(B);
 
-// @matches negative_impl/struct.Alpha.html '//*[@class="impl"]//h3[@class="code-header"]' \
+//@ matches negative_impl/struct.Alpha.html '//*[@class="impl"]//h3[@class="code-header"]' \
 // "impl !Send for Alpha"
 impl !Send for Alpha {}
 
-// @matches negative_impl/struct.Bravo.html '//*[@class="impl"]//h3[@class="code-header"]' "\
+//@ matches negative_impl/struct.Bravo.html '//*[@class="impl"]//h3[@class="code-header"]' "\
 // impl<B> !Send for Bravo<B>"
 impl<B> !Send for Bravo<B> {}
diff --git a/tests/rustdoc/nested-items-issue-111415.rs b/tests/rustdoc/nested-items-issue-111415.rs
index c117569d9b4..a5cd3ca0b1a 100644
--- a/tests/rustdoc/nested-items-issue-111415.rs
+++ b/tests/rustdoc/nested-items-issue-111415.rs
@@ -3,22 +3,22 @@
 
 #![crate_name = "foo"]
 
-// @has 'foo/index.html'
+//@ has 'foo/index.html'
 // Checking there are only three sections.
-// @count - '//*[@id="main-content"]/*[@class="section-header"]' 3
-// @has - '//*[@id="main-content"]/*[@class="section-header"]' 'Structs'
-// @has - '//*[@id="main-content"]/*[@class="section-header"]' 'Functions'
-// @has - '//*[@id="main-content"]/*[@class="section-header"]' 'Traits'
+//@ count - '//*[@id="main-content"]/*[@class="section-header"]' 3
+//@ has - '//*[@id="main-content"]/*[@class="section-header"]' 'Structs'
+//@ has - '//*[@id="main-content"]/*[@class="section-header"]' 'Functions'
+//@ has - '//*[@id="main-content"]/*[@class="section-header"]' 'Traits'
 // Checking that there are only three items.
-// @count - '//*[@id="main-content"]//*[@class="item-name"]' 3
-// @has - '//*[@id="main-content"]//a[@href="struct.Bar.html"]' 'Bar'
-// @has - '//*[@id="main-content"]//a[@href="fn.foo.html"]' 'foo'
-// @has - '//*[@id="main-content"]//a[@href="trait.Foo.html"]' 'Foo'
+//@ count - '//*[@id="main-content"]//*[@class="item-name"]' 3
+//@ has - '//*[@id="main-content"]//a[@href="struct.Bar.html"]' 'Bar'
+//@ has - '//*[@id="main-content"]//a[@href="fn.foo.html"]' 'foo'
+//@ has - '//*[@id="main-content"]//a[@href="trait.Foo.html"]' 'Foo'
 
 // Now checking that the `foo` method is visible in `Bar` page.
-// @has 'foo/struct.Bar.html'
-// @has - '//*[@id="method.foo"]/*[@class="code-header"]' 'pub fn foo()'
-// @has - '//*[@id="method.bar"]/*[@class="code-header"]' 'fn bar()'
+//@ has 'foo/struct.Bar.html'
+//@ has - '//*[@id="method.foo"]/*[@class="code-header"]' 'pub fn foo()'
+//@ has - '//*[@id="method.bar"]/*[@class="code-header"]' 'fn bar()'
 pub struct Bar;
 
 pub trait Foo {
diff --git a/tests/rustdoc/nested-modules.rs b/tests/rustdoc/nested-modules.rs
index 12234d2cf7e..1e1d80e7e73 100644
--- a/tests/rustdoc/nested-modules.rs
+++ b/tests/rustdoc/nested-modules.rs
@@ -6,37 +6,37 @@ mod a_module {
     pub use a_module::private_function as other_private_function;
 
     pub mod a_nested_module {
-        // @has aCrate/a_nested_module/index.html '//a[@href="fn.a_nested_public_function.html"]' 'a_nested_public_function'
-        // @hasraw aCrate/a_nested_module/fn.a_nested_public_function.html 'pub fn a_nested_public_function()'
+        //@ has aCrate/a_nested_module/index.html '//a[@href="fn.a_nested_public_function.html"]' 'a_nested_public_function'
+        //@ hasraw aCrate/a_nested_module/fn.a_nested_public_function.html 'pub fn a_nested_public_function()'
         pub fn a_nested_public_function() {}
 
-        // @has aCrate/a_nested_module/index.html '//a[@href="fn.another_nested_public_function.html"]' 'another_nested_public_function'
-        // @hasraw aCrate/a_nested_module/fn.another_nested_public_function.html 'pub fn another_nested_public_function()'
+        //@ has aCrate/a_nested_module/index.html '//a[@href="fn.another_nested_public_function.html"]' 'another_nested_public_function'
+        //@ hasraw aCrate/a_nested_module/fn.another_nested_public_function.html 'pub fn another_nested_public_function()'
         pub use a_nested_module::a_nested_public_function as another_nested_public_function;
     }
 
-    // @!hasraw aCrate/a_nested_module/index.html 'yet_another_nested_public_function'
+    //@ !hasraw aCrate/a_nested_module/index.html 'yet_another_nested_public_function'
     pub use a_nested_module::a_nested_public_function as yet_another_nested_public_function;
 
-    // @!hasraw aCrate/a_nested_module/index.html 'one_last_nested_public_function'
+    //@ !hasraw aCrate/a_nested_module/index.html 'one_last_nested_public_function'
     pub use a_nested_module::another_nested_public_function as one_last_nested_public_function;
 }
 
-// @!hasraw aCrate/index.html 'a_module'
-// @has aCrate/index.html '//a[@href="a_nested_module/index.html"]' 'a_nested_module'
+//@ !hasraw aCrate/index.html 'a_module'
+//@ has aCrate/index.html '//a[@href="a_nested_module/index.html"]' 'a_nested_module'
 pub use a_module::a_nested_module;
 
-// @has aCrate/index.html '//a[@href="fn.a_nested_public_function.html"]' 'a_nested_public_function'
-// @has aCrate/index.html '//a[@href="fn.another_nested_public_function.html"]' 'another_nested_public_function'
-// @has aCrate/index.html '//a[@href="fn.yet_another_nested_public_function.html"]' 'yet_another_nested_public_function'
-// @has aCrate/index.html '//a[@href="fn.one_last_nested_public_function.html"]' 'one_last_nested_public_function'
+//@ has aCrate/index.html '//a[@href="fn.a_nested_public_function.html"]' 'a_nested_public_function'
+//@ has aCrate/index.html '//a[@href="fn.another_nested_public_function.html"]' 'another_nested_public_function'
+//@ has aCrate/index.html '//a[@href="fn.yet_another_nested_public_function.html"]' 'yet_another_nested_public_function'
+//@ has aCrate/index.html '//a[@href="fn.one_last_nested_public_function.html"]' 'one_last_nested_public_function'
 pub use a_module::{
     a_nested_module::{a_nested_public_function, another_nested_public_function},
     one_last_nested_public_function, yet_another_nested_public_function,
 };
 
-// @has aCrate/index.html '//a[@href="fn.private_function.html"]' 'private_function'
-// @!hasraw aCrate/fn.private_function.html 'a_module'
-// @has aCrate/index.html '//a[@href="fn.other_private_function.html"]' 'other_private_function'
-// @!hasraw aCrate/fn.other_private_function.html 'a_module'
+//@ has aCrate/index.html '//a[@href="fn.private_function.html"]' 'private_function'
+//@ !hasraw aCrate/fn.private_function.html 'a_module'
+//@ has aCrate/index.html '//a[@href="fn.other_private_function.html"]' 'other_private_function'
+//@ !hasraw aCrate/fn.other_private_function.html 'a_module'
 pub use a_module::{other_private_function, private_function};
diff --git a/tests/rustdoc/no-compiler-reexport.rs b/tests/rustdoc/no-compiler-reexport.rs
index d1567c4fdda..355d47d7ba7 100644
--- a/tests/rustdoc/no-compiler-reexport.rs
+++ b/tests/rustdoc/no-compiler-reexport.rs
@@ -2,6 +2,6 @@
 
 #![crate_name = "foo"]
 
-// @!has 'foo/index.html' '//code' 'extern crate std;'
-// @!has 'foo/index.html' '//code' 'use std::prelude'
+//@ !has 'foo/index.html' '//code' 'extern crate std;'
+//@ !has 'foo/index.html' '//code' 'use std::prelude'
 pub struct Foo;
diff --git a/tests/rustdoc/no-unit-struct-field.rs b/tests/rustdoc/no-unit-struct-field.rs
index d301954b6b5..6ac44037cea 100644
--- a/tests/rustdoc/no-unit-struct-field.rs
+++ b/tests/rustdoc/no-unit-struct-field.rs
@@ -1,10 +1,10 @@
 // This test ensures that the tuple struct fields are not generated in the
 // search index.
 
-// @!hasraw search-index.js '"0"'
-// @!hasraw search-index.js '"1"'
-// @hasraw search-index.js '"foo_a"'
-// @hasraw search-index.js '"bar_a"'
+//@ !hasraw search-index.js '"0"'
+//@ !hasraw search-index.js '"1"'
+//@ hasraw search-index.js '"foo_a"'
+//@ hasraw search-index.js '"bar_a"'
 
 pub struct Bar(pub u32, pub u8);
 pub struct Foo {
diff --git a/tests/rustdoc/no_std-primitive.rs b/tests/rustdoc/no_std-primitive.rs
index 22fd392dd36..78076a601de 100644
--- a/tests/rustdoc/no_std-primitive.rs
+++ b/tests/rustdoc/no_std-primitive.rs
@@ -1,6 +1,6 @@
 #![no_std]
 
 /// Link to [intra-doc link][u8]
-// @has 'no_std_primitive/fn.foo.html' '//a[@href="{{channel}}/core/primitive.u8.html"]' 'intra-doc link'
-// @has - '//a[@href="{{channel}}/core/primitive.u8.html"]' 'u8'
+//@ has 'no_std_primitive/fn.foo.html' '//a[@href="{{channel}}/core/primitive.u8.html"]' 'intra-doc link'
+//@ has - '//a[@href="{{channel}}/core/primitive.u8.html"]' 'u8'
 pub fn foo() -> u8 {}
diff --git a/tests/rustdoc/non_lifetime_binders.rs b/tests/rustdoc/non_lifetime_binders.rs
index da9a4e6a84d..34e83a78787 100644
--- a/tests/rustdoc/non_lifetime_binders.rs
+++ b/tests/rustdoc/non_lifetime_binders.rs
@@ -5,5 +5,5 @@ pub trait Trait {}
 
 pub struct Wrapper<T: ?Sized>(Box<T>);
 
-// @has non_lifetime_binders/fn.foo.html '//pre' "fn foo()where for<'a, T> &'a Wrapper<T>: Trait"
+//@ has non_lifetime_binders/fn.foo.html '//pre' "fn foo()where for<'a, T> &'a Wrapper<T>: Trait"
 pub fn foo() where for<'a, T> &'a Wrapper<T>: Trait {}
diff --git a/tests/rustdoc/normalize-assoc-item.rs b/tests/rustdoc/normalize-assoc-item.rs
index d45bb1bff65..7ef9d3067e1 100644
--- a/tests/rustdoc/normalize-assoc-item.rs
+++ b/tests/rustdoc/normalize-assoc-item.rs
@@ -19,20 +19,20 @@ impl Trait for isize {
     type X = <() as Trait>::X;
 }
 
-// @has 'normalize_assoc_item/fn.f.html' '//pre[@class="rust item-decl"]' 'pub fn f() -> isize'
+//@ has 'normalize_assoc_item/fn.f.html' '//pre[@class="rust item-decl"]' 'pub fn f() -> isize'
 pub fn f() -> <usize as Trait>::X {
     0
 }
 
-// @has 'normalize_assoc_item/fn.f2.html' '//pre[@class="rust item-decl"]' 'pub fn f2() -> fn() -> i32'
+//@ has 'normalize_assoc_item/fn.f2.html' '//pre[@class="rust item-decl"]' 'pub fn f2() -> fn() -> i32'
 pub fn f2() -> <isize as Trait>::X {
     todo!()
 }
 
 pub struct S {
-    // @has 'normalize_assoc_item/struct.S.html' '//span[@id="structfield.box_me_up"]' 'box_me_up: Box<S>'
+    //@ has 'normalize_assoc_item/struct.S.html' '//span[@id="structfield.box_me_up"]' 'box_me_up: Box<S>'
     pub box_me_up: <S as Trait>::X,
-    // @has 'normalize_assoc_item/struct.S.html' '//span[@id="structfield.generic"]' 'generic: (usize, isize)'
+    //@ has 'normalize_assoc_item/struct.S.html' '//span[@id="structfield.generic"]' 'generic: (usize, isize)'
     pub generic: <Generic<usize> as Trait>::X,
 }
 
@@ -49,10 +49,10 @@ impl<Inner: Trait> Trait for Generic<Inner> {
 // These can't be normalized because they depend on a generic parameter.
 // However the user can choose whether the text should be displayed as `Inner::X` or `<Inner as Trait>::X`.
 
-// @has 'normalize_assoc_item/struct.Unknown.html' '//pre[@class="rust item-decl"]' 'pub struct Unknown<Inner: Trait>(pub <Inner as Trait>::X);'
+//@ has 'normalize_assoc_item/struct.Unknown.html' '//pre[@class="rust item-decl"]' 'pub struct Unknown<Inner: Trait>(pub <Inner as Trait>::X);'
 pub struct Unknown<Inner: Trait>(pub <Inner as Trait>::X);
 
-// @has 'normalize_assoc_item/struct.Unknown2.html' '//pre[@class="rust item-decl"]' 'pub struct Unknown2<Inner: Trait>(pub Inner::X);'
+//@ has 'normalize_assoc_item/struct.Unknown2.html' '//pre[@class="rust item-decl"]' 'pub struct Unknown2<Inner: Trait>(pub Inner::X);'
 pub struct Unknown2<Inner: Trait>(pub Inner::X);
 
 trait Lifetimes<'a> {
@@ -63,20 +63,20 @@ impl<'a> Lifetimes<'a> for usize {
     type Y = &'a isize;
 }
 
-// @has 'normalize_assoc_item/fn.g.html' '//pre[@class="rust item-decl"]' "pub fn g() -> &'static isize"
+//@ has 'normalize_assoc_item/fn.g.html' '//pre[@class="rust item-decl"]' "pub fn g() -> &'static isize"
 pub fn g() -> <usize as Lifetimes<'static>>::Y {
     &0
 }
 
-// @has 'normalize_assoc_item/constant.A.html' '//pre[@class="rust item-decl"]' "pub const A: &'static isize"
+//@ has 'normalize_assoc_item/constant.A.html' '//pre[@class="rust item-decl"]' "pub const A: &'static isize"
 pub const A: <usize as Lifetimes<'static>>::Y = &0;
 
 // test cross-crate re-exports
 extern crate inner;
-// @has 'normalize_assoc_item/fn.foo.html' '//pre[@class="rust item-decl"]' "pub fn foo() -> i32"
+//@ has 'normalize_assoc_item/fn.foo.html' '//pre[@class="rust item-decl"]' "pub fn foo() -> i32"
 pub use inner::foo;
 
-// @has 'normalize_assoc_item/fn.h.html' '//pre[@class="rust item-decl"]' "pub fn h<T>() -> IntoIter<T>"
+//@ has 'normalize_assoc_item/fn.h.html' '//pre[@class="rust item-decl"]' "pub fn h<T>() -> IntoIter<T>"
 pub fn h<T>() -> <Vec<T> as IntoIterator>::IntoIter {
     vec![].into_iter()
 }
diff --git a/tests/rustdoc/notable-trait/doc-notable_trait-mut_t_is_not_an_iterator.rs b/tests/rustdoc/notable-trait/doc-notable_trait-mut_t_is_not_an_iterator.rs
index 5af5f7616b5..043d787396d 100644
--- a/tests/rustdoc/notable-trait/doc-notable_trait-mut_t_is_not_an_iterator.rs
+++ b/tests/rustdoc/notable-trait/doc-notable_trait-mut_t_is_not_an_iterator.rs
@@ -16,8 +16,8 @@
 /// that are implemented on foreign types don't show up.
 mod reference {}
 
-// @has doc_notable_trait_mut_t_is_not_an_iterator/fn.fn_no_matches.html
-// @!has - '//code[@class="content"]' 'Iterator'
+//@ has doc_notable_trait_mut_t_is_not_an_iterator/fn.fn_no_matches.html
+//@ !has - '//code[@class="content"]' 'Iterator'
 pub fn fn_no_matches<'a, T: 'a>() -> &'a mut T {
     panic!()
 }
diff --git a/tests/rustdoc/notable-trait/doc-notable_trait-mut_t_is_not_ref_t.rs b/tests/rustdoc/notable-trait/doc-notable_trait-mut_t_is_not_ref_t.rs
index 6c980aaa2b1..6a9fbb9ac0b 100644
--- a/tests/rustdoc/notable-trait/doc-notable_trait-mut_t_is_not_ref_t.rs
+++ b/tests/rustdoc/notable-trait/doc-notable_trait-mut_t_is_not_ref_t.rs
@@ -14,8 +14,8 @@
 /// that are implemented on foreign types don't show up.
 mod reference {}
 
-// @has doc_notable_trait_mut_t_is_not_ref_t/fn.fn_no_matches.html
-// @!has - '//code[@class="content"]' "impl<'_, I> Iterator for &'_ mut I"
+//@ has doc_notable_trait_mut_t_is_not_ref_t/fn.fn_no_matches.html
+//@ !has - '//code[@class="content"]' "impl<'_, I> Iterator for &'_ mut I"
 pub fn fn_no_matches<'a, T: Iterator + 'a>() -> &'a T {
     loop {}
 }
diff --git a/tests/rustdoc/notable-trait/doc-notable_trait-negative.rs b/tests/rustdoc/notable-trait/doc-notable_trait-negative.rs
index 2bbe0a3ef8c..feb40b3797b 100644
--- a/tests/rustdoc/notable-trait/doc-notable_trait-negative.rs
+++ b/tests/rustdoc/notable-trait/doc-notable_trait-negative.rs
@@ -9,14 +9,14 @@ impl SomeTrait for Positive {}
 pub struct Negative;
 impl !SomeTrait for Negative {}
 
-// @has doc_notable_trait_negative/fn.positive.html
-// @snapshot positive - '//script[@id="notable-traits-data"]'
+//@ has doc_notable_trait_negative/fn.positive.html
+//@ snapshot positive - '//script[@id="notable-traits-data"]'
 pub fn positive() -> Positive {
     todo!()
 }
 
-// @has doc_notable_trait_negative/fn.negative.html
-// @count - '//script[@id="notable-traits-data"]' 0
+//@ has doc_notable_trait_negative/fn.negative.html
+//@ count - '//script[@id="notable-traits-data"]' 0
 pub fn negative() -> Negative {
     &[]
 }
diff --git a/tests/rustdoc/notable-trait/doc-notable_trait-slice.rs b/tests/rustdoc/notable-trait/doc-notable_trait-slice.rs
index ef206710b4b..f89f582a4bb 100644
--- a/tests/rustdoc/notable-trait/doc-notable_trait-slice.rs
+++ b/tests/rustdoc/notable-trait/doc-notable_trait-slice.rs
@@ -7,20 +7,20 @@ pub struct SomeStruct;
 pub struct OtherStruct;
 impl SomeTrait for &[SomeStruct] {}
 
-// @has doc_notable_trait_slice/fn.bare_fn_matches.html
-// @snapshot bare_fn_matches - '//script[@id="notable-traits-data"]'
+//@ has doc_notable_trait_slice/fn.bare_fn_matches.html
+//@ snapshot bare_fn_matches - '//script[@id="notable-traits-data"]'
 pub fn bare_fn_matches() -> &'static [SomeStruct] {
     &[]
 }
 
-// @has doc_notable_trait_slice/fn.bare_fn_no_matches.html
-// @count - '//script[@id="notable-traits-data"]' 0
+//@ has doc_notable_trait_slice/fn.bare_fn_no_matches.html
+//@ count - '//script[@id="notable-traits-data"]' 0
 pub fn bare_fn_no_matches() -> &'static [OtherStruct] {
     &[]
 }
 
-// @has doc_notable_trait_slice/fn.bare_fn_mut_no_matches.html
-// @count - '//script[@id="notable-traits-data"]' 0
+//@ has doc_notable_trait_slice/fn.bare_fn_mut_no_matches.html
+//@ count - '//script[@id="notable-traits-data"]' 0
 pub fn bare_fn_mut_no_matches() -> &'static mut [SomeStruct] {
     &mut []
 }
diff --git a/tests/rustdoc/notable-trait/doc-notable_trait.rs b/tests/rustdoc/notable-trait/doc-notable_trait.rs
index d8941769fa6..83fe6172e94 100644
--- a/tests/rustdoc/notable-trait/doc-notable_trait.rs
+++ b/tests/rustdoc/notable-trait/doc-notable_trait.rs
@@ -8,9 +8,9 @@ impl<T: SomeTrait> SomeTrait for Wrapper<T> {}
 
 #[doc(notable_trait)]
 pub trait SomeTrait {
-    // @has doc_notable_trait/trait.SomeTrait.html
-    // @has - '//a[@class="tooltip"]/@data-notable-ty' 'Wrapper<Self>'
-    // @snapshot wrap-me - '//script[@id="notable-traits-data"]'
+    //@ has doc_notable_trait/trait.SomeTrait.html
+    //@ has - '//a[@class="tooltip"]/@data-notable-ty' 'Wrapper<Self>'
+    //@ snapshot wrap-me - '//script[@id="notable-traits-data"]'
     fn wrap_me(self) -> Wrapper<Self> where Self: Sized {
         Wrapper {
             inner: self,
@@ -22,17 +22,17 @@ pub struct SomeStruct;
 impl SomeTrait for SomeStruct {}
 
 impl SomeStruct {
-    // @has doc_notable_trait/struct.SomeStruct.html
-    // @has - '//a[@class="tooltip"]/@data-notable-ty' 'SomeStruct'
-    // @snapshot some-struct-new - '//script[@id="notable-traits-data"]'
+    //@ has doc_notable_trait/struct.SomeStruct.html
+    //@ has - '//a[@class="tooltip"]/@data-notable-ty' 'SomeStruct'
+    //@ snapshot some-struct-new - '//script[@id="notable-traits-data"]'
     pub fn new() -> SomeStruct {
         SomeStruct
     }
 }
 
-// @has doc_notable_trait/fn.bare_fn.html
-// @has - '//a[@class="tooltip"]/@data-notable-ty' 'SomeStruct'
-// @snapshot bare-fn - '//script[@id="notable-traits-data"]'
+//@ has doc_notable_trait/fn.bare_fn.html
+//@ has - '//a[@class="tooltip"]/@data-notable-ty' 'SomeStruct'
+//@ snapshot bare-fn - '//script[@id="notable-traits-data"]'
 pub fn bare_fn() -> SomeStruct {
     SomeStruct
 }
diff --git a/tests/rustdoc/notable-trait/doc-notable_trait_box_is_not_an_iterator.rs b/tests/rustdoc/notable-trait/doc-notable_trait_box_is_not_an_iterator.rs
index 6b94d799483..dcdcbfb7ec1 100644
--- a/tests/rustdoc/notable-trait/doc-notable_trait_box_is_not_an_iterator.rs
+++ b/tests/rustdoc/notable-trait/doc-notable_trait_box_is_not_an_iterator.rs
@@ -30,12 +30,12 @@ impl<T> Pin<T> {
 
 impl<I: FakeIterator> FakeIterator for Pin<I> {}
 
-// @!has doc_notable_trait_box_is_not_an_iterator/fn.foo.html '//*' 'Notable'
+//@ !has doc_notable_trait_box_is_not_an_iterator/fn.foo.html '//*' 'Notable'
 pub fn foo<T>(x: T) -> Box<T> {
     Box::new(x)
 }
 
-// @!has doc_notable_trait_box_is_not_an_iterator/fn.bar.html '//*' 'Notable'
+//@ !has doc_notable_trait_box_is_not_an_iterator/fn.bar.html '//*' 'Notable'
 pub fn bar<T>(x: T) -> Pin<T> {
     Pin::new(x)
 }
diff --git a/tests/rustdoc/notable-trait/notable-trait-generics.rs b/tests/rustdoc/notable-trait/notable-trait-generics.rs
index 611902abad6..60d09661aff 100644
--- a/tests/rustdoc/notable-trait/notable-trait-generics.rs
+++ b/tests/rustdoc/notable-trait/notable-trait-generics.rs
@@ -10,8 +10,8 @@ pub mod generic_return {
 
     impl NotableTrait for Wrapper<u8> {}
 
-    // @has notable_trait_generics/generic_return/fn.returning.html
-    // @!has - '//a[@class="tooltip"]/@data-notable-ty' 'Wrapper<T>'
+    //@ has notable_trait_generics/generic_return/fn.returning.html
+    //@ !has - '//a[@class="tooltip"]/@data-notable-ty' 'Wrapper<T>'
     pub fn returning<T>() -> Wrapper<T> {
         loop {}
     }
@@ -27,8 +27,8 @@ pub mod generic_impl {
 
     impl<T> NotableTrait for Wrapper<T> {}
 
-    // @has notable_trait_generics/generic_impl/fn.returning.html
-    // @has - '//a[@class="tooltip"]/@data-notable-ty' 'Wrapper<u8>'
+    //@ has notable_trait_generics/generic_impl/fn.returning.html
+    //@ has - '//a[@class="tooltip"]/@data-notable-ty' 'Wrapper<u8>'
     pub fn returning() -> Wrapper<u8> {
         loop {}
     }
diff --git a/tests/rustdoc/notable-trait/spotlight-from-dependency.rs b/tests/rustdoc/notable-trait/spotlight-from-dependency.rs
index 426759c7bf8..992102f87c7 100644
--- a/tests/rustdoc/notable-trait/spotlight-from-dependency.rs
+++ b/tests/rustdoc/notable-trait/spotlight-from-dependency.rs
@@ -2,9 +2,9 @@
 
 use std::iter::Iterator;
 
-// @has foo/struct.Odd.html
-// @has - '//*[@id="method.new"]//a[@class="tooltip"]/@data-notable-ty' 'Odd'
-// @snapshot odd - '//script[@id="notable-traits-data"]'
+//@ has foo/struct.Odd.html
+//@ has - '//*[@id="method.new"]//a[@class="tooltip"]/@data-notable-ty' 'Odd'
+//@ snapshot odd - '//script[@id="notable-traits-data"]'
 pub struct Odd {
     current: usize,
 }
diff --git a/tests/rustdoc/nul-error.rs b/tests/rustdoc/nul-error.rs
index e8aa786534b..54688efc48c 100644
--- a/tests/rustdoc/nul-error.rs
+++ b/tests/rustdoc/nul-error.rs
@@ -3,6 +3,6 @@
 
 #![crate_name = "foo"]
 
-// @has foo/fn.foo.html '//code' ''
+//@ has foo/fn.foo.html '//code' ''
 #[doc = "Attempted to pass a string containing `\0`"]
 pub fn foo() {}
diff --git a/tests/rustdoc/playground-arg.rs b/tests/rustdoc/playground-arg.rs
index 58d87c653b4..5875451a859 100644
--- a/tests/rustdoc/playground-arg.rs
+++ b/tests/rustdoc/playground-arg.rs
@@ -10,4 +10,4 @@
 pub fn dummy() {}
 
 // ensure that `extern crate foo;` was inserted into code snips automatically:
-// @matches foo/index.html '//a[@class="test-arrow"][@href="https://example.com/?code=%23!%5Ballow(unused)%5D%0A%23%5Ballow(unused_extern_crates)%5D%0Aextern+crate+r%23foo;%0Afn+main()+%7B%0A++++use+foo::dummy;%0A++++dummy();%0A%7D&edition=2015"]' "Run"
+//@ matches foo/index.html '//a[@class="test-arrow"][@href="https://example.com/?code=%23!%5Ballow(unused)%5D%0A%23%5Ballow(unused_extern_crates)%5D%0Aextern+crate+r%23foo;%0Afn+main()+%7B%0A++++use+foo::dummy;%0A++++dummy();%0A%7D&edition=2015"]' "Run"
diff --git a/tests/rustdoc/playground-empty.rs b/tests/rustdoc/playground-empty.rs
index bfba9ffdbf4..61c422c436b 100644
--- a/tests/rustdoc/playground-empty.rs
+++ b/tests/rustdoc/playground-empty.rs
@@ -10,4 +10,4 @@
 //! println!("Hello, world!");
 //! ```
 
-// @!has foo/index.html '//a[@class="test-arrow"]' "Run"
+//@ !has foo/index.html '//a[@class="test-arrow"]' "Run"
diff --git a/tests/rustdoc/playground-none.rs b/tests/rustdoc/playground-none.rs
index ff51c68d8a2..924c0525190 100644
--- a/tests/rustdoc/playground-none.rs
+++ b/tests/rustdoc/playground-none.rs
@@ -6,4 +6,4 @@
 //! println!("Hello, world!");
 //! ```
 
-// @!has foo/index.html '//a[@class="test-arrow"]' "Run"
+//@ !has foo/index.html '//a[@class="test-arrow"]' "Run"
diff --git a/tests/rustdoc/playground-syntax-error.rs b/tests/rustdoc/playground-syntax-error.rs
index 8918ae874f8..f5067145e02 100644
--- a/tests/rustdoc/playground-syntax-error.rs
+++ b/tests/rustdoc/playground-syntax-error.rs
@@ -16,6 +16,6 @@
 /// ```
 pub fn bar() {}
 
-// @has foo/fn.bar.html
-// @has - '//a[@class="test-arrow"]' "Run"
-// @has - '//*[@class="docblock"]' 'foo_recursive'
+//@ has foo/fn.bar.html
+//@ has - '//a[@class="test-arrow"]' "Run"
+//@ has - '//*[@class="docblock"]' 'foo_recursive'
diff --git a/tests/rustdoc/playground.rs b/tests/rustdoc/playground.rs
index a2fc9eb7387..7880f779067 100644
--- a/tests/rustdoc/playground.rs
+++ b/tests/rustdoc/playground.rs
@@ -22,6 +22,6 @@
 //! }
 //! ```
 
-// @matches foo/index.html '//a[@class="test-arrow"][@href="https://www.example.com/?code=%23!%5Ballow(unused)%5D%0Afn+main()+%7B%0A++++println!(%22Hello,+world!%22);%0A%7D&edition=2015"]' "Run"
-// @matches foo/index.html '//a[@class="test-arrow"][@href="https://www.example.com/?code=%23!%5Ballow(unused)%5D%0Afn+main()+%7B%0A++++println!(%22Hello,+world!%22);%0A%7D&edition=2015"]' "Run"
-// @matches foo/index.html '//a[@class="test-arrow"][@href="https://www.example.com/?code=%23!%5Ballow(unused)%5D%0A%23!%5Bfeature(something)%5D%0A%0Afn+main()+%7B%0A++++println!(%22Hello,+world!%22);%0A%7D&version=nightly&edition=2015"]' "Run"
+//@ matches foo/index.html '//a[@class="test-arrow"][@href="https://www.example.com/?code=%23!%5Ballow(unused)%5D%0Afn+main()+%7B%0A++++println!(%22Hello,+world!%22);%0A%7D&edition=2015"]' "Run"
+//@ matches foo/index.html '//a[@class="test-arrow"][@href="https://www.example.com/?code=%23!%5Ballow(unused)%5D%0Afn+main()+%7B%0A++++println!(%22Hello,+world!%22);%0A%7D&edition=2015"]' "Run"
+//@ matches foo/index.html '//a[@class="test-arrow"][@href="https://www.example.com/?code=%23!%5Ballow(unused)%5D%0A%23!%5Bfeature(something)%5D%0A%0Afn+main()+%7B%0A++++println!(%22Hello,+world!%22);%0A%7D&version=nightly&edition=2015"]' "Run"
diff --git a/tests/rustdoc/primitive-link.rs b/tests/rustdoc/primitive-link.rs
index 125e0c84973..3fe9cdc3ca7 100644
--- a/tests/rustdoc/primitive-link.rs
+++ b/tests/rustdoc/primitive-link.rs
@@ -1,12 +1,12 @@
 #![crate_name = "foo"]
 
 
-// @has foo/struct.Foo.html '//*[@class="docblock"]/p/a[@href="{{channel}}/std/primitive.u32.html"]' 'u32'
-// @has foo/struct.Foo.html '//*[@class="docblock"]/p/a[@href="{{channel}}/std/primitive.i64.html"]' 'i64'
-// @has foo/struct.Foo.html '//*[@class="docblock"]/p/a[@href="{{channel}}/std/primitive.i32.html"]' 'std::primitive::i32'
-// @has foo/struct.Foo.html '//*[@class="docblock"]/p/a[@href="{{channel}}/std/primitive.str.html"]' 'std::primitive::str'
+//@ has foo/struct.Foo.html '//*[@class="docblock"]/p/a[@href="{{channel}}/std/primitive.u32.html"]' 'u32'
+//@ has foo/struct.Foo.html '//*[@class="docblock"]/p/a[@href="{{channel}}/std/primitive.i64.html"]' 'i64'
+//@ has foo/struct.Foo.html '//*[@class="docblock"]/p/a[@href="{{channel}}/std/primitive.i32.html"]' 'std::primitive::i32'
+//@ has foo/struct.Foo.html '//*[@class="docblock"]/p/a[@href="{{channel}}/std/primitive.str.html"]' 'std::primitive::str'
 
-// @has foo/struct.Foo.html '//*[@class="docblock"]/p/a[@href="{{channel}}/std/primitive.i32.html#associatedconstant.MAX"]' 'std::primitive::i32::MAX'
+//@ has foo/struct.Foo.html '//*[@class="docblock"]/p/a[@href="{{channel}}/std/primitive.i32.html#associatedconstant.MAX"]' 'std::primitive::i32::MAX'
 
 /// It contains [`u32`] and [i64].
 /// It also links to [std::primitive::i32], [std::primitive::str],
diff --git a/tests/rustdoc/primitive-raw-pointer-dox-15318-3.rs b/tests/rustdoc/primitive-raw-pointer-dox-15318-3.rs
index 80c55975687..5520abf2925 100644
--- a/tests/rustdoc/primitive-raw-pointer-dox-15318-3.rs
+++ b/tests/rustdoc/primitive-raw-pointer-dox-15318-3.rs
@@ -2,7 +2,7 @@
 #![crate_name="issue_15318_3"]
 #![feature(rustc_attrs)]
 
-// @has issue_15318_3/primitive.pointer.html
+//@ has issue_15318_3/primitive.pointer.html
 
 /// dox
 #[rustc_doc_primitive = "pointer"]
diff --git a/tests/rustdoc/primitive-raw-pointer-link-15318.rs b/tests/rustdoc/primitive-raw-pointer-link-15318.rs
index 66d84e9aaa3..a6f6f67dc84 100644
--- a/tests/rustdoc/primitive-raw-pointer-link-15318.rs
+++ b/tests/rustdoc/primitive-raw-pointer-link-15318.rs
@@ -7,7 +7,7 @@
 
 extern crate issue_15318;
 
-// @has issue_15318/fn.bar.html \
+//@ has issue_15318/fn.bar.html \
 //      '//*[@href="http://example.com/issue_15318/primitive.pointer.html"]' \
 //      '*mut T'
 pub fn bar<T>(ptr: *mut T) {}
diff --git a/tests/rustdoc/primitive-raw-pointer-link-no-inlined-15318-2.rs b/tests/rustdoc/primitive-raw-pointer-link-no-inlined-15318-2.rs
index e6c69c3407e..16b007e8bbd 100644
--- a/tests/rustdoc/primitive-raw-pointer-link-no-inlined-15318-2.rs
+++ b/tests/rustdoc/primitive-raw-pointer-link-no-inlined-15318-2.rs
@@ -9,7 +9,7 @@ extern crate issue_15318;
 
 pub use issue_15318::ptr;
 
-// @!has issue_15318_2/fn.bar.html \
+//@ !has issue_15318_2/fn.bar.html \
 //          '//*[@href="primitive.pointer.html"]' \
 //          '*mut T'
 pub fn bar<T>(ptr: *mut T) {}
diff --git a/tests/rustdoc/primitive-reexport.rs b/tests/rustdoc/primitive-reexport.rs
index 7dbb7c6db50..eb255745392 100644
--- a/tests/rustdoc/primitive-reexport.rs
+++ b/tests/rustdoc/primitive-reexport.rs
@@ -3,26 +3,26 @@
 
 #![crate_name = "bar"]
 
-// @has bar/p/index.html
-// @has - '//code' 'pub use bool;'
-// @has - '//code/a[@href="{{channel}}/std/primitive.bool.html"]' 'bool'
-// @has - '//code' 'pub use char as my_char;'
-// @has - '//code/a[@href="{{channel}}/std/primitive.char.html"]' 'char'
+//@ has bar/p/index.html
+//@ has - '//code' 'pub use bool;'
+//@ has - '//code/a[@href="{{channel}}/std/primitive.bool.html"]' 'bool'
+//@ has - '//code' 'pub use char as my_char;'
+//@ has - '//code/a[@href="{{channel}}/std/primitive.char.html"]' 'char'
 pub mod p {
     pub use foo::bar::*;
 }
 
-// @has bar/baz/index.html
-// @has - '//code' 'pub use bool;'
-// @has - '//code/a[@href="{{channel}}/std/primitive.bool.html"]' 'bool'
-// @has - '//code' 'pub use char as my_char;'
-// @has - '//code/a[@href="{{channel}}/std/primitive.char.html"]' 'char'
+//@ has bar/baz/index.html
+//@ has - '//code' 'pub use bool;'
+//@ has - '//code/a[@href="{{channel}}/std/primitive.bool.html"]' 'bool'
+//@ has - '//code' 'pub use char as my_char;'
+//@ has - '//code/a[@href="{{channel}}/std/primitive.char.html"]' 'char'
 pub use foo::bar as baz;
 
-// @has bar/index.html
-// @has - '//code' 'pub use str;'
-// @has - '//code/a[@href="{{channel}}/std/primitive.str.html"]' 'str'
-// @has - '//code' 'pub use i32 as my_i32;'
-// @has - '//code/a[@href="{{channel}}/std/primitive.i32.html"]' 'i32'
+//@ has bar/index.html
+//@ has - '//code' 'pub use str;'
+//@ has - '//code/a[@href="{{channel}}/std/primitive.str.html"]' 'str'
+//@ has - '//code' 'pub use i32 as my_i32;'
+//@ has - '//code/a[@href="{{channel}}/std/primitive.i32.html"]' 'i32'
 pub use str;
 pub use i32 as my_i32;
diff --git a/tests/rustdoc/primitive-reference.rs b/tests/rustdoc/primitive-reference.rs
index 6f034224df5..c12d65ee0c5 100644
--- a/tests/rustdoc/primitive-reference.rs
+++ b/tests/rustdoc/primitive-reference.rs
@@ -2,19 +2,19 @@
 
 #![feature(rustc_attrs)]
 
-// @has foo/index.html
-// @has - '//h2[@id="primitives"]' 'Primitive Types'
-// @has - '//a[@href="primitive.reference.html"]' 'reference'
-// @has - '//div[@class="sidebar-elems"]//li/a' 'Primitive Types'
-// @has - '//div[@class="sidebar-elems"]//li/a/@href' '#primitives'
-// @has foo/primitive.reference.html
-// @has - '//a[@class="primitive"]' 'reference'
-// @has - '//h1' 'Primitive Type reference'
-// @has - '//section[@id="main-content"]//div[@class="docblock"]//p' 'this is a test!'
+//@ has foo/index.html
+//@ has - '//h2[@id="primitives"]' 'Primitive Types'
+//@ has - '//a[@href="primitive.reference.html"]' 'reference'
+//@ has - '//div[@class="sidebar-elems"]//li/a' 'Primitive Types'
+//@ has - '//div[@class="sidebar-elems"]//li/a/@href' '#primitives'
+//@ has foo/primitive.reference.html
+//@ has - '//a[@class="primitive"]' 'reference'
+//@ has - '//h1' 'Primitive Type reference'
+//@ has - '//section[@id="main-content"]//div[@class="docblock"]//p' 'this is a test!'
 
 // There should be only one implementation listed.
-// @count - '//*[@class="impl"]' 1
-// @has - '//*[@id="impl-Foo%3C%26A%3E-for-%26B"]/*[@class="code-header"]' \
+//@ count - '//*[@class="impl"]' 1
+//@ has - '//*[@id="impl-Foo%3C%26A%3E-for-%26B"]/*[@class="code-header"]' \
 //        'impl<A, B> Foo<&A> for &B'
 #[rustc_doc_primitive = "reference"]
 /// this is a test!
diff --git a/tests/rustdoc/primitive-slice-auto-trait.rs b/tests/rustdoc/primitive-slice-auto-trait.rs
index 359a08f6a31..a877b73cf9f 100644
--- a/tests/rustdoc/primitive-slice-auto-trait.rs
+++ b/tests/rustdoc/primitive-slice-auto-trait.rs
@@ -3,12 +3,12 @@
 #![crate_name = "foo"]
 #![feature(rustc_attrs)]
 
-// @has foo/primitive.slice.html '//a[@class="primitive"]' 'slice'
-// @has - '//h1' 'Primitive Type slice'
-// @has - '//section[@id="main-content"]//div[@class="docblock"]//p' 'this is a test!'
-// @has - '//h2[@id="synthetic-implementations"]' 'Auto Trait Implementations'
-// @has - '//div[@id="synthetic-implementations-list"]//h3' 'impl<T> Send for [T]where T: Send'
-// @has - '//div[@id="synthetic-implementations-list"]//h3' 'impl<T> Sync for [T]where T: Sync'
+//@ has foo/primitive.slice.html '//a[@class="primitive"]' 'slice'
+//@ has - '//h1' 'Primitive Type slice'
+//@ has - '//section[@id="main-content"]//div[@class="docblock"]//p' 'this is a test!'
+//@ has - '//h2[@id="synthetic-implementations"]' 'Auto Trait Implementations'
+//@ has - '//div[@id="synthetic-implementations-list"]//h3' 'impl<T> Send for [T]where T: Send'
+//@ has - '//div[@id="synthetic-implementations-list"]//h3' 'impl<T> Sync for [T]where T: Sync'
 #[rustc_doc_primitive = "slice"]
 /// this is a test!
 mod slice_prim {}
diff --git a/tests/rustdoc/primitive-tuple-auto-trait.rs b/tests/rustdoc/primitive-tuple-auto-trait.rs
index 79737da3a2d..060c4ecfbdc 100644
--- a/tests/rustdoc/primitive-tuple-auto-trait.rs
+++ b/tests/rustdoc/primitive-tuple-auto-trait.rs
@@ -3,17 +3,17 @@
 #![crate_name = "foo"]
 #![feature(rustc_attrs)]
 
-// @has foo/primitive.tuple.html '//a[@class="primitive"]' 'tuple'
-// @has - '//h1' 'Primitive Type tuple'
-// @has - '//section[@id="main-content"]//div[@class="docblock"]//p' 'this is a test!'
-// @has - '//h2[@id="synthetic-implementations"]' 'Auto Trait Implementations'
-// @has - '//div[@id="synthetic-implementations-list"]//h3' 'Send'
-// @has - '//div[@id="synthetic-implementations-list"]//h3' 'Sync'
+//@ has foo/primitive.tuple.html '//a[@class="primitive"]' 'tuple'
+//@ has - '//h1' 'Primitive Type tuple'
+//@ has - '//section[@id="main-content"]//div[@class="docblock"]//p' 'this is a test!'
+//@ has - '//h2[@id="synthetic-implementations"]' 'Auto Trait Implementations'
+//@ has - '//div[@id="synthetic-implementations-list"]//h3' 'Send'
+//@ has - '//div[@id="synthetic-implementations-list"]//h3' 'Sync'
 #[rustc_doc_primitive = "tuple"]
 /// this is a test!
 ///
 // Hardcoded anchor to header written in library/core/src/primitive_docs.rs
-// @has - '//h2[@id="trait-implementations-1"]' 'Trait implementations'
+//@ has - '//h2[@id="trait-implementations-1"]' 'Trait implementations'
 /// # Trait implementations
 ///
 /// This header is hard-coded in the HTML format linking for `#[doc(fake_variadics)]`.
diff --git a/tests/rustdoc/primitive-tuple-variadic.rs b/tests/rustdoc/primitive-tuple-variadic.rs
index 546cf2ace42..4b2fb786a89 100644
--- a/tests/rustdoc/primitive-tuple-variadic.rs
+++ b/tests/rustdoc/primitive-tuple-variadic.rs
@@ -5,14 +5,14 @@
 
 pub trait Foo {}
 
-// @has foo/trait.Foo.html
-// @has - '//section[@id="impl-Foo-for-(T,)"]/h3' 'impl<T> Foo for (T₁, T₂, …, Tₙ)'
+//@ has foo/trait.Foo.html
+//@ has - '//section[@id="impl-Foo-for-(T,)"]/h3' 'impl<T> Foo for (T₁, T₂, …, Tₙ)'
 #[doc(fake_variadic)]
 impl<T> Foo for (T,) {}
 
 pub trait Bar {}
 
-// @has foo/trait.Bar.html
-// @has - '//section[@id="impl-Bar-for-(U,)"]/h3' 'impl<U: Foo> Bar for (U₁, U₂, …, Uₙ)'
+//@ has foo/trait.Bar.html
+//@ has - '//section[@id="impl-Bar-for-(U,)"]/h3' 'impl<U: Foo> Bar for (U₁, U₂, …, Uₙ)'
 #[doc(fake_variadic)]
 impl<U: Foo> Bar for (U,) {}
diff --git a/tests/rustdoc/primitive-unit-auto-trait.rs b/tests/rustdoc/primitive-unit-auto-trait.rs
index ff86a555cda..7751a2bf1d0 100644
--- a/tests/rustdoc/primitive-unit-auto-trait.rs
+++ b/tests/rustdoc/primitive-unit-auto-trait.rs
@@ -3,12 +3,12 @@
 #![crate_name = "foo"]
 #![feature(rustc_attrs)]
 
-// @has foo/primitive.unit.html '//a[@class="primitive"]' 'unit'
-// @has - '//h1' 'Primitive Type unit'
-// @has - '//section[@id="main-content"]//div[@class="docblock"]//p' 'this is a test!'
-// @has - '//h2[@id="synthetic-implementations"]' 'Auto Trait Implementations'
-// @has - '//div[@id="synthetic-implementations-list"]//h3' 'impl Send for ()'
-// @has - '//div[@id="synthetic-implementations-list"]//h3' 'impl Sync for ()'
+//@ has foo/primitive.unit.html '//a[@class="primitive"]' 'unit'
+//@ has - '//h1' 'Primitive Type unit'
+//@ has - '//section[@id="main-content"]//div[@class="docblock"]//p' 'this is a test!'
+//@ has - '//h2[@id="synthetic-implementations"]' 'Auto Trait Implementations'
+//@ has - '//div[@id="synthetic-implementations-list"]//h3' 'impl Send for ()'
+//@ has - '//div[@id="synthetic-implementations-list"]//h3' 'impl Sync for ()'
 #[rustc_doc_primitive = "unit"]
 /// this is a test!
 mod unit_prim {}
diff --git a/tests/rustdoc/primitive/no_std.rs b/tests/rustdoc/primitive/no_std.rs
index f0f70cb6c18..b3d47e7384b 100644
--- a/tests/rustdoc/primitive/no_std.rs
+++ b/tests/rustdoc/primitive/no_std.rs
@@ -2,8 +2,8 @@
 #![deny(warnings)]
 #![deny(rustdoc::broken_intra_doc_links)]
 
-// @has no_std/fn.foo.html '//a/[@href="{{channel}}/core/primitive.u8.html"]' 'u8'
-// @has no_std/fn.foo.html '//a/[@href="{{channel}}/core/primitive.u8.html"]' 'primitive link'
+//@ has no_std/fn.foo.html '//a/[@href="{{channel}}/core/primitive.u8.html"]' 'u8'
+//@ has no_std/fn.foo.html '//a/[@href="{{channel}}/core/primitive.u8.html"]' 'primitive link'
 /// Link to [primitive link][u8]
 pub fn foo() -> u8 {}
 
diff --git a/tests/rustdoc/primitive/primitive-generic-impl.rs b/tests/rustdoc/primitive/primitive-generic-impl.rs
index 558336d7316..b342e977cf0 100644
--- a/tests/rustdoc/primitive/primitive-generic-impl.rs
+++ b/tests/rustdoc/primitive/primitive-generic-impl.rs
@@ -1,7 +1,7 @@
 #![feature(rustc_attrs)]
 #![crate_name = "foo"]
 
-// @has foo/primitive.i32.html '//*[@id="impl-ToString-for-T"]//h3[@class="code-header"]' 'impl<T> ToString for T'
+//@ has foo/primitive.i32.html '//*[@id="impl-ToString-for-T"]//h3[@class="code-header"]' 'impl<T> ToString for T'
 
 #[rustc_doc_primitive = "i32"]
 /// Some useless docs, wouhou!
diff --git a/tests/rustdoc/primitive/primitive.rs b/tests/rustdoc/primitive/primitive.rs
index 4b89fd9dfb7..b54c3dd1cd6 100644
--- a/tests/rustdoc/primitive/primitive.rs
+++ b/tests/rustdoc/primitive/primitive.rs
@@ -4,30 +4,30 @@
 #![feature(f16)]
 #![feature(f128)]
 
-// @has foo/index.html '//h2[@id="primitives"]' 'Primitive Types'
-// @has foo/index.html '//a[@href="primitive.i32.html"]' 'i32'
-// @has foo/index.html '//div[@class="sidebar-elems"]//li/a' 'Primitive Types'
-// @has foo/index.html '//div[@class="sidebar-elems"]//li/a/@href' '#primitives'
-// @has foo/primitive.i32.html '//a[@class="primitive"]' 'i32'
-// @has foo/primitive.i32.html '//h1' 'Primitive Type i32'
-// @has foo/primitive.i32.html '//section[@id="main-content"]//div[@class="docblock"]//p' 'this is a test!'
-// @has foo/index.html '//a/@href' '../foo/index.html'
-// @!has foo/index.html '//span' '🔒'
+//@ has foo/index.html '//h2[@id="primitives"]' 'Primitive Types'
+//@ has foo/index.html '//a[@href="primitive.i32.html"]' 'i32'
+//@ has foo/index.html '//div[@class="sidebar-elems"]//li/a' 'Primitive Types'
+//@ has foo/index.html '//div[@class="sidebar-elems"]//li/a/@href' '#primitives'
+//@ has foo/primitive.i32.html '//a[@class="primitive"]' 'i32'
+//@ has foo/primitive.i32.html '//h1' 'Primitive Type i32'
+//@ has foo/primitive.i32.html '//section[@id="main-content"]//div[@class="docblock"]//p' 'this is a test!'
+//@ has foo/index.html '//a/@href' '../foo/index.html'
+//@ !has foo/index.html '//span' '🔒'
 #[rustc_doc_primitive = "i32"]
 /// this is a test!
 mod i32 {}
 
-// @has foo/primitive.bool.html '//section[@id="main-content"]//div[@class="docblock"]//p' 'hello'
+//@ has foo/primitive.bool.html '//section[@id="main-content"]//div[@class="docblock"]//p' 'hello'
 #[rustc_doc_primitive = "bool"]
 /// hello
 mod bool {}
 
-// @has foo/primitive.f16.html '//section[@id="main-content"]//div[@class="docblock"]//p' 'hello'
+//@ has foo/primitive.f16.html '//section[@id="main-content"]//div[@class="docblock"]//p' 'hello'
 #[rustc_doc_primitive = "f16"]
 /// hello
 mod f16 {}
 
-// @has foo/primitive.f128.html '//section[@id="main-content"]//div[@class="docblock"]//p' 'hello'
+//@ has foo/primitive.f128.html '//section[@id="main-content"]//div[@class="docblock"]//p' 'hello'
 #[rustc_doc_primitive = "f128"]
 /// hello
 mod f128 {}
diff --git a/tests/rustdoc/private-fields-tuple-struct.rs b/tests/rustdoc/private-fields-tuple-struct.rs
index c6989dd8cdf..51141923cd8 100644
--- a/tests/rustdoc/private-fields-tuple-struct.rs
+++ b/tests/rustdoc/private-fields-tuple-struct.rs
@@ -1,15 +1,15 @@
 // This test checks the diplay of "/* private fields */" sentence in tuple structs.
 #![crate_name = "foo"]
 
-// @has 'foo/struct.A.html' '//*[@class="rust item-decl"]/code' 'pub struct A(pub u8, _);'
+//@ has 'foo/struct.A.html' '//*[@class="rust item-decl"]/code' 'pub struct A(pub u8, _);'
 pub struct A(pub u8, u8);
-// @has 'foo/struct.B.html' '//*[@class="rust item-decl"]/code' 'pub struct B(_, pub u8);'
+//@ has 'foo/struct.B.html' '//*[@class="rust item-decl"]/code' 'pub struct B(_, pub u8);'
 pub struct B(u8, pub u8);
-// @has 'foo/struct.C.html' '//*[@class="rust item-decl"]/code' 'pub struct C(_, pub u8, _);'
+//@ has 'foo/struct.C.html' '//*[@class="rust item-decl"]/code' 'pub struct C(_, pub u8, _);'
 pub struct C(u8, pub u8, u8);
-// @has 'foo/struct.D.html' '//*[@class="rust item-decl"]/code' 'pub struct D(pub u8, _, pub u8);'
+//@ has 'foo/struct.D.html' '//*[@class="rust item-decl"]/code' 'pub struct D(pub u8, _, pub u8);'
 pub struct D(pub u8, u8, pub u8);
-// @has 'foo/struct.E.html' '//*[@class="rust item-decl"]/code' 'pub struct E(/* private fields */);'
+//@ has 'foo/struct.E.html' '//*[@class="rust item-decl"]/code' 'pub struct E(/* private fields */);'
 pub struct E(u8);
-// @has 'foo/struct.F.html' '//*[@class="rust item-decl"]/code' 'pub struct F(/* private fields */);'
+//@ has 'foo/struct.F.html' '//*[@class="rust item-decl"]/code' 'pub struct F(/* private fields */);'
 pub struct F(u8, u8);
diff --git a/tests/rustdoc/private-non-local-fields-2.rs b/tests/rustdoc/private-non-local-fields-2.rs
index 615b957f697..f2d3530c088 100644
--- a/tests/rustdoc/private-non-local-fields-2.rs
+++ b/tests/rustdoc/private-non-local-fields-2.rs
@@ -7,5 +7,5 @@
 
 use std::collections::BTreeMap;
 
-// @has 'foo/type.FooBar.html' '//*[@class="rust item-decl"]/code' 'struct FooBar { /* private fields */ }'
+//@ has 'foo/type.FooBar.html' '//*[@class="rust item-decl"]/code' 'struct FooBar { /* private fields */ }'
 pub type FooBar = BTreeMap<u32, String>;
diff --git a/tests/rustdoc/private-non-local-fields.rs b/tests/rustdoc/private-non-local-fields.rs
index 7922ce074dd..aa7f01a58c6 100644
--- a/tests/rustdoc/private-non-local-fields.rs
+++ b/tests/rustdoc/private-non-local-fields.rs
@@ -5,5 +5,5 @@
 
 use std::collections::BTreeMap;
 
-// @has 'foo/type.FooBar.html' '//*[@class="rust item-decl"]/code' 'struct FooBar { /* private fields */ }'
+//@ has 'foo/type.FooBar.html' '//*[@class="rust item-decl"]/code' 'struct FooBar { /* private fields */ }'
 pub type FooBar = BTreeMap<u32, String>;
diff --git a/tests/rustdoc/private-type-alias.rs b/tests/rustdoc/private-type-alias.rs
index ec7385404f0..5b5f52728a9 100644
--- a/tests/rustdoc/private-type-alias.rs
+++ b/tests/rustdoc/private-type-alias.rs
@@ -1,12 +1,12 @@
 type MyResultPriv<T> = Result<T, u16>;
 pub type MyResultPub<T> = Result<T, u64>;
 
-// @has private_type_alias/fn.get_result_priv.html '//pre' 'Result<u8, u16>'
+//@ has private_type_alias/fn.get_result_priv.html '//pre' 'Result<u8, u16>'
 pub fn get_result_priv() -> MyResultPriv<u8> {
     panic!();
 }
 
-// @has private_type_alias/fn.get_result_pub.html '//pre' 'MyResultPub<u32>'
+//@ has private_type_alias/fn.get_result_pub.html '//pre' 'MyResultPub<u32>'
 pub fn get_result_pub() -> MyResultPub<u32> {
     panic!();
 }
@@ -18,14 +18,14 @@ type PrivRecursive1 = PrivRecursive3;
 
 // PrivRecursive1 is expanded twice and stops at u8
 // PrivRecursive2 is expanded once and stops at public type alias PubRecursive
-// @has private_type_alias/fn.get_result_recursive.html '//pre' '(u8, PubRecursive)'
+//@ has private_type_alias/fn.get_result_recursive.html '//pre' '(u8, PubRecursive)'
 pub fn get_result_recursive() -> (PrivRecursive1, PrivRecursive2) {
     panic!();
 }
 
 type MyLifetimePriv<'a> = &'a isize;
 
-// @has private_type_alias/fn.get_lifetime_priv.html '//pre' "&'static isize"
+//@ has private_type_alias/fn.get_lifetime_priv.html '//pre' "&'static isize"
 pub fn get_lifetime_priv() -> MyLifetimePriv<'static> {
     panic!();
 }
diff --git a/tests/rustdoc/private-use-decl-macro-47038.rs b/tests/rustdoc/private-use-decl-macro-47038.rs
index 8944bdd42b4..b72fca06d3b 100644
--- a/tests/rustdoc/private-use-decl-macro-47038.rs
+++ b/tests/rustdoc/private-use-decl-macro-47038.rs
@@ -6,7 +6,7 @@
 
 use std::vec;
 
-// @has 'foo/index.html'
-// @!has - '//*[@id="macros"]' 'Macros'
-// @!has - '//a/@href' 'macro.vec.html'
-// @!has 'foo/macro.vec.html'
+//@ has 'foo/index.html'
+//@ !has - '//*[@id="macros"]' 'Macros'
+//@ !has - '//a/@href' 'macro.vec.html'
+//@ !has 'foo/macro.vec.html'
diff --git a/tests/rustdoc/proc-macro.rs b/tests/rustdoc/proc-macro.rs
index 57bf228052c..a821f68ab93 100644
--- a/tests/rustdoc/proc-macro.rs
+++ b/tests/rustdoc/proc-macro.rs
@@ -5,8 +5,8 @@
 #![crate_type="proc-macro"]
 #![crate_name="some_macros"]
 
-// @has some_macros/index.html
-// @has - '//a/[@href="attr.some_proc_attr.html"]' 'some_proc_attr'
+//@ has some_macros/index.html
+//@ has - '//a/[@href="attr.some_proc_attr.html"]' 'some_proc_attr'
 
 //! include a link to [some_proc_macro!] to make sure it works.
 
@@ -14,59 +14,59 @@ extern crate proc_macro;
 
 use proc_macro::TokenStream;
 
-// @has some_macros/index.html
-// @has - '//h2' 'Macros'
-// @has - '//h2' 'Attribute Macros'
-// @has - '//h2' 'Derive Macros'
-// @!has - '//h2' 'Functions'
+//@ has some_macros/index.html
+//@ has - '//h2' 'Macros'
+//@ has - '//h2' 'Attribute Macros'
+//@ has - '//h2' 'Derive Macros'
+//@ !has - '//h2' 'Functions'
 
-// @has some_macros/all.html
-// @has - '//a[@href="macro.some_proc_macro.html"]' 'some_proc_macro'
-// @has - '//a[@href="attr.some_proc_attr.html"]' 'some_proc_attr'
-// @has - '//a[@href="derive.SomeDerive.html"]' 'SomeDerive'
-// @!has - '//a/@href' 'fn.some_proc_macro.html'
-// @!has - '//a/@href' 'fn.some_proc_attr.html'
-// @!has - '//a/@href' 'fn.some_derive.html'
+//@ has some_macros/all.html
+//@ has - '//a[@href="macro.some_proc_macro.html"]' 'some_proc_macro'
+//@ has - '//a[@href="attr.some_proc_attr.html"]' 'some_proc_attr'
+//@ has - '//a[@href="derive.SomeDerive.html"]' 'SomeDerive'
+//@ !has - '//a/@href' 'fn.some_proc_macro.html'
+//@ !has - '//a/@href' 'fn.some_proc_attr.html'
+//@ !has - '//a/@href' 'fn.some_derive.html'
 
-// @has some_macros/index.html '//a/@href' 'macro.some_proc_macro.html'
-// @!has - '//a/@href' 'fn.some_proc_macro.html'
-// @has some_macros/macro.some_proc_macro.html
-// @!has some_macros/fn.some_proc_macro.html
+//@ has some_macros/index.html '//a/@href' 'macro.some_proc_macro.html'
+//@ !has - '//a/@href' 'fn.some_proc_macro.html'
+//@ has some_macros/macro.some_proc_macro.html
+//@ !has some_macros/fn.some_proc_macro.html
 /// a proc-macro that swallows its input and does nothing.
 #[proc_macro]
 pub fn some_proc_macro(_input: TokenStream) -> TokenStream {
     TokenStream::new()
 }
 
-// @has some_macros/index.html '//a/@href' 'attr.some_proc_attr.html'
-// @!has - '//a/@href' 'fn.some_proc_attr.html'
-// @has some_macros/attr.some_proc_attr.html
-// @!has some_macros/fn.some_proc_attr.html
+//@ has some_macros/index.html '//a/@href' 'attr.some_proc_attr.html'
+//@ !has - '//a/@href' 'fn.some_proc_attr.html'
+//@ has some_macros/attr.some_proc_attr.html
+//@ !has some_macros/fn.some_proc_attr.html
 /// a proc-macro attribute that passes its item through verbatim.
 #[proc_macro_attribute]
 pub fn some_proc_attr(_attr: TokenStream, item: TokenStream) -> TokenStream {
     item
 }
 
-// @has some_macros/index.html '//a/@href' 'derive.SomeDerive.html'
-// @!has - '//a/@href' 'fn.some_derive.html'
-// @has some_macros/derive.SomeDerive.html
-// @!has some_macros/fn.some_derive.html
+//@ has some_macros/index.html '//a/@href' 'derive.SomeDerive.html'
+//@ !has - '//a/@href' 'fn.some_derive.html'
+//@ has some_macros/derive.SomeDerive.html
+//@ !has some_macros/fn.some_derive.html
 /// a derive attribute that adds nothing to its input.
 #[proc_macro_derive(SomeDerive)]
 pub fn some_derive(_item: TokenStream) -> TokenStream {
     TokenStream::new()
 }
 
-// @has some_macros/foo/index.html
+//@ has some_macros/foo/index.html
 mod foo {
-    // @has - '//code' 'pub use some_proc_macro;'
-    // @has - '//a/@href' '../macro.some_proc_macro.html'
+    //@ has - '//code' 'pub use some_proc_macro;'
+    //@ has - '//a/@href' '../macro.some_proc_macro.html'
     pub use some_proc_macro;
-    // @has - '//code' 'pub use some_proc_attr;'
-    // @has - '//a/@href' '../attr.some_proc_attr.html'
+    //@ has - '//code' 'pub use some_proc_attr;'
+    //@ has - '//a/@href' '../attr.some_proc_attr.html'
     pub use some_proc_attr;
-    // @has - '//code' 'pub use some_derive;'
-    // @has - '//a/@href' '../derive.SomeDerive.html'
+    //@ has - '//code' 'pub use some_derive;'
+    //@ has - '//a/@href' '../derive.SomeDerive.html'
     pub use some_derive;
 }
diff --git a/tests/rustdoc/pub-extern-crate.rs b/tests/rustdoc/pub-extern-crate.rs
index c5be51f35ac..05f70301e33 100644
--- a/tests/rustdoc/pub-extern-crate.rs
+++ b/tests/rustdoc/pub-extern-crate.rs
@@ -1,9 +1,9 @@
 //@ aux-build:pub-extern-crate.rs
 
-// @has pub_extern_crate/index.html
-// @!has - '//code' 'pub extern crate inner'
-// @has - '//a/@href' 'inner/index.html'
-// @has pub_extern_crate/inner/index.html
-// @has pub_extern_crate/inner/struct.SomeStruct.html
+//@ has pub_extern_crate/index.html
+//@ !has - '//code' 'pub extern crate inner'
+//@ has - '//a/@href' 'inner/index.html'
+//@ has pub_extern_crate/inner/index.html
+//@ has pub_extern_crate/inner/struct.SomeStruct.html
 #[doc(inline)]
 pub extern crate inner;
diff --git a/tests/rustdoc/pub-method.rs b/tests/rustdoc/pub-method.rs
index 2a77aa75352..a759967fae5 100644
--- a/tests/rustdoc/pub-method.rs
+++ b/tests/rustdoc/pub-method.rs
@@ -2,16 +2,16 @@
 
 #![crate_name = "foo"]
 
-// @has foo/fn.bar.html
-// @has - '//pre[@class="rust item-decl"]' 'pub fn bar() -> '
+//@ has foo/fn.bar.html
+//@ has - '//pre[@class="rust item-decl"]' 'pub fn bar() -> '
 /// foo
 pub fn bar() -> usize {
     2
 }
 
-// @has foo/struct.Foo.html
-// @has - '//*[@class="method"]' 'pub fn new()'
-// @has - '//*[@class="method"]' 'fn not_pub()'
+//@ has foo/struct.Foo.html
+//@ has - '//*[@class="method"]' 'pub fn new()'
+//@ has - '//*[@class="method"]' 'fn not_pub()'
 pub struct Foo(usize);
 
 impl Foo {
diff --git a/tests/rustdoc/pub-reexport-of-pub-reexport-46506.rs b/tests/rustdoc/pub-reexport-of-pub-reexport-46506.rs
index ae0aead244b..f9569902927 100644
--- a/tests/rustdoc/pub-reexport-of-pub-reexport-46506.rs
+++ b/tests/rustdoc/pub-reexport-of-pub-reexport-46506.rs
@@ -3,11 +3,11 @@
 
 #![crate_name = "foo"]
 
-// @has 'foo/associations/index.html'
-// @count - '//*[@id="main-content"]/*[@class="section-header"]' 1
-// @has - '//*[@id="main-content"]/*[@class="section-header"]' 'Traits'
-// @has - '//*[@id="main-content"]//a[@href="trait.GroupedBy.html"]' 'GroupedBy'
-// @has 'foo/associations/trait.GroupedBy.html'
+//@ has 'foo/associations/index.html'
+//@ count - '//*[@id="main-content"]/*[@class="section-header"]' 1
+//@ has - '//*[@id="main-content"]/*[@class="section-header"]' 'Traits'
+//@ has - '//*[@id="main-content"]//a[@href="trait.GroupedBy.html"]' 'GroupedBy'
+//@ has 'foo/associations/trait.GroupedBy.html'
 pub mod associations {
     mod belongs_to {
         pub trait GroupedBy {}
@@ -15,10 +15,10 @@ pub mod associations {
     pub use self::belongs_to::GroupedBy;
 }
 
-// @has 'foo/prelude/index.html'
-// @count - '//*[@id="main-content"]/*[@class="section-header"]' 1
-// @has - '//*[@id="main-content"]/*[@class="section-header"]' 'Re-exports'
-// @has - '//*[@id="main-content"]//*[@id="reexport.GroupedBy"]' 'pub use associations::GroupedBy;'
+//@ has 'foo/prelude/index.html'
+//@ count - '//*[@id="main-content"]/*[@class="section-header"]' 1
+//@ has - '//*[@id="main-content"]/*[@class="section-header"]' 'Re-exports'
+//@ has - '//*[@id="main-content"]//*[@id="reexport.GroupedBy"]' 'pub use associations::GroupedBy;'
 pub mod prelude {
     pub use associations::GroupedBy;
 }
diff --git a/tests/rustdoc/pub-use-extern-macros.rs b/tests/rustdoc/pub-use-extern-macros.rs
index d3d667297fb..2316e620343 100644
--- a/tests/rustdoc/pub-use-extern-macros.rs
+++ b/tests/rustdoc/pub-use-extern-macros.rs
@@ -2,16 +2,16 @@
 
 extern crate macros;
 
-// @has pub_use_extern_macros/macro.bar.html
-// @!has pub_use_extern_macros/index.html '//code' 'pub use macros::bar;'
+//@ has pub_use_extern_macros/macro.bar.html
+//@ !has pub_use_extern_macros/index.html '//code' 'pub use macros::bar;'
 pub use macros::bar;
 
-// @has pub_use_extern_macros/macro.baz.html
-// @!has pub_use_extern_macros/index.html '//code' 'pub use macros::baz;'
+//@ has pub_use_extern_macros/macro.baz.html
+//@ !has pub_use_extern_macros/index.html '//code' 'pub use macros::baz;'
 #[doc(inline)]
 pub use macros::baz;
 
-// @!has pub_use_extern_macros/macro.quux.html
-// @!has pub_use_extern_macros/index.html '//code' 'pub use macros::quux;'
+//@ !has pub_use_extern_macros/macro.quux.html
+//@ !has pub_use_extern_macros/index.html '//code' 'pub use macros::quux;'
 #[doc(hidden)]
 pub use macros::quux;
diff --git a/tests/rustdoc/pub-use-root-path-95873.rs b/tests/rustdoc/pub-use-root-path-95873.rs
index 5a817fb3409..e3d5ee6e315 100644
--- a/tests/rustdoc/pub-use-root-path-95873.rs
+++ b/tests/rustdoc/pub-use-root-path-95873.rs
@@ -1,5 +1,5 @@
 // https://github.com/rust-lang/rust/issues/95873
 #![crate_name = "foo"]
 
-// @has foo/index.html "//*[@class='item-name']" "pub use ::std as x;"
+//@ has foo/index.html "//*[@class='item-name']" "pub use ::std as x;"
 pub use ::std as x;
diff --git a/tests/rustdoc/public-impl-mention-private-generic-46380-2.rs b/tests/rustdoc/public-impl-mention-private-generic-46380-2.rs
index 96ebd888eb5..0445ae75e85 100644
--- a/tests/rustdoc/public-impl-mention-private-generic-46380-2.rs
+++ b/tests/rustdoc/public-impl-mention-private-generic-46380-2.rs
@@ -3,10 +3,10 @@
 
 pub trait PublicTrait<T> {}
 
-// @has foo/struct.PublicStruct.html
+//@ has foo/struct.PublicStruct.html
 pub struct PublicStruct;
 
-// @!has - '//*[@class="impl"]' 'impl PublicTrait<PrivateStruct> for PublicStruct'
+//@ !has - '//*[@class="impl"]' 'impl PublicTrait<PrivateStruct> for PublicStruct'
 impl PublicTrait<PrivateStruct> for PublicStruct {}
 
 struct PrivateStruct;
diff --git a/tests/rustdoc/range-arg-pattern.rs b/tests/rustdoc/range-arg-pattern.rs
index d0d9111bb40..e5de6ba464b 100644
--- a/tests/rustdoc/range-arg-pattern.rs
+++ b/tests/rustdoc/range-arg-pattern.rs
@@ -1,5 +1,5 @@
 #![crate_name = "foo"]
 
-// @has foo/fn.f.html
-// @has - '//pre[@class="rust item-decl"]' 'pub fn f(_: u8)'
+//@ has foo/fn.f.html
+//@ has - '//pre[@class="rust item-decl"]' 'pub fn f(_: u8)'
 pub fn f(0u8..=255: u8) {}
diff --git a/tests/rustdoc/raw-ident-eliminate-r-hashtag.rs b/tests/rustdoc/raw-ident-eliminate-r-hashtag.rs
index 7dbe63854f3..d9b88627ae5 100644
--- a/tests/rustdoc/raw-ident-eliminate-r-hashtag.rs
+++ b/tests/rustdoc/raw-ident-eliminate-r-hashtag.rs
@@ -1,7 +1,7 @@
 #![crate_type="lib"]
 
 pub mod internal {
-    // @has 'raw_ident_eliminate_r_hashtag/internal/struct.mod.html'
+    //@ has 'raw_ident_eliminate_r_hashtag/internal/struct.mod.html'
     #[allow(non_camel_case_types)]
     pub struct r#mod;
 
@@ -9,13 +9,13 @@ pub mod internal {
     ///
     /// [name]: mod
     /// [other name]: crate::internal::mod
-    // @has 'raw_ident_eliminate_r_hashtag/internal/struct.B.html' '//*a[@href="struct.mod.html"]' 'name'
-    // @has 'raw_ident_eliminate_r_hashtag/internal/struct.B.html' '//*a[@href="struct.mod.html"]' 'other name'
+    //@ has 'raw_ident_eliminate_r_hashtag/internal/struct.B.html' '//*a[@href="struct.mod.html"]' 'name'
+    //@ has 'raw_ident_eliminate_r_hashtag/internal/struct.B.html' '//*a[@href="struct.mod.html"]' 'other name'
     pub struct B;
 }
 
 /// See [name].
 ///
 /// [name]: internal::mod
-// @has 'raw_ident_eliminate_r_hashtag/struct.A.html' '//*a[@href="internal/struct.mod.html"]' 'name'
+//@ has 'raw_ident_eliminate_r_hashtag/struct.A.html' '//*a[@href="internal/struct.mod.html"]' 'name'
 pub struct A;
diff --git a/tests/rustdoc/read-more-unneeded.rs b/tests/rustdoc/read-more-unneeded.rs
index 0303e444261..783ebe78200 100644
--- a/tests/rustdoc/read-more-unneeded.rs
+++ b/tests/rustdoc/read-more-unneeded.rs
@@ -23,12 +23,12 @@ pub trait MyFrom {
 
 pub struct NonZero;
 
-// @has 'foo/struct.NonZero.html'
+//@ has 'foo/struct.NonZero.html'
 impl MyFrom for NonZero {
-    // @matches - '//*[@class="docblock"]' '^Hello Read more$'
+    //@ matches - '//*[@class="docblock"]' '^Hello Read more$'
     fn try_from1() {}
-    // @matches - '//*[@class="docblock"]' '^a\sb\sc$'
+    //@ matches - '//*[@class="docblock"]' '^a\sb\sc$'
     fn try_from2() {}
-    // @matches - '//*[@class="docblock"]' '^a Read more$'
+    //@ matches - '//*[@class="docblock"]' '^a Read more$'
     fn try_from3() {}
 }
diff --git a/tests/rustdoc/redirect-const.rs b/tests/rustdoc/redirect-const.rs
index 453da8387ea..e636a915f30 100644
--- a/tests/rustdoc/redirect-const.rs
+++ b/tests/rustdoc/redirect-const.rs
@@ -4,10 +4,10 @@ pub use hidden::STATIC_FOO;
 pub use hidden::CONST_FOO;
 
 mod hidden {
-    // @has foo/hidden/static.STATIC_FOO.html
-    // @has - '//p/a' '../../foo/static.STATIC_FOO.html'
+    //@ has foo/hidden/static.STATIC_FOO.html
+    //@ has - '//p/a' '../../foo/static.STATIC_FOO.html'
     pub static STATIC_FOO: u64 = 0;
-    // @has foo/hidden/constant.CONST_FOO.html
-    // @has - '//p/a' '../../foo/constant.CONST_FOO.html'
+    //@ has foo/hidden/constant.CONST_FOO.html
+    //@ has - '//p/a' '../../foo/constant.CONST_FOO.html'
     pub const CONST_FOO: u64 = 0;
 }
diff --git a/tests/rustdoc/redirect-map-empty.rs b/tests/rustdoc/redirect-map-empty.rs
index 12e500e785e..7d215fc230e 100644
--- a/tests/rustdoc/redirect-map-empty.rs
+++ b/tests/rustdoc/redirect-map-empty.rs
@@ -2,5 +2,5 @@
 
 #![crate_name = "foo"]
 
-// @!has foo/redirect-map.json
+//@ !has foo/redirect-map.json
 pub struct Foo;
diff --git a/tests/rustdoc/redirect-map.rs b/tests/rustdoc/redirect-map.rs
index 3ad25298494..0207ba98fdb 100644
--- a/tests/rustdoc/redirect-map.rs
+++ b/tests/rustdoc/redirect-map.rs
@@ -2,9 +2,9 @@
 
 #![crate_name = "foo"]
 
-// @!has foo/private/struct.Quz.html
-// @!has foo/hidden/struct.Bar.html
-// @has foo/redirect-map.json
+//@ !has foo/private/struct.Quz.html
+//@ !has foo/hidden/struct.Bar.html
+//@ has foo/redirect-map.json
 pub use private::Quz;
 pub use hidden::Bar;
 
diff --git a/tests/rustdoc/redirect-rename.rs b/tests/rustdoc/redirect-rename.rs
index 504c0687c8d..724dd4978ca 100644
--- a/tests/rustdoc/redirect-rename.rs
+++ b/tests/rustdoc/redirect-rename.rs
@@ -1,34 +1,34 @@
 #![crate_name = "foo"]
 
 mod hidden {
-    // @has foo/hidden/struct.Foo.html
-    // @has - '//p/a' '../../foo/struct.FooBar.html'
+    //@ has foo/hidden/struct.Foo.html
+    //@ has - '//p/a' '../../foo/struct.FooBar.html'
     pub struct Foo {}
     pub union U { a: usize }
     pub enum Empty {}
     pub const C: usize = 1;
     pub static S: usize = 1;
 
-    // @has foo/hidden/bar/index.html
-    // @has - '//p/a' '../../foo/baz/index.html'
+    //@ has foo/hidden/bar/index.html
+    //@ has - '//p/a' '../../foo/baz/index.html'
     pub mod bar {
-        // @has foo/hidden/bar/struct.Thing.html
-        // @has - '//p/a' '../../foo/baz/struct.Thing.html'
+        //@ has foo/hidden/bar/struct.Thing.html
+        //@ has - '//p/a' '../../foo/baz/struct.Thing.html'
         pub struct Thing {}
     }
 }
 
-// @has foo/struct.FooBar.html
+//@ has foo/struct.FooBar.html
 pub use hidden::Foo as FooBar;
-// @has foo/union.FooU.html
+//@ has foo/union.FooU.html
 pub use hidden::U as FooU;
-// @has foo/enum.FooEmpty.html
+//@ has foo/enum.FooEmpty.html
 pub use hidden::Empty as FooEmpty;
-// @has foo/constant.FooC.html
+//@ has foo/constant.FooC.html
 pub use hidden::C as FooC;
-// @has foo/static.FooS.html
+//@ has foo/static.FooS.html
 pub use hidden::S as FooS;
 
-// @has foo/baz/index.html
-// @has foo/baz/struct.Thing.html
+//@ has foo/baz/index.html
+//@ has foo/baz/struct.Thing.html
 pub use hidden::bar as baz;
diff --git a/tests/rustdoc/redirect.rs b/tests/rustdoc/redirect.rs
index dc3a06b94d0..e52d3e5e83e 100644
--- a/tests/rustdoc/redirect.rs
+++ b/tests/rustdoc/redirect.rs
@@ -6,25 +6,25 @@ extern crate reexp_stripped;
 
 pub trait Foo {}
 
-// @has redirect/index.html
-// @has - '//code' 'pub use reexp_stripped::Bar'
-// @has - '//code/a' 'Bar'
-// @has - '//a[@href="../reexp_stripped/hidden/struct.Bar.html"]' 'Bar'
+//@ has redirect/index.html
+//@ has - '//code' 'pub use reexp_stripped::Bar'
+//@ has - '//code/a' 'Bar'
+//@ has - '//a[@href="../reexp_stripped/hidden/struct.Bar.html"]' 'Bar'
 // FIXME: Should be `@!has`: https://github.com/rust-lang/rust/issues/111249
-// @has reexp_stripped/hidden/struct.Bar.html
-// @matchesraw - '<meta http-equiv="refresh" content="0;URL=../../reexp_stripped/struct.Bar.html">'
-// @has 'reexp_stripped/struct.Bar.html'
-// @has - '//a[@href="struct.Bar.html"]' 'Bar'
+//@ has reexp_stripped/hidden/struct.Bar.html
+//@ matchesraw - '<meta http-equiv="refresh" content="0;URL=../../reexp_stripped/struct.Bar.html">'
+//@ has 'reexp_stripped/struct.Bar.html'
+//@ has - '//a[@href="struct.Bar.html"]' 'Bar'
 #[doc(no_inline)]
 pub use reexp_stripped::Bar;
 impl Foo for Bar {}
 
-// @has redirect/index.html
-// @has - '//code' 'pub use reexp_stripped::Quz'
-// @has - '//code/a' 'Quz'
-// @has reexp_stripped/private/struct.Quz.html
-// @has - '//p/a' '../../reexp_stripped/struct.Quz.html'
-// @has 'reexp_stripped/struct.Quz.html'
+//@ has redirect/index.html
+//@ has - '//code' 'pub use reexp_stripped::Quz'
+//@ has - '//code/a' 'Quz'
+//@ has reexp_stripped/private/struct.Quz.html
+//@ has - '//p/a' '../../reexp_stripped/struct.Quz.html'
+//@ has 'reexp_stripped/struct.Quz.html'
 #[doc(no_inline)]
 pub use reexp_stripped::Quz;
 impl Foo for Quz {}
@@ -34,9 +34,9 @@ mod private_no_inline {
     impl ::Foo for Qux {}
 }
 
-// @has redirect/index.html
-// @has - '//code' 'pub use private_no_inline::Qux'
-// @!has - '//a' 'Qux'
-// @!has redirect/struct.Qux.html
+//@ has redirect/index.html
+//@ has - '//code' 'pub use private_no_inline::Qux'
+//@ !has - '//a' 'Qux'
+//@ !has redirect/struct.Qux.html
 #[doc(no_inline)]
 pub use private_no_inline::Qux;
diff --git a/tests/rustdoc/reexport-attr-merge.rs b/tests/rustdoc/reexport-attr-merge.rs
index 6cc054e7a8b..e4a406c3845 100644
--- a/tests/rustdoc/reexport-attr-merge.rs
+++ b/tests/rustdoc/reexport-attr-merge.rs
@@ -5,7 +5,7 @@
 #![crate_name = "foo"]
 #![feature(doc_cfg)]
 
-// @has 'foo/index.html'
+//@ has 'foo/index.html'
 
 #[doc(hidden, cfg(feature = "foo"))]
 pub struct Foo;
@@ -18,16 +18,16 @@ pub use Foo1 as Foo2;
 
 // First we ensure that only the reexport `Bar2` and the inlined struct `Bar`
 // are inlined.
-// @count - '//a[@class="struct"]' 2
+//@ count - '//a[@class="struct"]' 2
 // Then we check that `cfg` is displayed for base item, but not for intermediate re-exports.
-// @has - '//*[@class="stab portability"]' 'foo'
-// @!has - '//*[@class="stab portability"]' 'bar'
+//@ has - '//*[@class="stab portability"]' 'foo'
+//@ !has - '//*[@class="stab portability"]' 'bar'
 // And finally we check that the only element displayed is `Bar`.
-// @has - '//a[@class="struct"]' 'Bar'
+//@ has - '//a[@class="struct"]' 'Bar'
 #[doc(inline)]
 pub use Foo2 as Bar;
 
 // This one should appear but `Bar2` won't be linked because there is no
 // `#[doc(inline)]`.
-// @has - '//*[@id="reexport.Bar2"]' 'pub use Foo2 as Bar2;'
+//@ has - '//*[@id="reexport.Bar2"]' 'pub use Foo2 as Bar2;'
 pub use Foo2 as Bar2;
diff --git a/tests/rustdoc/reexport-cfg.rs b/tests/rustdoc/reexport-cfg.rs
index a6179fad873..7270da3d678 100644
--- a/tests/rustdoc/reexport-cfg.rs
+++ b/tests/rustdoc/reexport-cfg.rs
@@ -12,19 +12,19 @@ mod foo {
     pub struct Bar2;
 }
 
-// @has 'foo/index.html'
-// @has - '//*[@class="item-name"]' 'BabarNon-lie'
+//@ has 'foo/index.html'
+//@ has - '//*[@class="item-name"]' 'BabarNon-lie'
 #[cfg(not(feature = "lie"))]
 pub use crate::foo::Bar as Babar;
 
-// @has - '//*[@class="item-name"]' 'Babar2Non-cake'
+//@ has - '//*[@class="item-name"]' 'Babar2Non-cake'
 #[doc(cfg(not(feature = "cake")))]
 pub use crate::foo::Bar2 as Babar2;
 
-// @has - '//*[@class="item-table"]/li' 'pub use crate::Babar as Elephant;Non-robot'
+//@ has - '//*[@class="item-table"]/li' 'pub use crate::Babar as Elephant;Non-robot'
 #[cfg(not(feature = "robot"))]
 pub use crate::Babar as Elephant;
 
-// @has - '//*[@class="item-table"]/li' 'pub use crate::Babar2 as Elephant2;Non-cat'
+//@ has - '//*[@class="item-table"]/li' 'pub use crate::Babar2 as Elephant2;Non-cat'
 #[doc(cfg(not(feature = "cat")))]
 pub use crate::Babar2 as Elephant2;
diff --git a/tests/rustdoc/reexport-check.rs b/tests/rustdoc/reexport-check.rs
index 92729b82ae2..0f4e203d1d3 100644
--- a/tests/rustdoc/reexport-check.rs
+++ b/tests/rustdoc/reexport-check.rs
@@ -3,18 +3,18 @@
 
 extern crate reexport_check;
 
-// @!has 'foo/index.html' '//code' 'pub use self::i32;'
-// @has 'foo/i32/index.html'
+//@ !has 'foo/index.html' '//code' 'pub use self::i32;'
+//@ has 'foo/i32/index.html'
 #[allow(deprecated, deprecated_in_future)]
 pub use std::i32;
-// @!has 'foo/index.html' '//code' 'pub use self::string::String;'
-// @has 'foo/index.html' '//div[@class="item-name"]' 'String'
+//@ !has 'foo/index.html' '//code' 'pub use self::string::String;'
+//@ has 'foo/index.html' '//div[@class="item-name"]' 'String'
 pub use std::string::String;
 
 // i32 is deprecated, String is not
-// @count 'foo/index.html' '//span[@class="stab deprecated"]' 1
+//@ count 'foo/index.html' '//span[@class="stab deprecated"]' 1
 
-// @has 'foo/index.html' '//div[@class="desc docblock-short"]' 'Docs in original'
+//@ has 'foo/index.html' '//div[@class="desc docblock-short"]' 'Docs in original'
 // this is a no-op, but shows what happens if there's an attribute that isn't a doc-comment
 #[doc(inline)]
 pub use reexport_check::S;
diff --git a/tests/rustdoc/reexport-dep-foreign-fn.rs b/tests/rustdoc/reexport-dep-foreign-fn.rs
index 1da3d8044b9..1b63fcff017 100644
--- a/tests/rustdoc/reexport-dep-foreign-fn.rs
+++ b/tests/rustdoc/reexport-dep-foreign-fn.rs
@@ -7,6 +7,6 @@
 
 extern crate all_item_types;
 
-// @has 'foo/fn.foo_ffn.html'
-// @has - '//*[@class="rust item-decl"]//code' 'pub unsafe extern "C" fn foo_ffn()'
+//@ has 'foo/fn.foo_ffn.html'
+//@ has - '//*[@class="rust item-decl"]//code' 'pub unsafe extern "C" fn foo_ffn()'
 pub use all_item_types::foo_ffn;
diff --git a/tests/rustdoc/reexport-doc-hidden-inside-private.rs b/tests/rustdoc/reexport-doc-hidden-inside-private.rs
index e9d243d8abf..fac928fc2a3 100644
--- a/tests/rustdoc/reexport-doc-hidden-inside-private.rs
+++ b/tests/rustdoc/reexport-doc-hidden-inside-private.rs
@@ -8,9 +8,9 @@ mod private_module {
     pub struct Public;
 }
 
-// @has 'foo/index.html'
-// @has - '//*[@id="reexport.Foo"]/code' 'pub use crate::private_module::Public as Foo;'
+//@ has 'foo/index.html'
+//@ has - '//*[@id="reexport.Foo"]/code' 'pub use crate::private_module::Public as Foo;'
 pub use crate::private_module::Public as Foo;
 // Glob re-exports with no visible items should not be displayed.
-// @count - '//*[@class="item-table"]/li' 1
+//@ count - '//*[@class="item-table"]/li' 1
 pub use crate::private_module::*;
diff --git a/tests/rustdoc/reexport-doc-hidden.rs b/tests/rustdoc/reexport-doc-hidden.rs
index d9ed954868e..b912362f298 100644
--- a/tests/rustdoc/reexport-doc-hidden.rs
+++ b/tests/rustdoc/reexport-doc-hidden.rs
@@ -7,11 +7,11 @@
 #[doc(hidden)]
 pub type Type = u32;
 
-// @has 'foo/index.html'
-// @has - '//*[@id="reexport.Type2"]/code' 'pub use crate::Type as Type2;'
+//@ has 'foo/index.html'
+//@ has - '//*[@id="reexport.Type2"]/code' 'pub use crate::Type as Type2;'
 pub use crate::Type as Type2;
 
-// @count - '//*[@id="reexport.Type3"]' 0
+//@ count - '//*[@id="reexport.Type3"]' 0
 #[doc(hidden)]
 pub use crate::Type as Type3;
 
@@ -21,5 +21,5 @@ macro_rules! foo {
     () => {};
 }
 
-// @has - '//*[@id="reexport.Macro"]/code' 'pub use crate::foo as Macro;'
+//@ has - '//*[@id="reexport.Macro"]/code' 'pub use crate::foo as Macro;'
 pub use crate::foo as Macro;
diff --git a/tests/rustdoc/reexport-doc.rs b/tests/rustdoc/reexport-doc.rs
index cb1a398b1c3..0c20de41231 100644
--- a/tests/rustdoc/reexport-doc.rs
+++ b/tests/rustdoc/reexport-doc.rs
@@ -2,7 +2,7 @@
 
 extern crate reexport_doc_aux as dep;
 
-// @has 'reexport_doc/struct.Foo.html'
-// @count - '//p' 'These are the docs for Foo.' 1
+//@ has 'reexport_doc/struct.Foo.html'
+//@ count - '//p' 'These are the docs for Foo.' 1
 /// These are the docs for Foo.
 pub use dep::Foo;
diff --git a/tests/rustdoc/reexport-hidden-macro.rs b/tests/rustdoc/reexport-hidden-macro.rs
index 47a21e39462..9b83bca3906 100644
--- a/tests/rustdoc/reexport-hidden-macro.rs
+++ b/tests/rustdoc/reexport-hidden-macro.rs
@@ -3,12 +3,12 @@
 
 #![crate_name = "foo"]
 
-// @has 'foo/index.html'
-// @has - '//*[@id="main-content"]//a[@href="macro.Macro2.html"]' 'Macro2'
-// @has - '//*[@id="reexport.Macro"]/code' 'pub use crate::foo as Macro;'
+//@ has 'foo/index.html'
+//@ has - '//*[@id="main-content"]//a[@href="macro.Macro2.html"]' 'Macro2'
+//@ has - '//*[@id="reexport.Macro"]/code' 'pub use crate::foo as Macro;'
 
-// @has 'foo/macro.Macro2.html'
-// @has - '//*[@class="docblock"]' 'Displayed'
+//@ has 'foo/macro.Macro2.html'
+//@ has - '//*[@class="docblock"]' 'Displayed'
 
 #[macro_export]
 #[doc(hidden)]
diff --git a/tests/rustdoc/reexport-macro.rs b/tests/rustdoc/reexport-macro.rs
index c4dec703aed..7e041eb90ba 100644
--- a/tests/rustdoc/reexport-macro.rs
+++ b/tests/rustdoc/reexport-macro.rs
@@ -3,9 +3,9 @@
 
 #![crate_name = "foo"]
 
-// @has 'foo/macro.foo.html'
-// @!has - '//*[@class="toggle top-doc"]/*[@class="docblock"]' 'x y'
-// @has - '//*[@class="toggle top-doc"]/*[@class="docblock"]' 'y'
+//@ has 'foo/macro.foo.html'
+//@ !has - '//*[@class="toggle top-doc"]/*[@class="docblock"]' 'x y'
+//@ has - '//*[@class="toggle top-doc"]/*[@class="docblock"]' 'y'
 #[macro_use]
 mod my_module {
     /// y
@@ -15,8 +15,8 @@ mod my_module {
     }
 }
 
-// @has 'foo/another_mod/macro.bar.html'
-// @has - '//*[@class="toggle top-doc"]/*[@class="docblock"]' 'x y'
+//@ has 'foo/another_mod/macro.bar.html'
+//@ has - '//*[@class="toggle top-doc"]/*[@class="docblock"]' 'x y'
 pub mod another_mod {
     /// x
     pub use crate::foo as bar;
diff --git a/tests/rustdoc/reexport-of-doc-hidden.rs b/tests/rustdoc/reexport-of-doc-hidden.rs
index b733716c22a..21511bc2aea 100644
--- a/tests/rustdoc/reexport-of-doc-hidden.rs
+++ b/tests/rustdoc/reexport-of-doc-hidden.rs
@@ -11,32 +11,32 @@ macro_rules! foo {
     () => {};
 }
 
-// @has 'foo/index.html'
-// @has - '//*[@id="reexport.Macro"]/code' 'pub use crate::foo as Macro;'
+//@ has 'foo/index.html'
+//@ has - '//*[@id="reexport.Macro"]/code' 'pub use crate::foo as Macro;'
 pub use crate::foo as Macro;
-// @has - '//*[@id="reexport.Macro2"]/code' 'pub use crate::foo as Macro2;'
+//@ has - '//*[@id="reexport.Macro2"]/code' 'pub use crate::foo as Macro2;'
 pub use crate::foo as Macro2;
-// @has - '//*[@id="reexport.Boo"]/code' 'pub use crate::Bar as Boo;'
+//@ has - '//*[@id="reexport.Boo"]/code' 'pub use crate::Bar as Boo;'
 pub use crate::Bar as Boo;
-// @has - '//*[@id="reexport.Boo2"]/code' 'pub use crate::Bar as Boo2;'
+//@ has - '//*[@id="reexport.Boo2"]/code' 'pub use crate::Bar as Boo2;'
 pub use crate::Bar as Boo2;
 
 pub fn fofo() {}
 
-// @has - '//*[@id="reexport.f1"]/code' 'pub use crate::fofo as f1;'
+//@ has - '//*[@id="reexport.f1"]/code' 'pub use crate::fofo as f1;'
 pub use crate::fofo as f1;
-// @has - '//*[@id="reexport.f2"]/code' 'pub use crate::fofo as f2;'
+//@ has - '//*[@id="reexport.f2"]/code' 'pub use crate::fofo as f2;'
 pub use crate::fofo as f2;
 
 pub mod sub {
-    // @has 'foo/sub/index.html'
-    // @has - '//*[@id="reexport.Macro"]/code' 'pub use crate::foo as Macro;'
+    //@ has 'foo/sub/index.html'
+    //@ has - '//*[@id="reexport.Macro"]/code' 'pub use crate::foo as Macro;'
     pub use crate::foo as Macro;
-    // @has - '//*[@id="reexport.Macro2"]/code' 'pub use crate::foo as Macro2;'
+    //@ has - '//*[@id="reexport.Macro2"]/code' 'pub use crate::foo as Macro2;'
     pub use crate::foo as Macro2;
 
-    // @has - '//*[@id="reexport.f1"]/code' 'pub use crate::fofo as f1;'
+    //@ has - '//*[@id="reexport.f1"]/code' 'pub use crate::fofo as f1;'
     pub use crate::fofo as f1;
-    // @has - '//*[@id="reexport.f2"]/code' 'pub use crate::fofo as f2;'
+    //@ has - '//*[@id="reexport.f2"]/code' 'pub use crate::fofo as f2;'
     pub use crate::fofo as f2;
 }
diff --git a/tests/rustdoc/reexport-stability-tags-deprecated-and-portability.rs b/tests/rustdoc/reexport-stability-tags-deprecated-and-portability.rs
index c81c654a20e..f83f28f458e 100644
--- a/tests/rustdoc/reexport-stability-tags-deprecated-and-portability.rs
+++ b/tests/rustdoc/reexport-stability-tags-deprecated-and-portability.rs
@@ -15,34 +15,34 @@ pub mod tag {
     pub trait None {}
 }
 
-// @has foo/mod1/index.html
+//@ has foo/mod1/index.html
 pub mod mod1 {
-    // @has - '//code' 'pub use tag::Deprecated;'
-    // @has - '//span' 'Deprecated'
-    // @!has - '//span' 'sync'
+    //@ has - '//code' 'pub use tag::Deprecated;'
+    //@ has - '//span' 'Deprecated'
+    //@ !has - '//span' 'sync'
     pub use tag::Deprecated;
 }
 
-// @has foo/mod2/index.html
+//@ has foo/mod2/index.html
 pub mod mod2 {
-    // @has - '//code' 'pub use tag::Portability;'
-    // @!has - '//span' 'Deprecated'
-    // @!has - '//span' 'sync'
+    //@ has - '//code' 'pub use tag::Portability;'
+    //@ !has - '//span' 'Deprecated'
+    //@ !has - '//span' 'sync'
     pub use tag::Portability;
 }
 
-// @has foo/mod3/index.html
+//@ has foo/mod3/index.html
 pub mod mod3 {
-    // @has - '//code' 'pub use tag::Both;'
-    // @has - '//span' 'Deprecated'
-    // @!has - '//span' 'sync'
+    //@ has - '//code' 'pub use tag::Both;'
+    //@ has - '//span' 'Deprecated'
+    //@ !has - '//span' 'sync'
     pub use tag::Both;
 }
 
-// @has foo/mod4/index.html
+//@ has foo/mod4/index.html
 pub mod mod4 {
-    // @has - '//code' 'pub use tag::None;'
-    // @!has - '//span' 'Deprecated'
-    // @!has - '//span' 'sync'
+    //@ has - '//code' 'pub use tag::None;'
+    //@ !has - '//span' 'Deprecated'
+    //@ !has - '//span' 'sync'
     pub use tag::None;
 }
diff --git a/tests/rustdoc/reexport-stability-tags-unstable-and-portability.rs b/tests/rustdoc/reexport-stability-tags-unstable-and-portability.rs
index 423838e251b..adf3eed204a 100644
--- a/tests/rustdoc/reexport-stability-tags-unstable-and-portability.rs
+++ b/tests/rustdoc/reexport-stability-tags-unstable-and-portability.rs
@@ -20,42 +20,42 @@ pub mod tag {
     pub trait None {}
 }
 
-// @has foo/mod1/index.html
+//@ has foo/mod1/index.html
 #[stable(feature = "rust1", since = "1.0.0")]
 pub mod mod1 {
-    // @has - '//code' 'pub use tag::Unstable;'
-    // @has - '//span' 'Experimental'
-    // @!has - '//span' 'sync'
+    //@ has - '//code' 'pub use tag::Unstable;'
+    //@ has - '//span' 'Experimental'
+    //@ !has - '//span' 'sync'
     #[stable(feature = "rust1", since = "1.0.0")]
     pub use tag::Unstable;
 }
 
-// @has foo/mod2/index.html
+//@ has foo/mod2/index.html
 #[stable(feature = "rust1", since = "1.0.0")]
 pub mod mod2 {
-    // @has - '//code' 'pub use tag::Portability;'
-    // @!has - '//span' 'Experimental'
-    // @!has - '//span' 'sync'
+    //@ has - '//code' 'pub use tag::Portability;'
+    //@ !has - '//span' 'Experimental'
+    //@ !has - '//span' 'sync'
     #[stable(feature = "rust1", since = "1.0.0")]
     pub use tag::Portability;
 }
 
-// @has foo/mod3/index.html
+//@ has foo/mod3/index.html
 #[stable(feature = "rust1", since = "1.0.0")]
 pub mod mod3 {
-    // @has - '//code' 'pub use tag::Both;'
-    // @has - '//span' 'Experimental'
-    // @!has - '//span' 'sync'
+    //@ has - '//code' 'pub use tag::Both;'
+    //@ has - '//span' 'Experimental'
+    //@ !has - '//span' 'sync'
     #[stable(feature = "rust1", since = "1.0.0")]
     pub use tag::Both;
 }
 
-// @has foo/mod4/index.html
+//@ has foo/mod4/index.html
 #[stable(feature = "rust1", since = "1.0.0")]
 pub mod mod4 {
-    // @has - '//code' 'pub use tag::None;'
-    // @!has - '//span' 'Experimental'
-    // @!has - '//span' 'sync'
+    //@ has - '//code' 'pub use tag::None;'
+    //@ !has - '//span' 'Experimental'
+    //@ !has - '//span' 'sync'
     #[stable(feature = "rust1", since = "1.0.0")]
     pub use tag::None;
 }
diff --git a/tests/rustdoc/reexports-of-same-name.rs b/tests/rustdoc/reexports-of-same-name.rs
index fe6f1b38ca6..6e5d328b081 100644
--- a/tests/rustdoc/reexports-of-same-name.rs
+++ b/tests/rustdoc/reexports-of-same-name.rs
@@ -4,7 +4,7 @@
 
 #![crate_name = "foo"]
 
-// @has 'foo/index.html'
+//@ has 'foo/index.html'
 
 pub mod nested {
     /// Foo the struct
@@ -15,12 +15,12 @@ pub mod nested {
     pub fn Foo() {}
 }
 
-// @count - '//*[@id="main-content"]//code' 'pub use nested::Foo;' 2
-// @has - '//*[@id="reexport.Foo"]//a[@href="nested/struct.Foo.html"]' 'Foo'
-// @has - '//*[@id="reexport.Foo-1"]//a[@href="nested/fn.Foo.html"]' 'Foo'
+//@ count - '//*[@id="main-content"]//code' 'pub use nested::Foo;' 2
+//@ has - '//*[@id="reexport.Foo"]//a[@href="nested/struct.Foo.html"]' 'Foo'
+//@ has - '//*[@id="reexport.Foo-1"]//a[@href="nested/fn.Foo.html"]' 'Foo'
 pub use nested::Foo;
 
-// @count - '//*[@id="main-content"]//code' 'pub use Foo as Bar;' 2
-// @has - '//*[@id="reexport.Bar"]//a[@href="nested/struct.Foo.html"]' 'Foo'
-// @has - '//*[@id="reexport.Bar-1"]//a[@href="nested/fn.Foo.html"]' 'Foo'
+//@ count - '//*[@id="main-content"]//code' 'pub use Foo as Bar;' 2
+//@ has - '//*[@id="reexport.Bar"]//a[@href="nested/struct.Foo.html"]' 'Foo'
+//@ has - '//*[@id="reexport.Bar-1"]//a[@href="nested/fn.Foo.html"]' 'Foo'
 pub use Foo as Bar;
diff --git a/tests/rustdoc/reexports-priv.rs b/tests/rustdoc/reexports-priv.rs
index 97318a01410..4521b4feebc 100644
--- a/tests/rustdoc/reexports-priv.rs
+++ b/tests/rustdoc/reexports-priv.rs
@@ -5,131 +5,131 @@
 
 extern crate reexports;
 
-// @has 'foo/macro.addr_of.html' '//*[@class="rust item-decl"]' 'pub macro addr_of($place:expr) {'
+//@ has 'foo/macro.addr_of.html' '//*[@class="rust item-decl"]' 'pub macro addr_of($place:expr) {'
 pub use reexports::addr_of;
-// @!has 'foo/macro.addr_of_crate.html'
+//@ !has 'foo/macro.addr_of_crate.html'
 pub(crate) use reexports::addr_of_crate;
-// @!has 'foo/macro.addr_of_self.html'
+//@ !has 'foo/macro.addr_of_self.html'
 pub(self) use reexports::addr_of_self;
-// @!has 'foo/macro.addr_of_local.html'
+//@ !has 'foo/macro.addr_of_local.html'
 use reexports::addr_of_local;
 
-// @has 'foo/struct.Foo.html' '//*[@class="rust item-decl"]' 'pub struct Foo;'
+//@ has 'foo/struct.Foo.html' '//*[@class="rust item-decl"]' 'pub struct Foo;'
 pub use reexports::Foo;
-// @!has 'foo/struct.FooCrate.html'
+//@ !has 'foo/struct.FooCrate.html'
 pub(crate) use reexports::FooCrate;
-// @!has 'foo/struct.FooSelf.html'
+//@ !has 'foo/struct.FooSelf.html'
 pub(self) use reexports::FooSelf;
-// @!has 'foo/struct.FooLocal.html'
+//@ !has 'foo/struct.FooLocal.html'
 use reexports::FooLocal;
 
-// @has 'foo/enum.Bar.html' '//*[@class="rust item-decl"]' 'pub enum Bar {'
+//@ has 'foo/enum.Bar.html' '//*[@class="rust item-decl"]' 'pub enum Bar {'
 pub use reexports::Bar;
-// @!has 'foo/enum.BarCrate.html'
+//@ !has 'foo/enum.BarCrate.html'
 pub(crate) use reexports::BarCrate;
-// @!has 'foo/enum.BarSelf.html'
+//@ !has 'foo/enum.BarSelf.html'
 pub(self) use reexports::BarSelf;
-// @!has 'foo/enum.BarLocal.html'
+//@ !has 'foo/enum.BarLocal.html'
 use reexports::BarLocal;
 
-// @has 'foo/fn.foo.html' '//pre[@class="rust item-decl"]' 'pub fn foo()'
+//@ has 'foo/fn.foo.html' '//pre[@class="rust item-decl"]' 'pub fn foo()'
 pub use reexports::foo;
-// @!has 'foo/fn.foo_crate.html'
+//@ !has 'foo/fn.foo_crate.html'
 pub(crate) use reexports::foo_crate;
-// @!has 'foo/fn.foo_self.html'
+//@ !has 'foo/fn.foo_self.html'
 pub(self) use reexports::foo_self;
-// @!has 'foo/fn.foo_local.html'
+//@ !has 'foo/fn.foo_local.html'
 use reexports::foo_local;
 
-// @has 'foo/type.Type.html' '//pre[@class="rust item-decl"]' 'pub type Type ='
+//@ has 'foo/type.Type.html' '//pre[@class="rust item-decl"]' 'pub type Type ='
 pub use reexports::Type;
-// @!has 'foo/type.TypeCrate.html'
+//@ !has 'foo/type.TypeCrate.html'
 pub(crate) use reexports::TypeCrate;
-// @!has 'foo/type.TypeSelf.html'
+//@ !has 'foo/type.TypeSelf.html'
 pub(self) use reexports::TypeSelf;
-// @!has 'foo/type.TypeLocal.html'
+//@ !has 'foo/type.TypeLocal.html'
 use reexports::TypeLocal;
 
-// @has 'foo/union.Union.html' '//*[@class="rust item-decl"]' 'pub union Union {'
+//@ has 'foo/union.Union.html' '//*[@class="rust item-decl"]' 'pub union Union {'
 pub use reexports::Union;
-// @!has 'foo/union.UnionCrate.html'
+//@ !has 'foo/union.UnionCrate.html'
 pub(crate) use reexports::UnionCrate;
-// @!has 'foo/union.UnionSelf.html'
+//@ !has 'foo/union.UnionSelf.html'
 pub(self) use reexports::UnionSelf;
-// @!has 'foo/union.UnionLocal.html'
+//@ !has 'foo/union.UnionLocal.html'
 use reexports::UnionLocal;
 
 pub mod outer {
     pub mod inner {
-        // @has 'foo/outer/inner/macro.addr_of.html' '//*[@class="rust item-decl"]' 'pub macro addr_of($place:expr) {'
+        //@ has 'foo/outer/inner/macro.addr_of.html' '//*[@class="rust item-decl"]' 'pub macro addr_of($place:expr) {'
         pub use reexports::addr_of;
-        // @has 'foo/outer/inner/macro.addr_of_crate.html' '//*[@class="rust item-decl"]' 'pub(crate) macro addr_of_crate($place:expr) {'
+        //@ has 'foo/outer/inner/macro.addr_of_crate.html' '//*[@class="rust item-decl"]' 'pub(crate) macro addr_of_crate($place:expr) {'
         pub(crate) use reexports::addr_of_crate;
-        // @has 'foo/outer/inner/macro.addr_of_super.html' '//*[@class="rust item-decl"]' 'pub(in outer) macro addr_of_super($place:expr) {'
+        //@ has 'foo/outer/inner/macro.addr_of_super.html' '//*[@class="rust item-decl"]' 'pub(in outer) macro addr_of_super($place:expr) {'
         pub(super) use reexports::addr_of_super;
-        // @!has 'foo/outer/inner/macro.addr_of_self.html'
+        //@ !has 'foo/outer/inner/macro.addr_of_self.html'
         pub(self) use reexports::addr_of_self;
-        // @!has 'foo/outer/inner/macro.addr_of_local.html'
+        //@ !has 'foo/outer/inner/macro.addr_of_local.html'
         use reexports::addr_of_local;
 
-        // @has 'foo/outer/inner/struct.Foo.html' '//*[@class="rust item-decl"]' 'pub struct Foo;'
+        //@ has 'foo/outer/inner/struct.Foo.html' '//*[@class="rust item-decl"]' 'pub struct Foo;'
         pub use reexports::Foo;
-        // @has 'foo/outer/inner/struct.FooCrate.html' '//*[@class="rust item-decl"]' 'pub(crate) struct FooCrate;'
+        //@ has 'foo/outer/inner/struct.FooCrate.html' '//*[@class="rust item-decl"]' 'pub(crate) struct FooCrate;'
         pub(crate) use reexports::FooCrate;
-        // @has 'foo/outer/inner/struct.FooSuper.html' '//*[@class="rust item-decl"]' 'pub(in outer) struct FooSuper;'
+        //@ has 'foo/outer/inner/struct.FooSuper.html' '//*[@class="rust item-decl"]' 'pub(in outer) struct FooSuper;'
         pub(super) use reexports::FooSuper;
-        // @!has 'foo/outer/inner/struct.FooSelf.html'
+        //@ !has 'foo/outer/inner/struct.FooSelf.html'
         pub(self) use reexports::FooSelf;
-        // @!has 'foo/outer/inner/struct.FooLocal.html'
+        //@ !has 'foo/outer/inner/struct.FooLocal.html'
         use reexports::FooLocal;
 
-        // @has 'foo/outer/inner/enum.Bar.html' '//*[@class="rust item-decl"]' 'pub enum Bar {'
+        //@ has 'foo/outer/inner/enum.Bar.html' '//*[@class="rust item-decl"]' 'pub enum Bar {'
         pub use reexports::Bar;
-        // @has 'foo/outer/inner/enum.BarCrate.html' '//*[@class="rust item-decl"]' 'pub(crate) enum BarCrate {'
+        //@ has 'foo/outer/inner/enum.BarCrate.html' '//*[@class="rust item-decl"]' 'pub(crate) enum BarCrate {'
         pub(crate) use reexports::BarCrate;
-        // @has 'foo/outer/inner/enum.BarSuper.html' '//*[@class="rust item-decl"]' 'pub(in outer) enum BarSuper {'
+        //@ has 'foo/outer/inner/enum.BarSuper.html' '//*[@class="rust item-decl"]' 'pub(in outer) enum BarSuper {'
         pub(super) use reexports::BarSuper;
-        // @!has 'foo/outer/inner/enum.BarSelf.html'
+        //@ !has 'foo/outer/inner/enum.BarSelf.html'
         pub(self) use reexports::BarSelf;
-        // @!has 'foo/outer/inner/enum.BarLocal.html'
+        //@ !has 'foo/outer/inner/enum.BarLocal.html'
         use reexports::BarLocal;
 
-        // @has 'foo/outer/inner/fn.foo.html' '//pre[@class="rust item-decl"]' 'pub fn foo()'
+        //@ has 'foo/outer/inner/fn.foo.html' '//pre[@class="rust item-decl"]' 'pub fn foo()'
         pub use reexports::foo;
-        // @has 'foo/outer/inner/fn.foo_crate.html' '//pre[@class="rust item-decl"]' 'pub(crate) fn foo_crate()'
+        //@ has 'foo/outer/inner/fn.foo_crate.html' '//pre[@class="rust item-decl"]' 'pub(crate) fn foo_crate()'
         pub(crate) use reexports::foo_crate;
-        // @has 'foo/outer/inner/fn.foo_super.html' '//pre[@class="rust item-decl"]' 'pub(in outer) fn foo_super()'
+        //@ has 'foo/outer/inner/fn.foo_super.html' '//pre[@class="rust item-decl"]' 'pub(in outer) fn foo_super()'
         pub(super) use::reexports::foo_super;
-        // @!has 'foo/outer/inner/fn.foo_self.html'
+        //@ !has 'foo/outer/inner/fn.foo_self.html'
         pub(self) use reexports::foo_self;
-        // @!has 'foo/outer/inner/fn.foo_local.html'
+        //@ !has 'foo/outer/inner/fn.foo_local.html'
         use reexports::foo_local;
 
-        // @has 'foo/outer/inner/type.Type.html' '//pre[@class="rust item-decl"]' 'pub type Type ='
+        //@ has 'foo/outer/inner/type.Type.html' '//pre[@class="rust item-decl"]' 'pub type Type ='
         pub use reexports::Type;
-        // @has 'foo/outer/inner/type.TypeCrate.html' '//pre[@class="rust item-decl"]' 'pub(crate) type TypeCrate ='
+        //@ has 'foo/outer/inner/type.TypeCrate.html' '//pre[@class="rust item-decl"]' 'pub(crate) type TypeCrate ='
         pub(crate) use reexports::TypeCrate;
-        // @has 'foo/outer/inner/type.TypeSuper.html' '//pre[@class="rust item-decl"]' 'pub(in outer) type TypeSuper ='
+        //@ has 'foo/outer/inner/type.TypeSuper.html' '//pre[@class="rust item-decl"]' 'pub(in outer) type TypeSuper ='
         pub(super) use reexports::TypeSuper;
-        // @!has 'foo/outer/inner/type.TypeSelf.html'
+        //@ !has 'foo/outer/inner/type.TypeSelf.html'
         pub(self) use reexports::TypeSelf;
-        // @!has 'foo/outer/inner/type.TypeLocal.html'
+        //@ !has 'foo/outer/inner/type.TypeLocal.html'
         use reexports::TypeLocal;
 
-        // @has 'foo/outer/inner/union.Union.html' '//*[@class="rust item-decl"]' 'pub union Union {'
+        //@ has 'foo/outer/inner/union.Union.html' '//*[@class="rust item-decl"]' 'pub union Union {'
         pub use reexports::Union;
-        // @has 'foo/outer/inner/union.UnionCrate.html' '//*[@class="rust item-decl"]' 'pub(crate) union UnionCrate {'
+        //@ has 'foo/outer/inner/union.UnionCrate.html' '//*[@class="rust item-decl"]' 'pub(crate) union UnionCrate {'
         pub(crate) use reexports::UnionCrate;
-        // @has 'foo/outer/inner/union.UnionSuper.html' '//*[@class="rust item-decl"]' 'pub(in outer) union UnionSuper {'
+        //@ has 'foo/outer/inner/union.UnionSuper.html' '//*[@class="rust item-decl"]' 'pub(in outer) union UnionSuper {'
         pub(super) use reexports::UnionSuper;
-        // @!has 'foo/outer/inner/union.UnionSelf.html'
+        //@ !has 'foo/outer/inner/union.UnionSelf.html'
         pub(self) use reexports::UnionSelf;
-        // @!has 'foo/outer/inner/union.UnionLocal.html'
+        //@ !has 'foo/outer/inner/union.UnionLocal.html'
         use reexports::UnionLocal;
     }
 }
 
 mod re_re_exports {
-        // @!has 'foo/re_re_exports/union.Union.html'
+        //@ !has 'foo/re_re_exports/union.Union.html'
         use crate::reexports::Union;
 }
diff --git a/tests/rustdoc/reexports.rs b/tests/rustdoc/reexports.rs
index e1da1fd552f..b17e9cd719a 100644
--- a/tests/rustdoc/reexports.rs
+++ b/tests/rustdoc/reexports.rs
@@ -4,126 +4,126 @@
 
 extern crate reexports;
 
-// @has 'foo/macro.addr_of.html' '//*[@class="rust item-decl"]' 'pub macro addr_of($place:expr) {'
+//@ has 'foo/macro.addr_of.html' '//*[@class="rust item-decl"]' 'pub macro addr_of($place:expr) {'
 pub use reexports::addr_of;
-// @!has 'foo/macro.addr_of_crate.html'
+//@ !has 'foo/macro.addr_of_crate.html'
 pub(crate) use reexports::addr_of_crate;
-// @!has 'foo/macro.addr_of_self.html'
+//@ !has 'foo/macro.addr_of_self.html'
 pub(self) use reexports::addr_of_self;
-// @!has 'foo/macro.addr_of_local.html'
+//@ !has 'foo/macro.addr_of_local.html'
 use reexports::addr_of_local;
 
-// @has 'foo/struct.Foo.html' '//*[@class="rust item-decl"]' 'pub struct Foo;'
+//@ has 'foo/struct.Foo.html' '//*[@class="rust item-decl"]' 'pub struct Foo;'
 pub use reexports::Foo;
-// @!has 'foo/struct.FooCrate.html'
+//@ !has 'foo/struct.FooCrate.html'
 pub(crate) use reexports::FooCrate;
-// @!has 'foo/struct.FooSelf.html'
+//@ !has 'foo/struct.FooSelf.html'
 pub(self) use reexports::FooSelf;
-// @!has 'foo/struct.FooLocal.html'
+//@ !has 'foo/struct.FooLocal.html'
 use reexports::FooLocal;
 
-// @has 'foo/enum.Bar.html' '//*[@class="rust item-decl"]' 'pub enum Bar {'
+//@ has 'foo/enum.Bar.html' '//*[@class="rust item-decl"]' 'pub enum Bar {'
 pub use reexports::Bar;
-// @!has 'foo/enum.BarCrate.html'
+//@ !has 'foo/enum.BarCrate.html'
 pub(crate) use reexports::BarCrate;
-// @!has 'foo/enum.BarSelf.html'
+//@ !has 'foo/enum.BarSelf.html'
 pub(self) use reexports::BarSelf;
-// @!has 'foo/enum.BarLocal.html'
+//@ !has 'foo/enum.BarLocal.html'
 use reexports::BarLocal;
 
-// @has 'foo/fn.foo.html' '//pre[@class="rust item-decl"]' 'pub fn foo()'
+//@ has 'foo/fn.foo.html' '//pre[@class="rust item-decl"]' 'pub fn foo()'
 pub use reexports::foo;
-// @!has 'foo/fn.foo_crate.html'
+//@ !has 'foo/fn.foo_crate.html'
 pub(crate) use reexports::foo_crate;
-// @!has 'foo/fn.foo_self.html'
+//@ !has 'foo/fn.foo_self.html'
 pub(self) use reexports::foo_self;
-// @!has 'foo/fn.foo_local.html'
+//@ !has 'foo/fn.foo_local.html'
 use reexports::foo_local;
 
-// @has 'foo/type.Type.html' '//pre[@class="rust item-decl"]' 'pub type Type ='
+//@ has 'foo/type.Type.html' '//pre[@class="rust item-decl"]' 'pub type Type ='
 pub use reexports::Type;
-// @!has 'foo/type.TypeCrate.html'
+//@ !has 'foo/type.TypeCrate.html'
 pub(crate) use reexports::TypeCrate;
-// @!has 'foo/type.TypeSelf.html'
+//@ !has 'foo/type.TypeSelf.html'
 pub(self) use reexports::TypeSelf;
-// @!has 'foo/type.TypeLocal.html'
+//@ !has 'foo/type.TypeLocal.html'
 use reexports::TypeLocal;
 
-// @has 'foo/union.Union.html' '//*[@class="rust item-decl"]' 'pub union Union {'
+//@ has 'foo/union.Union.html' '//*[@class="rust item-decl"]' 'pub union Union {'
 pub use reexports::Union;
-// @!has 'foo/union.UnionCrate.html'
+//@ !has 'foo/union.UnionCrate.html'
 pub(crate) use reexports::UnionCrate;
-// @!has 'foo/union.UnionSelf.html'
+//@ !has 'foo/union.UnionSelf.html'
 pub(self) use reexports::UnionSelf;
-// @!has 'foo/union.UnionLocal.html'
+//@ !has 'foo/union.UnionLocal.html'
 use reexports::UnionLocal;
 
 pub mod outer {
     pub mod inner {
-        // @has 'foo/outer/inner/macro.addr_of.html' '//*[@class="rust item-decl"]' 'pub macro addr_of($place:expr) {'
+        //@ has 'foo/outer/inner/macro.addr_of.html' '//*[@class="rust item-decl"]' 'pub macro addr_of($place:expr) {'
         pub use reexports::addr_of;
-        // @!has 'foo/outer/inner/macro.addr_of_crate.html'
+        //@ !has 'foo/outer/inner/macro.addr_of_crate.html'
         pub(crate) use reexports::addr_of_crate;
-        // @!has 'foo/outer/inner/macro.addr_of_super.html'
+        //@ !has 'foo/outer/inner/macro.addr_of_super.html'
         pub(super) use reexports::addr_of_super;
-        // @!has 'foo/outer/inner/macro.addr_of_self.html'
+        //@ !has 'foo/outer/inner/macro.addr_of_self.html'
         pub(self) use reexports::addr_of_self;
-        // @!has 'foo/outer/inner/macro.addr_of_local.html'
+        //@ !has 'foo/outer/inner/macro.addr_of_local.html'
         use reexports::addr_of_local;
 
-        // @has 'foo/outer/inner/struct.Foo.html' '//*[@class="rust item-decl"]' 'pub struct Foo;'
+        //@ has 'foo/outer/inner/struct.Foo.html' '//*[@class="rust item-decl"]' 'pub struct Foo;'
         pub use reexports::Foo;
-        // @!has 'foo/outer/inner/struct.FooCrate.html'
+        //@ !has 'foo/outer/inner/struct.FooCrate.html'
         pub(crate) use reexports::FooCrate;
-        // @!has 'foo/outer/inner/struct.FooSuper.html'
+        //@ !has 'foo/outer/inner/struct.FooSuper.html'
         pub(super) use reexports::FooSuper;
-        // @!has 'foo/outer/inner/struct.FooSelf.html'
+        //@ !has 'foo/outer/inner/struct.FooSelf.html'
         pub(self) use reexports::FooSelf;
-        // @!has 'foo/outer/inner/struct.FooLocal.html'
+        //@ !has 'foo/outer/inner/struct.FooLocal.html'
         use reexports::FooLocal;
 
-        // @has 'foo/outer/inner/enum.Bar.html' '//*[@class="rust item-decl"]' 'pub enum Bar {'
+        //@ has 'foo/outer/inner/enum.Bar.html' '//*[@class="rust item-decl"]' 'pub enum Bar {'
         pub use reexports::Bar;
-        // @!has 'foo/outer/inner/enum.BarCrate.html'
+        //@ !has 'foo/outer/inner/enum.BarCrate.html'
         pub(crate) use reexports::BarCrate;
-        // @!has 'foo/outer/inner/enum.BarSuper.html'
+        //@ !has 'foo/outer/inner/enum.BarSuper.html'
         pub(super) use reexports::BarSuper;
-        // @!has 'foo/outer/inner/enum.BarSelf.html'
+        //@ !has 'foo/outer/inner/enum.BarSelf.html'
         pub(self) use reexports::BarSelf;
-        // @!has 'foo/outer/inner/enum.BarLocal.html'
+        //@ !has 'foo/outer/inner/enum.BarLocal.html'
         use reexports::BarLocal;
 
-        // @has 'foo/outer/inner/fn.foo.html' '//pre[@class="rust item-decl"]' 'pub fn foo()'
+        //@ has 'foo/outer/inner/fn.foo.html' '//pre[@class="rust item-decl"]' 'pub fn foo()'
         pub use reexports::foo;
-        // @!has 'foo/outer/inner/fn.foo_crate.html'
+        //@ !has 'foo/outer/inner/fn.foo_crate.html'
         pub(crate) use reexports::foo_crate;
-        // @!has 'foo/outer/inner/fn.foo_super.html'
+        //@ !has 'foo/outer/inner/fn.foo_super.html'
         pub(super) use::reexports::foo_super;
-        // @!has 'foo/outer/inner/fn.foo_self.html'
+        //@ !has 'foo/outer/inner/fn.foo_self.html'
         pub(self) use reexports::foo_self;
-        // @!has 'foo/outer/inner/fn.foo_local.html'
+        //@ !has 'foo/outer/inner/fn.foo_local.html'
         use reexports::foo_local;
 
-        // @has 'foo/outer/inner/type.Type.html' '//pre[@class="rust item-decl"]' 'pub type Type ='
+        //@ has 'foo/outer/inner/type.Type.html' '//pre[@class="rust item-decl"]' 'pub type Type ='
         pub use reexports::Type;
-        // @!has 'foo/outer/inner/type.TypeCrate.html'
+        //@ !has 'foo/outer/inner/type.TypeCrate.html'
         pub(crate) use reexports::TypeCrate;
-        // @!has 'foo/outer/inner/type.TypeSuper.html'
+        //@ !has 'foo/outer/inner/type.TypeSuper.html'
         pub(super) use reexports::TypeSuper;
-        // @!has 'foo/outer/inner/type.TypeSelf.html'
+        //@ !has 'foo/outer/inner/type.TypeSelf.html'
         pub(self) use reexports::TypeSelf;
-        // @!has 'foo/outer/inner/type.TypeLocal.html'
+        //@ !has 'foo/outer/inner/type.TypeLocal.html'
         use reexports::TypeLocal;
 
-        // @has 'foo/outer/inner/union.Union.html' '//*[@class="rust item-decl"]' 'pub union Union {'
+        //@ has 'foo/outer/inner/union.Union.html' '//*[@class="rust item-decl"]' 'pub union Union {'
         pub use reexports::Union;
-        // @!has 'foo/outer/inner/union.UnionCrate.html'
+        //@ !has 'foo/outer/inner/union.UnionCrate.html'
         pub(crate) use reexports::UnionCrate;
-        // @!has 'foo/outer/inner/union.UnionSuper.html'
+        //@ !has 'foo/outer/inner/union.UnionSuper.html'
         pub(super) use reexports::UnionSuper;
-        // @!has 'foo/outer/inner/union.UnionSelf.html'
+        //@ !has 'foo/outer/inner/union.UnionSelf.html'
         pub(self) use reexports::UnionSelf;
-        // @!has 'foo/outer/inner/union.UnionLocal.html'
+        //@ !has 'foo/outer/inner/union.UnionLocal.html'
         use reexports::UnionLocal;
     }
 }
diff --git a/tests/rustdoc/remove-duplicates.rs b/tests/rustdoc/remove-duplicates.rs
index 759bf84db62..1e5bf9b0198 100644
--- a/tests/rustdoc/remove-duplicates.rs
+++ b/tests/rustdoc/remove-duplicates.rs
@@ -9,6 +9,6 @@ mod foo {
     }
 }
 
-// @count foo/index.html '//*[@class="trait"]' 1
+//@ count foo/index.html '//*[@class="trait"]' 1
 pub use foo::bar::*;
 pub use foo::*;
diff --git a/tests/rustdoc/remove-url-from-headings.rs b/tests/rustdoc/remove-url-from-headings.rs
index 8f477028619..6e15f57e7ba 100644
--- a/tests/rustdoc/remove-url-from-headings.rs
+++ b/tests/rustdoc/remove-url-from-headings.rs
@@ -2,11 +2,11 @@
 
 #![crate_name = "foo"]
 
-// @has foo/fn.foo.html
-// @has - '//a[@href="http://a.a"]' 'stuff'
-// @has - '//*[@id="implementing-stuff-somewhere"]' 'Implementing stuff somewhere'
-// @has - '//a[@href="http://b.b"]' 'one'
-// @has - '//*[@id="another-one-urg"]' 'Another one urg'
+//@ has foo/fn.foo.html
+//@ has - '//a[@href="http://a.a"]' 'stuff'
+//@ has - '//*[@id="implementing-stuff-somewhere"]' 'Implementing stuff somewhere'
+//@ has - '//a[@href="http://b.b"]' 'one'
+//@ has - '//*[@id="another-one-urg"]' 'Another one urg'
 
 /// fooo
 ///
diff --git a/tests/rustdoc/render-enum-variant-structlike-32395.rs b/tests/rustdoc/render-enum-variant-structlike-32395.rs
index dbe40304c17..d4cefb2911d 100644
--- a/tests/rustdoc/render-enum-variant-structlike-32395.rs
+++ b/tests/rustdoc/render-enum-variant-structlike-32395.rs
@@ -5,14 +5,14 @@
 // https://github.com/rust-lang/rust/issues/32395
 #![crate_name="issue_32395"]
 
-// @has variant_struct/enum.Foo.html
-// @!hasraw - 'pub qux'
-// @!hasraw - 'pub(crate) qux'
-// @!hasraw - 'pub Bar'
+//@ has variant_struct/enum.Foo.html
+//@ !hasraw - 'pub qux'
+//@ !hasraw - 'pub(crate) qux'
+//@ !hasraw - 'pub Bar'
 extern crate variant_struct;
 
-// @has issue_32395/enum.Foo.html
-// @!hasraw - 'pub qux'
-// @!hasraw - 'pub(crate) qux'
-// @!hasraw - 'pub Bar'
+//@ has issue_32395/enum.Foo.html
+//@ !hasraw - 'pub qux'
+//@ !hasraw - 'pub(crate) qux'
+//@ !hasraw - 'pub Bar'
 pub use variant_struct::Foo;
diff --git a/tests/rustdoc/repr.rs b/tests/rustdoc/repr.rs
index fbb46e126ba..f4f683b3d81 100644
--- a/tests/rustdoc/repr.rs
+++ b/tests/rustdoc/repr.rs
@@ -2,15 +2,15 @@
 // Check that we show `#[repr(transparent)]` iff the non-1-ZST field is public or at least one
 // field is public in case all fields are 1-ZST fields.
 
-// @has 'repr/struct.ReprTransparentPrivField.html'
-// @!has - '//*[@class="rust item-decl"]//*[@class="code-attribute"]' '#[repr(transparent)]'
+//@ has 'repr/struct.ReprTransparentPrivField.html'
+//@ !has - '//*[@class="rust item-decl"]//*[@class="code-attribute"]' '#[repr(transparent)]'
 #[repr(transparent)] // private
 pub struct ReprTransparentPrivField {
     field: u32, // non-1-ZST field
 }
 
-// @has 'repr/struct.ReprTransparentPriv1ZstFields.html'
-// @has - '//*[@class="rust item-decl"]//*[@class="code-attribute"]' '#[repr(transparent)]'
+//@ has 'repr/struct.ReprTransparentPriv1ZstFields.html'
+//@ has - '//*[@class="rust item-decl"]//*[@class="code-attribute"]' '#[repr(transparent)]'
 #[repr(transparent)] // public
 pub struct ReprTransparentPriv1ZstFields {
     marker0: Marker,
@@ -18,8 +18,8 @@ pub struct ReprTransparentPriv1ZstFields {
     marker1: Marker,
 }
 
-// @has 'repr/struct.ReprTransparentPub1ZstField.html'
-// @has - '//*[@class="rust item-decl"]//*[@class="code-attribute"]' '#[repr(transparent)]'
+//@ has 'repr/struct.ReprTransparentPub1ZstField.html'
+//@ has - '//*[@class="rust item-decl"]//*[@class="code-attribute"]' '#[repr(transparent)]'
 #[repr(transparent)] // public
 pub struct ReprTransparentPub1ZstField {
     marker0: Marker,
diff --git a/tests/rustdoc/return-impl-trait.rs b/tests/rustdoc/return-impl-trait.rs
index 1ccf5ac4611..175867d2204 100644
--- a/tests/rustdoc/return-impl-trait.rs
+++ b/tests/rustdoc/return-impl-trait.rs
@@ -8,7 +8,7 @@ pub struct Module<T>(T);
 
 pub type BackendImpl = impl Backend;
 
-// @has return_impl_trait/fn.make_module.html
+//@ has return_impl_trait/fn.make_module.html
 /// Documentation
 pub fn make_module() -> Module<BackendImpl> {
     Module(())
diff --git a/tests/rustdoc/rfc-2632-const-trait-impl.rs b/tests/rustdoc/rfc-2632-const-trait-impl.rs
index 6f264969e54..f6a5555dbad 100644
--- a/tests/rustdoc/rfc-2632-const-trait-impl.rs
+++ b/tests/rustdoc/rfc-2632-const-trait-impl.rs
@@ -7,6 +7,7 @@
 // not remove this test.
 //
 // FIXME(effects) add `const_trait` to `Fn` so we use `~const`
+// FIXME(effects) restore `const_trait` to `Destruct`
 #![feature(const_trait_impl)]
 #![crate_name = "foo"]
 
@@ -14,58 +15,58 @@ use std::marker::Destruct;
 
 pub struct S<T>(T);
 
-// @!has foo/trait.Tr.html '//pre[@class="rust item-decl"]/code/a[@class="trait"]' '~const'
-// @has - '//pre[@class="rust item-decl"]/code/a[@class="trait"]' 'Fn'
-// @!has - '//pre[@class="rust item-decl"]/code/span[@class="where"]' '~const'
-// @has - '//pre[@class="rust item-decl"]/code/span[@class="where"]' ': Fn'
+//@ !has foo/trait.Tr.html '//pre[@class="rust item-decl"]/code/a[@class="trait"]' '~const'
+//@ has - '//pre[@class="rust item-decl"]/code/a[@class="trait"]' 'Fn'
+//@ !has - '//pre[@class="rust item-decl"]/code/span[@class="where"]' '~const'
+//@ has - '//pre[@class="rust item-decl"]/code/span[@class="where"]' ': Fn'
 #[const_trait]
 pub trait Tr<T> {
-    // @!has - '//section[@id="method.a"]/h4[@class="code-header"]' '~const'
-    // @has - '//section[@id="method.a"]/h4[@class="code-header"]/a[@class="trait"]' 'Fn'
-    // @!has - '//section[@id="method.a"]/h4[@class="code-header"]/span[@class="where"]' '~const'
-    // @has - '//section[@id="method.a"]/h4[@class="code-header"]/div[@class="where"]' ': Fn'
-    fn a<A: /* ~const */ Fn() + ~const Destruct>()
+    //@ !has - '//section[@id="method.a"]/h4[@class="code-header"]' '~const'
+    //@ has - '//section[@id="method.a"]/h4[@class="code-header"]/a[@class="trait"]' 'Fn'
+    //@ !has - '//section[@id="method.a"]/h4[@class="code-header"]/span[@class="where"]' '~const'
+    //@ has - '//section[@id="method.a"]/h4[@class="code-header"]/div[@class="where"]' ': Fn'
+    fn a<A: /* ~const */ Fn() /* + ~const Destruct */>()
     where
-        Option<A>: /* ~const */ Fn() + ~const Destruct,
+        Option<A>: /* ~const */ Fn() /* + ~const Destruct */,
     {
     }
 }
 
-// @has - '//section[@id="impl-Tr%3CT%3E-for-T"]' ''
-// @!has - '//section[@id="impl-Tr%3CT%3E-for-T"]/h3[@class="code-header"]' '~const'
-// @has - '//section[@id="impl-Tr%3CT%3E-for-T"]/h3[@class="code-header"]/a[@class="trait"]' 'Fn'
-// @!has - '//section[@id="impl-Tr%3CT%3E-for-T"]/h3[@class="code-header"]/span[@class="where"]' '~const'
-// @has - '//section[@id="impl-Tr%3CT%3E-for-T"]/h3[@class="code-header"]/div[@class="where"]' ': Fn'
-impl<T: /* ~const */ Fn() + ~const Destruct> const Tr<T> for T
+//@ has - '//section[@id="impl-Tr%3CT%3E-for-T"]' ''
+//@ !has - '//section[@id="impl-Tr%3CT%3E-for-T"]/h3[@class="code-header"]' '~const'
+//@ has - '//section[@id="impl-Tr%3CT%3E-for-T"]/h3[@class="code-header"]/a[@class="trait"]' 'Fn'
+//@ !has - '//section[@id="impl-Tr%3CT%3E-for-T"]/h3[@class="code-header"]/span[@class="where"]' '~const'
+//@ has - '//section[@id="impl-Tr%3CT%3E-for-T"]/h3[@class="code-header"]/div[@class="where"]' ': Fn'
+impl<T: /* ~const */ Fn() /* + ~const Destruct */> const Tr<T> for T
 where
-    Option<T>: /* ~const */ Fn() + ~const Destruct,
+    Option<T>: /* ~const */ Fn() /* + ~const Destruct */,
 {
-    fn a<A: /* ~const */ Fn() + ~const Destruct>()
+    fn a<A: /* ~const */ Fn() /* + ~const Destruct */>()
     where
-        Option<A>: /* ~const */ Fn() + ~const Destruct,
+        Option<A>: /* ~const */ Fn() /* + ~const Destruct */,
     {
     }
 }
 
-// @!has foo/fn.foo.html '//pre[@class="rust item-decl"]/code/a[@class="trait"]' '~const'
-// @has - '//pre[@class="rust item-decl"]/code/a[@class="trait"]' 'Fn'
-// @!has - '//pre[@class="rust item-decl"]/code/div[@class="where"]' '~const'
-// @has - '//pre[@class="rust item-decl"]/code/div[@class="where"]' ': Fn'
-pub const fn foo<F: /* ~const */ Fn() + ~const Destruct>()
+//@ !has foo/fn.foo.html '//pre[@class="rust item-decl"]/code/a[@class="trait"]' '~const'
+//@ has - '//pre[@class="rust item-decl"]/code/a[@class="trait"]' 'Fn'
+//@ !has - '//pre[@class="rust item-decl"]/code/div[@class="where"]' '~const'
+//@ has - '//pre[@class="rust item-decl"]/code/div[@class="where"]' ': Fn'
+pub const fn foo<F: /* ~const */ Fn() /* + ~const Destruct */>()
 where
-    Option<F>: /* ~const */ Fn() + ~const Destruct,
+    Option<F>: /* ~const */ Fn() /* + ~const Destruct */,
 {
     F::a()
 }
 
 impl<T> S<T> {
-    // @!has foo/struct.S.html '//section[@id="method.foo"]/h4[@class="code-header"]' '~const'
-    // @has - '//section[@id="method.foo"]/h4[@class="code-header"]/a[@class="trait"]' 'Fn'
-    // @!has - '//section[@id="method.foo"]/h4[@class="code-header"]/span[@class="where"]' '~const'
-    // @has - '//section[@id="method.foo"]/h4[@class="code-header"]/div[@class="where"]' ': Fn'
-    pub const fn foo<B, C: /* ~const */ Fn() + ~const Destruct>()
+    //@ !has foo/struct.S.html '//section[@id="method.foo"]/h4[@class="code-header"]' '~const'
+    //@ has - '//section[@id="method.foo"]/h4[@class="code-header"]/a[@class="trait"]' 'Fn'
+    //@ !has - '//section[@id="method.foo"]/h4[@class="code-header"]/span[@class="where"]' '~const'
+    //@ has - '//section[@id="method.foo"]/h4[@class="code-header"]/div[@class="where"]' ': Fn'
+    pub const fn foo<B, C: /* ~const */ Fn() /* + ~const Destruct */>()
     where
-        B: /* ~const */ Fn() + ~const Destruct,
+        B: /* ~const */ Fn() /* + ~const Destruct */,
     {
         B::a()
     }
diff --git a/tests/rustdoc/rustc-incoherent-impls.rs b/tests/rustdoc/rustc-incoherent-impls.rs
index 4f0eca291f7..81a7025906b 100644
--- a/tests/rustdoc/rustc-incoherent-impls.rs
+++ b/tests/rustdoc/rustc-incoherent-impls.rs
@@ -10,8 +10,8 @@ extern crate incoherent_impl_types;
 #[doc(inline)]
 pub use incoherent_impl_types::FooTrait;
 
-// @has foo/trait.FooTrait.html
-// @count - '//section[@id="method.do_something"]' 1
+//@ has foo/trait.FooTrait.html
+//@ count - '//section[@id="method.do_something"]' 1
 impl dyn FooTrait {
     #[rustc_allow_incoherent_impl]
     pub fn do_something() {}
@@ -20,8 +20,8 @@ impl dyn FooTrait {
 #[doc(inline)]
 pub use incoherent_impl_types::FooStruct;
 
-// @has foo/struct.FooStruct.html
-// @count - '//section[@id="method.do_something"]' 1
+//@ has foo/struct.FooStruct.html
+//@ count - '//section[@id="method.do_something"]' 1
 impl FooStruct {
     #[rustc_allow_incoherent_impl]
     pub fn do_something() {}
diff --git a/tests/rustdoc/safe-intrinsic.rs b/tests/rustdoc/safe-intrinsic.rs
index c508909f9aa..b46ffed99c3 100644
--- a/tests/rustdoc/safe-intrinsic.rs
+++ b/tests/rustdoc/safe-intrinsic.rs
@@ -6,17 +6,17 @@
 #![crate_name = "foo"]
 
 extern "rust-intrinsic" {
-    // @has 'foo/fn.abort.html'
-    // @has - '//pre[@class="rust item-decl"]' 'pub extern "rust-intrinsic" fn abort() -> !'
+    //@ has 'foo/fn.abort.html'
+    //@ has - '//pre[@class="rust item-decl"]' 'pub extern "rust-intrinsic" fn abort() -> !'
     #[rustc_safe_intrinsic]
     pub fn abort() -> !;
-    // @has 'foo/fn.unreachable.html'
-    // @has - '//pre[@class="rust item-decl"]' 'pub unsafe extern "rust-intrinsic" fn unreachable() -> !'
+    //@ has 'foo/fn.unreachable.html'
+    //@ has - '//pre[@class="rust item-decl"]' 'pub unsafe extern "rust-intrinsic" fn unreachable() -> !'
     pub fn unreachable() -> !;
 }
 
 extern "C" {
-    // @has 'foo/fn.needs_drop.html'
-    // @has - '//pre[@class="rust item-decl"]' 'pub unsafe extern "C" fn needs_drop() -> !'
+    //@ has 'foo/fn.needs_drop.html'
+    //@ has - '//pre[@class="rust item-decl"]' 'pub unsafe extern "C" fn needs_drop() -> !'
     pub fn needs_drop() -> !;
 }
diff --git a/tests/rustdoc/same-crate-hidden-impl-parameter.rs b/tests/rustdoc/same-crate-hidden-impl-parameter.rs
index d55393af859..b0beb1bdfa0 100644
--- a/tests/rustdoc/same-crate-hidden-impl-parameter.rs
+++ b/tests/rustdoc/same-crate-hidden-impl-parameter.rs
@@ -9,7 +9,7 @@ pub trait HiddenTrait {}
 
 pub enum MyLibType {}
 
-// @!has foo/enum.MyLibType.html '//*[@id="impl-From%3CHiddenType%3E"]' 'impl From<HiddenType> for MyLibType'
+//@ !has foo/enum.MyLibType.html '//*[@id="impl-From%3CHiddenType%3E"]' 'impl From<HiddenType> for MyLibType'
 impl From<HiddenType> for MyLibType {
     fn from(it: HiddenType) -> MyLibType {
         match it {}
@@ -18,17 +18,17 @@ impl From<HiddenType> for MyLibType {
 
 pub struct T<T>(T);
 
-// @!has foo/enum.MyLibType.html '//*[@id="impl-From%3CT%3CT%3CT%3CT%3CHiddenType%3E%3E%3E%3E%3E"]' 'impl From<T<T<T<T<HiddenType>>>>> for MyLibType'
+//@ !has foo/enum.MyLibType.html '//*[@id="impl-From%3CT%3CT%3CT%3CT%3CHiddenType%3E%3E%3E%3E%3E"]' 'impl From<T<T<T<T<HiddenType>>>>> for MyLibType'
 impl From<T<T<T<T<HiddenType>>>>> for MyLibType {
     fn from(it: T<T<T<T<HiddenType>>>>) -> MyLibType {
         todo!()
     }
 }
 
-// @!has foo/enum.MyLibType.html '//*[@id="impl-HiddenTrait"]' 'impl HiddenTrait for MyLibType'
+//@ !has foo/enum.MyLibType.html '//*[@id="impl-HiddenTrait"]' 'impl HiddenTrait for MyLibType'
 impl HiddenTrait for MyLibType {}
 
-// @!has foo/struct.T.html '//*[@id="impl-From%3CMyLibType%3E"]' 'impl From<MyLibType> for T<T<T<T<HiddenType>>>>'
+//@ !has foo/struct.T.html '//*[@id="impl-From%3CMyLibType%3E"]' 'impl From<MyLibType> for T<T<T<T<HiddenType>>>>'
 impl From<MyLibType> for T<T<T<T<HiddenType>>>> {
     fn from(it: MyLibType) -> T<T<T<T<HiddenType>>>> {
         match it {}
diff --git a/tests/rustdoc/search-index-primitive-inherent-method-23511.rs b/tests/rustdoc/search-index-primitive-inherent-method-23511.rs
index 1d0fe27e192..6054d8f12f5 100644
--- a/tests/rustdoc/search-index-primitive-inherent-method-23511.rs
+++ b/tests/rustdoc/search-index-primitive-inherent-method-23511.rs
@@ -9,7 +9,7 @@ pub mod str {
     #![rustc_doc_primitive = "str"]
 
     impl str {
-        // @hasraw search-index.js foo
+        //@ hasraw search-index.js foo
         #[rustc_allow_incoherent_impl]
         pub fn foo(&self) {}
     }
diff --git a/tests/rustdoc/search-index-summaries.rs b/tests/rustdoc/search-index-summaries.rs
index 529b42d0ca9..55db04340a6 100644
--- a/tests/rustdoc/search-index-summaries.rs
+++ b/tests/rustdoc/search-index-summaries.rs
@@ -1,8 +1,8 @@
 #![crate_name = "foo"]
 
-// @hasraw 'search.desc/foo/foo-desc-0-.js' 'Foo short link.'
-// @!hasraw - 'www.example.com'
-// @!hasraw - 'More Foo.'
+//@ hasraw 'search.desc/foo/foo-desc-0-.js' 'Foo short link.'
+//@ !hasraw - 'www.example.com'
+//@ !hasraw - 'More Foo.'
 
 /// Foo short [link](https://www.example.com/).
 ///
diff --git a/tests/rustdoc/search-index.rs b/tests/rustdoc/search-index.rs
index d1d05eb886b..f53862ede38 100644
--- a/tests/rustdoc/search-index.rs
+++ b/tests/rustdoc/search-index.rs
@@ -2,25 +2,25 @@
 
 use std::ops::Deref;
 
-// @hasraw search-index.js Foo
+//@ hasraw search-index.js Foo
 pub use private::Foo;
 
 mod private {
     pub struct Foo;
     impl Foo {
-        pub fn test_method() {} // @hasraw - test_method
-        fn priv_method() {} // @!hasraw - priv_method
+        pub fn test_method() {} //@ hasraw - test_method
+        fn priv_method() {} //@ !hasraw - priv_method
     }
 
     pub trait PrivateTrait {
-        fn trait_method(&self) {} // @!hasraw - priv_method
+        fn trait_method(&self) {} //@ !hasraw - priv_method
     }
 }
 
 pub struct Bar;
 
 impl Deref for Bar {
-    // @!hasraw search-index.js Target
+    //@ !hasraw search-index.js Target
     type Target = Bar;
     fn deref(&self) -> &Bar { self }
 }
diff --git a/tests/rustdoc/short-docblock-codeblock.rs b/tests/rustdoc/short-docblock-codeblock.rs
index 7ecd80b8c72..82486a9ea2d 100644
--- a/tests/rustdoc/short-docblock-codeblock.rs
+++ b/tests/rustdoc/short-docblock-codeblock.rs
@@ -1,6 +1,6 @@
 #![crate_name = "foo"]
 
-// @count foo/index.html '//*[@class="desc docblock-short"]' 0
+//@ count foo/index.html '//*[@class="desc docblock-short"]' 0
 
 /// ```
 /// let x = 12;
diff --git a/tests/rustdoc/short-docblock.rs b/tests/rustdoc/short-docblock.rs
index 151a42a9c9e..c80a5025ebe 100644
--- a/tests/rustdoc/short-docblock.rs
+++ b/tests/rustdoc/short-docblock.rs
@@ -1,26 +1,26 @@
 #![crate_name = "foo"]
 
-// @has foo/index.html '//*[@class="desc docblock-short"]' 'fooo'
-// @!has foo/index.html '//*[@class="desc docblock-short"]/h1' 'fooo'
+//@ has foo/index.html '//*[@class="desc docblock-short"]' 'fooo'
+//@ !has foo/index.html '//*[@class="desc docblock-short"]/h1' 'fooo'
 
-// @has foo/fn.foo.html '//h2[@id="fooo"]' 'fooo'
-// @has foo/fn.foo.html '//h2[@id="fooo"]/a[@href="#fooo"]' '§'
+//@ has foo/fn.foo.html '//h2[@id="fooo"]' 'fooo'
+//@ has foo/fn.foo.html '//h2[@id="fooo"]/a[@href="#fooo"]' '§'
 /// # fooo
 ///
 /// foo
 pub fn foo() {}
 
-// @has foo/index.html '//*[@class="desc docblock-short"]' 'mooood'
-// @!has foo/index.html '//*[@class="desc docblock-short"]/h2' 'mooood'
+//@ has foo/index.html '//*[@class="desc docblock-short"]' 'mooood'
+//@ !has foo/index.html '//*[@class="desc docblock-short"]/h2' 'mooood'
 
-// @has foo/foo/index.html '//h3[@id="mooood"]' 'mooood'
-// @has foo/foo/index.html '//h3[@id="mooood"]/a[@href="#mooood"]' '§'
+//@ has foo/foo/index.html '//h3[@id="mooood"]' 'mooood'
+//@ has foo/foo/index.html '//h3[@id="mooood"]/a[@href="#mooood"]' '§'
 /// ## mooood
 ///
 /// foo mod
 pub mod foo {}
 
-// @has foo/index.html '//*[@class="desc docblock-short"]/a[@href=\
+//@ has foo/index.html '//*[@class="desc docblock-short"]/a[@href=\
 //                      "https://nougat.world"]/code' 'nougat'
 
 /// [`nougat`](https://nougat.world)
diff --git a/tests/rustdoc/show-const-contents.rs b/tests/rustdoc/show-const-contents.rs
index 91df03adbbc..6d2701693ce 100644
--- a/tests/rustdoc/show-const-contents.rs
+++ b/tests/rustdoc/show-const-contents.rs
@@ -1,57 +1,57 @@
 // Test that the contents of constants are displayed as part of the
 // documentation.
 
-// @hasraw show_const_contents/constant.CONST_S.html 'show this'
-// @!hasraw show_const_contents/constant.CONST_S.html '; //'
+//@ hasraw show_const_contents/constant.CONST_S.html 'show this'
+//@ !hasraw show_const_contents/constant.CONST_S.html '; //'
 pub const CONST_S: &'static str = "show this";
 
-// @hasraw show_const_contents/constant.CONST_I32.html '= 42;'
-// @!hasraw show_const_contents/constant.CONST_I32.html '; //'
+//@ hasraw show_const_contents/constant.CONST_I32.html '= 42;'
+//@ !hasraw show_const_contents/constant.CONST_I32.html '; //'
 pub const CONST_I32: i32 = 42;
 
-// @hasraw show_const_contents/constant.CONST_I32_HEX.html '= 0x42;'
-// @!hasraw show_const_contents/constant.CONST_I32_HEX.html '; //'
+//@ hasraw show_const_contents/constant.CONST_I32_HEX.html '= 0x42;'
+//@ !hasraw show_const_contents/constant.CONST_I32_HEX.html '; //'
 pub const CONST_I32_HEX: i32 = 0x42;
 
-// @hasraw show_const_contents/constant.CONST_NEG_I32.html '= -42;'
-// @!hasraw show_const_contents/constant.CONST_NEG_I32.html '; //'
+//@ hasraw show_const_contents/constant.CONST_NEG_I32.html '= -42;'
+//@ !hasraw show_const_contents/constant.CONST_NEG_I32.html '; //'
 pub const CONST_NEG_I32: i32 = -42;
 
-// @hasraw show_const_contents/constant.CONST_EQ_TO_VALUE_I32.html '= 42i32;'
-// @!hasraw show_const_contents/constant.CONST_EQ_TO_VALUE_I32.html '// 42i32'
+//@ hasraw show_const_contents/constant.CONST_EQ_TO_VALUE_I32.html '= 42i32;'
+//@ !hasraw show_const_contents/constant.CONST_EQ_TO_VALUE_I32.html '// 42i32'
 pub const CONST_EQ_TO_VALUE_I32: i32 = 42i32;
 
-// @hasraw show_const_contents/constant.CONST_CALC_I32.html '= _; // 43i32'
+//@ hasraw show_const_contents/constant.CONST_CALC_I32.html '= _; // 43i32'
 pub const CONST_CALC_I32: i32 = 42 + 1;
 
-// @!hasraw show_const_contents/constant.CONST_REF_I32.html '= &42;'
-// @!hasraw show_const_contents/constant.CONST_REF_I32.html '; //'
+//@ !hasraw show_const_contents/constant.CONST_REF_I32.html '= &42;'
+//@ !hasraw show_const_contents/constant.CONST_REF_I32.html '; //'
 pub const CONST_REF_I32: &'static i32 = &42;
 
-// @hasraw show_const_contents/constant.CONST_I32_MAX.html '= i32::MAX; // 2_147_483_647i32'
+//@ hasraw show_const_contents/constant.CONST_I32_MAX.html '= i32::MAX; // 2_147_483_647i32'
 pub const CONST_I32_MAX: i32 = i32::MAX;
 
-// @!hasraw show_const_contents/constant.UNIT.html '= ();'
-// @!hasraw show_const_contents/constant.UNIT.html '; //'
+//@ !hasraw show_const_contents/constant.UNIT.html '= ();'
+//@ !hasraw show_const_contents/constant.UNIT.html '; //'
 pub const UNIT: () = ();
 
 pub struct MyType(i32);
 
-// @!hasraw show_const_contents/constant.MY_TYPE.html '= MyType(42);'
-// @!hasraw show_const_contents/constant.MY_TYPE.html '; //'
+//@ !hasraw show_const_contents/constant.MY_TYPE.html '= MyType(42);'
+//@ !hasraw show_const_contents/constant.MY_TYPE.html '; //'
 pub const MY_TYPE: MyType = MyType(42);
 
 pub struct MyTypeWithStr(&'static str);
 
-// @!hasraw show_const_contents/constant.MY_TYPE_WITH_STR.html '= MyTypeWithStr("show this");'
-// @!hasraw show_const_contents/constant.MY_TYPE_WITH_STR.html '; //'
+//@ !hasraw show_const_contents/constant.MY_TYPE_WITH_STR.html '= MyTypeWithStr("show this");'
+//@ !hasraw show_const_contents/constant.MY_TYPE_WITH_STR.html '; //'
 pub const MY_TYPE_WITH_STR: MyTypeWithStr = MyTypeWithStr("show this");
 
-// @hasraw show_const_contents/constant.PI.html '= 3.14159265358979323846264338327950288_f32;'
-// @hasraw show_const_contents/constant.PI.html '; // 3.14159274f32'
+//@ hasraw show_const_contents/constant.PI.html '= 3.14159265358979323846264338327950288_f32;'
+//@ hasraw show_const_contents/constant.PI.html '; // 3.14159274f32'
 pub use std::f32::consts::PI;
 
-// @hasraw show_const_contents/constant.MAX.html '= i32::MAX; // 2_147_483_647i32'
+//@ hasraw show_const_contents/constant.MAX.html '= i32::MAX; // 2_147_483_647i32'
 #[allow(deprecated, deprecated_in_future)]
 pub use std::i32::MAX;
 
@@ -61,8 +61,8 @@ macro_rules! int_module {
     )
 }
 
-// @hasraw show_const_contents/constant.MIN.html '= i16::MIN; // -32_768i16'
+//@ hasraw show_const_contents/constant.MIN.html '= i16::MIN; // -32_768i16'
 int_module!(i16);
 
-// @has show_const_contents/constant.ESCAPE.html //pre '= r#"<script>alert("ESCAPE");</script>"#;'
+//@ has show_const_contents/constant.ESCAPE.html //pre '= r#"<script>alert("ESCAPE");</script>"#;'
 pub const ESCAPE: &str = r#"<script>alert("ESCAPE");</script>"#;
diff --git a/tests/rustdoc/sidebar-all-page.rs b/tests/rustdoc/sidebar-all-page.rs
index 4c8a0f543a5..1f97a414048 100644
--- a/tests/rustdoc/sidebar-all-page.rs
+++ b/tests/rustdoc/sidebar-all-page.rs
@@ -1,17 +1,17 @@
 #![crate_name = "foo"]
 #![feature(rustc_attrs)]
 
-// @has 'foo/all.html'
-// @has - '//*[@class="sidebar-elems"]//li' 'Structs'
-// @has - '//*[@class="sidebar-elems"]//li' 'Enums'
-// @has - '//*[@class="sidebar-elems"]//li' 'Unions'
-// @has - '//*[@class="sidebar-elems"]//li' 'Functions'
-// @has - '//*[@class="sidebar-elems"]//li' 'Traits'
-// @has - '//*[@class="sidebar-elems"]//li' 'Macros'
-// @has - '//*[@class="sidebar-elems"]//li' 'Type Aliases'
-// @has - '//*[@class="sidebar-elems"]//li' 'Constants'
-// @has - '//*[@class="sidebar-elems"]//li' 'Statics'
-// @has - '//*[@class="sidebar-elems"]//li' 'Primitive Types'
+//@ has 'foo/all.html'
+//@ has - '//*[@class="sidebar-elems"]//li' 'Structs'
+//@ has - '//*[@class="sidebar-elems"]//li' 'Enums'
+//@ has - '//*[@class="sidebar-elems"]//li' 'Unions'
+//@ has - '//*[@class="sidebar-elems"]//li' 'Functions'
+//@ has - '//*[@class="sidebar-elems"]//li' 'Traits'
+//@ has - '//*[@class="sidebar-elems"]//li' 'Macros'
+//@ has - '//*[@class="sidebar-elems"]//li' 'Type Aliases'
+//@ has - '//*[@class="sidebar-elems"]//li' 'Constants'
+//@ has - '//*[@class="sidebar-elems"]//li' 'Statics'
+//@ has - '//*[@class="sidebar-elems"]//li' 'Primitive Types'
 
 pub struct Foo;
 pub enum Enum {
diff --git a/tests/rustdoc/sidebar-items.rs b/tests/rustdoc/sidebar-items.rs
index b746f698264..f3812143a7d 100644
--- a/tests/rustdoc/sidebar-items.rs
+++ b/tests/rustdoc/sidebar-items.rs
@@ -1,20 +1,20 @@
 #![feature(associated_type_defaults)]
 #![crate_name = "foo"]
 
-// @has foo/trait.Foo.html
-// @has - '//div[@class="sidebar-elems"]//h3/a[@href="#required-methods"]' 'Required Methods'
-// @has - '//*[@class="sidebar-elems"]//section//a' 'bar'
-// @has - '//div[@class="sidebar-elems"]//h3/a[@href="#provided-methods"]' 'Provided Methods'
-// @has - '//*[@class="sidebar-elems"]//section//a' 'foo'
-// @has - '//div[@class="sidebar-elems"]//h3/a[@href="#required-associated-consts"]' 'Required Associated Constants'
-// @has - '//*[@class="sidebar-elems"]//section//a' 'FOO'
-// @has - '//div[@class="sidebar-elems"]//h3/a[@href="#provided-associated-consts"]' 'Provided Associated Constants'
-// @has - '//*[@class="sidebar-elems"]//section//a' 'BAR'
-// @has - '//div[@class="sidebar-elems"]//h3/a[@href="#required-associated-types"]' 'Required Associated Types'
-// @has - '//*[@class="sidebar-elems"]//section//a' 'Output'
-// @has - '//div[@class="sidebar-elems"]//h3/a[@href="#provided-associated-types"]' 'Provided Associated Types'
-// @has - '//*[@class="sidebar-elems"]//section//a' 'Extra'
-// @has - '//div[@class="sidebar-elems"]//h3/a[@href="#object-safety"]' 'Object Safety'
+//@ has foo/trait.Foo.html
+//@ has - '//div[@class="sidebar-elems"]//h3/a[@href="#required-methods"]' 'Required Methods'
+//@ has - '//*[@class="sidebar-elems"]//section//a' 'bar'
+//@ has - '//div[@class="sidebar-elems"]//h3/a[@href="#provided-methods"]' 'Provided Methods'
+//@ has - '//*[@class="sidebar-elems"]//section//a' 'foo'
+//@ has - '//div[@class="sidebar-elems"]//h3/a[@href="#required-associated-consts"]' 'Required Associated Constants'
+//@ has - '//*[@class="sidebar-elems"]//section//a' 'FOO'
+//@ has - '//div[@class="sidebar-elems"]//h3/a[@href="#provided-associated-consts"]' 'Provided Associated Constants'
+//@ has - '//*[@class="sidebar-elems"]//section//a' 'BAR'
+//@ has - '//div[@class="sidebar-elems"]//h3/a[@href="#required-associated-types"]' 'Required Associated Types'
+//@ has - '//*[@class="sidebar-elems"]//section//a' 'Output'
+//@ has - '//div[@class="sidebar-elems"]//h3/a[@href="#provided-associated-types"]' 'Provided Associated Types'
+//@ has - '//*[@class="sidebar-elems"]//section//a' 'Extra'
+//@ has - '//div[@class="sidebar-elems"]//h3/a[@href="#object-safety"]' 'Object Safety'
 pub trait Foo {
     const FOO: usize;
     const BAR: u32 = 0;
@@ -25,37 +25,37 @@ pub trait Foo {
     fn bar() -> Self::Output;
 }
 
-// @has foo/trait.Safe.html
-// @!has - '//div[@class="sidebar-elems"]//h3/a[@href="#object-safety"]' ''
+//@ has foo/trait.Safe.html
+//@ !has - '//div[@class="sidebar-elems"]//h3/a[@href="#object-safety"]' ''
 pub trait Safe {
     fn access(&self);
 }
 
-// @has foo/struct.Bar.html
-// @has - '//div[@class="sidebar-elems"]//h3/a[@href="#fields"]' 'Fields'
-// @has - '//*[@class="sidebar-elems"]//section//a[@href="#structfield.f"]' 'f'
-// @has - '//*[@class="sidebar-elems"]//section//a[@href="#structfield.u"]' 'u'
-// @!has - '//*[@class="sidebar-elems"]//section//a' 'waza'
+//@ has foo/struct.Bar.html
+//@ has - '//div[@class="sidebar-elems"]//h3/a[@href="#fields"]' 'Fields'
+//@ has - '//*[@class="sidebar-elems"]//section//a[@href="#structfield.f"]' 'f'
+//@ has - '//*[@class="sidebar-elems"]//section//a[@href="#structfield.u"]' 'u'
+//@ !has - '//*[@class="sidebar-elems"]//section//a' 'waza'
 pub struct Bar {
     pub f: u32,
     pub u: u32,
     waza: u32,
 }
 
-// @has foo/enum.En.html
-// @has - '//div[@class="sidebar-elems"]//h3/a[@href="#variants"]' 'Variants'
-// @has - '//*[@class="sidebar-elems"]//section//a' 'Foo'
-// @has - '//*[@class="sidebar-elems"]//section//a' 'Bar'
+//@ has foo/enum.En.html
+//@ has - '//div[@class="sidebar-elems"]//h3/a[@href="#variants"]' 'Variants'
+//@ has - '//*[@class="sidebar-elems"]//section//a' 'Foo'
+//@ has - '//*[@class="sidebar-elems"]//section//a' 'Bar'
 pub enum En {
     Foo,
     Bar,
 }
 
-// @has foo/union.MyUnion.html
-// @has - '//div[@class="sidebar-elems"]//h3/a[@href="#fields"]' 'Fields'
-// @has - '//*[@class="sidebar-elems"]//section//a[@href="#structfield.f1"]' 'f1'
-// @has - '//*[@class="sidebar-elems"]//section//a[@href="#structfield.f2"]' 'f2'
-// @!has - '//*[@class="sidebar-elems"]//section//a' 'waza'
+//@ has foo/union.MyUnion.html
+//@ has - '//div[@class="sidebar-elems"]//h3/a[@href="#fields"]' 'Fields'
+//@ has - '//*[@class="sidebar-elems"]//section//a[@href="#structfield.f1"]' 'f1'
+//@ has - '//*[@class="sidebar-elems"]//section//a[@href="#structfield.f2"]' 'f2'
+//@ !has - '//*[@class="sidebar-elems"]//section//a' 'waza'
 pub union MyUnion {
     pub f1: u32,
     pub f2: f32,
diff --git a/tests/rustdoc/sidebar-link-generation.rs b/tests/rustdoc/sidebar-link-generation.rs
index 7858f35a261..ee868ec75d3 100644
--- a/tests/rustdoc/sidebar-link-generation.rs
+++ b/tests/rustdoc/sidebar-link-generation.rs
@@ -1,6 +1,6 @@
 #![crate_name = "foo"]
 
-// @has foo/struct.SomeStruct.html '//*[@class="sidebar-elems"]//section//li/a[@href="#method.some_fn-1"]' \
+//@ has foo/struct.SomeStruct.html '//*[@class="sidebar-elems"]//section//li/a[@href="#method.some_fn-1"]' \
 //          "some_fn"
 pub struct SomeStruct<T> { _inner: T }
 
diff --git a/tests/rustdoc/sidebar-links-to-foreign-impl.rs b/tests/rustdoc/sidebar-links-to-foreign-impl.rs
index 733a18ad94a..7c039eeb39f 100644
--- a/tests/rustdoc/sidebar-links-to-foreign-impl.rs
+++ b/tests/rustdoc/sidebar-links-to-foreign-impl.rs
@@ -2,13 +2,13 @@
 
 #![crate_name = "foo"]
 
-// @has foo/trait.Foo.html
-// @has - '//div[@class="sidebar-elems"]//h3/a[@href="#foreign-impls"]' 'Implementations on Foreign Types'
-// @has - '//h2[@id="foreign-impls"]' 'Implementations on Foreign Types'
-// @has - '//*[@class="sidebar-elems"]//section//a[@href="#impl-Foo-for-u32"]' 'u32'
-// @has - '//*[@id="impl-Foo-for-u32"]//h3[@class="code-header"]' 'impl Foo for u32'
-// @has - "//*[@class=\"sidebar-elems\"]//section//a[@href=\"#impl-Foo-for-%26str\"]" "&'a str"
-// @has - "//*[@id=\"impl-Foo-for-%26str\"]//h3[@class=\"code-header\"]" "impl<'a> Foo for &'a str"
+//@ has foo/trait.Foo.html
+//@ has - '//div[@class="sidebar-elems"]//h3/a[@href="#foreign-impls"]' 'Implementations on Foreign Types'
+//@ has - '//h2[@id="foreign-impls"]' 'Implementations on Foreign Types'
+//@ has - '//*[@class="sidebar-elems"]//section//a[@href="#impl-Foo-for-u32"]' 'u32'
+//@ has - '//*[@id="impl-Foo-for-u32"]//h3[@class="code-header"]' 'impl Foo for u32'
+//@ has - "//*[@class=\"sidebar-elems\"]//section//a[@href=\"#impl-Foo-for-%26str\"]" "&'a str"
+//@ has - "//*[@id=\"impl-Foo-for-%26str\"]//h3[@class=\"code-header\"]" "impl<'a> Foo for &'a str"
 pub trait Foo {}
 
 impl Foo for u32 {}
diff --git a/tests/rustdoc/sidebar-trait-impl-disambiguate-78701.rs b/tests/rustdoc/sidebar-trait-impl-disambiguate-78701.rs
index 89b7ccb5222..b1bf029cf84 100644
--- a/tests/rustdoc/sidebar-trait-impl-disambiguate-78701.rs
+++ b/tests/rustdoc/sidebar-trait-impl-disambiguate-78701.rs
@@ -5,9 +5,9 @@
 // link to the blanket impl and not the other impl. Basically, we're checking if
 // the ID is correctly derived.
 
-// @has 'foo/struct.AnotherStruct.html'
-// @count - '//*[@class="sidebar"]//a[@href="#impl-AnAmazingTrait-for-AnotherStruct%3C()%3E"]' 1
-// @count - '//*[@class="sidebar"]//a[@href="#impl-AnAmazingTrait-for-T"]' 1
+//@ has 'foo/struct.AnotherStruct.html'
+//@ count - '//*[@class="sidebar"]//a[@href="#impl-AnAmazingTrait-for-AnotherStruct%3C()%3E"]' 1
+//@ count - '//*[@class="sidebar"]//a[@href="#impl-AnAmazingTrait-for-T"]' 1
 
 pub trait Something {}
 
diff --git a/tests/rustdoc/sized_trait.rs b/tests/rustdoc/sized_trait.rs
index feef4de8d57..4df62fdc081 100644
--- a/tests/rustdoc/sized_trait.rs
+++ b/tests/rustdoc/sized_trait.rs
@@ -1,17 +1,17 @@
 #![crate_name = "foo"]
 
-// @has foo/struct.Bar.html
-// @!has - '//*[@id="impl-Sized"]' ''
+//@ has foo/struct.Bar.html
+//@ !has - '//*[@id="impl-Sized"]' ''
 pub struct Bar {
     a: u16,
 }
 
-// @has foo/struct.Foo.html
-// @!has - '//*[@id="impl-Sized"]' ''
+//@ has foo/struct.Foo.html
+//@ !has - '//*[@id="impl-Sized"]' ''
 pub struct Foo<T: ?Sized>(T);
 
-// @has foo/struct.Unsized.html
-// @has - '//*[@id="impl-Sized-for-Unsized"]//h3[@class="code-header"]' 'impl !Sized for Unsized'
+//@ has foo/struct.Unsized.html
+//@ has - '//*[@id="impl-Sized-for-Unsized"]//h3[@class="code-header"]' 'impl !Sized for Unsized'
 pub struct Unsized {
     data: [u8],
 }
diff --git a/tests/rustdoc/slice-links.rs b/tests/rustdoc/slice-links.rs
index 6dea3b74ea3..74f260976c0 100644
--- a/tests/rustdoc/slice-links.rs
+++ b/tests/rustdoc/slice-links.rs
@@ -3,26 +3,26 @@
 
 pub struct MyBox<T: ?Sized>(*const T);
 
-// @has 'foo/fn.alpha.html'
-// @snapshot link_slice_u32 - '//pre[@class="rust item-decl"]/code'
+//@ has 'foo/fn.alpha.html'
+//@ snapshot link_slice_u32 - '//pre[@class="rust item-decl"]/code'
 pub fn alpha() -> &'static [u32] {
     loop {}
 }
 
-// @has 'foo/fn.beta.html'
-// @snapshot link_slice_generic - '//pre[@class="rust item-decl"]/code'
+//@ has 'foo/fn.beta.html'
+//@ snapshot link_slice_generic - '//pre[@class="rust item-decl"]/code'
 pub fn beta<T>() -> &'static [T] {
     loop {}
 }
 
-// @has 'foo/fn.gamma.html'
-// @snapshot link_box_u32 - '//pre[@class="rust item-decl"]/code'
+//@ has 'foo/fn.gamma.html'
+//@ snapshot link_box_u32 - '//pre[@class="rust item-decl"]/code'
 pub fn gamma() -> MyBox<[u32]> {
     loop {}
 }
 
-// @has 'foo/fn.delta.html'
-// @snapshot link_box_generic - '//pre[@class="rust item-decl"]/code'
+//@ has 'foo/fn.delta.html'
+//@ snapshot link_box_generic - '//pre[@class="rust item-decl"]/code'
 pub fn delta<T>() -> MyBox<[T]> {
     loop {}
 }
diff --git a/tests/rustdoc/smart-punct.rs b/tests/rustdoc/smart-punct.rs
index 7ae5bd69945..41b3ee3f14e 100644
--- a/tests/rustdoc/smart-punct.rs
+++ b/tests/rustdoc/smart-punct.rs
@@ -20,9 +20,9 @@
 //! I say "don't smart-punct me -- please!"
 //! ```
 
-// @has "foo/index.html" "//p" "This is the “start” of the ‘document’! How’d you know that “it’s” the start?"
-// @has "foo/index.html" "//h2" "Header with “smart punct’”"
-// @has "foo/index.html" '//a[@href="https://www.rust-lang.org"]' "link with “smart punct’” – yessiree!"
-// @has "foo/index.html" '//code' "this inline code -- it shouldn't have \"smart punct\""
-// @has "foo/index.html" '//pre' "let x = \"don't smart-punct me -- please!\";"
-// @has "foo/index.html" '//pre' "I say \"don't smart-punct me -- please!\""
+//@ has "foo/index.html" "//p" "This is the “start” of the ‘document’! How’d you know that “it’s” the start?"
+//@ has "foo/index.html" "//h2" "Header with “smart punct’”"
+//@ has "foo/index.html" '//a[@href="https://www.rust-lang.org"]' "link with “smart punct’” – yessiree!"
+//@ has "foo/index.html" '//code' "this inline code -- it shouldn't have \"smart punct\""
+//@ has "foo/index.html" '//pre' "let x = \"don't smart-punct me -- please!\";"
+//@ has "foo/index.html" '//pre' "I say \"don't smart-punct me -- please!\""
diff --git a/tests/rustdoc/smoke.rs b/tests/rustdoc/smoke.rs
index c1ed3a0c953..415fca313fc 100644
--- a/tests/rustdoc/smoke.rs
+++ b/tests/rustdoc/smoke.rs
@@ -1,25 +1,25 @@
-// @has smoke/index.html
+//@ has smoke/index.html
 
 //! Very docs
 
-// @has smoke/bar/index.html
+//@ has smoke/bar/index.html
 pub mod bar {
 
     /// So correct
-    // @has smoke/bar/baz/index.html
+    //@ has smoke/bar/baz/index.html
     pub mod baz {
         /// Much detail
-        // @has smoke/bar/baz/fn.baz.html
+        //@ has smoke/bar/baz/fn.baz.html
         pub fn baz() { }
     }
 
     /// *wow*
-    // @has smoke/bar/trait.Doge.html
+    //@ has smoke/bar/trait.Doge.html
     pub trait Doge { fn dummy(&self) { } }
 
-    // @has smoke/bar/struct.Foo.html
+    //@ has smoke/bar/struct.Foo.html
     pub struct Foo { x: isize, y: usize }
 
-    // @has smoke/bar/fn.prawns.html
+    //@ has smoke/bar/fn.prawns.html
     pub fn prawns((a, b): (isize, usize), Foo { x, y }: Foo) { }
 }
diff --git a/tests/rustdoc/sort-53812.rs b/tests/rustdoc/sort-53812.rs
index 968ae035043..21cb0ad9308 100644
--- a/tests/rustdoc/sort-53812.rs
+++ b/tests/rustdoc/sort-53812.rs
@@ -14,10 +14,10 @@ macro_rules! array_impls {
     }
 }
 
-// @has foo/trait.MyIterator.html
-// @has - '//*[@id="implementors-list"]/*[@class="impl"][1]' 'MyStruct<[T; 0]>'
-// @has - '//*[@id="implementors-list"]/*[@class="impl"][2]' 'MyStruct<[T; 1]>'
-// @has - '//*[@id="implementors-list"]/*[@class="impl"][3]' 'MyStruct<[T; 2]>'
-// @has - '//*[@id="implementors-list"]/*[@class="impl"][4]' 'MyStruct<[T; 3]>'
-// @has - '//*[@id="implementors-list"]/*[@class="impl"][5]' 'MyStruct<[T; 10]>'
+//@ has foo/trait.MyIterator.html
+//@ has - '//*[@id="implementors-list"]/*[@class="impl"][1]' 'MyStruct<[T; 0]>'
+//@ has - '//*[@id="implementors-list"]/*[@class="impl"][2]' 'MyStruct<[T; 1]>'
+//@ has - '//*[@id="implementors-list"]/*[@class="impl"][3]' 'MyStruct<[T; 2]>'
+//@ has - '//*[@id="implementors-list"]/*[@class="impl"][4]' 'MyStruct<[T; 3]>'
+//@ has - '//*[@id="implementors-list"]/*[@class="impl"][5]' 'MyStruct<[T; 10]>'
 array_impls! { 10 3 2 1 0 }
diff --git a/tests/rustdoc/sort-modules-by-appearance.rs b/tests/rustdoc/sort-modules-by-appearance.rs
index 2d224107d22..1254116afdf 100644
--- a/tests/rustdoc/sort-modules-by-appearance.rs
+++ b/tests/rustdoc/sort-modules-by-appearance.rs
@@ -9,5 +9,5 @@ pub mod module_c {}
 
 pub mod module_a {}
 
-// @matchesraw 'sort_modules_by_appearance/index.html' '(?s)module_b.*module_c.*module_a'
-// @matchesraw 'sort_modules_by_appearance/sidebar-items.js' '"module_b".*"module_c".*"module_a"'
+//@ matchesraw 'sort_modules_by_appearance/index.html' '(?s)module_b.*module_c.*module_a'
+//@ matchesraw 'sort_modules_by_appearance/sidebar-items.js' '"module_b".*"module_c".*"module_a"'
diff --git a/tests/rustdoc/source-code-highlight.rs b/tests/rustdoc/source-code-highlight.rs
index 0a1be791ec2..f1c905e64c0 100644
--- a/tests/rustdoc/source-code-highlight.rs
+++ b/tests/rustdoc/source-code-highlight.rs
@@ -4,26 +4,26 @@
 //@ compile-flags: -Zunstable-options --generate-link-to-definition
 #![crate_name = "foo"]
 
-// @has 'src/foo/source-code-highlight.rs.html'
+//@ has 'src/foo/source-code-highlight.rs.html'
 
-// @hasraw - '<a href="../../foo/macro.foo.html">foo</a>'
+//@ hasraw - '<a href="../../foo/macro.foo.html">foo</a>'
 #[macro_export]
 macro_rules! foo {
     () => {}
 }
 
-// @hasraw - '<span class="macro">foo!</span>'
+//@ hasraw - '<span class="macro">foo!</span>'
 foo! {}
 
-// @hasraw - '<a href="../../foo/fn.f.html">f</a>'
+//@ hasraw - '<a href="../../foo/fn.f.html">f</a>'
 #[rustfmt::skip]
 pub fn f () {}
-// @hasraw - '<a href="../../foo/struct.Bar.html">Bar</a>'
-// @hasraw - '<a href="../../foo/struct.Bar.html">Bar</a>'
-// @hasraw - '<a href="{{channel}}/std/primitive.u32.html">u32</a>'
+//@ hasraw - '<a href="../../foo/struct.Bar.html">Bar</a>'
+//@ hasraw - '<a href="../../foo/struct.Bar.html">Bar</a>'
+//@ hasraw - '<a href="{{channel}}/std/primitive.u32.html">u32</a>'
 #[rustfmt::skip]
 pub struct Bar ( u32 );
-// @hasraw - '<a href="../../foo/enum.Foo.html">Foo</a>'
+//@ hasraw - '<a href="../../foo/enum.Foo.html">Foo</a>'
 pub enum Foo {
     A,
 }
diff --git a/tests/rustdoc/source-file.rs b/tests/rustdoc/source-file.rs
index 16d4cbe3a34..6cff5edf146 100644
--- a/tests/rustdoc/source-file.rs
+++ b/tests/rustdoc/source-file.rs
@@ -1,5 +1,5 @@
 #![crate_name = "foo"]
 
-// @hasraw src-files.js source-file.rs
+//@ hasraw src-files.js source-file.rs
 
 pub struct Foo;
diff --git a/tests/rustdoc/source-version-separator.rs b/tests/rustdoc/source-version-separator.rs
index 7256f731573..a998c538eed 100644
--- a/tests/rustdoc/source-version-separator.rs
+++ b/tests/rustdoc/source-version-separator.rs
@@ -2,24 +2,24 @@
 #![crate_name = "foo"]
 #![feature(staged_api)]
 
-// @has foo/trait.Bar.html
-// @has - '//div[@class="main-heading"]/*[@class="out-of-band"]' '1.0.0 · source · '
+//@ has foo/trait.Bar.html
+//@ has - '//div[@class="main-heading"]/*[@class="out-of-band"]' '1.0.0 · source · '
 #[stable(feature = "bar", since = "1.0")]
 pub trait Bar {
-    // @has - '//*[@id="tymethod.foo"]/*[@class="rightside"]' '3.0.0 · source'
+    //@ has - '//*[@id="tymethod.foo"]/*[@class="rightside"]' '3.0.0 · source'
     #[stable(feature = "foobar", since = "3.0")]
     fn foo();
 }
 
-// @has - '//div[@id="implementors-list"]//*[@class="rightside"]' '4.0.0 · source'
+//@ has - '//div[@id="implementors-list"]//*[@class="rightside"]' '4.0.0 · source'
 
-// @has foo/struct.Foo.html
-// @has - '//div[@class="main-heading"]/*[@class="out-of-band"]' '1.0.0 · source · '
+//@ has foo/struct.Foo.html
+//@ has - '//div[@class="main-heading"]/*[@class="out-of-band"]' '1.0.0 · source · '
 #[stable(feature = "baz", since = "1.0")]
 pub struct Foo;
 
 impl Foo {
-    // @has - '//*[@id="method.foofoo"]/*[@class="rightside"]' '3.0.0 · source'
+    //@ has - '//*[@id="method.foofoo"]/*[@class="rightside"]' '3.0.0 · source'
     #[stable(feature = "foobar", since = "3.0")]
     pub fn foofoo() {}
 }
diff --git a/tests/rustdoc/src-link-external-macro-26606.rs b/tests/rustdoc/src-link-external-macro-26606.rs
index a5b34867869..b5662be9b2d 100644
--- a/tests/rustdoc/src-link-external-macro-26606.rs
+++ b/tests/rustdoc/src-link-external-macro-26606.rs
@@ -5,10 +5,10 @@
 // https://github.com/rust-lang/rust/issues/26606
 #![crate_name="issue_26606"]
 
-// @has issue_26606_macro/macro.make_item.html
+//@ has issue_26606_macro/macro.make_item.html
 #[macro_use]
 extern crate issue_26606_macro;
 
-// @has issue_26606/constant.FOO.html
-// @has - '//a[@href="../src/issue_26606/src-link-external-macro-26606.rs.html#14"]' 'source'
+//@ has issue_26606/constant.FOO.html
+//@ has - '//a[@href="../src/issue_26606/src-link-external-macro-26606.rs.html#14"]' 'source'
 make_item!(FOO);
diff --git a/tests/rustdoc/src-links-auto-impls.rs b/tests/rustdoc/src-links-auto-impls.rs
index 08a497d4cf5..dd07f85eee7 100644
--- a/tests/rustdoc/src-links-auto-impls.rs
+++ b/tests/rustdoc/src-links-auto-impls.rs
@@ -1,12 +1,12 @@
 #![crate_name = "foo"]
 
-// @has foo/struct.Unsized.html
-// @has - '//*[@id="impl-Sized-for-Unsized"]/h3[@class="code-header"]' 'impl !Sized for Unsized'
-// @!has - '//*[@id="impl-Sized-for-Unsized"]//a[@class="src"]' 'source'
-// @has - '//*[@id="impl-Sync-for-Unsized"]/h3[@class="code-header"]' 'impl Sync for Unsized'
-// @!has - '//*[@id="impl-Sync-for-Unsized"]//a[@class="src"]' 'source'
-// @has - '//*[@id="impl-Any-for-T"]/h3[@class="code-header"]' 'impl<T> Any for T'
-// @has - '//*[@id="impl-Any-for-T"]//a[@class="src rightside"]' 'source'
+//@ has foo/struct.Unsized.html
+//@ has - '//*[@id="impl-Sized-for-Unsized"]/h3[@class="code-header"]' 'impl !Sized for Unsized'
+//@ !has - '//*[@id="impl-Sized-for-Unsized"]//a[@class="src"]' 'source'
+//@ has - '//*[@id="impl-Sync-for-Unsized"]/h3[@class="code-header"]' 'impl Sync for Unsized'
+//@ !has - '//*[@id="impl-Sync-for-Unsized"]//a[@class="src"]' 'source'
+//@ has - '//*[@id="impl-Any-for-T"]/h3[@class="code-header"]' 'impl<T> Any for T'
+//@ has - '//*[@id="impl-Any-for-T"]//a[@class="src rightside"]' 'source'
 pub struct Unsized {
     data: [u8],
 }
diff --git a/tests/rustdoc/src-links-external.rs b/tests/rustdoc/src-links-external.rs
index fd48b964ab9..e8acbf1b9b4 100644
--- a/tests/rustdoc/src-links-external.rs
+++ b/tests/rustdoc/src-links-external.rs
@@ -6,8 +6,8 @@
 
 extern crate src_links_external;
 
-// @has foo/bar/index.html '//a/@href' '../../src/src_links_external/src-links-external.rs.html#1'
+//@ has foo/bar/index.html '//a/@href' '../../src/src_links_external/src-links-external.rs.html#1'
 #[doc(inline)]
 pub use src_links_external as bar;
 
-// @has foo/bar/struct.Foo.html '//a/@href' '../../src/src_links_external/src-links-external.rs.html#1'
+//@ has foo/bar/struct.Foo.html '//a/@href' '../../src/src_links_external/src-links-external.rs.html#1'
diff --git a/tests/rustdoc/src-links-implementor-43893.rs b/tests/rustdoc/src-links-implementor-43893.rs
index 811957c430b..d9abdcde08d 100644
--- a/tests/rustdoc/src-links-implementor-43893.rs
+++ b/tests/rustdoc/src-links-implementor-43893.rs
@@ -7,15 +7,15 @@
 pub trait SomeTrait {}
 pub struct SomeStruct;
 
-// @has foo/trait.SomeTrait.html '//a/@href' '../src/foo/src-links-implementor-43893.rs.html#11'
+//@ has foo/trait.SomeTrait.html '//a/@href' '../src/foo/src-links-implementor-43893.rs.html#11'
 impl SomeTrait for usize {}
 
-// @has foo/trait.SomeTrait.html '//a/@href' '../src/foo/src-links-implementor-43893.rs.html#14-16'
+//@ has foo/trait.SomeTrait.html '//a/@href' '../src/foo/src-links-implementor-43893.rs.html#14-16'
 impl SomeTrait for SomeStruct {
     // deliberately multi-line impl
 }
 
 pub trait AnotherTrait {}
 
-// @has foo/trait.AnotherTrait.html '//a/@href' '../src/foo/src-links-implementor-43893.rs.html#21'
+//@ has foo/trait.AnotherTrait.html '//a/@href' '../src/foo/src-links-implementor-43893.rs.html#21'
 impl<T> AnotherTrait for T {}
diff --git a/tests/rustdoc/src-links-inlined-34274.rs b/tests/rustdoc/src-links-inlined-34274.rs
index 6d6999cf866..8675ae4736e 100644
--- a/tests/rustdoc/src-links-inlined-34274.rs
+++ b/tests/rustdoc/src-links-inlined-34274.rs
@@ -7,5 +7,5 @@
 
 extern crate issue_34274;
 
-// @has foo/fn.extern_c_fn.html '//a/@href' '../src/issue_34274/issue-34274.rs.html#2'
+//@ has foo/fn.extern_c_fn.html '//a/@href' '../src/issue_34274/issue-34274.rs.html#2'
 pub use issue_34274::extern_c_fn;
diff --git a/tests/rustdoc/src-links.rs b/tests/rustdoc/src-links.rs
index 7a6c733d464..24039a5d84e 100644
--- a/tests/rustdoc/src-links.rs
+++ b/tests/rustdoc/src-links.rs
@@ -1,51 +1,51 @@
 #![crate_name = "foo"]
 
 //! Dox
-// @has src/foo/src-links.rs.html
-// @has foo/index.html '//a/@href' '../src/foo/src-links.rs.html'
+//@ has src/foo/src-links.rs.html
+//@ has foo/index.html '//a/@href' '../src/foo/src-links.rs.html'
 
 #[path = "src-links/mod.rs"]
 pub mod qux;
 
-// @has src/foo/src-links.rs.html
-// @has foo/fizz/index.html '//a/@href' '../src/foo/src-links/fizz.rs.html'
+//@ has src/foo/src-links.rs.html
+//@ has foo/fizz/index.html '//a/@href' '../src/foo/src-links/fizz.rs.html'
 #[path = "src-links/../src-links/fizz.rs"]
 pub mod fizz;
 
-// @has foo/bar/index.html '//a/@href' '../../src/foo/src-links.rs.html'
+//@ has foo/bar/index.html '//a/@href' '../../src/foo/src-links.rs.html'
 pub mod bar {
 
     /// Dox
-    // @has foo/bar/baz/index.html '//a/@href' '../../../src/foo/src-links.rs.html'
+    //@ has foo/bar/baz/index.html '//a/@href' '../../../src/foo/src-links.rs.html'
     pub mod baz {
         /// Dox
-        // @has foo/bar/baz/fn.baz.html '//a/@href' '../../../src/foo/src-links.rs.html'
+        //@ has foo/bar/baz/fn.baz.html '//a/@href' '../../../src/foo/src-links.rs.html'
         pub fn baz() { }
     }
 
     /// Dox
-    // @has foo/bar/trait.Foobar.html '//a/@href' '../../src/foo/src-links.rs.html'
+    //@ has foo/bar/trait.Foobar.html '//a/@href' '../../src/foo/src-links.rs.html'
     pub trait Foobar { fn dummy(&self) { } }
 
-    // @has foo/bar/struct.Foo.html '//a/@href' '../../src/foo/src-links.rs.html'
+    //@ has foo/bar/struct.Foo.html '//a/@href' '../../src/foo/src-links.rs.html'
     pub struct Foo { x: i32, y: u32 }
 
-    // @has foo/bar/fn.prawns.html '//a/@href' '../../src/foo/src-links.rs.html'
+    //@ has foo/bar/fn.prawns.html '//a/@href' '../../src/foo/src-links.rs.html'
     pub fn prawns((a, b): (i32, u32), Foo { x, y }: Foo) { }
 }
 
 /// Dox
-// @has foo/fn.modfn.html '//a/@href' '../src/foo/src-links.rs.html'
+//@ has foo/fn.modfn.html '//a/@href' '../src/foo/src-links.rs.html'
 pub fn modfn() { }
 
 // same hierarchy as above, but just for the submodule
 
-// @has src/foo/src-links/mod.rs.html
-// @has foo/qux/index.html '//a/@href' '../../src/foo/src-links/mod.rs.html'
-// @has foo/qux/bar/index.html '//a/@href' '../../../src/foo/src-links/mod.rs.html'
-// @has foo/qux/bar/baz/index.html '//a/@href' '../../../../src/foo/src-links/mod.rs.html'
-// @has foo/qux/bar/baz/fn.baz.html '//a/@href' '../../../../src/foo/src-links/mod.rs.html'
-// @has foo/qux/bar/trait.Foobar.html '//a/@href' '../../../src/foo/src-links/mod.rs.html'
-// @has foo/qux/bar/struct.Foo.html '//a/@href' '../../../src/foo/src-links/mod.rs.html'
-// @has foo/qux/bar/fn.prawns.html '//a/@href' '../../../src/foo/src-links/mod.rs.html'
-// @has foo/qux/fn.modfn.html '//a/@href' '../../src/foo/src-links/mod.rs.html'
+//@ has src/foo/src-links/mod.rs.html
+//@ has foo/qux/index.html '//a/@href' '../../src/foo/src-links/mod.rs.html'
+//@ has foo/qux/bar/index.html '//a/@href' '../../../src/foo/src-links/mod.rs.html'
+//@ has foo/qux/bar/baz/index.html '//a/@href' '../../../../src/foo/src-links/mod.rs.html'
+//@ has foo/qux/bar/baz/fn.baz.html '//a/@href' '../../../../src/foo/src-links/mod.rs.html'
+//@ has foo/qux/bar/trait.Foobar.html '//a/@href' '../../../src/foo/src-links/mod.rs.html'
+//@ has foo/qux/bar/struct.Foo.html '//a/@href' '../../../src/foo/src-links/mod.rs.html'
+//@ has foo/qux/bar/fn.prawns.html '//a/@href' '../../../src/foo/src-links/mod.rs.html'
+//@ has foo/qux/fn.modfn.html '//a/@href' '../../src/foo/src-links/mod.rs.html'
diff --git a/tests/rustdoc/src-mod-path-absolute-26995.rs b/tests/rustdoc/src-mod-path-absolute-26995.rs
index 47045503bb9..f754b64977f 100644
--- a/tests/rustdoc/src-mod-path-absolute-26995.rs
+++ b/tests/rustdoc/src-mod-path-absolute-26995.rs
@@ -4,7 +4,7 @@
 // https://github.com/rust-lang/rust/issues/26995
 #![crate_name="issue_26995"]
 
-// @has src/issue_26995/dev/null.html
-// @has issue_26995/null/index.html '//a/@href' '../../src/issue_26995/dev/null.html'
+//@ has src/issue_26995/dev/null.html
+//@ has issue_26995/null/index.html '//a/@href' '../../src/issue_26995/dev/null.html'
 #[path="/dev/null"]
 pub mod null;
diff --git a/tests/rustdoc/stability.rs b/tests/rustdoc/stability.rs
index c4d7118d07f..270da822c00 100644
--- a/tests/rustdoc/stability.rs
+++ b/tests/rustdoc/stability.rs
@@ -2,19 +2,19 @@
 
 #![unstable(feature = "test", issue = "none")]
 
-// @has stability/index.html
-// @has - '//ul[@class="item-table"]/li[1]//a' AaStable
-// @has - '//ul[@class="item-table"]/li[2]//a' ZzStable
-// @has - '//ul[@class="item-table"]/li[3]//a' Unstable
+//@ has stability/index.html
+//@ has - '//ul[@class="item-table"]/li[1]//a' AaStable
+//@ has - '//ul[@class="item-table"]/li[2]//a' ZzStable
+//@ has - '//ul[@class="item-table"]/li[3]//a' Unstable
 
 #[stable(feature = "rust2", since = "2.2.2")]
 pub struct AaStable;
 
 pub struct Unstable {
-    // @has stability/struct.Unstable.html \
+    //@ has stability/struct.Unstable.html \
     //      '//span[@class="item-info"]//div[@class="stab unstable"]' \
     //      'This is a nightly-only experimental API'
-    // @count stability/struct.Unstable.html '//span[@class="stab unstable"]' 0
+    //@ count stability/struct.Unstable.html '//span[@class="stab unstable"]' 0
     pub foo: u32,
     pub bar: u32,
 }
diff --git a/tests/rustdoc/staged-api-deprecated-unstable-32374.rs b/tests/rustdoc/staged-api-deprecated-unstable-32374.rs
index d282dea907e..556b6fb61ac 100644
--- a/tests/rustdoc/staged-api-deprecated-unstable-32374.rs
+++ b/tests/rustdoc/staged-api-deprecated-unstable-32374.rs
@@ -4,29 +4,29 @@
 #![unstable(feature = "test", issue = "32374")]
 #![crate_name="issue_32374"]
 
-// @matches issue_32374/index.html '//*[@class="item-name"]/span[@class="stab deprecated"]' \
+//@ matches issue_32374/index.html '//*[@class="item-name"]/span[@class="stab deprecated"]' \
 //      'Deprecated'
-// @matches issue_32374/index.html '//*[@class="item-name"]/span[@class="stab unstable"]' \
+//@ matches issue_32374/index.html '//*[@class="item-name"]/span[@class="stab unstable"]' \
 //      'Experimental'
-// @matches issue_32374/index.html '//*[@class="desc docblock-short"]/text()' 'Docs'
+//@ matches issue_32374/index.html '//*[@class="desc docblock-short"]/text()' 'Docs'
 
-// @has issue_32374/struct.T.html '//*[@class="stab deprecated"]/span' '👎'
-// @has issue_32374/struct.T.html '//*[@class="stab deprecated"]/span' \
+//@ has issue_32374/struct.T.html '//*[@class="stab deprecated"]/span' '👎'
+//@ has issue_32374/struct.T.html '//*[@class="stab deprecated"]/span' \
 //      'Deprecated since 1.0.0: text'
-// @hasraw - '<code>test</code>&nbsp;<a href="https://issue_url/32374">#32374</a>'
-// @matches issue_32374/struct.T.html '//*[@class="stab unstable"]' '🔬'
-// @matches issue_32374/struct.T.html '//*[@class="stab unstable"]' \
+//@ hasraw - '<code>test</code>&nbsp;<a href="https://issue_url/32374">#32374</a>'
+//@ matches issue_32374/struct.T.html '//*[@class="stab unstable"]' '🔬'
+//@ matches issue_32374/struct.T.html '//*[@class="stab unstable"]' \
 //     'This is a nightly-only experimental API. \(test\s#32374\)$'
 /// Docs
 #[deprecated(since = "1.0.0", note = "text")]
 #[unstable(feature = "test", issue = "32374")]
 pub struct T;
 
-// @has issue_32374/struct.U.html '//*[@class="stab deprecated"]' '👎'
-// @has issue_32374/struct.U.html '//*[@class="stab deprecated"]' \
+//@ has issue_32374/struct.U.html '//*[@class="stab deprecated"]' '👎'
+//@ has issue_32374/struct.U.html '//*[@class="stab deprecated"]' \
 //     'Deprecated since 1.0.0: deprecated'
-// @has issue_32374/struct.U.html '//*[@class="stab unstable"]' '🔬'
-// @has issue_32374/struct.U.html '//*[@class="stab unstable"]' \
+//@ has issue_32374/struct.U.html '//*[@class="stab unstable"]' '🔬'
+//@ has issue_32374/struct.U.html '//*[@class="stab unstable"]' \
 //     'This is a nightly-only experimental API. (test #32374)'
 #[deprecated(since = "1.0.0", note = "deprecated")]
 #[unstable(feature = "test", issue = "32374", reason = "unstable")]
diff --git a/tests/rustdoc/staged-api-feature-issue-27759.rs b/tests/rustdoc/staged-api-feature-issue-27759.rs
index 56a45a600da..32e5c495846 100644
--- a/tests/rustdoc/staged-api-feature-issue-27759.rs
+++ b/tests/rustdoc/staged-api-feature-issue-27759.rs
@@ -6,12 +6,12 @@
 
 #![unstable(feature="test", issue="27759")]
 
-// @has issue_27759/unstable/index.html
-// @hasraw - '<code>test</code>&nbsp;<a href="http://issue_url/27759">#27759</a>'
+//@ has issue_27759/unstable/index.html
+//@ hasraw - '<code>test</code>&nbsp;<a href="http://issue_url/27759">#27759</a>'
 #[unstable(feature="test", issue="27759")]
 pub mod unstable {
-    // @has issue_27759/unstable/fn.issue.html
-    // @hasraw - '<code>test_function</code>&nbsp;<a href="http://issue_url/12345">#12345</a>'
+    //@ has issue_27759/unstable/fn.issue.html
+    //@ hasraw - '<code>test_function</code>&nbsp;<a href="http://issue_url/12345">#12345</a>'
     #[unstable(feature="test_function", issue="12345")]
     pub fn issue() {}
 }
diff --git a/tests/rustdoc/static-root-path.rs b/tests/rustdoc/static-root-path.rs
index e101d152fee..1bca4e40f44 100644
--- a/tests/rustdoc/static-root-path.rs
+++ b/tests/rustdoc/static-root-path.rs
@@ -1,18 +1,18 @@
 //@ compile-flags:-Z unstable-options --static-root-path /cache/
 
-// @has static_root_path/struct.SomeStruct.html
-// @matchesraw - '"/cache/main-'
-// @!matchesraw - '"\.\./main'
-// @matchesraw - 'data-root-path="\.\./"'
-// @!matchesraw - '"/cache/search-index\.js"'
+//@ has static_root_path/struct.SomeStruct.html
+//@ matchesraw - '"/cache/main-'
+//@ !matchesraw - '"\.\./main'
+//@ matchesraw - 'data-root-path="\.\./"'
+//@ !matchesraw - '"/cache/search-index\.js"'
 pub struct SomeStruct;
 
-// @has src/static_root_path/static-root-path.rs.html
-// @matchesraw - '"/cache/src-script-'
-// @!matchesraw - '"\.\./\.\./src-script'
-// @matchesraw - '"\.\./\.\./src-files.js"'
-// @!matchesraw - '"/cache/src-files\.js"'
+//@ has src/static_root_path/static-root-path.rs.html
+//@ matchesraw - '"/cache/src-script-'
+//@ !matchesraw - '"\.\./\.\./src-script'
+//@ matchesraw - '"\.\./\.\./src-files.js"'
+//@ !matchesraw - '"/cache/src-files\.js"'
 
-// @has settings.html
-// @matchesraw - '/cache/settings-'
-// @!matchesraw - '\../settings'
+//@ has settings.html
+//@ matchesraw - '/cache/settings-'
+//@ !matchesraw - '\../settings'
diff --git a/tests/rustdoc/static.rs b/tests/rustdoc/static.rs
index d127f0c5829..b777aa945ff 100644
--- a/tests/rustdoc/static.rs
+++ b/tests/rustdoc/static.rs
@@ -2,11 +2,11 @@
 
 #![crate_type = "lib"]
 
-// @has static/static.FOO.html '//pre' 'static FOO: usize'
+//@ has static/static.FOO.html '//pre' 'static FOO: usize'
 static FOO: usize = 1;
 
-// @has static/static.BAR.html '//pre' 'pub static BAR: usize'
+//@ has static/static.BAR.html '//pre' 'pub static BAR: usize'
 pub static BAR: usize = 1;
 
-// @has static/static.BAZ.html '//pre' 'pub static mut BAZ: usize'
+//@ has static/static.BAZ.html '//pre' 'pub static mut BAZ: usize'
 pub static mut BAZ: usize = 1;
diff --git a/tests/rustdoc/strip-block-doc-comments-stars.rs b/tests/rustdoc/strip-block-doc-comments-stars.rs
index ca4c93f92e0..329e760b43e 100644
--- a/tests/rustdoc/strip-block-doc-comments-stars.rs
+++ b/tests/rustdoc/strip-block-doc-comments-stars.rs
@@ -3,8 +3,8 @@
 // The goal of this test is to ensure that it won't be generated as a list because
 // block doc comments can have their lines starting with a star.
 
-// @has foo/fn.foo.html
-// @snapshot docblock - '//*[@class="toggle top-doc"]//*[@class="docblock"]'
+//@ has foo/fn.foo.html
+//@ snapshot docblock - '//*[@class="toggle top-doc"]//*[@class="docblock"]'
 /**
  *     a
  */
diff --git a/tests/rustdoc/strip-enum-variant.rs b/tests/rustdoc/strip-enum-variant.rs
index 2512fa34b39..9874588ef59 100644
--- a/tests/rustdoc/strip-enum-variant.rs
+++ b/tests/rustdoc/strip-enum-variant.rs
@@ -1,9 +1,9 @@
-// @has strip_enum_variant/enum.MyThing.html
-// @has - '//code' 'Shown'
-// @!has - '//code' 'NotShown'
-// @has - '//code' '// some variants omitted'
+//@ has strip_enum_variant/enum.MyThing.html
+//@ has - '//code' 'Shown'
+//@ !has - '//code' 'NotShown'
+//@ has - '//code' '// some variants omitted'
 // Also check that `NotShown` isn't displayed in the sidebar.
-// @snapshot no-not-shown - '//*[@class="sidebar-elems"]/section/*[@class="block variant"]'
+//@ snapshot no-not-shown - '//*[@class="sidebar-elems"]/section/*[@class="block variant"]'
 pub enum MyThing {
     Shown,
     #[doc(hidden)]
diff --git a/tests/rustdoc/strip-priv-imports-pass-27104.rs b/tests/rustdoc/strip-priv-imports-pass-27104.rs
index b7198e82a03..ad6b66dbc81 100644
--- a/tests/rustdoc/strip-priv-imports-pass-27104.rs
+++ b/tests/rustdoc/strip-priv-imports-pass-27104.rs
@@ -5,9 +5,9 @@
 // https://github.com/rust-lang/rust/issues/27104
 #![crate_name="issue_27104"]
 
-// @has issue_27104/index.html
-// @!hasraw - 'extern crate std'
-// @!hasraw - 'use std::prelude::'
+//@ has issue_27104/index.html
+//@ !hasraw - 'extern crate std'
+//@ !hasraw - 'use std::prelude::'
 
-// @hasraw - 'pub extern crate empty'
+//@ hasraw - 'pub extern crate empty'
 pub extern crate empty;
diff --git a/tests/rustdoc/struct-arg-pattern.rs b/tests/rustdoc/struct-arg-pattern.rs
index 6f06c8c9c49..af94089bf1a 100644
--- a/tests/rustdoc/struct-arg-pattern.rs
+++ b/tests/rustdoc/struct-arg-pattern.rs
@@ -4,7 +4,7 @@ struct BodyId {
     hir_id: usize,
 }
 
-// @has 'foo/fn.body_owner.html' '//pre[@class="rust item-decl"]' 'pub fn body_owner(_: BodyId)'
+//@ has 'foo/fn.body_owner.html' '//pre[@class="rust item-decl"]' 'pub fn body_owner(_: BodyId)'
 pub fn body_owner(BodyId { hir_id }: BodyId) {
     // ...
 }
diff --git a/tests/rustdoc/struct-field.rs b/tests/rustdoc/struct-field.rs
index 998683bdde7..c04fcb344a1 100644
--- a/tests/rustdoc/struct-field.rs
+++ b/tests/rustdoc/struct-field.rs
@@ -1,9 +1,9 @@
 #![crate_name = "foo"]
 
 
-// @has foo/index.html '//*[@class="docblock"]/p/a[@href="struct.Foo.html#structfield.bar"]' 'Foo::bar'
-// @has foo/index.html '//*[@class="docblock"]/p/a[@href="union.Bar.html#structfield.foo"]' 'Bar::foo'
-// @has foo/index.html '//*[@class="docblock"]/p/a[@href="enum.Uniooon.html#variant.X"]' 'Uniooon::X'
+//@ has foo/index.html '//*[@class="docblock"]/p/a[@href="struct.Foo.html#structfield.bar"]' 'Foo::bar'
+//@ has foo/index.html '//*[@class="docblock"]/p/a[@href="union.Bar.html#structfield.foo"]' 'Bar::foo'
+//@ has foo/index.html '//*[@class="docblock"]/p/a[@href="enum.Uniooon.html#variant.X"]' 'Uniooon::X'
 
 //! Test with [Foo::bar], [Bar::foo], [Uniooon::X]
 
diff --git a/tests/rustdoc/struct-implementations-title.rs b/tests/rustdoc/struct-implementations-title.rs
index 5468796f669..ca5b5c0ee20 100644
--- a/tests/rustdoc/struct-implementations-title.rs
+++ b/tests/rustdoc/struct-implementations-title.rs
@@ -2,8 +2,8 @@
 
 pub struct Struc;
 
-// @has foo/struct.Struc.html
-// @has - '//*[@id="main-content"]/h2[@id="implementations"]' "Implementations"
+//@ has foo/struct.Struc.html
+//@ has - '//*[@id="main-content"]/h2[@id="implementations"]' "Implementations"
 impl Struc {
     pub const S: u64 = 0;
 }
diff --git a/tests/rustdoc/structfields.rs b/tests/rustdoc/structfields.rs
index 7e1cada4b98..b7644f3bb59 100644
--- a/tests/rustdoc/structfields.rs
+++ b/tests/rustdoc/structfields.rs
@@ -1,44 +1,44 @@
-// @has structfields/struct.Foo.html
+//@ has structfields/struct.Foo.html
 pub struct Foo {
-    // @has - //pre "pub a: ()"
+    //@ has - //pre "pub a: ()"
     pub a: (),
-    // @has - //pre "/* private fields */"
-    // @!has - //pre "b: ()"
+    //@ has - //pre "/* private fields */"
+    //@ !has - //pre "b: ()"
     b: (),
-    // @!has - //pre "c: usize"
+    //@ !has - //pre "c: usize"
     #[doc(hidden)]
     c: usize,
-    // @has - //pre "pub d: usize"
+    //@ has - //pre "pub d: usize"
     pub d: usize,
 }
 
-// @has structfields/struct.Bar.html
+//@ has structfields/struct.Bar.html
 pub struct Bar {
-    // @has - //pre "pub a: ()"
+    //@ has - //pre "pub a: ()"
     pub a: (),
-    // @!has - //pre "/* private fields */"
+    //@ !has - //pre "/* private fields */"
 }
 
-// @has structfields/enum.Qux.html
+//@ has structfields/enum.Qux.html
 pub enum Qux {
     Quz {
-        // @has - //pre "a: ()"
+        //@ has - //pre "a: ()"
         a: (),
-        // @!has - //pre "b: ()"
+        //@ !has - //pre "b: ()"
         #[doc(hidden)]
         b: (),
-        // @has - //pre "c: usize"
+        //@ has - //pre "c: usize"
         c: usize,
-        // @has - //pre "/* private fields */"
+        //@ has - //pre "/* private fields */"
     },
 }
 
-// @has structfields/struct.Baz.html //pre "pub struct Baz { /* private fields */ }"
+//@ has structfields/struct.Baz.html //pre "pub struct Baz { /* private fields */ }"
 pub struct Baz {
     x: u8,
     #[doc(hidden)]
     pub y: u8,
 }
 
-// @has structfields/struct.Quux.html //pre "pub struct Quux {}"
+//@ has structfields/struct.Quux.html //pre "pub struct Quux {}"
 pub struct Quux {}
diff --git a/tests/rustdoc/summary-codeblock-31899.rs b/tests/rustdoc/summary-codeblock-31899.rs
index c1b33058c9e..9cbf6492610 100644
--- a/tests/rustdoc/summary-codeblock-31899.rs
+++ b/tests/rustdoc/summary-codeblock-31899.rs
@@ -1,11 +1,11 @@
 // https://github.com/rust-lang/rust/issues/31899
 #![crate_name="issue_31899"]
 
-// @has issue_31899/index.html
-// @hasraw - 'Make this line a bit longer.'
-// @!hasraw - 'rust rust-example-rendered'
-// @!hasraw - 'use ndarray::arr2'
-// @!hasraw - 'prohibited'
+//@ has issue_31899/index.html
+//@ hasraw - 'Make this line a bit longer.'
+//@ !hasraw - 'rust rust-example-rendered'
+//@ !hasraw - 'use ndarray::arr2'
+//@ !hasraw - 'prohibited'
 
 /// A tuple or fixed size array that can be used to index an array.
 /// Make this line a bit longer.
diff --git a/tests/rustdoc/summary-header-46377.rs b/tests/rustdoc/summary-header-46377.rs
index aec74f493d4..11445f0dad6 100644
--- a/tests/rustdoc/summary-header-46377.rs
+++ b/tests/rustdoc/summary-header-46377.rs
@@ -1,6 +1,6 @@
 // https://github.com/rust-lang/rust/issues/46377
 #![crate_name="foo"]
 
-// @has 'foo/index.html' '//*[@class="desc docblock-short"]' 'Check out this struct!'
+//@ has 'foo/index.html' '//*[@class="desc docblock-short"]' 'Check out this struct!'
 /// # Check out this struct!
 pub struct SomeStruct;
diff --git a/tests/rustdoc/summary-reference-link-30366.rs b/tests/rustdoc/summary-reference-link-30366.rs
index 5b9854c5390..b406946ccfb 100644
--- a/tests/rustdoc/summary-reference-link-30366.rs
+++ b/tests/rustdoc/summary-reference-link-30366.rs
@@ -1,4 +1,4 @@
-// @has issue_30366/index.html '//a/@href' 'http://www.rust-lang.org/'
+//@ has issue_30366/index.html '//a/@href' 'http://www.rust-lang.org/'
 
 // https://github.com/rust-lang/rust/issues/30366
 #![crate_name="issue_30366"]
diff --git a/tests/rustdoc/synthetic_auto/auto-trait-lifetimes-56822.rs b/tests/rustdoc/synthetic_auto/auto-trait-lifetimes-56822.rs
index 315b20ddd70..4ed1b6c5913 100644
--- a/tests/rustdoc/synthetic_auto/auto-trait-lifetimes-56822.rs
+++ b/tests/rustdoc/synthetic_auto/auto-trait-lifetimes-56822.rs
@@ -19,8 +19,8 @@ impl<'a, T> MyTrait for Inner<'a, T> {
     type Output = &'a T;
 }
 
-// @has foo/struct.Parser.html
-// @has - '//*[@id="synthetic-implementations-list"]//*[@class="impl"]//h3[@class="code-header"]' \
+//@ has foo/struct.Parser.html
+//@ has - '//*[@id="synthetic-implementations-list"]//*[@class="impl"]//h3[@class="code-header"]' \
 // "impl<'a> Send for Parser<'a>"
 pub struct Parser<'a> {
     field: <Wrapper<Inner<'a, u8>> as MyTrait>::Output
diff --git a/tests/rustdoc/synthetic_auto/basic.rs b/tests/rustdoc/synthetic_auto/basic.rs
index 16b8cce490c..9daf8963997 100644
--- a/tests/rustdoc/synthetic_auto/basic.rs
+++ b/tests/rustdoc/synthetic_auto/basic.rs
@@ -1,8 +1,8 @@
-// @has basic/struct.Foo.html
-// @has - '//h3[@class="code-header"]' 'impl<T> Send for Foo<T>where T: Send'
-// @has - '//h3[@class="code-header"]' 'impl<T> Sync for Foo<T>where T: Sync'
-// @count - '//*[@id="implementations-list"]//*[@class="impl"]' 0
-// @count - '//*[@id="synthetic-implementations-list"]//*[@class="impl"]' 6
+//@ has basic/struct.Foo.html
+//@ has - '//h3[@class="code-header"]' 'impl<T> Send for Foo<T>where T: Send'
+//@ has - '//h3[@class="code-header"]' 'impl<T> Sync for Foo<T>where T: Sync'
+//@ count - '//*[@id="implementations-list"]//*[@class="impl"]' 0
+//@ count - '//*[@id="synthetic-implementations-list"]//*[@class="impl"]' 6
 pub struct Foo<T> {
     field: T,
 }
diff --git a/tests/rustdoc/synthetic_auto/bounds.rs b/tests/rustdoc/synthetic_auto/bounds.rs
index 17528d01c8d..e93639acd07 100644
--- a/tests/rustdoc/synthetic_auto/bounds.rs
+++ b/tests/rustdoc/synthetic_auto/bounds.rs
@@ -1,8 +1,8 @@
 pub struct Outer<T>(Inner<T>);
 pub struct Inner<T>(T);
 
-// @has bounds/struct.Outer.html
-// @has - '//*[@id="synthetic-implementations-list"]//*[@class="impl"]//h3[@class="code-header"]' \
+//@ has bounds/struct.Outer.html
+//@ has - '//*[@id="synthetic-implementations-list"]//*[@class="impl"]//h3[@class="code-header"]' \
 // "impl<T> Unpin for Outer<T>where \
 //     T: for<'any> Trait<A = (), B<'any> = (), X = ()>,"
 
diff --git a/tests/rustdoc/synthetic_auto/complex.rs b/tests/rustdoc/synthetic_auto/complex.rs
index 2722f6d338f..51303658890 100644
--- a/tests/rustdoc/synthetic_auto/complex.rs
+++ b/tests/rustdoc/synthetic_auto/complex.rs
@@ -19,8 +19,8 @@ mod foo {
     }
 }
 
-// @has complex/struct.NotOuter.html
-// @has - '//*[@id="synthetic-implementations-list"]//*[@class="impl"]//h3[@class="code-header"]' \
+//@ has complex/struct.NotOuter.html
+//@ has - '//*[@id="synthetic-implementations-list"]//*[@class="impl"]//h3[@class="code-header"]' \
 // "impl<'a, T, K> Send for Outer<'a, T, K>where 'a: 'static, T: MyTrait<'a>, \
 // K: for<'b> Fn((&'b bool, &'a u8)) -> &'b i8 + ?Sized, <T as MyTrait<'a>>::MyItem: Copy,"
 
diff --git a/tests/rustdoc/synthetic_auto/crate-local.rs b/tests/rustdoc/synthetic_auto/crate-local.rs
index ed01f63f998..b3bd67f839c 100644
--- a/tests/rustdoc/synthetic_auto/crate-local.rs
+++ b/tests/rustdoc/synthetic_auto/crate-local.rs
@@ -2,8 +2,8 @@
 
 pub auto trait Banana {}
 
-// @has crate_local/struct.Peach.html
-// @has - '//h3[@class="code-header"]' 'impl Banana for Peach'
-// @has - '//h3[@class="code-header"]' 'impl Send for Peach'
-// @has - '//h3[@class="code-header"]' 'impl Sync for Peach'
+//@ has crate_local/struct.Peach.html
+//@ has - '//h3[@class="code-header"]' 'impl Banana for Peach'
+//@ has - '//h3[@class="code-header"]' 'impl Send for Peach'
+//@ has - '//h3[@class="code-header"]' 'impl Sync for Peach'
 pub struct Peach;
diff --git a/tests/rustdoc/synthetic_auto/lifetimes.rs b/tests/rustdoc/synthetic_auto/lifetimes.rs
index 23e1efdaeef..c47bd8f065c 100644
--- a/tests/rustdoc/synthetic_auto/lifetimes.rs
+++ b/tests/rustdoc/synthetic_auto/lifetimes.rs
@@ -8,11 +8,11 @@ where
     T: for<'b> Fn(&'b bool) -> &'a u8,
 {}
 
-// @has lifetimes/struct.Foo.html
-// @has - '//*[@id="synthetic-implementations-list"]//*[@class="impl"]//h3[@class="code-header"]' \
+//@ has lifetimes/struct.Foo.html
+//@ has - '//*[@id="synthetic-implementations-list"]//*[@class="impl"]//h3[@class="code-header"]' \
 // "impl<'c, K> Send for Foo<'c, K>where 'c: 'static, K: for<'b> Fn(&'b bool) -> &'c u8,"
 //
-// @has - '//*[@id="synthetic-implementations-list"]//*[@class="impl"]//h3[@class="code-header"]' \
+//@ has - '//*[@id="synthetic-implementations-list"]//*[@class="impl"]//h3[@class="code-header"]' \
 // "impl<'c, K> Sync for Foo<'c, K>where K: Sync"
 pub struct Foo<'c, K: 'c> {
     inner_field: Inner<'c, K>,
diff --git a/tests/rustdoc/synthetic_auto/manual.rs b/tests/rustdoc/synthetic_auto/manual.rs
index 692d68294a7..bbf361a6e59 100644
--- a/tests/rustdoc/synthetic_auto/manual.rs
+++ b/tests/rustdoc/synthetic_auto/manual.rs
@@ -1,12 +1,12 @@
-// @has manual/struct.Foo.html
-// @has - '//*[@id="synthetic-implementations-list"]//*[@class="impl"]//h3[@class="code-header"]' \
+//@ has manual/struct.Foo.html
+//@ has - '//*[@id="synthetic-implementations-list"]//*[@class="impl"]//h3[@class="code-header"]' \
 // 'impl<T> Sync for Foo<T>where T: Sync'
 //
-// @has - '//*[@id="trait-implementations-list"]//*[@class="impl"]//h3[@class="code-header"]' \
+//@ has - '//*[@id="trait-implementations-list"]//*[@class="impl"]//h3[@class="code-header"]' \
 // 'impl<T> Send for Foo<T>'
 //
-// @count - '//*[@id="trait-implementations-list"]//*[@class="impl"]' 1
-// @count - '//*[@id="synthetic-implementations-list"]//*[@class="impl"]' 5
+//@ count - '//*[@id="trait-implementations-list"]//*[@class="impl"]' 1
+//@ count - '//*[@id="synthetic-implementations-list"]//*[@class="impl"]' 5
 pub struct Foo<T> {
     field: T,
 }
diff --git a/tests/rustdoc/synthetic_auto/negative.rs b/tests/rustdoc/synthetic_auto/negative.rs
index 97da2d57424..a2fe6187e8e 100644
--- a/tests/rustdoc/synthetic_auto/negative.rs
+++ b/tests/rustdoc/synthetic_auto/negative.rs
@@ -2,11 +2,11 @@ pub struct Inner<T: Copy> {
     field: *mut T,
 }
 
-// @has negative/struct.Outer.html
-// @has - '//*[@id="synthetic-implementations-list"]//*[@class="impl"]//h3[@class="code-header"]' \
+//@ has negative/struct.Outer.html
+//@ has - '//*[@id="synthetic-implementations-list"]//*[@class="impl"]//h3[@class="code-header"]' \
 // "impl<T> !Send for Outer<T>"
 //
-// @has - '//*[@id="synthetic-implementations-list"]//*[@class="impl"]//h3[@class="code-header"]' \
+//@ has - '//*[@id="synthetic-implementations-list"]//*[@class="impl"]//h3[@class="code-header"]' \
 // "impl<T> !Sync for Outer<T>"
 pub struct Outer<T: Copy> {
     inner_field: Inner<T>,
diff --git a/tests/rustdoc/synthetic_auto/nested.rs b/tests/rustdoc/synthetic_auto/nested.rs
index e4aead71bf2..edd7ca64698 100644
--- a/tests/rustdoc/synthetic_auto/nested.rs
+++ b/tests/rustdoc/synthetic_auto/nested.rs
@@ -8,11 +8,11 @@ where
 {
 }
 
-// @has nested/struct.Foo.html
-// @has - '//*[@id="synthetic-implementations-list"]//*[@class="impl"]//h3[@class="code-header"]' \
+//@ has nested/struct.Foo.html
+//@ has - '//*[@id="synthetic-implementations-list"]//*[@class="impl"]//h3[@class="code-header"]' \
 // 'impl<T> Send for Foo<T>where T: Copy'
 //
-// @has - '//*[@id="synthetic-implementations-list"]//*[@class="impl"]//h3[@class="code-header"]' \
+//@ has - '//*[@id="synthetic-implementations-list"]//*[@class="impl"]//h3[@class="code-header"]' \
 // 'impl<T> Sync for Foo<T>where T: Sync'
 pub struct Foo<T> {
     inner_field: Inner<T>,
diff --git a/tests/rustdoc/synthetic_auto/no-redundancy.rs b/tests/rustdoc/synthetic_auto/no-redundancy.rs
index 64dab429647..7260107d861 100644
--- a/tests/rustdoc/synthetic_auto/no-redundancy.rs
+++ b/tests/rustdoc/synthetic_auto/no-redundancy.rs
@@ -8,8 +8,8 @@ where
 {
 }
 
-// @has no_redundancy/struct.Outer.html
-// @has - '//*[@id="synthetic-implementations-list"]//*[@class="impl"]//h3[@class="code-header"]' \
+//@ has no_redundancy/struct.Outer.html
+//@ has - '//*[@id="synthetic-implementations-list"]//*[@class="impl"]//h3[@class="code-header"]' \
 // "impl<T> Send for Outer<T>where T: Copy + Send"
 pub struct Outer<T> {
     inner_field: Inner<T>,
diff --git a/tests/rustdoc/synthetic_auto/normalize-auto-trait-80233.rs b/tests/rustdoc/synthetic_auto/normalize-auto-trait-80233.rs
index 06498018630..2552bca87d2 100644
--- a/tests/rustdoc/synthetic_auto/normalize-auto-trait-80233.rs
+++ b/tests/rustdoc/synthetic_auto/normalize-auto-trait-80233.rs
@@ -32,8 +32,8 @@ impl<T: Trait3> Trait3 for Vec<T> {
 
 pub struct Struct1 {}
 
-// @has foo/struct.Question.html
-// @has - '//h3[@class="code-header"]' 'impl<T> Send for Question<T>'
+//@ has foo/struct.Question.html
+//@ has - '//h3[@class="code-header"]' 'impl<T> Send for Question<T>'
 pub struct Question<T: Trait1> {
     pub ins: <<Vec<T> as Trait3>::Type3 as Trait2>::Type2,
 }
diff --git a/tests/rustdoc/synthetic_auto/overflow.rs b/tests/rustdoc/synthetic_auto/overflow.rs
index 35a487c764d..634217cfcdd 100644
--- a/tests/rustdoc/synthetic_auto/overflow.rs
+++ b/tests/rustdoc/synthetic_auto/overflow.rs
@@ -20,8 +20,8 @@ enum TyData<I: Interner> {
 
 struct VariableKind<I: Interner>(I::InternedType);
 
-// @has overflow/struct.BoundVarsCollector.html
-// @has - '//h3[@class="code-header"]' "impl<'tcx> Send for BoundVarsCollector<'tcx>"
+//@ has overflow/struct.BoundVarsCollector.html
+//@ has - '//h3[@class="code-header"]' "impl<'tcx> Send for BoundVarsCollector<'tcx>"
 pub struct BoundVarsCollector<'tcx> {
     val: VariableKind<RustInterner<'tcx>>
 }
diff --git a/tests/rustdoc/synthetic_auto/project.rs b/tests/rustdoc/synthetic_auto/project.rs
index f4ede76e6de..10046bff913 100644
--- a/tests/rustdoc/synthetic_auto/project.rs
+++ b/tests/rustdoc/synthetic_auto/project.rs
@@ -22,11 +22,11 @@ where
 {
 }
 
-// @has project/struct.Foo.html
-// @has - '//*[@id="synthetic-implementations-list"]//*[@class="impl"]//h3[@class="code-header"]' \
+//@ has project/struct.Foo.html
+//@ has - '//*[@id="synthetic-implementations-list"]//*[@class="impl"]//h3[@class="code-header"]' \
 // "impl<'c, K> Send for Foo<'c, K>where 'c: 'static, K: MyTrait<MyItem = bool>,"
 //
-// @has - '//*[@id="synthetic-implementations-list"]//*[@class="impl"]//h3[@class="code-header"]' \
+//@ has - '//*[@id="synthetic-implementations-list"]//*[@class="impl"]//h3[@class="code-header"]' \
 // "impl<'c, K> Sync for Foo<'c, K>where 'c: 'static, K: MyTrait, \
 // <K as MyTrait>::MyItem: OtherTrait,"
 pub struct Foo<'c, K: 'c> {
diff --git a/tests/rustdoc/synthetic_auto/self-referential.rs b/tests/rustdoc/synthetic_auto/self-referential.rs
index 145a2b7e00c..f6c7daeec8d 100644
--- a/tests/rustdoc/synthetic_auto/self-referential.rs
+++ b/tests/rustdoc/synthetic_auto/self-referential.rs
@@ -22,8 +22,8 @@ impl<T> Pattern for Wrapper<T> {
 }
 
 
-// @has self_referential/struct.WriteAndThen.html
-// @has - '//*[@id="synthetic-implementations-list"]//*[@class="impl"]//h3[@class="code-header"]' \
+//@ has self_referential/struct.WriteAndThen.html
+//@ has - '//*[@id="synthetic-implementations-list"]//*[@class="impl"]//h3[@class="code-header"]' \
 // "impl<P1> Send for WriteAndThen<P1>where    <P1 as Pattern>::Value: Send"
 pub struct WriteAndThen<P1>(pub P1::Value,pub <Constrain<P1, Wrapper<P1::Value>> as Pattern>::Value)
     where P1: Pattern;
diff --git a/tests/rustdoc/synthetic_auto/send-impl-conditional-60726.rs b/tests/rustdoc/synthetic_auto/send-impl-conditional-60726.rs
index ea10aee58e4..9937628cabe 100644
--- a/tests/rustdoc/synthetic_auto/send-impl-conditional-60726.rs
+++ b/tests/rustdoc/synthetic_auto/send-impl-conditional-60726.rs
@@ -28,10 +28,10 @@ where
     I:InterfaceType<Send=True>
 {}
 
-// @has foo/struct.IntoIter.html
-// @has - '//*[@id="synthetic-implementations-list"]//*[@class="impl"]//h3[@class="code-header"]' \
+//@ has foo/struct.IntoIter.html
+//@ has - '//*[@id="synthetic-implementations-list"]//*[@class="impl"]//h3[@class="code-header"]' \
 // "impl<T> !Send for IntoIter<T>"
-// @has - '//*[@id="synthetic-implementations-list"]//*[@class="impl"]//h3[@class="code-header"]' \
+//@ has - '//*[@id="synthetic-implementations-list"]//*[@class="impl"]//h3[@class="code-header"]' \
 // "impl<T> !Sync for IntoIter<T>"
 pub struct IntoIter<T>{
     hello:DynTrait<FooInterface<T>>,
diff --git a/tests/rustdoc/synthetic_auto/static-region.rs b/tests/rustdoc/synthetic_auto/static-region.rs
index 9dc6211ec20..0b7d048765b 100644
--- a/tests/rustdoc/synthetic_auto/static-region.rs
+++ b/tests/rustdoc/synthetic_auto/static-region.rs
@@ -2,8 +2,8 @@ pub trait OwnedTrait<'a> {
     type Reader;
 }
 
-// @has static_region/struct.Owned.html
-// @has - '//*[@id="synthetic-implementations-list"]//*[@class="impl"]//h3[@class="code-header"]' \
+//@ has static_region/struct.Owned.html
+//@ has - '//*[@id="synthetic-implementations-list"]//*[@class="impl"]//h3[@class="code-header"]' \
 // "impl<T> Send for Owned<T>where <T as OwnedTrait<'static>>::Reader: Send"
 pub struct Owned<T> where T: OwnedTrait<'static> {
     marker: <T as OwnedTrait<'static>>::Reader,
diff --git a/tests/rustdoc/synthetic_auto/supertrait-bounds.rs b/tests/rustdoc/synthetic_auto/supertrait-bounds.rs
index 503e65d0f4f..d96d16786e8 100644
--- a/tests/rustdoc/synthetic_auto/supertrait-bounds.rs
+++ b/tests/rustdoc/synthetic_auto/supertrait-bounds.rs
@@ -7,8 +7,8 @@
 
 pub struct Type<T: Bound>(T);
 
-// @has supertrait_bounds/struct.Type.html
-// @has - '//*[@id="synthetic-implementations-list"]//*[@class="impl"]//h3[@class="code-header"]' \
+//@ has supertrait_bounds/struct.Type.html
+//@ has - '//*[@id="synthetic-implementations-list"]//*[@class="impl"]//h3[@class="code-header"]' \
 // "impl<T> Send for Type<T>where T: Send,"
 
 pub trait Bound: Copy + 'static {}
diff --git a/tests/rustdoc/tab_title.rs b/tests/rustdoc/tab_title.rs
index 8d781b40e46..59914065c91 100644
--- a/tests/rustdoc/tab_title.rs
+++ b/tests/rustdoc/tab_title.rs
@@ -4,42 +4,42 @@
 
 // tests for the html <title> element
 
-// @has foo/index.html '//head/title' 'foo - Rust'
+//@ has foo/index.html '//head/title' 'foo - Rust'
 
-// @has foo/fn.widget_count.html '//head/title' 'widget_count in foo - Rust'
+//@ has foo/fn.widget_count.html '//head/title' 'widget_count in foo - Rust'
 /// blah
 pub fn widget_count() {}
 
-// @has foo/struct.Widget.html '//head/title' 'Widget in foo - Rust'
+//@ has foo/struct.Widget.html '//head/title' 'Widget in foo - Rust'
 pub struct Widget;
 
-// @has foo/constant.ANSWER.html '//head/title' 'ANSWER in foo - Rust'
+//@ has foo/constant.ANSWER.html '//head/title' 'ANSWER in foo - Rust'
 pub const ANSWER: u8 = 42;
 
-// @has foo/blah/index.html '//head/title' 'foo::blah - Rust'
+//@ has foo/blah/index.html '//head/title' 'foo::blah - Rust'
 pub mod blah {
-    // @has foo/blah/struct.Widget.html '//head/title' 'Widget in foo::blah - Rust'
+    //@ has foo/blah/struct.Widget.html '//head/title' 'Widget in foo::blah - Rust'
     pub struct Widget;
 
-    // @has foo/blah/trait.Awesome.html '//head/title' 'Awesome in foo::blah - Rust'
+    //@ has foo/blah/trait.Awesome.html '//head/title' 'Awesome in foo::blah - Rust'
     pub trait Awesome {}
 
-    // @has foo/blah/fn.make_widget.html '//head/title' 'make_widget in foo::blah - Rust'
+    //@ has foo/blah/fn.make_widget.html '//head/title' 'make_widget in foo::blah - Rust'
     pub fn make_widget() {}
 
-    // @has foo/macro.cool_macro.html '//head/title' 'cool_macro in foo - Rust'
+    //@ has foo/macro.cool_macro.html '//head/title' 'cool_macro in foo - Rust'
     #[macro_export]
     macro_rules! cool_macro {
         ($t:tt) => { $t }
     }
 }
 
-// @has foo/keyword.continue.html '//head/title' 'continue - Rust'
+//@ has foo/keyword.continue.html '//head/title' 'continue - Rust'
 #[doc(keyword = "continue")]
 mod continue_keyword {}
 
-// @has foo/primitive.u8.html '//head/title' 'u8 - Rust'
-// @!has - '//head/title' 'foo'
+//@ has foo/primitive.u8.html '//head/title' 'u8 - Rust'
+//@ !has - '//head/title' 'foo'
 #[rustc_doc_primitive = "u8"]
 /// `u8` docs
 mod u8 {}
diff --git a/tests/rustdoc/table-in-docblock.rs b/tests/rustdoc/table-in-docblock.rs
index 194f49f16d0..af376438ce6 100644
--- a/tests/rustdoc/table-in-docblock.rs
+++ b/tests/rustdoc/table-in-docblock.rs
@@ -1,8 +1,8 @@
 #![crate_name = "foo"]
 
-// @has foo/struct.Foo.html
-// @count - '//*[@class="docblock"]/div/table' 2
-// @!has - '//*[@class="docblock"]/table' ''
+//@ has foo/struct.Foo.html
+//@ count - '//*[@class="docblock"]/div/table' 2
+//@ !has - '//*[@class="docblock"]/table' ''
 /// | hello | hello2 |
 /// | ----- | ------ |
 /// | data  | data2  |
diff --git a/tests/rustdoc/task-lists.rs b/tests/rustdoc/task-lists.rs
index c2e7dd60f22..f32bac89a65 100644
--- a/tests/rustdoc/task-lists.rs
+++ b/tests/rustdoc/task-lists.rs
@@ -4,10 +4,10 @@
   // has task_lists/index.html '//li/input[@type="checkbox"]/following-sibling::text()' 'b'
 // Unfortunately that requires LXML, because the built-in xml module doesn't support all of xpath.
 
-// @has task_lists/index.html '//ul/li/input[@type="checkbox"]' ''
-// @has task_lists/index.html '//ul/li/input[@disabled]' ''
-// @has task_lists/index.html '//ul/li' 'a'
-// @has task_lists/index.html '//ul/li' 'b'
+//@ has task_lists/index.html '//ul/li/input[@type="checkbox"]' ''
+//@ has task_lists/index.html '//ul/li/input[@disabled]' ''
+//@ has task_lists/index.html '//ul/li' 'a'
+//@ has task_lists/index.html '//ul/li' 'b'
 //! This tests 'task list' support, a common markdown extension.
 //! - [ ] a
 //! - [x] b
diff --git a/tests/rustdoc/test-lists.rs b/tests/rustdoc/test-lists.rs
index 6a510b9ac5d..661f8f4d6fb 100644
--- a/tests/rustdoc/test-lists.rs
+++ b/tests/rustdoc/test-lists.rs
@@ -1,21 +1,21 @@
 #![crate_name = "foo"]
 
-// @has foo/fn.f.html
-// @has - //ol/li "list"
-// @has - //ol/li/ol/li "fooooo"
-// @has - //ol/li/ol/li "x"
-// @has - //ol/li "foo"
+//@ has foo/fn.f.html
+//@ has - //ol/li "list"
+//@ has - //ol/li/ol/li "fooooo"
+//@ has - //ol/li/ol/li "x"
+//@ has - //ol/li "foo"
 /// 1. list
 ///     1. fooooo
 ///     2. x
 /// 2. foo
 pub fn f() {}
 
-// @has foo/fn.foo2.html
-// @has - //ul/li "normal list"
-// @has - //ul/li/ul/li "sub list"
-// @has - //ul/li/ul/li "new elem still same elem and again same elem!"
-// @has - //ul/li "new big elem"
+//@ has foo/fn.foo2.html
+//@ has - //ul/li "normal list"
+//@ has - //ul/li/ul/li "sub list"
+//@ has - //ul/li/ul/li "new elem still same elem and again same elem!"
+//@ has - //ul/li "new big elem"
 /// * normal list
 ///     * sub list
 ///     * new elem
diff --git a/tests/rustdoc/test-parens.rs b/tests/rustdoc/test-parens.rs
index 9640b96b6b5..4f362740e6f 100644
--- a/tests/rustdoc/test-parens.rs
+++ b/tests/rustdoc/test-parens.rs
@@ -1,5 +1,5 @@
 #![crate_name = "foo"]
 
-// @has foo/fn.foo.html
-// @has - '//pre[@class="rust item-decl"]' "_: &(dyn ToString + 'static)"
+//@ has foo/fn.foo.html
+//@ has - '//pre[@class="rust item-decl"]' "_: &(dyn ToString + 'static)"
 pub fn foo(_: &(ToString + 'static)) {}
diff --git a/tests/rustdoc/test-strikethrough.rs b/tests/rustdoc/test-strikethrough.rs
index 58162153b9e..6b9742e2a2f 100644
--- a/tests/rustdoc/test-strikethrough.rs
+++ b/tests/rustdoc/test-strikethrough.rs
@@ -3,11 +3,11 @@
 // Test that strikethrough works with single and double tildes and that it shows up on
 // the item's dedicated page as well as the parent module's summary of items.
 
-// @has foo/index.html //del 'strike'
-// @has foo/index.html //del 'through'
+//@ has foo/index.html //del 'strike'
+//@ has foo/index.html //del 'through'
 
-// @has foo/fn.f.html //del 'strike'
-// @has foo/fn.f.html //del 'through'
+//@ has foo/fn.f.html //del 'strike'
+//@ has foo/fn.f.html //del 'through'
 
 /// ~~strike~~ ~through~
 pub fn f() {}
diff --git a/tests/rustdoc/thread-local-src.rs b/tests/rustdoc/thread-local-src.rs
index 6de35e3233b..b23a9a48654 100644
--- a/tests/rustdoc/thread-local-src.rs
+++ b/tests/rustdoc/thread-local-src.rs
@@ -1,6 +1,6 @@
 #![crate_name = "foo"]
 
-// @has foo/index.html '//a[@href="../src/foo/thread-local-src.rs.html#1-6"]' 'source'
+//@ has foo/index.html '//a[@href="../src/foo/thread-local-src.rs.html#1-6"]' 'source'
 
-// @has foo/constant.FOO.html '//a[@href="../src/foo/thread-local-src.rs.html#6"]' 'source'
+//@ has foo/constant.FOO.html '//a[@href="../src/foo/thread-local-src.rs.html#6"]' 'source'
 thread_local!(pub static FOO: bool = false);
diff --git a/tests/rustdoc/titles.rs b/tests/rustdoc/titles.rs
index f9da5a81375..bdf950b0a62 100644
--- a/tests/rustdoc/titles.rs
+++ b/tests/rustdoc/titles.rs
@@ -1,57 +1,57 @@
 #![crate_name = "foo"]
 #![feature(rustc_attrs)]
 
-// @matches 'foo/index.html' '//h1' 'Crate foo'
-// @matches 'foo/index.html' '//div[@class="sidebar-crate"]/h2/a' 'foo'
-// @count 'foo/index.html' '//h2[@class="location"]' 0
+//@ matches 'foo/index.html' '//h1' 'Crate foo'
+//@ matches 'foo/index.html' '//div[@class="sidebar-crate"]/h2/a' 'foo'
+//@ count 'foo/index.html' '//h2[@class="location"]' 0
 
-// @matches 'foo/foo_mod/index.html' '//h1' 'Module foo::foo_mod'
-// @matches 'foo/foo_mod/index.html' '//h2[@class="location"]' 'Module foo_mod'
+//@ matches 'foo/foo_mod/index.html' '//h1' 'Module foo::foo_mod'
+//@ matches 'foo/foo_mod/index.html' '//h2[@class="location"]' 'Module foo_mod'
 pub mod foo_mod {
     pub struct __Thing {}
 }
 
 extern "C" {
-    // @matches 'foo/fn.foo_ffn.html' '//h1' 'Function foo::foo_ffn'
+    //@ matches 'foo/fn.foo_ffn.html' '//h1' 'Function foo::foo_ffn'
     pub fn foo_ffn();
 }
 
-// @matches 'foo/fn.foo_fn.html' '//h1' 'Function foo::foo_fn'
+//@ matches 'foo/fn.foo_fn.html' '//h1' 'Function foo::foo_fn'
 pub fn foo_fn() {}
 
-// @matches 'foo/trait.FooTrait.html' '//h1' 'Trait foo::FooTrait'
-// @matches 'foo/trait.FooTrait.html' '//h2[@class="location"]' 'FooTrait'
+//@ matches 'foo/trait.FooTrait.html' '//h1' 'Trait foo::FooTrait'
+//@ matches 'foo/trait.FooTrait.html' '//h2[@class="location"]' 'FooTrait'
 pub trait FooTrait {}
 
-// @matches 'foo/struct.FooStruct.html' '//h1' 'Struct foo::FooStruct'
-// @matches 'foo/struct.FooStruct.html' '//h2[@class="location"]' 'FooStruct'
+//@ matches 'foo/struct.FooStruct.html' '//h1' 'Struct foo::FooStruct'
+//@ matches 'foo/struct.FooStruct.html' '//h2[@class="location"]' 'FooStruct'
 pub struct FooStruct;
 
-// @matches 'foo/enum.FooEnum.html' '//h1' 'Enum foo::FooEnum'
-// @matches 'foo/enum.FooEnum.html' '//h2[@class="location"]' 'FooEnum'
+//@ matches 'foo/enum.FooEnum.html' '//h1' 'Enum foo::FooEnum'
+//@ matches 'foo/enum.FooEnum.html' '//h2[@class="location"]' 'FooEnum'
 pub enum FooEnum {}
 
-// @matches 'foo/type.FooType.html' '//h1' 'Type Alias foo::FooType'
-// @matches 'foo/type.FooType.html' '//h2[@class="location"]' 'FooType'
+//@ matches 'foo/type.FooType.html' '//h1' 'Type Alias foo::FooType'
+//@ matches 'foo/type.FooType.html' '//h2[@class="location"]' 'FooType'
 pub type FooType = FooStruct;
 
-// @matches 'foo/macro.foo_macro.html' '//h1' 'Macro foo::foo_macro'
+//@ matches 'foo/macro.foo_macro.html' '//h1' 'Macro foo::foo_macro'
 #[macro_export]
 macro_rules! foo_macro {
     () => {};
 }
 
-// @matches 'foo/primitive.bool.html' '//h1' 'Primitive Type bool'
+//@ matches 'foo/primitive.bool.html' '//h1' 'Primitive Type bool'
 #[rustc_doc_primitive = "bool"]
 mod bool {}
 
-// @matches 'foo/static.FOO_STATIC.html' '//h1' 'Static foo::FOO_STATIC'
+//@ matches 'foo/static.FOO_STATIC.html' '//h1' 'Static foo::FOO_STATIC'
 pub static FOO_STATIC: FooStruct = FooStruct;
 
 extern "C" {
-    // @matches 'foo/static.FOO_FSTATIC.html' '//h1' 'Static foo::FOO_FSTATIC'
+    //@ matches 'foo/static.FOO_FSTATIC.html' '//h1' 'Static foo::FOO_FSTATIC'
     pub static FOO_FSTATIC: FooStruct;
 }
 
-// @matches 'foo/constant.FOO_CONSTANT.html' '//h1' 'Constant foo::FOO_CONSTANT'
+//@ matches 'foo/constant.FOO_CONSTANT.html' '//h1' 'Constant foo::FOO_CONSTANT'
 pub const FOO_CONSTANT: FooStruct = FooStruct;
diff --git a/tests/rustdoc/toggle-item-contents.rs b/tests/rustdoc/toggle-item-contents.rs
index 1f745043894..1cc1da59105 100644
--- a/tests/rustdoc/toggle-item-contents.rs
+++ b/tests/rustdoc/toggle-item-contents.rs
@@ -1,15 +1,15 @@
 #![allow(unused)]
 
-// @has 'toggle_item_contents/struct.PubStruct.html'
-// @count - '//details[@class="toggle type-contents-toggle"]' 0
+//@ has 'toggle_item_contents/struct.PubStruct.html'
+//@ count - '//details[@class="toggle type-contents-toggle"]' 0
 pub struct PubStruct {
     pub a: usize,
     pub b: usize,
 }
 
-// @has 'toggle_item_contents/struct.BigPubStruct.html'
-// @count - '//details[@class="toggle type-contents-toggle"]' 1
-// @has - '//details[@class="toggle type-contents-toggle"]' 'Show 13 fields'
+//@ has 'toggle_item_contents/struct.BigPubStruct.html'
+//@ count - '//details[@class="toggle type-contents-toggle"]' 1
+//@ has - '//details[@class="toggle type-contents-toggle"]' 'Show 13 fields'
 pub struct BigPubStruct {
     pub a: usize,
     pub b: usize,
@@ -26,9 +26,9 @@ pub struct BigPubStruct {
     pub m: usize,
 }
 
-// @has 'toggle_item_contents/union.BigUnion.html'
-// @count - '//details[@class="toggle type-contents-toggle"]' 1
-// @has - '//details[@class="toggle type-contents-toggle"]' 'Show 13 fields'
+//@ has 'toggle_item_contents/union.BigUnion.html'
+//@ count - '//details[@class="toggle type-contents-toggle"]' 1
+//@ has - '//details[@class="toggle type-contents-toggle"]' 'Show 13 fields'
 pub union BigUnion {
     pub a: usize,
     pub b: usize,
@@ -45,24 +45,24 @@ pub union BigUnion {
     pub m: usize,
 }
 
-// @has 'toggle_item_contents/union.Union.html'
-// @count - '//details[@class="toggle type-contents-toggle"]' 0
+//@ has 'toggle_item_contents/union.Union.html'
+//@ count - '//details[@class="toggle type-contents-toggle"]' 0
 pub union Union {
     pub a: usize,
     pub b: usize,
     pub c: usize,
 }
 
-// @has 'toggle_item_contents/struct.PrivStruct.html'
-// @count - '//details[@class="toggle type-contents-toggle"]' 0
-// @has - '//pre[@class="rust item-decl"]' '/* private fields */'
+//@ has 'toggle_item_contents/struct.PrivStruct.html'
+//@ count - '//details[@class="toggle type-contents-toggle"]' 0
+//@ has - '//pre[@class="rust item-decl"]' '/* private fields */'
 pub struct PrivStruct {
     a: usize,
     b: usize,
 }
 
-// @has 'toggle_item_contents/enum.Enum.html'
-// @!has - '//details[@class="toggle type-contents-toggle"]' ''
+//@ has 'toggle_item_contents/enum.Enum.html'
+//@ !has - '//details[@class="toggle type-contents-toggle"]' ''
 pub enum Enum {
     A, B, C,
     D {
@@ -71,8 +71,8 @@ pub enum Enum {
     }
 }
 
-// @has 'toggle_item_contents/enum.EnumStructVariant.html'
-// @!has - '//details[@class="toggle type-contents-toggle"]' ''
+//@ has 'toggle_item_contents/enum.EnumStructVariant.html'
+//@ !has - '//details[@class="toggle type-contents-toggle"]' ''
 pub enum EnumStructVariant {
     A, B, C,
     D {
@@ -80,15 +80,15 @@ pub enum EnumStructVariant {
     }
 }
 
-// @has 'toggle_item_contents/enum.LargeEnum.html'
-// @count - '//pre[@class="rust item-decl"]//details[@class="toggle type-contents-toggle"]' 1
-// @has - '//pre[@class="rust item-decl"]//details[@class="toggle type-contents-toggle"]' 'Show 13 variants'
+//@ has 'toggle_item_contents/enum.LargeEnum.html'
+//@ count - '//pre[@class="rust item-decl"]//details[@class="toggle type-contents-toggle"]' 1
+//@ has - '//pre[@class="rust item-decl"]//details[@class="toggle type-contents-toggle"]' 'Show 13 variants'
 pub enum LargeEnum {
     A, B, C, D, E, F(u8), G, H, I, J, K, L, M
 }
 
-// @has 'toggle_item_contents/trait.Trait.html'
-// @count - '//details[@class="toggle type-contents-toggle"]' 0
+//@ has 'toggle_item_contents/trait.Trait.html'
+//@ count - '//details[@class="toggle type-contents-toggle"]' 0
 pub trait Trait {
     type A;
     #[must_use]
@@ -96,9 +96,9 @@ pub trait Trait {
     fn bar();
 }
 
-// @has 'toggle_item_contents/trait.GinormousTrait.html'
-// @count - '//details[@class="toggle type-contents-toggle"]' 1
-// @has - '//details[@class="toggle type-contents-toggle"]' 'Show 16 associated items'
+//@ has 'toggle_item_contents/trait.GinormousTrait.html'
+//@ count - '//details[@class="toggle type-contents-toggle"]' 1
+//@ has - '//details[@class="toggle type-contents-toggle"]' 'Show 16 associated items'
 pub trait GinormousTrait {
     type A;
     type B;
@@ -119,9 +119,9 @@ pub trait GinormousTrait {
     fn bar();
 }
 
-// @has 'toggle_item_contents/trait.HugeTrait.html'
-// @count - '//details[@class="toggle type-contents-toggle"]' 1
-// @has - '//details[@class="toggle type-contents-toggle"]' 'Show 12 associated constants and 2 methods'
+//@ has 'toggle_item_contents/trait.HugeTrait.html'
+//@ count - '//details[@class="toggle type-contents-toggle"]' 1
+//@ has - '//details[@class="toggle type-contents-toggle"]' 'Show 12 associated constants and 2 methods'
 pub trait HugeTrait {
     type A;
     const M: usize = 1;
@@ -141,9 +141,9 @@ pub trait HugeTrait {
     fn bar();
 }
 
-// @has 'toggle_item_contents/trait.GiganticTrait.html'
-// @count - '//details[@class="toggle type-contents-toggle"]' 1
-// @has - '//details[@class="toggle type-contents-toggle"]' 'Show 1 associated constant and 1 method'
+//@ has 'toggle_item_contents/trait.GiganticTrait.html'
+//@ count - '//details[@class="toggle type-contents-toggle"]' 1
+//@ has - '//details[@class="toggle type-contents-toggle"]' 'Show 1 associated constant and 1 method'
 pub trait GiganticTrait {
     type A;
     type B;
@@ -162,9 +162,9 @@ pub trait GiganticTrait {
     fn foo();
 }
 
-// @has 'toggle_item_contents/trait.BigTrait.html'
-// @count - '//details[@class="toggle type-contents-toggle"]' 1
-// @has - '//details[@class="toggle type-contents-toggle"]' 'Show 14 methods'
+//@ has 'toggle_item_contents/trait.BigTrait.html'
+//@ count - '//details[@class="toggle type-contents-toggle"]' 1
+//@ has - '//details[@class="toggle type-contents-toggle"]' 'Show 14 methods'
 pub trait BigTrait {
     type A;
     #[must_use]
diff --git a/tests/rustdoc/toggle-method.rs b/tests/rustdoc/toggle-method.rs
index ebc316ca8ad..21057dfeb65 100644
--- a/tests/rustdoc/toggle-method.rs
+++ b/tests/rustdoc/toggle-method.rs
@@ -3,10 +3,10 @@
 // Struct methods with documentation should be wrapped in a <details> toggle with an appropriate
 // summary. Struct methods with no documentation should not be wrapped.
 //
-// @has foo/struct.Foo.html
-// @has - '//details[@class="toggle method-toggle"]//summary//h4[@class="code-header"]' 'is_documented()'
-// @has - '//details[@class="toggle method-toggle"]//*[@class="docblock"]' 'is_documented is documented'
-// @!has - '//details[@class="toggle method-toggle"]//summary//h4[@class="code-header"]' 'not_documented()'
+//@ has foo/struct.Foo.html
+//@ has - '//details[@class="toggle method-toggle"]//summary//h4[@class="code-header"]' 'is_documented()'
+//@ has - '//details[@class="toggle method-toggle"]//*[@class="docblock"]' 'is_documented is documented'
+//@ !has - '//details[@class="toggle method-toggle"]//summary//h4[@class="code-header"]' 'not_documented()'
 pub struct Foo {
 }
 
diff --git a/tests/rustdoc/toggle-trait-fn.rs b/tests/rustdoc/toggle-trait-fn.rs
index 686a174fc8f..44cc6c8632a 100644
--- a/tests/rustdoc/toggle-trait-fn.rs
+++ b/tests/rustdoc/toggle-trait-fn.rs
@@ -3,15 +3,15 @@
 // Trait methods with documentation should be wrapped in a <details> toggle with an appropriate
 // summary. Trait methods with no documentation should not be wrapped.
 //
-// @has foo/trait.Foo.html
-// @has - '//details[@class="toggle"]//summary//h4[@class="code-header"]' 'type Item'
-// @!has - '//details[@class="toggle"]//summary//h4[@class="code-header"]' 'type Item2'
-// @has -  '//details[@class="toggle method-toggle"]//summary//h4[@class="code-header"]' 'is_documented()'
-// @!has - '//details[@class="toggle method-toggle"]//summary//h4[@class="code-header"]' 'not_documented()'
-// @has -  '//details[@class="toggle method-toggle"]//*[@class="docblock"]' 'is_documented is documented'
-// @has -  '//details[@class="toggle method-toggle"]//summary//h4[@class="code-header"]' 'is_documented_optional()'
-// @!has - '//details[@class="toggle method-toggle"]//summary//h4[@class="code-header"]' 'not_documented_optional()'
-// @has -  '//details[@class="toggle method-toggle"]//*[@class="docblock"]' 'is_documented_optional is documented'
+//@ has foo/trait.Foo.html
+//@ has - '//details[@class="toggle"]//summary//h4[@class="code-header"]' 'type Item'
+//@ !has - '//details[@class="toggle"]//summary//h4[@class="code-header"]' 'type Item2'
+//@ has -  '//details[@class="toggle method-toggle"]//summary//h4[@class="code-header"]' 'is_documented()'
+//@ !has - '//details[@class="toggle method-toggle"]//summary//h4[@class="code-header"]' 'not_documented()'
+//@ has -  '//details[@class="toggle method-toggle"]//*[@class="docblock"]' 'is_documented is documented'
+//@ has -  '//details[@class="toggle method-toggle"]//summary//h4[@class="code-header"]' 'is_documented_optional()'
+//@ !has - '//details[@class="toggle method-toggle"]//summary//h4[@class="code-header"]' 'not_documented_optional()'
+//@ has -  '//details[@class="toggle method-toggle"]//*[@class="docblock"]' 'is_documented_optional is documented'
 pub trait Foo {
     /// is documented
     type Item;
diff --git a/tests/rustdoc/trait-alias-mention.rs b/tests/rustdoc/trait-alias-mention.rs
index 102bdca7d35..b6ef926e644 100644
--- a/tests/rustdoc/trait-alias-mention.rs
+++ b/tests/rustdoc/trait-alias-mention.rs
@@ -5,6 +5,6 @@
 
 extern crate trait_alias_mention;
 
-// @has foo/fn.mention_alias_in_bounds.html '//a[@href="../trait_alias_mention/traitalias.SomeAlias.html"]' 'SomeAlias'
+//@ has foo/fn.mention_alias_in_bounds.html '//a[@href="../trait_alias_mention/traitalias.SomeAlias.html"]' 'SomeAlias'
 pub fn mention_alias_in_bounds<T: trait_alias_mention::SomeAlias>() {
 }
diff --git a/tests/rustdoc/trait-impl-items-links-and-anchors.rs b/tests/rustdoc/trait-impl-items-links-and-anchors.rs
index a125fa03679..c1845a33b9d 100644
--- a/tests/rustdoc/trait-impl-items-links-and-anchors.rs
+++ b/tests/rustdoc/trait-impl-items-links-and-anchors.rs
@@ -7,59 +7,59 @@ pub trait MyTrait {
 }
 
 impl MyTrait for String {
-    // @has trait_impl_items_links_and_anchors/trait.MyTrait.html '//*[@id="associatedtype.Assoc-1"]//a[@class="associatedtype"]/@href' #associatedtype.Assoc
-    // @has trait_impl_items_links_and_anchors/trait.MyTrait.html '//*[@id="associatedtype.Assoc-1"]//a[@class="anchor"]/@href' #associatedtype.Assoc-1
+    //@ has trait_impl_items_links_and_anchors/trait.MyTrait.html '//*[@id="associatedtype.Assoc-1"]//a[@class="associatedtype"]/@href' #associatedtype.Assoc
+    //@ has trait_impl_items_links_and_anchors/trait.MyTrait.html '//*[@id="associatedtype.Assoc-1"]//a[@class="anchor"]/@href' #associatedtype.Assoc-1
     type Assoc = ();
-    // @has trait_impl_items_links_and_anchors/trait.MyTrait.html '//*[@id="associatedconstant.VALUE-1"]//a[@class="constant"]/@href' #associatedconstant.VALUE
-    // @has trait_impl_items_links_and_anchors/trait.MyTrait.html '//*[@id="associatedconstant.VALUE-1"]//a[@class="anchor"]/@href' #associatedconstant.VALUE-1
+    //@ has trait_impl_items_links_and_anchors/trait.MyTrait.html '//*[@id="associatedconstant.VALUE-1"]//a[@class="constant"]/@href' #associatedconstant.VALUE
+    //@ has trait_impl_items_links_and_anchors/trait.MyTrait.html '//*[@id="associatedconstant.VALUE-1"]//a[@class="anchor"]/@href' #associatedconstant.VALUE-1
     const VALUE: u32 = 5;
-    // @has trait_impl_items_links_and_anchors/trait.MyTrait.html '//*[@id="method.trait_function"]//a[@class="fn"]/@href' #tymethod.trait_function
-    // @has trait_impl_items_links_and_anchors/trait.MyTrait.html '//*[@id="method.trait_function"]//a[@class="anchor"]/@href' #method.trait_function
+    //@ has trait_impl_items_links_and_anchors/trait.MyTrait.html '//*[@id="method.trait_function"]//a[@class="fn"]/@href' #tymethod.trait_function
+    //@ has trait_impl_items_links_and_anchors/trait.MyTrait.html '//*[@id="method.trait_function"]//a[@class="anchor"]/@href' #method.trait_function
     fn trait_function(&self) {}
-    // @has trait_impl_items_links_and_anchors/trait.MyTrait.html '//*[@id="method.defaulted_override-1"]//a[@class="fn"]/@href' #method.defaulted_override
-    // @has trait_impl_items_links_and_anchors/trait.MyTrait.html '//*[@id="method.defaulted_override-1"]//a[@class="anchor"]/@href' #method.defaulted_override-1
+    //@ has trait_impl_items_links_and_anchors/trait.MyTrait.html '//*[@id="method.defaulted_override-1"]//a[@class="fn"]/@href' #method.defaulted_override
+    //@ has trait_impl_items_links_and_anchors/trait.MyTrait.html '//*[@id="method.defaulted_override-1"]//a[@class="anchor"]/@href' #method.defaulted_override-1
     fn defaulted_override(&self) {}
 }
 
 impl MyTrait for Vec<u8> {
-    // @has trait_impl_items_links_and_anchors/trait.MyTrait.html '//*[@id="associatedtype.Assoc-2"]//a[@class="associatedtype"]/@href' #associatedtype.Assoc
-    // @has trait_impl_items_links_and_anchors/trait.MyTrait.html '//*[@id="associatedtype.Assoc-2"]//a[@class="anchor"]/@href' #associatedtype.Assoc-2
+    //@ has trait_impl_items_links_and_anchors/trait.MyTrait.html '//*[@id="associatedtype.Assoc-2"]//a[@class="associatedtype"]/@href' #associatedtype.Assoc
+    //@ has trait_impl_items_links_and_anchors/trait.MyTrait.html '//*[@id="associatedtype.Assoc-2"]//a[@class="anchor"]/@href' #associatedtype.Assoc-2
     type Assoc = ();
-    // @has trait_impl_items_links_and_anchors/trait.MyTrait.html '//*[@id="associatedconstant.VALUE-2"]//a[@class="constant"]/@href' #associatedconstant.VALUE
-    // @has trait_impl_items_links_and_anchors/trait.MyTrait.html '//*[@id="associatedconstant.VALUE-2"]//a[@class="anchor"]/@href' #associatedconstant.VALUE-2
+    //@ has trait_impl_items_links_and_anchors/trait.MyTrait.html '//*[@id="associatedconstant.VALUE-2"]//a[@class="constant"]/@href' #associatedconstant.VALUE
+    //@ has trait_impl_items_links_and_anchors/trait.MyTrait.html '//*[@id="associatedconstant.VALUE-2"]//a[@class="anchor"]/@href' #associatedconstant.VALUE-2
     const VALUE: u32 = 5;
-    // @has trait_impl_items_links_and_anchors/trait.MyTrait.html '//*[@id="method.trait_function"]//a[@class="fn"]/@href' #tymethod.trait_function
-    // @has trait_impl_items_links_and_anchors/trait.MyTrait.html '//*[@id="method.trait_function-1"]//a[@class="anchor"]/@href' #method.trait_function-1
+    //@ has trait_impl_items_links_and_anchors/trait.MyTrait.html '//*[@id="method.trait_function"]//a[@class="fn"]/@href' #tymethod.trait_function
+    //@ has trait_impl_items_links_and_anchors/trait.MyTrait.html '//*[@id="method.trait_function-1"]//a[@class="anchor"]/@href' #method.trait_function-1
     fn trait_function(&self) {}
-    // @has trait_impl_items_links_and_anchors/trait.MyTrait.html '//*[@id="method.defaulted_override-2"]//a[@class="fn"]/@href' #method.defaulted_override
-    // @has trait_impl_items_links_and_anchors/trait.MyTrait.html '//*[@id="method.defaulted_override-2"]//a[@class="anchor"]/@href' #method.defaulted_override-2
+    //@ has trait_impl_items_links_and_anchors/trait.MyTrait.html '//*[@id="method.defaulted_override-2"]//a[@class="fn"]/@href' #method.defaulted_override
+    //@ has trait_impl_items_links_and_anchors/trait.MyTrait.html '//*[@id="method.defaulted_override-2"]//a[@class="anchor"]/@href' #method.defaulted_override-2
     fn defaulted_override(&self) {}
 }
 
 impl MyTrait for MyStruct {
-    // @has trait_impl_items_links_and_anchors/trait.MyTrait.html '//*[@id="associatedtype.Assoc-3"]//a[@class="anchor"]/@href' #associatedtype.Assoc-3
-    // @has trait_impl_items_links_and_anchors/struct.MyStruct.html '//*[@id="associatedtype.Assoc"]//a[@class="associatedtype"]/@href' trait.MyTrait.html#associatedtype.Assoc
-    // @has trait_impl_items_links_and_anchors/struct.MyStruct.html '//*[@id="associatedtype.Assoc"]//a[@class="anchor"]/@href' #associatedtype.Assoc
+    //@ has trait_impl_items_links_and_anchors/trait.MyTrait.html '//*[@id="associatedtype.Assoc-3"]//a[@class="anchor"]/@href' #associatedtype.Assoc-3
+    //@ has trait_impl_items_links_and_anchors/struct.MyStruct.html '//*[@id="associatedtype.Assoc"]//a[@class="associatedtype"]/@href' trait.MyTrait.html#associatedtype.Assoc
+    //@ has trait_impl_items_links_and_anchors/struct.MyStruct.html '//*[@id="associatedtype.Assoc"]//a[@class="anchor"]/@href' #associatedtype.Assoc
     type Assoc = bool;
-    // @has trait_impl_items_links_and_anchors/trait.MyTrait.html '//*[@id="associatedconstant.VALUE-3"]//a[@class="anchor"]/@href' #associatedconstant.VALUE-3
-    // @has trait_impl_items_links_and_anchors/struct.MyStruct.html '//*[@id="associatedconstant.VALUE"]//a[@class="constant"]/@href' trait.MyTrait.html#associatedconstant.VALUE
-    // @has trait_impl_items_links_and_anchors/struct.MyStruct.html '//*[@id="associatedconstant.VALUE"]//a[@class="anchor"]/@href' #associatedconstant.VALUE
+    //@ has trait_impl_items_links_and_anchors/trait.MyTrait.html '//*[@id="associatedconstant.VALUE-3"]//a[@class="anchor"]/@href' #associatedconstant.VALUE-3
+    //@ has trait_impl_items_links_and_anchors/struct.MyStruct.html '//*[@id="associatedconstant.VALUE"]//a[@class="constant"]/@href' trait.MyTrait.html#associatedconstant.VALUE
+    //@ has trait_impl_items_links_and_anchors/struct.MyStruct.html '//*[@id="associatedconstant.VALUE"]//a[@class="anchor"]/@href' #associatedconstant.VALUE
     const VALUE: u32 = 20;
-    // @has trait_impl_items_links_and_anchors/struct.MyStruct.html '//*[@id="method.trait_function"]//a[@class="fn"]/@href' trait.MyTrait.html#tymethod.trait_function
-    // @has trait_impl_items_links_and_anchors/struct.MyStruct.html '//*[@id="method.trait_function"]//a[@class="anchor"]/@href' #method.trait_function
+    //@ has trait_impl_items_links_and_anchors/struct.MyStruct.html '//*[@id="method.trait_function"]//a[@class="fn"]/@href' trait.MyTrait.html#tymethod.trait_function
+    //@ has trait_impl_items_links_and_anchors/struct.MyStruct.html '//*[@id="method.trait_function"]//a[@class="anchor"]/@href' #method.trait_function
     fn trait_function(&self) {}
-    // @has trait_impl_items_links_and_anchors/struct.MyStruct.html '//*[@id="method.defaulted_override"]//a[@class="fn"]/@href' trait.MyTrait.html#method.defaulted_override
-    // @has trait_impl_items_links_and_anchors/struct.MyStruct.html '//*[@id="method.defaulted_override"]//a[@class="anchor"]/@href' #method.defaulted_override
+    //@ has trait_impl_items_links_and_anchors/struct.MyStruct.html '//*[@id="method.defaulted_override"]//a[@class="fn"]/@href' trait.MyTrait.html#method.defaulted_override
+    //@ has trait_impl_items_links_and_anchors/struct.MyStruct.html '//*[@id="method.defaulted_override"]//a[@class="anchor"]/@href' #method.defaulted_override
     fn defaulted_override(&self) {}
-    // @has trait_impl_items_links_and_anchors/struct.MyStruct.html '//*[@id="method.defaulted"]//a[@class="fn"]/@href' trait.MyTrait.html#method.defaulted
-    // @has trait_impl_items_links_and_anchors/struct.MyStruct.html '//*[@id="method.defaulted"]//a[@class="anchor"]/@href' #method.defaulted
+    //@ has trait_impl_items_links_and_anchors/struct.MyStruct.html '//*[@id="method.defaulted"]//a[@class="fn"]/@href' trait.MyTrait.html#method.defaulted
+    //@ has trait_impl_items_links_and_anchors/struct.MyStruct.html '//*[@id="method.defaulted"]//a[@class="anchor"]/@href' #method.defaulted
 }
 
 pub struct MyStruct;
 
 // We check that associated items with default values aren't generated in the implementors list.
 impl MyTrait for (u8, u8) {
-    // @!has trait_impl_items_links_and_anchors/trait.MyTrait.html '//div[@id="associatedconstant.VALUE-4"]' ''
+    //@ !has trait_impl_items_links_and_anchors/trait.MyTrait.html '//div[@id="associatedconstant.VALUE-4"]' ''
     type Assoc = bool;
     fn trait_function(&self) {}
 }
diff --git a/tests/rustdoc/trait-impl.rs b/tests/rustdoc/trait-impl.rs
index 9cf3226f738..c65eecc4edf 100644
--- a/tests/rustdoc/trait-impl.rs
+++ b/tests/rustdoc/trait-impl.rs
@@ -21,25 +21,25 @@ pub trait Trait {
 pub struct Struct;
 
 impl Trait for Struct {
-    // @has trait_impl/struct.Struct.html '//*[@id="method.a"]/../../div[@class="docblock"]' 'Some long docs'
-    // @!has - '//*[@id="method.a"]/../../div[@class="docblock"]' 'link will be added'
-    // @has - '//*[@id="method.a"]/../../div[@class="docblock"]/a' 'Read more'
-    // @has - '//*[@id="method.a"]/../../div[@class="docblock"]/a/@href' 'trait.Trait.html#tymethod.a'
+    //@ has trait_impl/struct.Struct.html '//*[@id="method.a"]/../../div[@class="docblock"]' 'Some long docs'
+    //@ !has - '//*[@id="method.a"]/../../div[@class="docblock"]' 'link will be added'
+    //@ has - '//*[@id="method.a"]/../../div[@class="docblock"]/a' 'Read more'
+    //@ has - '//*[@id="method.a"]/../../div[@class="docblock"]/a/@href' 'trait.Trait.html#tymethod.a'
     fn a() {}
 
-    // @has - '//*[@id="method.b"]/../../div[@class="docblock"]' 'These docs contain'
-    // @has - '//*[@id="method.b"]/../../div[@class="docblock"]/a' 'reference link'
-    // @has - '//*[@id="method.b"]/../../div[@class="docblock"]/a/@href' 'https://example.com'
+    //@ has - '//*[@id="method.b"]/../../div[@class="docblock"]' 'These docs contain'
+    //@ has - '//*[@id="method.b"]/../../div[@class="docblock"]/a' 'reference link'
+    //@ has - '//*[@id="method.b"]/../../div[@class="docblock"]/a/@href' 'https://example.com'
     fn b() {}
 
-    // @!has - '//*[@id="method.c"]/../../div[@class="docblock"]' 'code block'
-    // @has - '//*[@id="method.c"]/../../div[@class="docblock"]/a' 'Read more'
-    // @has - '//*[@id="method.c"]/../../div[@class="docblock"]/a/@href' 'trait.Trait.html#tymethod.c'
+    //@ !has - '//*[@id="method.c"]/../../div[@class="docblock"]' 'code block'
+    //@ has - '//*[@id="method.c"]/../../div[@class="docblock"]/a' 'Read more'
+    //@ has - '//*[@id="method.c"]/../../div[@class="docblock"]/a/@href' 'trait.Trait.html#tymethod.c'
     fn c() {}
 
-    // @has - '//*[@id="method.d"]/../../div[@class="docblock"]' 'Escaped formatting a*b*c* works'
-    // @!has - '//*[@id="method.d"]/../../div[@class="docblock"]/em' ''
+    //@ has - '//*[@id="method.d"]/../../div[@class="docblock"]' 'Escaped formatting a*b*c* works'
+    //@ !has - '//*[@id="method.d"]/../../div[@class="docblock"]/em' ''
     fn d() {}
 
-    // @has - '//*[@id="impl-Trait-for-Struct"]/h3//a/@href' 'trait.Trait.html'
+    //@ has - '//*[@id="impl-Trait-for-Struct"]/h3//a/@href' 'trait.Trait.html'
 }
diff --git a/tests/rustdoc/trait-implementations-duplicate-self-45584.rs b/tests/rustdoc/trait-implementations-duplicate-self-45584.rs
index 77b8c05f2fb..8eb6d007525 100644
--- a/tests/rustdoc/trait-implementations-duplicate-self-45584.rs
+++ b/tests/rustdoc/trait-implementations-duplicate-self-45584.rs
@@ -4,14 +4,14 @@
 
 pub trait Bar<T, U> {}
 
-// @has 'foo/struct.Foo1.html'
+//@ has 'foo/struct.Foo1.html'
 pub struct Foo1;
-// @count - '//*[@id="trait-implementations-list"]//*[@class="impl"]' 1
-// @has - '//*[@class="impl"]' "impl Bar<Foo1, &'static Foo1> for Foo1"
+//@ count - '//*[@id="trait-implementations-list"]//*[@class="impl"]' 1
+//@ has - '//*[@class="impl"]' "impl Bar<Foo1, &'static Foo1> for Foo1"
 impl Bar<Foo1, &'static Foo1> for Foo1 {}
 
-// @has 'foo/struct.Foo2.html'
+//@ has 'foo/struct.Foo2.html'
 pub struct Foo2;
-// @count - '//*[@id="trait-implementations-list"]//*[@class="impl"]' 1
-// @has - '//*[@class="impl"]' "impl Bar<&'static Foo2, Foo2> for u8"
+//@ count - '//*[@id="trait-implementations-list"]//*[@class="impl"]' 1
+//@ has - '//*[@class="impl"]' "impl Bar<&'static Foo2, Foo2> for u8"
 impl Bar<&'static Foo2, Foo2> for u8 {}
diff --git a/tests/rustdoc/trait-item-info.rs b/tests/rustdoc/trait-item-info.rs
index 53a4c6917b9..f158bba9893 100644
--- a/tests/rustdoc/trait-item-info.rs
+++ b/tests/rustdoc/trait-item-info.rs
@@ -7,16 +7,16 @@
 
 #![unstable(feature = "test", issue = "none")]
 
-// @has 'foo/trait.Foo.html'
+//@ has 'foo/trait.Foo.html'
 
 #[stable(feature = "rust2", since = "2.2.2")]
 pub trait Foo {
-    // @has - '//div[@class="methods"]/span[@class="item-info"]' 'bla'
+    //@ has - '//div[@class="methods"]/span[@class="item-info"]' 'bla'
     // Should not be in a `<details>` because there is no doc.
     #[unstable(feature = "bla", reason = "bla", issue = "111")]
     fn bla() {}
 
-    // @has - '//details[@class="toggle method-toggle"]/summary/span[@class="item-info"]' 'bar'
+    //@ has - '//details[@class="toggle method-toggle"]/summary/span[@class="item-info"]' 'bar'
     // Should have a `<summary>` in the `<details>` containing the unstable info.
     /// doc
     #[unstable(feature = "bar", reason = "bla", issue = "222")]
diff --git a/tests/rustdoc/trait-object-safe.rs b/tests/rustdoc/trait-object-safe.rs
index 8b028ad2e13..b4e986c8f69 100644
--- a/tests/rustdoc/trait-object-safe.rs
+++ b/tests/rustdoc/trait-object-safe.rs
@@ -1,27 +1,27 @@
 #![crate_name = "foo"]
 
-// @has 'foo/trait.Unsafe.html'
-// @has - '//*[@class="object-safety-info"]' 'This trait is not object safe.'
-// @has - '//*[@id="object-safety"]' 'Object Safety'
+//@ has 'foo/trait.Unsafe.html'
+//@ has - '//*[@class="object-safety-info"]' 'This trait is not object safe.'
+//@ has - '//*[@id="object-safety"]' 'Object Safety'
 pub trait Unsafe {
     fn foo() -> Self;
 }
 
-// @has 'foo/trait.Unsafe2.html'
-// @has - '//*[@class="object-safety-info"]' 'This trait is not object safe.'
-// @has - '//*[@id="object-safety"]' 'Object Safety'
+//@ has 'foo/trait.Unsafe2.html'
+//@ has - '//*[@class="object-safety-info"]' 'This trait is not object safe.'
+//@ has - '//*[@id="object-safety"]' 'Object Safety'
 pub trait Unsafe2<T> {
     fn foo(i: T);
 }
 
-// @has 'foo/trait.Safe.html'
-// @!has - '//*[@class="object-safety-info"]' ''
-// @!has - '//*[@id="object-safety"]' ''
+//@ has 'foo/trait.Safe.html'
+//@ !has - '//*[@class="object-safety-info"]' ''
+//@ !has - '//*[@id="object-safety"]' ''
 pub trait Safe {
     fn foo(&self);
 }
 
-// @has 'foo/struct.Foo.html'
-// @count - '//*[@class="object-safety-info"]' 0
-// @count - '//*[@id="object-safety"]' 0
+//@ has 'foo/struct.Foo.html'
+//@ count - '//*[@class="object-safety-info"]' 0
+//@ count - '//*[@id="object-safety"]' 0
 pub struct Foo;
diff --git a/tests/rustdoc/trait-self-link.rs b/tests/rustdoc/trait-self-link.rs
index e311dadff0e..fe69158b1a2 100644
--- a/tests/rustdoc/trait-self-link.rs
+++ b/tests/rustdoc/trait-self-link.rs
@@ -1,4 +1,4 @@
-// @has trait_self_link/trait.Foo.html //a/@href trait.Foo.html
+//@ has trait_self_link/trait.Foo.html //a/@href trait.Foo.html
 pub trait Foo {}
 
 pub struct Bar;
diff --git a/tests/rustdoc/trait-src-link.rs b/tests/rustdoc/trait-src-link.rs
index a6367efba61..7c3afb7d7d3 100644
--- a/tests/rustdoc/trait-src-link.rs
+++ b/tests/rustdoc/trait-src-link.rs
@@ -1,26 +1,26 @@
 #![crate_name = "quix"]
 pub trait Foo {
-    // @has quix/trait.Foo.html '//a[@href="../src/quix/trait-src-link.rs.html#4"]' 'source'
+    //@ has quix/trait.Foo.html '//a[@href="../src/quix/trait-src-link.rs.html#4"]' 'source'
     fn required();
 
-    // @has quix/trait.Foo.html '//a[@href="../src/quix/trait-src-link.rs.html#7"]' 'source'
+    //@ has quix/trait.Foo.html '//a[@href="../src/quix/trait-src-link.rs.html#7"]' 'source'
     fn provided() {}
 }
 
 pub struct Bar;
 
 impl Foo for Bar {
-    // @has quix/struct.Bar.html '//a[@href="../src/quix/trait-src-link.rs.html#14"]' 'source'
+    //@ has quix/struct.Bar.html '//a[@href="../src/quix/trait-src-link.rs.html#14"]' 'source'
     fn required() {}
-    // @has quix/struct.Bar.html '//a[@href="../src/quix/trait-src-link.rs.html#7"]' 'source'
+    //@ has quix/struct.Bar.html '//a[@href="../src/quix/trait-src-link.rs.html#7"]' 'source'
 }
 
 pub struct Baz;
 
 impl Foo for Baz {
-    // @has quix/struct.Baz.html '//a[@href="../src/quix/trait-src-link.rs.html#22"]' 'source'
+    //@ has quix/struct.Baz.html '//a[@href="../src/quix/trait-src-link.rs.html#22"]' 'source'
     fn required() {}
 
-    // @has quix/struct.Baz.html '//a[@href="../src/quix/trait-src-link.rs.html#25"]' 'source'
+    //@ has quix/struct.Baz.html '//a[@href="../src/quix/trait-src-link.rs.html#25"]' 'source'
     fn provided() {}
 }
diff --git a/tests/rustdoc/trait-visibility.rs b/tests/rustdoc/trait-visibility.rs
index af9750ac8d0..bdb71a1bb45 100644
--- a/tests/rustdoc/trait-visibility.rs
+++ b/tests/rustdoc/trait-visibility.rs
@@ -4,5 +4,5 @@
 
 extern crate trait_visibility;
 
-// @has foo/trait.Bar.html '//a[@href="#tymethod.foo"]/..' "fn foo()"
+//@ has foo/trait.Bar.html '//a[@href="#tymethod.foo"]/..' "fn foo()"
 pub use trait_visibility::Bar;
diff --git a/tests/rustdoc/trait_alias.rs b/tests/rustdoc/trait_alias.rs
index 5c3f82c6b3c..bfdb9d40e2d 100644
--- a/tests/rustdoc/trait_alias.rs
+++ b/tests/rustdoc/trait_alias.rs
@@ -4,23 +4,23 @@
 
 use std::fmt::Debug;
 
-// @has foo/all.html '//a[@href="traitalias.CopyAlias.html"]' 'CopyAlias'
-// @has foo/all.html '//a[@href="traitalias.Alias2.html"]' 'Alias2'
-// @has foo/all.html '//a[@href="traitalias.Foo.html"]' 'Foo'
+//@ has foo/all.html '//a[@href="traitalias.CopyAlias.html"]' 'CopyAlias'
+//@ has foo/all.html '//a[@href="traitalias.Alias2.html"]' 'Alias2'
+//@ has foo/all.html '//a[@href="traitalias.Foo.html"]' 'Foo'
 
-// @has foo/index.html '//h2[@id="trait-aliases"]' 'Trait Aliases'
-// @has foo/index.html '//a[@class="traitalias"]' 'CopyAlias'
-// @has foo/index.html '//a[@class="traitalias"]' 'Alias2'
-// @has foo/index.html '//a[@class="traitalias"]' 'Foo'
+//@ has foo/index.html '//h2[@id="trait-aliases"]' 'Trait Aliases'
+//@ has foo/index.html '//a[@class="traitalias"]' 'CopyAlias'
+//@ has foo/index.html '//a[@class="traitalias"]' 'Alias2'
+//@ has foo/index.html '//a[@class="traitalias"]' 'Foo'
 
-// @has foo/traitalias.CopyAlias.html
-// @has - '//section[@id="main-content"]/pre[@class="rust item-decl"]' 'trait CopyAlias = Copy;'
+//@ has foo/traitalias.CopyAlias.html
+//@ has - '//section[@id="main-content"]/pre[@class="rust item-decl"]' 'trait CopyAlias = Copy;'
 pub trait CopyAlias = Copy;
-// @has foo/traitalias.Alias2.html
-// @has - '//section[@id="main-content"]/pre[@class="rust item-decl"]' 'trait Alias2 = Copy + Debug;'
+//@ has foo/traitalias.Alias2.html
+//@ has - '//section[@id="main-content"]/pre[@class="rust item-decl"]' 'trait Alias2 = Copy + Debug;'
 pub trait Alias2 = Copy + Debug;
-// @has foo/traitalias.Foo.html
-// @has - '//section[@id="main-content"]/pre[@class="rust item-decl"]' 'trait Foo<T> = Into<T> + Debug;'
+//@ has foo/traitalias.Foo.html
+//@ has - '//section[@id="main-content"]/pre[@class="rust item-decl"]' 'trait Foo<T> = Into<T> + Debug;'
 pub trait Foo<T> = Into<T> + Debug;
-// @has foo/fn.bar.html '//a[@href="traitalias.Alias2.html"]' 'Alias2'
+//@ has foo/fn.bar.html '//a[@href="traitalias.Alias2.html"]' 'Alias2'
 pub fn bar<T>() where T: Alias2 {}
diff --git a/tests/rustdoc/traits-in-bodies-private.rs b/tests/rustdoc/traits-in-bodies-private.rs
index 5a21b8b2625..a3455b3255b 100644
--- a/tests/rustdoc/traits-in-bodies-private.rs
+++ b/tests/rustdoc/traits-in-bodies-private.rs
@@ -3,8 +3,8 @@
 
 //@ compile-flags:--document-private-items
 
-// @has traits_in_bodies_private/struct.SomeStruct.html
-// @!has - '//code' 'impl HiddenTrait for SomeStruct'
+//@ has traits_in_bodies_private/struct.SomeStruct.html
+//@ !has - '//code' 'impl HiddenTrait for SomeStruct'
 pub struct SomeStruct;
 
 fn __implementation_details() {
diff --git a/tests/rustdoc/traits-in-bodies.rs b/tests/rustdoc/traits-in-bodies.rs
index a65dd7a546c..a6f6158afa4 100644
--- a/tests/rustdoc/traits-in-bodies.rs
+++ b/tests/rustdoc/traits-in-bodies.rs
@@ -3,8 +3,8 @@
 
 pub struct Bounded<T: Clone>(T);
 
-// @has traits_in_bodies/struct.SomeStruct.html
-// @has - '//h3[@class="code-header"]' 'impl Clone for SomeStruct'
+//@ has traits_in_bodies/struct.SomeStruct.html
+//@ has - '//h3[@class="code-header"]' 'impl Clone for SomeStruct'
 pub struct SomeStruct;
 
 fn asdf() -> Bounded<SomeStruct> {
@@ -17,8 +17,8 @@ fn asdf() -> Bounded<SomeStruct> {
     Bounded(SomeStruct)
 }
 
-// @has traits_in_bodies/struct.Point.html
-// @has - '//h3[@class="code-header"]' 'impl Copy for Point'
+//@ has traits_in_bodies/struct.Point.html
+//@ has - '//h3[@class="code-header"]' 'impl Copy for Point'
 #[derive(Clone)]
 pub struct Point {
     x: i32,
@@ -30,8 +30,8 @@ const _FOO: () = {
     ()
 };
 
-// @has traits_in_bodies/struct.Inception.html
-// @has - '//h3[@class="code-header"]' 'impl Clone for Inception'
+//@ has traits_in_bodies/struct.Inception.html
+//@ has - '//h3[@class="code-header"]' 'impl Clone for Inception'
 pub struct Inception;
 
 static _BAR: usize = {
diff --git a/tests/rustdoc/tuple-struct-fields-doc.rs b/tests/rustdoc/tuple-struct-fields-doc.rs
index 2836ddedc2b..55ee6662139 100644
--- a/tests/rustdoc/tuple-struct-fields-doc.rs
+++ b/tests/rustdoc/tuple-struct-fields-doc.rs
@@ -1,14 +1,14 @@
 #![crate_name = "foo"]
 
-// @has foo/struct.Foo.html
-// @has - '//h2[@id="fields"]' 'Tuple Fields'
-// @has - '//div[@class="sidebar-elems"]//h3/a[@href="#fields"]' 'Tuple Fields'
-// @has - '//*[@id="structfield.0"]' '0: u32'
-// @has - '//*[@id="main-content"]/div[@class="docblock"]' 'hello'
-// @!has - '//*[@id="structfield.1"]' ''
-// @has - '//*[@id="structfield.2"]' '2: char'
-// @has - '//*[@id="structfield.3"]' '3: i8'
-// @has - '//*[@id="main-content"]/div[@class="docblock"]' 'not hello'
+//@ has foo/struct.Foo.html
+//@ has - '//h2[@id="fields"]' 'Tuple Fields'
+//@ has - '//div[@class="sidebar-elems"]//h3/a[@href="#fields"]' 'Tuple Fields'
+//@ has - '//*[@id="structfield.0"]' '0: u32'
+//@ has - '//*[@id="main-content"]/div[@class="docblock"]' 'hello'
+//@ !has - '//*[@id="structfield.1"]' ''
+//@ has - '//*[@id="structfield.2"]' '2: char'
+//@ has - '//*[@id="structfield.3"]' '3: i8'
+//@ has - '//*[@id="main-content"]/div[@class="docblock"]' 'not hello'
 pub struct Foo(
     /// hello
     pub u32,
@@ -18,15 +18,15 @@ pub struct Foo(
     pub i8,
 );
 
-// @has foo/enum.Bar.html
-// @has - '//pre[@class="rust item-decl"]' 'BarVariant(String),'
-// @matches - '//*[@id="variant.BarVariant.fields"]/h4' '^Tuple Fields$'
-// @has - '//*[@id="variant.BarVariant.field.0"]' '0: String'
-// @has - '//*[@id="variant.BarVariant.fields"]//*[@class="docblock"]' 'Hello docs'
-// @matches - '//*[@id="variant.FooVariant.fields"]/h4' '^Fields$'
-// @has - '//*[@id="variant.BazVariant.fields"]//*[@class="docblock"]' 'dox'
-// @has - '//*[@id="variant.OtherVariant.fields"]//*[@class="docblock"]' 'dox'
-// @!matches - '//*[@id="variant.QuuxVariant.fields"]/h4' '^Tuple Fields$'
+//@ has foo/enum.Bar.html
+//@ has - '//pre[@class="rust item-decl"]' 'BarVariant(String),'
+//@ matches - '//*[@id="variant.BarVariant.fields"]/h4' '^Tuple Fields$'
+//@ has - '//*[@id="variant.BarVariant.field.0"]' '0: String'
+//@ has - '//*[@id="variant.BarVariant.fields"]//*[@class="docblock"]' 'Hello docs'
+//@ matches - '//*[@id="variant.FooVariant.fields"]/h4' '^Fields$'
+//@ has - '//*[@id="variant.BazVariant.fields"]//*[@class="docblock"]' 'dox'
+//@ has - '//*[@id="variant.OtherVariant.fields"]//*[@class="docblock"]' 'dox'
+//@ !matches - '//*[@id="variant.QuuxVariant.fields"]/h4' '^Tuple Fields$'
 pub enum Bar {
     BarVariant(
         /// Hello docs
diff --git a/tests/rustdoc/tuple-struct-where-clause-34928.rs b/tests/rustdoc/tuple-struct-where-clause-34928.rs
index 909b9146893..804663a86f4 100644
--- a/tests/rustdoc/tuple-struct-where-clause-34928.rs
+++ b/tests/rustdoc/tuple-struct-where-clause-34928.rs
@@ -4,5 +4,5 @@
 
 pub trait Bar {}
 
-// @has foo/struct.Foo.html '//pre' 'pub struct Foo<T>(pub T) where T: Bar;'
+//@ has foo/struct.Foo.html '//pre' 'pub struct Foo<T>(pub T) where T: Bar;'
 pub struct Foo<T>(pub T) where T: Bar;
diff --git a/tests/rustdoc/tuples.rs b/tests/rustdoc/tuples.rs
index 0ea5b5bfac9..a0c0ad7cd9a 100644
--- a/tests/rustdoc/tuples.rs
+++ b/tests/rustdoc/tuples.rs
@@ -1,20 +1,20 @@
 #![crate_name = "foo"]
 
-// @has foo/fn.tuple0.html //pre 'pub fn tuple0(x: ())'
-// @snapshot link_unit - '//pre[@class="rust item-decl"]/code'
+//@ has foo/fn.tuple0.html //pre 'pub fn tuple0(x: ())'
+//@ snapshot link_unit - '//pre[@class="rust item-decl"]/code'
 pub fn tuple0(x: ()) -> () { x }
-// @has foo/fn.tuple1.html //pre 'pub fn tuple1(x: (i32,)) -> (i32,)'
-// @snapshot link1_i32 - '//pre[@class="rust item-decl"]/code'
+//@ has foo/fn.tuple1.html //pre 'pub fn tuple1(x: (i32,)) -> (i32,)'
+//@ snapshot link1_i32 - '//pre[@class="rust item-decl"]/code'
 pub fn tuple1(x: (i32,)) -> (i32,) { x }
-// @has foo/fn.tuple2.html //pre 'pub fn tuple2(x: (i32, i32)) -> (i32, i32)'
-// @snapshot link2_i32 - '//pre[@class="rust item-decl"]/code'
+//@ has foo/fn.tuple2.html //pre 'pub fn tuple2(x: (i32, i32)) -> (i32, i32)'
+//@ snapshot link2_i32 - '//pre[@class="rust item-decl"]/code'
 pub fn tuple2(x: (i32, i32)) -> (i32, i32) { x }
-// @has foo/fn.tuple1_t.html //pre 'pub fn tuple1_t<T>(x: (T,)) -> (T,)'
-// @snapshot link1_t - '//pre[@class="rust item-decl"]/code'
+//@ has foo/fn.tuple1_t.html //pre 'pub fn tuple1_t<T>(x: (T,)) -> (T,)'
+//@ snapshot link1_t - '//pre[@class="rust item-decl"]/code'
 pub fn tuple1_t<T>(x: (T,)) -> (T,) { x }
-// @has foo/fn.tuple2_t.html //pre 'pub fn tuple2_t<T>(x: (T, T)) -> (T, T)'
-// @snapshot link2_t - '//pre[@class="rust item-decl"]/code'
+//@ has foo/fn.tuple2_t.html //pre 'pub fn tuple2_t<T>(x: (T, T)) -> (T, T)'
+//@ snapshot link2_t - '//pre[@class="rust item-decl"]/code'
 pub fn tuple2_t<T>(x: (T, T)) -> (T, T) { x }
-// @has foo/fn.tuple2_tu.html //pre 'pub fn tuple2_tu<T, U>(x: (T, U)) -> (T, U)'
-// @snapshot link2_tu - '//pre[@class="rust item-decl"]/code'
+//@ has foo/fn.tuple2_tu.html //pre 'pub fn tuple2_tu<T, U>(x: (T, U)) -> (T, U)'
+//@ snapshot link2_tu - '//pre[@class="rust item-decl"]/code'
 pub fn tuple2_tu<T, U>(x: (T, U)) -> (T, U) { x }
diff --git a/tests/rustdoc/type-alias/cross-crate-115718.rs b/tests/rustdoc/type-alias/cross-crate-115718.rs
index 3d94be5ddbd..578d2190c5e 100644
--- a/tests/rustdoc/type-alias/cross-crate-115718.rs
+++ b/tests/rustdoc/type-alias/cross-crate-115718.rs
@@ -23,12 +23,12 @@ impl MyTrait3 for MyType {
     fn method_trait_3() {}
 }
 
-// @hasraw 'type.impl/parent_crate_115718/struct.MyStruct.js' 'method_trait_1'
-// @hasraw 'type.impl/parent_crate_115718/struct.MyStruct.js' 'method_trait_2'
+//@ hasraw 'type.impl/parent_crate_115718/struct.MyStruct.js' 'method_trait_1'
+//@ hasraw 'type.impl/parent_crate_115718/struct.MyStruct.js' 'method_trait_2'
 // Avoid duplicating these docs.
-// @!hasraw 'foo/type.MyType.html' 'method_trait_1'
-// @!hasraw 'foo/type.MyType.html' 'method_trait_2'
+//@ !hasraw 'foo/type.MyType.html' 'method_trait_1'
+//@ !hasraw 'foo/type.MyType.html' 'method_trait_2'
 // The one made directly on the type alias should be attached to the HTML instead.
-// @!hasraw 'type.impl/parent_crate_115718/struct.MyStruct.js' 'method_trait_3'
-// @hasraw 'foo/type.MyType.html' 'method_trait_3'
+//@ !hasraw 'type.impl/parent_crate_115718/struct.MyStruct.js' 'method_trait_3'
+//@ hasraw 'foo/type.MyType.html' 'method_trait_3'
 pub type MyType = MyStruct<u16>;
diff --git a/tests/rustdoc/type-alias/deref-32077.rs b/tests/rustdoc/type-alias/deref-32077.rs
index 186ebb1a632..79a83381340 100644
--- a/tests/rustdoc/type-alias/deref-32077.rs
+++ b/tests/rustdoc/type-alias/deref-32077.rs
@@ -18,25 +18,25 @@ pub trait Bar {}
 impl<T> Foo for GenericStruct<T> {}
 impl Bar for GenericStruct<u32> {}
 
-// @has 'foo/type.TypedefStruct.html'
+//@ has 'foo/type.TypedefStruct.html'
 // We check that "Aliased type" is also present as a title in the sidebar.
-// @has - '//*[@class="sidebar-elems"]//h3/a[@href="#aliased-type"]' 'Aliased type'
+//@ has - '//*[@class="sidebar-elems"]//h3/a[@href="#aliased-type"]' 'Aliased type'
 // We check that we have the implementation of the type alias itself.
-// @has - '//*[@id="impl-GenericStruct%3Cu8%3E"]/h3' 'impl TypedefStruct'
-// @has - '//*[@id="method.on_alias"]/h4' 'pub fn on_alias()'
+//@ has - '//*[@id="impl-GenericStruct%3Cu8%3E"]/h3' 'impl TypedefStruct'
+//@ has - '//*[@id="method.on_alias"]/h4' 'pub fn on_alias()'
 // This trait implementation doesn't match the type alias parameters so shouldn't appear in docs.
-// @!has - '//h3' 'impl Bar for GenericStruct<u32> {}'
+//@ !has - '//h3' 'impl Bar for GenericStruct<u32> {}'
 // Same goes for the `Deref` impl.
-// @!has - '//h2' 'Methods from Deref<Target = u32>'
-// @count - '//nav[@class="sidebar"]//a' 'on_alias' 1
-// @!has - '//nav[@class="sidebar"]//a' 'on_gen'
-// @!has - '//nav[@class="sidebar"]//a' 'Foo'
-// @!has - '//nav[@class="sidebar"]//a' 'Bar'
-// @!has - '//nav[@class="sidebar"]//a' 'on_u32'
+//@ !has - '//h2' 'Methods from Deref<Target = u32>'
+//@ count - '//nav[@class="sidebar"]//a' 'on_alias' 1
+//@ !has - '//nav[@class="sidebar"]//a' 'on_gen'
+//@ !has - '//nav[@class="sidebar"]//a' 'Foo'
+//@ !has - '//nav[@class="sidebar"]//a' 'Bar'
+//@ !has - '//nav[@class="sidebar"]//a' 'on_u32'
 // TypedefStruct inlined to GenericStruct
-// @hasraw 'type.impl/foo/struct.GenericStruct.js' 'TypedefStruct'
-// @hasraw 'type.impl/foo/struct.GenericStruct.js' 'method.on_gen'
-// @hasraw 'type.impl/foo/struct.GenericStruct.js' 'Foo'
+//@ hasraw 'type.impl/foo/struct.GenericStruct.js' 'TypedefStruct'
+//@ hasraw 'type.impl/foo/struct.GenericStruct.js' 'method.on_gen'
+//@ hasraw 'type.impl/foo/struct.GenericStruct.js' 'Foo'
 pub type TypedefStruct = GenericStruct<u8>;
 
 impl TypedefStruct {
@@ -53,12 +53,12 @@ impl std::ops::Deref for GenericStruct<u32> {
 
 pub struct Wrap<T>(GenericStruct<T>);
 
-// @has 'foo/type.Alias.html'
-// @!has - '//h2' 'Methods from Deref<Target = u32>'
-// @!has - '//*[@id="impl-Deref-for-Wrap%3CT%3E"]/h3' 'impl<T> Deref for Wrap<T>'
-// @hasraw 'type.impl/foo/struct.Wrap.js' 'impl-Deref-for-Wrap%3CT%3E'
+//@ has 'foo/type.Alias.html'
+//@ !has - '//h2' 'Methods from Deref<Target = u32>'
+//@ !has - '//*[@id="impl-Deref-for-Wrap%3CT%3E"]/h3' 'impl<T> Deref for Wrap<T>'
+//@ hasraw 'type.impl/foo/struct.Wrap.js' 'impl-Deref-for-Wrap%3CT%3E'
 // Deref Methods aren't gathered for type aliases, though the actual impl is.
-// @!hasraw 'type.impl/foo/struct.Wrap.js' 'BITS'
+//@ !hasraw 'type.impl/foo/struct.Wrap.js' 'BITS'
 pub type Alias = Wrap<u32>;
 
 impl<T> std::ops::Deref for Wrap<T> {
diff --git a/tests/rustdoc/type-alias/primitive-local-link-121106.rs b/tests/rustdoc/type-alias/primitive-local-link-121106.rs
index c11d35d8646..3bdce3846c8 100644
--- a/tests/rustdoc/type-alias/primitive-local-link-121106.rs
+++ b/tests/rustdoc/type-alias/primitive-local-link-121106.rs
@@ -2,18 +2,18 @@
 
 #![feature(rustc_attrs)]
 
-// @has foo/primitive.i32.html '//h1' 'Primitive Type i32'
-// @has foo/index.html '//a/@href' '../foo/index.html'
+//@ has foo/primitive.i32.html '//h1' 'Primitive Type i32'
+//@ has foo/index.html '//a/@href' '../foo/index.html'
 #[rustc_doc_primitive = "i32"]
 mod i32 {}
 
-// @has foo/struct.Node.html '//a/@href' 'primitive.i32.html'
+//@ has foo/struct.Node.html '//a/@href' 'primitive.i32.html'
 pub struct Node;
 
 impl Node {
     pub fn edge(&self) -> i32 { 0 }
 }
 
-// @!has foo/type.Alias.html '//a/@href' 'primitive.i32.html'
-// @hasraw 'type.impl/foo/struct.Node.js' 'href=\"foo/primitive.i32.html\"'
+//@ !has foo/type.Alias.html '//a/@href' 'primitive.i32.html'
+//@ hasraw 'type.impl/foo/struct.Node.js' 'href=\"foo/primitive.i32.html\"'
 pub type Alias = Node;
diff --git a/tests/rustdoc/type-alias/same-crate-115718.rs b/tests/rustdoc/type-alias/same-crate-115718.rs
index 26e5db85cd6..ec847756822 100644
--- a/tests/rustdoc/type-alias/same-crate-115718.rs
+++ b/tests/rustdoc/type-alias/same-crate-115718.rs
@@ -27,8 +27,8 @@ impl MyTrait2 for MyStruct<u16> {
     fn method_trait_2() {}
 }
 
-// @hasraw 'type.impl/foo/struct.MyStruct.js' 'method_u16'
-// @!hasraw 'type.impl/foo/struct.MyStruct.js' 'method_u32'
-// @!hasraw 'type.impl/foo/struct.MyStruct.js' 'method_trait_1'
-// @hasraw 'type.impl/foo/struct.MyStruct.js' 'method_trait_2'
+//@ hasraw 'type.impl/foo/struct.MyStruct.js' 'method_u16'
+//@ !hasraw 'type.impl/foo/struct.MyStruct.js' 'method_u32'
+//@ !hasraw 'type.impl/foo/struct.MyStruct.js' 'method_trait_1'
+//@ hasraw 'type.impl/foo/struct.MyStruct.js' 'method_trait_2'
 pub type MyType = MyStruct<u16>;
diff --git a/tests/rustdoc/type-layout-flag-required.rs b/tests/rustdoc/type-layout-flag-required.rs
index 6bb5e10f881..699be973e90 100644
--- a/tests/rustdoc/type-layout-flag-required.rs
+++ b/tests/rustdoc/type-layout-flag-required.rs
@@ -1,4 +1,4 @@
 // Tests that `--show-type-layout` is required in order to show layout info.
 
-// @!hasraw type_layout_flag_required/struct.Foo.html 'Size: '
+//@ !hasraw type_layout_flag_required/struct.Foo.html 'Size: '
 pub struct Foo(usize);
diff --git a/tests/rustdoc/type-layout.rs b/tests/rustdoc/type-layout.rs
index b2ff4add63e..1e462210cba 100644
--- a/tests/rustdoc/type-layout.rs
+++ b/tests/rustdoc/type-layout.rs
@@ -1,93 +1,93 @@
 //@ compile-flags: --show-type-layout -Z unstable-options
 
-// @hasraw type_layout/struct.Foo.html 'Size: '
-// @hasraw - ' bytes'
-// @has - '//*[@id="layout"]/a[@href="#layout"]' ''
+//@ hasraw type_layout/struct.Foo.html 'Size: '
+//@ hasraw - ' bytes'
+//@ has - '//*[@id="layout"]/a[@href="#layout"]' ''
 pub struct Foo {
     pub a: usize,
     b: Vec<String>,
 }
 
-// @hasraw type_layout/enum.Bar.html 'Size: '
-// @hasraw - ' bytes'
+//@ hasraw type_layout/enum.Bar.html 'Size: '
+//@ hasraw - ' bytes'
 pub enum Bar<'a> {
     A(String),
     B(&'a str, (std::collections::HashMap<String, usize>, Foo)),
 }
 
-// @hasraw type_layout/union.Baz.html 'Size: '
-// @hasraw - ' bytes'
+//@ hasraw type_layout/union.Baz.html 'Size: '
+//@ hasraw - ' bytes'
 pub union Baz {
     a: &'static str,
     b: usize,
     c: &'static [u8],
 }
 
-// @hasraw type_layout/struct.X.html 'Size: '
-// @hasraw - ' bytes'
+//@ hasraw type_layout/struct.X.html 'Size: '
+//@ hasraw - ' bytes'
 pub struct X(usize);
 
-// @hasraw type_layout/struct.Y.html 'Size: '
-// @hasraw - '1 byte'
-// @!hasraw - ' bytes'
+//@ hasraw type_layout/struct.Y.html 'Size: '
+//@ hasraw - '1 byte'
+//@ !hasraw - ' bytes'
 pub struct Y(u8);
 
-// @hasraw type_layout/struct.Z.html 'Size: '
-// @hasraw - '0 bytes'
+//@ hasraw type_layout/struct.Z.html 'Size: '
+//@ hasraw - '0 bytes'
 pub struct Z;
 
 // We can't compute layout for generic types.
-// @hasraw type_layout/struct.Generic.html 'Unable to compute type layout, possibly due to this type having generic parameters'
-// @!hasraw - 'Size: '
+//@ hasraw type_layout/struct.Generic.html 'Unable to compute type layout, possibly due to this type having generic parameters'
+//@ !hasraw - 'Size: '
 pub struct Generic<T>(T);
 
 // We *can*, however, compute layout for types that are only generic over lifetimes,
 // because lifetimes are a type-system construct.
-// @hasraw type_layout/struct.GenericLifetimes.html 'Size: '
-// @hasraw - ' bytes'
+//@ hasraw type_layout/struct.GenericLifetimes.html 'Size: '
+//@ hasraw - ' bytes'
 pub struct GenericLifetimes<'a>(&'a str);
 
-// @hasraw type_layout/struct.Unsized.html 'Size: '
-// @hasraw - '(unsized)'
+//@ hasraw type_layout/struct.Unsized.html 'Size: '
+//@ hasraw - '(unsized)'
 pub struct Unsized([u8]);
 
-// @hasraw type_layout/type.TypeAlias.html 'Size: '
-// @hasraw - ' bytes'
+//@ hasraw type_layout/type.TypeAlias.html 'Size: '
+//@ hasraw - ' bytes'
 pub type TypeAlias = X;
 
-// @hasraw type_layout/type.GenericTypeAlias.html 'Size: '
-// @hasraw - '8 bytes'
+//@ hasraw type_layout/type.GenericTypeAlias.html 'Size: '
+//@ hasraw - '8 bytes'
 pub type GenericTypeAlias = (Generic<(u32, ())>, Generic<u32>);
 
 // Regression test for the rustdoc equivalent of #85103.
-// @hasraw type_layout/type.Edges.html 'Encountered an error during type layout; the type failed to be normalized.'
+//@ hasraw type_layout/type.Edges.html 'Encountered an error during type layout; the type failed to be normalized.'
 pub type Edges<'a, E> = std::borrow::Cow<'a, [E]>;
 
-// @!hasraw type_layout/trait.MyTrait.html 'Size: '
+//@ !hasraw type_layout/trait.MyTrait.html 'Size: '
 pub trait MyTrait {}
 
-// @hasraw type_layout/enum.Variants.html 'Size: '
-// @hasraw - '2 bytes'
-// @hasraw - '<code>A</code>: 0 bytes'
-// @hasraw - '<code>B</code>: 1 byte'
+//@ hasraw type_layout/enum.Variants.html 'Size: '
+//@ hasraw - '2 bytes'
+//@ hasraw - '<code>A</code>: 0 bytes'
+//@ hasraw - '<code>B</code>: 1 byte'
 pub enum Variants {
     A,
     B(u8),
 }
 
-// @hasraw type_layout/enum.WithNiche.html 'Size: '
-// @has - //p '4 bytes'
-// @hasraw - '<code>None</code>: 0 bytes'
-// @hasraw - '<code>Some</code>: 4 bytes'
+//@ hasraw type_layout/enum.WithNiche.html 'Size: '
+//@ has - //p '4 bytes'
+//@ hasraw - '<code>None</code>: 0 bytes'
+//@ hasraw - '<code>Some</code>: 4 bytes'
 pub enum WithNiche {
     None,
     Some(std::num::NonZero<u32>),
 }
 
-// @hasraw type_layout/enum.Uninhabited.html 'Size: '
-// @hasraw - '0 bytes (<a href="https://doc.rust-lang.org/stable/reference/glossary.html#uninhabited">uninhabited</a>)'
+//@ hasraw type_layout/enum.Uninhabited.html 'Size: '
+//@ hasraw - '0 bytes (<a href="https://doc.rust-lang.org/stable/reference/glossary.html#uninhabited">uninhabited</a>)'
 pub enum Uninhabited {}
 
-// @hasraw type_layout/struct.Uninhabited2.html 'Size: '
-// @hasraw - '8 bytes (<a href="https://doc.rust-lang.org/stable/reference/glossary.html#uninhabited">uninhabited</a>)'
+//@ hasraw type_layout/struct.Uninhabited2.html 'Size: '
+//@ hasraw - '8 bytes (<a href="https://doc.rust-lang.org/stable/reference/glossary.html#uninhabited">uninhabited</a>)'
 pub struct Uninhabited2(std::convert::Infallible, u64);
diff --git a/tests/rustdoc/typedef-inner-variants-lazy_type_alias.rs b/tests/rustdoc/typedef-inner-variants-lazy_type_alias.rs
index bea25c75aa4..c6bfe495bb0 100644
--- a/tests/rustdoc/typedef-inner-variants-lazy_type_alias.rs
+++ b/tests/rustdoc/typedef-inner-variants-lazy_type_alias.rs
@@ -3,32 +3,32 @@
 #![feature(lazy_type_alias)]
 #![allow(incomplete_features)]
 
-// @has 'inner_types_lazy/struct.Pair.html'
+//@ has 'inner_types_lazy/struct.Pair.html'
 pub struct Pair<A, B> {
     pub first: A,
     pub second: B,
 }
 
-// @has 'inner_types_lazy/type.ReversedTypesPair.html'
-// @count - '//*[@id="aliased-type"]' 1
-// @count - '//*[@id="variants"]' 0
-// @count - '//*[@id="fields"]' 1
-// @count - '//div[@class="where"]' 0
+//@ has 'inner_types_lazy/type.ReversedTypesPair.html'
+//@ count - '//*[@id="aliased-type"]' 1
+//@ count - '//*[@id="variants"]' 0
+//@ count - '//*[@id="fields"]' 1
+//@ count - '//div[@class="where"]' 0
 pub type ReversedTypesPair<Q, R> = Pair<R, Q>;
 
-// @has 'inner_types_lazy/type.ReadWrite.html'
-// @count - '//*[@id="aliased-type"]' 1
-// @count - '//*[@id="variants"]' 0
-// @count - '//*[@id="fields"]' 1
-// @count - '//div[@class="where"]' 2
+//@ has 'inner_types_lazy/type.ReadWrite.html'
+//@ count - '//*[@id="aliased-type"]' 1
+//@ count - '//*[@id="variants"]' 0
+//@ count - '//*[@id="fields"]' 1
+//@ count - '//div[@class="where"]' 2
 pub type ReadWrite<R, W> = Pair<R, W>
 where
     R: std::io::Read,
     W: std::io::Write;
 
-// @has 'inner_types_lazy/type.VecPair.html'
-// @count - '//*[@id="aliased-type"]' 1
-// @count - '//*[@id="variants"]' 0
-// @count - '//*[@id="fields"]' 1
-// @count - '//div[@class="where"]' 0
+//@ has 'inner_types_lazy/type.VecPair.html'
+//@ count - '//*[@id="aliased-type"]' 1
+//@ count - '//*[@id="variants"]' 0
+//@ count - '//*[@id="fields"]' 1
+//@ count - '//div[@class="where"]' 0
 pub type VecPair<U, V> = Pair<Vec<U>, Vec<V>>;
diff --git a/tests/rustdoc/typedef-inner-variants.rs b/tests/rustdoc/typedef-inner-variants.rs
index 0e65fdaf2af..51644546c01 100644
--- a/tests/rustdoc/typedef-inner-variants.rs
+++ b/tests/rustdoc/typedef-inner-variants.rs
@@ -20,12 +20,12 @@ impl Interner for TyCtxt {
     type Ty = Ty;
 }
 
-// @has 'inner_variants/type.AliasTy.html'
-// @count - '//*[@id="variants"]' 0
-// @count - '//*[@id="fields"]' 0
+//@ has 'inner_variants/type.AliasTy.html'
+//@ count - '//*[@id="variants"]' 0
+//@ count - '//*[@id="fields"]' 0
 pub type AliasTy = Ty;
 
-// @has 'inner_variants/enum.IrTyKind.html'
+//@ has 'inner_variants/enum.IrTyKind.html'
 pub enum IrTyKind<A, I: Interner> {
     /// Doc comment for AdtKind
     AdtKind(I::Adt),
@@ -37,39 +37,39 @@ pub enum IrTyKind<A, I: Interner> {
     Unspecified,
 }
 
-// @has 'inner_variants/type.NearlyTyKind.html'
-// @count - '//*[@id="aliased-type"]' 1
-// @count - '//*[@id="variants"]' 1
-// @count - '//*[@id="fields"]' 0
+//@ has 'inner_variants/type.NearlyTyKind.html'
+//@ count - '//*[@id="aliased-type"]' 1
+//@ count - '//*[@id="variants"]' 1
+//@ count - '//*[@id="fields"]' 0
 pub type NearlyTyKind<A> = IrTyKind<A, TyCtxt>;
 
-// @has 'inner_variants/type.TyKind.html'
-// @count - '//*[@id="aliased-type"]' 1
-// @count - '//*[@id="variants"]' 1
-// @count - '//*[@id="fields"]' 0
-// @count - '//*[@class="variant"]' 3
-// @matches - '//pre[@class="rust item-decl"]//code' "enum TyKind"
-// @has - '//pre[@class="rust item-decl"]//code/a[1]' "Adt"
-// @has - '//pre[@class="rust item-decl"]//code/a[2]' "Adt"
-// @has - '//pre[@class="rust item-decl"]//code/a[3]' "Ty"
-// @has - '//pre[@class="rust item-decl"]//code/a[4]' "i64"
+//@ has 'inner_variants/type.TyKind.html'
+//@ count - '//*[@id="aliased-type"]' 1
+//@ count - '//*[@id="variants"]' 1
+//@ count - '//*[@id="fields"]' 0
+//@ count - '//*[@class="variant"]' 3
+//@ matches - '//pre[@class="rust item-decl"]//code' "enum TyKind"
+//@ has - '//pre[@class="rust item-decl"]//code/a[1]' "Adt"
+//@ has - '//pre[@class="rust item-decl"]//code/a[2]' "Adt"
+//@ has - '//pre[@class="rust item-decl"]//code/a[3]' "Ty"
+//@ has - '//pre[@class="rust item-decl"]//code/a[4]' "i64"
 pub type TyKind = IrTyKind<i64, TyCtxt>;
 
-// @has 'inner_variants/union.OneOr.html'
+//@ has 'inner_variants/union.OneOr.html'
 pub union OneOr<A: Copy> {
     pub one: i64,
     pub or: A,
 }
 
-// @has 'inner_variants/type.OneOrF64.html'
-// @count - '//*[@id="aliased-type"]' 1
-// @count - '//*[@id="variants"]' 0
-// @count - '//*[@id="fields"]' 1
-// @count - '//*[@class="structfield section-header"]' 2
-// @matches - '//pre[@class="rust item-decl"]//code' "union OneOrF64"
+//@ has 'inner_variants/type.OneOrF64.html'
+//@ count - '//*[@id="aliased-type"]' 1
+//@ count - '//*[@id="variants"]' 0
+//@ count - '//*[@id="fields"]' 1
+//@ count - '//*[@class="structfield section-header"]' 2
+//@ matches - '//pre[@class="rust item-decl"]//code' "union OneOrF64"
 pub type OneOrF64 = OneOr<f64>;
 
-// @has 'inner_variants/struct.One.html'
+//@ has 'inner_variants/struct.One.html'
 pub struct One<T> {
     pub val: T,
     #[doc(hidden)]
@@ -77,50 +77,50 @@ pub struct One<T> {
     __private: T,
 }
 
-// @has 'inner_variants/type.OneU64.html'
-// @count - '//*[@id="aliased-type"]' 1
-// @count - '//*[@id="variants"]' 0
-// @count - '//*[@id="fields"]' 1
-// @count - '//*[@class="structfield section-header"]' 1
-// @matches - '//pre[@class="rust item-decl"]//code' "struct OneU64"
-// @matches - '//pre[@class="rust item-decl"]//code' "pub val"
+//@ has 'inner_variants/type.OneU64.html'
+//@ count - '//*[@id="aliased-type"]' 1
+//@ count - '//*[@id="variants"]' 0
+//@ count - '//*[@id="fields"]' 1
+//@ count - '//*[@class="structfield section-header"]' 1
+//@ matches - '//pre[@class="rust item-decl"]//code' "struct OneU64"
+//@ matches - '//pre[@class="rust item-decl"]//code' "pub val"
 pub type OneU64 = One<u64>;
 
-// @has 'inner_variants/struct.OnceA.html'
+//@ has 'inner_variants/struct.OnceA.html'
 pub struct OnceA<'a, A> {
     pub a: &'a A,
 }
 
-// @has 'inner_variants/type.Once.html'
-// @count - '//*[@id="aliased-type"]' 1
-// @count - '//*[@id="variants"]' 0
-// @count - '//*[@id="fields"]' 1
-// @matches - '//pre[@class="rust item-decl"]//code' "struct Once<'a>"
-// @matches - '//pre[@class="rust item-decl"]//code' "&'a"
+//@ has 'inner_variants/type.Once.html'
+//@ count - '//*[@id="aliased-type"]' 1
+//@ count - '//*[@id="variants"]' 0
+//@ count - '//*[@id="fields"]' 1
+//@ matches - '//pre[@class="rust item-decl"]//code' "struct Once<'a>"
+//@ matches - '//pre[@class="rust item-decl"]//code' "&'a"
 pub type Once<'a> = OnceA<'a, i64>;
 
-// @has 'inner_variants/struct.HighlyGenericStruct.html'
+//@ has 'inner_variants/struct.HighlyGenericStruct.html'
 pub struct HighlyGenericStruct<A, B, C, D> {
     pub z: (A, B, C, D)
 }
 
-// @has 'inner_variants/type.HighlyGenericAABB.html'
-// @count - '//*[@id="aliased-type"]' 1
-// @count - '//*[@id="variants"]' 0
-// @count - '//*[@id="fields"]' 1
-// @matches - '//pre[@class="rust item-decl"]//code' "struct HighlyGenericAABB<A, B>"
-// @matches - '//pre[@class="rust item-decl"]//code' "pub z"
+//@ has 'inner_variants/type.HighlyGenericAABB.html'
+//@ count - '//*[@id="aliased-type"]' 1
+//@ count - '//*[@id="variants"]' 0
+//@ count - '//*[@id="fields"]' 1
+//@ matches - '//pre[@class="rust item-decl"]//code' "struct HighlyGenericAABB<A, B>"
+//@ matches - '//pre[@class="rust item-decl"]//code' "pub z"
 pub type HighlyGenericAABB<A, B> = HighlyGenericStruct<A, A, B, B>;
 
-// @has 'inner_variants/type.InlineU64.html'
-// @count - '//*[@id="aliased-type"]' 1
-// @count - '//*[@id="variants"]' 0
-// @count - '//*[@id="fields"]' 1
+//@ has 'inner_variants/type.InlineU64.html'
+//@ count - '//*[@id="aliased-type"]' 1
+//@ count - '//*[@id="variants"]' 0
+//@ count - '//*[@id="fields"]' 1
 pub use cross_crate_generic_typedef::InlineU64;
 
-// @has 'inner_variants/type.InlineEnum.html'
-// @count - '//*[@id="aliased-type"]' 1
-// @count - '//*[@id="variants"]' 1
-// @count - '//*[@id="fields"]' 0
-// @count - '//*[@class="variant"]' 2
+//@ has 'inner_variants/type.InlineEnum.html'
+//@ count - '//*[@id="aliased-type"]' 1
+//@ count - '//*[@id="variants"]' 1
+//@ count - '//*[@id="fields"]' 0
+//@ count - '//*[@class="variant"]' 2
 pub type InlineEnum = cross_crate_generic_typedef::GenericEnum<i32>;
diff --git a/tests/rustdoc/typedef.rs b/tests/rustdoc/typedef.rs
index 63e2973c759..3fdc2788bca 100644
--- a/tests/rustdoc/typedef.rs
+++ b/tests/rustdoc/typedef.rs
@@ -8,13 +8,13 @@ impl MyStruct {
     pub fn method_on_mystruct() {}
 }
 
-// @has typedef/type.MyAlias.html
-// @has - '//*[@class="impl"]//h3[@class="code-header"]' 'impl MyAlias'
-// @has - '//*[@class="impl"]//h3[@class="code-header"]' 'impl MyTrait for MyAlias'
-// @hasraw - 'Alias docstring'
-// @has - '//*[@class="sidebar"]//*[@class="location"]' 'MyAlias'
-// @has - '//*[@class="sidebar"]//a[@href="#implementations"]' 'Methods'
-// @has - '//*[@class="sidebar"]//a[@href="#trait-implementations"]' 'Trait Implementations'
+//@ has typedef/type.MyAlias.html
+//@ has - '//*[@class="impl"]//h3[@class="code-header"]' 'impl MyAlias'
+//@ has - '//*[@class="impl"]//h3[@class="code-header"]' 'impl MyTrait for MyAlias'
+//@ hasraw - 'Alias docstring'
+//@ has - '//*[@class="sidebar"]//*[@class="location"]' 'MyAlias'
+//@ has - '//*[@class="sidebar"]//a[@href="#implementations"]' 'Methods'
+//@ has - '//*[@class="sidebar"]//a[@href="#trait-implementations"]' 'Trait Implementations'
 /// Alias docstring
 pub type MyAlias = MyStruct;
 
diff --git a/tests/rustdoc/underscore-import-61592.rs b/tests/rustdoc/underscore-import-61592.rs
index d403f2cc7ab..d0fef96858a 100644
--- a/tests/rustdoc/underscore-import-61592.rs
+++ b/tests/rustdoc/underscore-import-61592.rs
@@ -4,14 +4,14 @@
 
 extern crate foo;
 
-// @has bar/index.html
-// @has - '//a[@href="#reexports"]' 'Re-exports'
-// @has - '//code' 'pub use foo::FooTrait as _;'
-// @!has - '//a[@href="trait._.html"]' ''
+//@ has bar/index.html
+//@ has - '//a[@href="#reexports"]' 'Re-exports'
+//@ has - '//code' 'pub use foo::FooTrait as _;'
+//@ !has - '//a[@href="trait._.html"]' ''
 pub use foo::FooTrait as _;
 
-// @has bar/index.html
-// @has - '//a[@href="#reexports"]' 'Re-exports'
-// @has - '//code' 'pub use foo::FooStruct as _;'
-// @!has - '//a[@href="struct._.html"]' ''
+//@ has bar/index.html
+//@ has - '//a[@href="#reexports"]' 'Re-exports'
+//@ has - '//code' 'pub use foo::FooStruct as _;'
+//@ !has - '//a[@href="struct._.html"]' ''
 pub use foo::FooStruct as _;
diff --git a/tests/rustdoc/unindent.rs b/tests/rustdoc/unindent.rs
index 372af5f4672..f9787b076c1 100644
--- a/tests/rustdoc/unindent.rs
+++ b/tests/rustdoc/unindent.rs
@@ -1,7 +1,7 @@
 #![crate_name = "foo"]
 
-// @has foo/struct.Example.html
-// @matches - '//pre[@class="rust rust-example-rendered"]' \
+//@ has foo/struct.Example.html
+//@ matches - '//pre[@class="rust rust-example-rendered"]' \
 //     '(?m)let example = Example::new\(\)\n    \.first\(\)\n    \.second\(\)\n    \.build\(\);\Z'
 /// ```rust
 /// let example = Example::new()
@@ -11,8 +11,8 @@
 /// ```
 pub struct Example;
 
-// @has foo/struct.F.html
-// @matches - '//pre[@class="rust rust-example-rendered"]' \
+//@ has foo/struct.F.html
+//@ matches - '//pre[@class="rust rust-example-rendered"]' \
 //     '(?m)let example = Example::new\(\)\n    \.first\(\)\n    \.another\(\)\n    \.build\(\);\Z'
 ///```rust
 ///let example = Example::new()
@@ -22,8 +22,8 @@ pub struct Example;
 /// ```
 pub struct F;
 
-// @has foo/struct.G.html
-// @matches - '//pre[@class="rust rust-example-rendered"]' \
+//@ has foo/struct.G.html
+//@ matches - '//pre[@class="rust rust-example-rendered"]' \
 //     '(?m)let example = Example::new\(\)\n\.first\(\)\n    \.another\(\)\n\.build\(\);\Z'
 ///```rust
 ///let example = Example::new()
@@ -33,27 +33,27 @@ pub struct F;
 ///```
 pub struct G;
 
-// @has foo/struct.H.html
-// @has - '//div[@class="docblock"]/p' 'no whitespace lol'
+//@ has foo/struct.H.html
+//@ has - '//div[@class="docblock"]/p' 'no whitespace lol'
 ///no whitespace
 #[doc = " lol"]
 pub struct H;
 
-// @has foo/struct.I.html
-// @matches - '//pre[@class="rust rust-example-rendered"]' '(?m)4 whitespaces!\Z'
+//@ has foo/struct.I.html
+//@ matches - '//pre[@class="rust rust-example-rendered"]' '(?m)4 whitespaces!\Z'
 ///     4 whitespaces!
 #[doc = "something"]
 pub struct I;
 
-// @has foo/struct.J.html
-// @matches - '//div[@class="docblock"]/p' '(?m)a\nno whitespace\nJust some text.\Z'
+//@ has foo/struct.J.html
+//@ matches - '//div[@class="docblock"]/p' '(?m)a\nno whitespace\nJust some text.\Z'
 ///a
 ///no whitespace
 #[doc = include_str!("unindent.md")]
 pub struct J;
 
-// @has foo/struct.K.html
-// @matches - '//pre[@class="rust rust-example-rendered"]' '(?m)4 whitespaces!\Z'
+//@ has foo/struct.K.html
+//@ matches - '//pre[@class="rust rust-example-rendered"]' '(?m)4 whitespaces!\Z'
 ///a
 ///
 ///    4 whitespaces!
diff --git a/tests/rustdoc/union-fields-html.rs b/tests/rustdoc/union-fields-html.rs
index 1ac01232c3e..8550980b896 100644
--- a/tests/rustdoc/union-fields-html.rs
+++ b/tests/rustdoc/union-fields-html.rs
@@ -1,9 +1,9 @@
 #![crate_name = "foo"]
 
-// @has 'foo/union.Union.html'
+//@ has 'foo/union.Union.html'
 // Checking that there is a whitespace after `:`.
-// @has - '//*[@id="structfield.a"]/code' 'a: u8'
-// @has - '//*[@id="structfield.b"]/code' 'b: u32'
+//@ has - '//*[@id="structfield.a"]/code' 'a: u8'
+//@ has - '//*[@id="structfield.b"]/code' 'b: u32'
 pub union Union {
     pub a: u8,
     /// tadam
diff --git a/tests/rustdoc/union.rs b/tests/rustdoc/union.rs
index 5a788eb1b1c..a3c046ec7c1 100644
--- a/tests/rustdoc/union.rs
+++ b/tests/rustdoc/union.rs
@@ -1,8 +1,8 @@
-// @has union/union.U.html
+//@ has union/union.U.html
 pub union U {
-    // @has - //pre "pub a: u8"
+    //@ has - //pre "pub a: u8"
     pub a: u8,
-    // @has - //pre "/* private fields */"
-    // @!has - //pre "b: u16"
+    //@ has - //pre "/* private fields */"
+    //@ !has - //pre "b: u16"
     b: u16,
 }
diff --git a/tests/rustdoc/unit-return.rs b/tests/rustdoc/unit-return.rs
index 47a3e6d490b..2b3e6414ae5 100644
--- a/tests/rustdoc/unit-return.rs
+++ b/tests/rustdoc/unit-return.rs
@@ -4,14 +4,14 @@
 
 extern crate unit_return;
 
-// @has 'foo/fn.f0.html' '//pre[@class="rust item-decl"]' 'F: FnMut(u8) + Clone'
+//@ has 'foo/fn.f0.html' '//pre[@class="rust item-decl"]' 'F: FnMut(u8) + Clone'
 pub fn f0<F: FnMut(u8) + Clone>(f: F) {}
 
-// @has 'foo/fn.f1.html' '//pre[@class="rust item-decl"]' 'F: FnMut(u16) + Clone'
+//@ has 'foo/fn.f1.html' '//pre[@class="rust item-decl"]' 'F: FnMut(u16) + Clone'
 pub fn f1<F: FnMut(u16) -> () + Clone>(f: F) {}
 
-// @has 'foo/fn.f2.html' '//pre[@class="rust item-decl"]' 'F: FnMut(u32) + Clone'
+//@ has 'foo/fn.f2.html' '//pre[@class="rust item-decl"]' 'F: FnMut(u32) + Clone'
 pub use unit_return::f2;
 
-// @has 'foo/fn.f3.html' '//pre[@class="rust item-decl"]' 'F: FnMut(u64) + Clone'
+//@ has 'foo/fn.f3.html' '//pre[@class="rust item-decl"]' 'F: FnMut(u64) + Clone'
 pub use unit_return::f3;
diff --git a/tests/rustdoc/universal-impl-trait.rs b/tests/rustdoc/universal-impl-trait.rs
index f5eabda59b7..b78d69c0690 100644
--- a/tests/rustdoc/universal-impl-trait.rs
+++ b/tests/rustdoc/universal-impl-trait.rs
@@ -3,17 +3,17 @@
 use std::io::Read;
 use std::borrow::Borrow;
 
-// @has foo/fn.foo.html
-// @has - //pre 'foo('
-// @matchesraw - '_x: impl <a class="trait" href="[^"]+/trait\.Clone\.html"'
-// @matchesraw - '_z: .+impl.+trait\.Copy\.html.+, impl.+trait\.Clone\.html'
+//@ has foo/fn.foo.html
+//@ has - //pre 'foo('
+//@ matchesraw - '_x: impl <a class="trait" href="[^"]+/trait\.Clone\.html"'
+//@ matchesraw - '_z: .+impl.+trait\.Copy\.html.+, impl.+trait\.Clone\.html'
 pub fn foo(_x: impl Clone, _y: i32, _z: (impl Copy, impl Clone)) {
 }
 
 pub trait Trait {
-    // @has foo/trait.Trait.html
-    // @hasraw - 'method</a>('
-    // @matchesraw - '_x: impl <a class="trait" href="[^"]+/trait\.Debug\.html"'
+    //@ has foo/trait.Trait.html
+    //@ hasraw - 'method</a>('
+    //@ matchesraw - '_x: impl <a class="trait" href="[^"]+/trait\.Debug\.html"'
     fn method(&self, _x: impl std::fmt::Debug) {
     }
 }
@@ -21,31 +21,31 @@ pub trait Trait {
 pub struct S<T>(T);
 
 impl<T> S<T> {
-    // @has foo/struct.S.html
-    // @hasraw - 'bar</a>('
-    // @matchesraw - '_bar: impl <a class="trait" href="[^"]+/trait\.Copy\.html"'
+    //@ has foo/struct.S.html
+    //@ hasraw - 'bar</a>('
+    //@ matchesraw - '_bar: impl <a class="trait" href="[^"]+/trait\.Copy\.html"'
     pub fn bar(_bar: impl Copy) {
     }
 
-    // @hasraw - 'baz</a>('
-    // @matchesraw - '_baz:.+struct\.S\.html.+impl .+trait\.Clone\.html'
+    //@ hasraw - 'baz</a>('
+    //@ matchesraw - '_baz:.+struct\.S\.html.+impl .+trait\.Clone\.html'
     pub fn baz(_baz: S<impl Clone>) {
     }
 
-    // @hasraw - 'qux</a>('
-    // @matchesraw - 'trait\.Read\.html'
+    //@ hasraw - 'qux</a>('
+    //@ matchesraw - 'trait\.Read\.html'
     pub fn qux(_qux: impl IntoIterator<Item = S<impl Read>>) {
     }
 }
 
-// @hasraw - 'method</a>('
-// @matchesraw - '_x: impl <a class="trait" href="[^"]+/trait\.Debug\.html"'
+//@ hasraw - 'method</a>('
+//@ matchesraw - '_x: impl <a class="trait" href="[^"]+/trait\.Debug\.html"'
 impl<T> Trait for S<T> {}
 
-// @has foo/fn.much_universe.html
-// @matchesraw - 'T:.+Borrow.+impl .+trait\.Trait\.html'
-// @matchesraw - 'U:.+IntoIterator.+= impl.+Iterator\.html.+= impl.+Clone\.html'
-// @matchesraw - '_: impl .+trait\.Read\.html.+ \+ .+trait\.Clone\.html'
+//@ has foo/fn.much_universe.html
+//@ matchesraw - 'T:.+Borrow.+impl .+trait\.Trait\.html'
+//@ matchesraw - 'U:.+IntoIterator.+= impl.+Iterator\.html.+= impl.+Clone\.html'
+//@ matchesraw - '_: impl .+trait\.Read\.html.+ \+ .+trait\.Clone\.html'
 pub fn much_universe<
     T: Borrow<impl Trait>,
     U: IntoIterator<Item = impl Iterator<Item = impl Clone>>,
diff --git a/tests/rustdoc/unneeded-trait-implementations-title.rs b/tests/rustdoc/unneeded-trait-implementations-title.rs
index e1bcfd3b97e..f7a97dfaaef 100644
--- a/tests/rustdoc/unneeded-trait-implementations-title.rs
+++ b/tests/rustdoc/unneeded-trait-implementations-title.rs
@@ -2,4 +2,4 @@
 
 pub struct Bar;
 
-// @count foo/struct.Bar.html '//*[@id="implementations"]' 0
+//@ count foo/struct.Bar.html '//*[@id="implementations"]' 0
diff --git a/tests/rustdoc/unsafe-extern-blocks.rs b/tests/rustdoc/unsafe-extern-blocks.rs
new file mode 100644
index 00000000000..22d3beea6c3
--- /dev/null
+++ b/tests/rustdoc/unsafe-extern-blocks.rs
@@ -0,0 +1,30 @@
+// Test to ensure the feature is working as expected.
+
+#![feature(unsafe_extern_blocks)]
+#![crate_name = "foo"]
+
+// @has 'foo/index.html'
+
+// First we check that both the static and the function have a "sup" element
+// to tell they're unsafe.
+
+// @count - '//ul[@class="item-table"]//sup[@title="unsafe static"]' 1
+// @has - '//ul[@class="item-table"]//sup[@title="unsafe static"]' '⚠'
+// @count - '//ul[@class="item-table"]//sup[@title="unsafe function"]' 1
+// @has - '//ul[@class="item-table"]//sup[@title="unsafe function"]' '⚠'
+
+unsafe extern {
+    // @has 'foo/static.FOO.html'
+    // @has - '//pre[@class="rust item-decl"]' 'pub static FOO: i32'
+    pub safe static FOO: i32;
+    // @has 'foo/static.BAR.html'
+    // @has - '//pre[@class="rust item-decl"]' 'pub unsafe static BAR: i32'
+    pub static BAR: i32;
+
+    // @has 'foo/fn.foo.html'
+    // @has - '//pre[@class="rust item-decl"]' 'pub extern "C" fn foo()'
+    pub safe fn foo();
+    // @has 'foo/fn.bar.html'
+    // @has - '//pre[@class="rust item-decl"]' 'pub unsafe extern "C" fn bar()'
+    pub fn bar();
+}
diff --git a/tests/rustdoc/use-attr.rs b/tests/rustdoc/use-attr.rs
index 68e44bdfdc4..82d696991a6 100644
--- a/tests/rustdoc/use-attr.rs
+++ b/tests/rustdoc/use-attr.rs
@@ -2,7 +2,7 @@
 
 // ICE when rustdoc encountered a use statement of a non-macro attribute (see #58054)
 
-// @has use_attr/index.html
-// @has - '//code' 'pub use proc_macro_attribute'
+//@ has use_attr/index.html
+//@ has - '//code' 'pub use proc_macro_attribute'
 pub use proc_macro_attribute;
 use proc_macro_derive;
diff --git a/tests/rustdoc/useless_lifetime_bound.rs b/tests/rustdoc/useless_lifetime_bound.rs
index f530d8a654f..68d55eec10c 100644
--- a/tests/rustdoc/useless_lifetime_bound.rs
+++ b/tests/rustdoc/useless_lifetime_bound.rs
@@ -1,13 +1,13 @@
 use std::marker::PhantomData;
 
-// @has useless_lifetime_bound/struct.Scope.html
-// @!has - '//*[@class="rust struct"]' "'env: 'env"
+//@ has useless_lifetime_bound/struct.Scope.html
+//@ !has - '//*[@class="rust struct"]' "'env: 'env"
 pub struct Scope<'env> {
     _marker: PhantomData<&'env mut &'env ()>,
 }
 
-// @has useless_lifetime_bound/struct.Scope.html
-// @!has - '//*[@class="rust struct"]' "T: 'a + 'a"
+//@ has useless_lifetime_bound/struct.Scope.html
+//@ !has - '//*[@class="rust struct"]' "T: 'a + 'a"
 pub struct SomeStruct<'a, T: 'a> {
     _marker: PhantomData<&'a T>,
 }
diff --git a/tests/rustdoc/variadic.rs b/tests/rustdoc/variadic.rs
index bd8f1775b3d..8bf40464eff 100644
--- a/tests/rustdoc/variadic.rs
+++ b/tests/rustdoc/variadic.rs
@@ -1,4 +1,4 @@
 extern "C" {
-    // @has variadic/fn.foo.html //pre 'pub unsafe extern "C" fn foo(x: i32, ...)'
+    //@ has variadic/fn.foo.html //pre 'pub unsafe extern "C" fn foo(x: i32, ...)'
     pub fn foo(x: i32, ...);
 }
diff --git a/tests/rustdoc/version-separator-without-source.rs b/tests/rustdoc/version-separator-without-source.rs
index 4a855b7bb29..e439681484c 100644
--- a/tests/rustdoc/version-separator-without-source.rs
+++ b/tests/rustdoc/version-separator-without-source.rs
@@ -3,21 +3,21 @@
 #![stable(feature = "bar", since = "1.0")]
 #![crate_name = "foo"]
 
-// @has foo/fn.foo.html
-// @has - '//div[@class="main-heading"]/*[@class="out-of-band"]' '1.0.0 · '
-// @!has - '//div[@class="main-heading"]/*[@class="out-of-band"]' '1.0.0 · source · '
+//@ has foo/fn.foo.html
+//@ has - '//div[@class="main-heading"]/*[@class="out-of-band"]' '1.0.0 · '
+//@ !has - '//div[@class="main-heading"]/*[@class="out-of-band"]' '1.0.0 · source · '
 #[stable(feature = "bar", since = "1.0")]
 pub fn foo() {}
 
-// @has foo/struct.Bar.html
-// @has - '//div[@class="main-heading"]/*[@class="out-of-band"]' '1.0.0 · '
-// @!has - '//div[@class="main-heading"]/*[@class="out-of-band"]' '1.0.0 · source · '
+//@ has foo/struct.Bar.html
+//@ has - '//div[@class="main-heading"]/*[@class="out-of-band"]' '1.0.0 · '
+//@ !has - '//div[@class="main-heading"]/*[@class="out-of-band"]' '1.0.0 · source · '
 #[stable(feature = "bar", since = "1.0")]
 pub struct Bar;
 
 impl Bar {
-    // @has - '//*[@id="method.bar"]/*[@class="since rightside"]' '2.0.0'
-    // @!has - '//*[@id="method.bar"]/*[@class="rightside"]' '2.0.0 ·'
+    //@ has - '//*[@id="method.bar"]/*[@class="since rightside"]' '2.0.0'
+    //@ !has - '//*[@id="method.bar"]/*[@class="rightside"]' '2.0.0 ·'
     #[stable(feature = "foobar", since = "2.0")]
     pub fn bar() {}
 }
diff --git a/tests/rustdoc/viewpath-rename.rs b/tests/rustdoc/viewpath-rename.rs
index 54612763792..c2dcd1033b6 100644
--- a/tests/rustdoc/viewpath-rename.rs
+++ b/tests/rustdoc/viewpath-rename.rs
@@ -9,13 +9,13 @@ pub enum Maybe<A> {
     Nothing
 }
 
-// @has foo/prelude/index.html
+//@ has foo/prelude/index.html
 pub mod prelude {
-    // @has foo/prelude/index.html '//code' 'pub use io as FooIo;'
-    // @has foo/prelude/index.html '//code' 'pub use io::Reader as FooReader;'
+    //@ has foo/prelude/index.html '//code' 'pub use io as FooIo;'
+    //@ has foo/prelude/index.html '//code' 'pub use io::Reader as FooReader;'
     #[doc(no_inline)] pub use io::{self as FooIo, Reader as FooReader};
-    // @has foo/prelude/index.html '//code' 'pub use Maybe;'
-    // @has foo/prelude/index.html '//code' 'pub use Maybe::Just as MaybeJust;'
-    // @has foo/prelude/index.html '//code' 'pub use Maybe::Nothing;'
+    //@ has foo/prelude/index.html '//code' 'pub use Maybe;'
+    //@ has foo/prelude/index.html '//code' 'pub use Maybe::Just as MaybeJust;'
+    //@ has foo/prelude/index.html '//code' 'pub use Maybe::Nothing;'
     #[doc(no_inline)] pub use Maybe::{self, Just as MaybeJust, Nothing};
 }
diff --git a/tests/rustdoc/viewpath-self.rs b/tests/rustdoc/viewpath-self.rs
index a6b6592955f..5e998be6abe 100644
--- a/tests/rustdoc/viewpath-self.rs
+++ b/tests/rustdoc/viewpath-self.rs
@@ -9,13 +9,13 @@ pub enum Maybe<A> {
     Nothing
 }
 
-// @has foo/prelude/index.html
+//@ has foo/prelude/index.html
 pub mod prelude {
-    // @has foo/prelude/index.html '//code' 'pub use io;'
-    // @has foo/prelude/index.html '//code' 'pub use io::Reader;'
+    //@ has foo/prelude/index.html '//code' 'pub use io;'
+    //@ has foo/prelude/index.html '//code' 'pub use io::Reader;'
     #[doc(no_inline)] pub use io::{self, Reader};
-    // @has foo/prelude/index.html '//code' 'pub use Maybe;'
-    // @has foo/prelude/index.html '//code' 'pub use Maybe::Just;'
-    // @has foo/prelude/index.html '//code' 'pub use Maybe::Nothing;'
+    //@ has foo/prelude/index.html '//code' 'pub use Maybe;'
+    //@ has foo/prelude/index.html '//code' 'pub use Maybe::Just;'
+    //@ has foo/prelude/index.html '//code' 'pub use Maybe::Nothing;'
     #[doc(no_inline)] pub use Maybe::{self, Just, Nothing};
 }
diff --git a/tests/rustdoc/visibility.rs b/tests/rustdoc/visibility.rs
index 87ac9a9b74d..b6a757e5047 100644
--- a/tests/rustdoc/visibility.rs
+++ b/tests/rustdoc/visibility.rs
@@ -4,83 +4,83 @@
 #![feature(inherent_associated_types)]
 #![allow(incomplete_features)]
 
-// @!has 'foo/index.html' '//a[@href="struct.FooPublic.html"]/..' 'FooPublic 🔒'
-// @has 'foo/struct.FooPublic.html' '//pre' 'pub struct FooPublic'
+//@ !has 'foo/index.html' '//a[@href="struct.FooPublic.html"]/..' 'FooPublic 🔒'
+//@ has 'foo/struct.FooPublic.html' '//pre' 'pub struct FooPublic'
 pub struct FooPublic;
-// @has 'foo/index.html' '//a[@href="struct.FooJustCrate.html"]/..' 'FooJustCrate 🔒'
-// @has 'foo/struct.FooJustCrate.html' '//pre' 'pub(crate) struct FooJustCrate'
+//@ has 'foo/index.html' '//a[@href="struct.FooJustCrate.html"]/..' 'FooJustCrate 🔒'
+//@ has 'foo/struct.FooJustCrate.html' '//pre' 'pub(crate) struct FooJustCrate'
 pub(crate) struct FooJustCrate;
-// @has 'foo/index.html' '//a[@href="struct.FooPubCrate.html"]/..' 'FooPubCrate 🔒'
-// @has 'foo/struct.FooPubCrate.html' '//pre' 'pub(crate) struct FooPubCrate'
+//@ has 'foo/index.html' '//a[@href="struct.FooPubCrate.html"]/..' 'FooPubCrate 🔒'
+//@ has 'foo/struct.FooPubCrate.html' '//pre' 'pub(crate) struct FooPubCrate'
 pub(crate) struct FooPubCrate;
-// @has 'foo/index.html' '//a[@href="struct.FooSelf.html"]/..' 'FooSelf 🔒'
-// @has 'foo/struct.FooSelf.html' '//pre' 'pub(crate) struct FooSelf'
+//@ has 'foo/index.html' '//a[@href="struct.FooSelf.html"]/..' 'FooSelf 🔒'
+//@ has 'foo/struct.FooSelf.html' '//pre' 'pub(crate) struct FooSelf'
 pub(self) struct FooSelf;
-// @has 'foo/index.html' '//a[@href="struct.FooInSelf.html"]/..' 'FooInSelf 🔒'
-// @has 'foo/struct.FooInSelf.html' '//pre' 'pub(crate) struct FooInSelf'
+//@ has 'foo/index.html' '//a[@href="struct.FooInSelf.html"]/..' 'FooInSelf 🔒'
+//@ has 'foo/struct.FooInSelf.html' '//pre' 'pub(crate) struct FooInSelf'
 pub(in self) struct FooInSelf;
-// @has 'foo/index.html' '//a[@href="struct.FooPriv.html"]/..' 'FooPriv 🔒'
-// @has 'foo/struct.FooPriv.html' '//pre' 'pub(crate) struct FooPriv'
+//@ has 'foo/index.html' '//a[@href="struct.FooPriv.html"]/..' 'FooPriv 🔒'
+//@ has 'foo/struct.FooPriv.html' '//pre' 'pub(crate) struct FooPriv'
 struct FooPriv;
 
-// @!has 'foo/index.html' '//a[@href="pub_mod/index.html"]/..' 'pub_mod 🔒'
+//@ !has 'foo/index.html' '//a[@href="pub_mod/index.html"]/..' 'pub_mod 🔒'
 pub mod pub_mod {}
 
-// @has 'foo/index.html' '//a[@href="pub_crate_mod/index.html"]/..' 'pub_crate_mod 🔒'
+//@ has 'foo/index.html' '//a[@href="pub_crate_mod/index.html"]/..' 'pub_crate_mod 🔒'
 pub(crate) mod pub_crate_mod {}
 
-// @has 'foo/index.html' '//a[@href="a/index.html"]/..' 'a 🔒'
+//@ has 'foo/index.html' '//a[@href="a/index.html"]/..' 'a 🔒'
 mod a {
-    // @has 'foo/a/index.html' '//a[@href="struct.FooASuper.html"]/..' 'FooASuper 🔒'
-    // @has 'foo/a/struct.FooASuper.html' '//pre' 'pub(crate) struct FooASuper'
+    //@ has 'foo/a/index.html' '//a[@href="struct.FooASuper.html"]/..' 'FooASuper 🔒'
+    //@ has 'foo/a/struct.FooASuper.html' '//pre' 'pub(crate) struct FooASuper'
     pub(super) struct FooASuper;
-    // @has 'foo/a/index.html' '//a[@href="struct.FooAInSuper.html"]/..' 'FooAInSuper 🔒'
-    // @has 'foo/a/struct.FooAInSuper.html' '//pre' 'pub(crate) struct FooAInSuper'
+    //@ has 'foo/a/index.html' '//a[@href="struct.FooAInSuper.html"]/..' 'FooAInSuper 🔒'
+    //@ has 'foo/a/struct.FooAInSuper.html' '//pre' 'pub(crate) struct FooAInSuper'
     pub(in super) struct FooAInSuper;
-    // @has 'foo/a/index.html' '//a[@href="struct.FooAInA.html"]/..' 'FooAInA 🔒'
-    // @has 'foo/a/struct.FooAInA.html' '//pre' 'struct FooAInA'
-    // @!has 'foo/a/struct.FooAInA.html' '//pre' 'pub'
+    //@ has 'foo/a/index.html' '//a[@href="struct.FooAInA.html"]/..' 'FooAInA 🔒'
+    //@ has 'foo/a/struct.FooAInA.html' '//pre' 'struct FooAInA'
+    //@ !has 'foo/a/struct.FooAInA.html' '//pre' 'pub'
     pub(in a) struct FooAInA;
-    // @has 'foo/a/index.html' '//a[@href="struct.FooAPriv.html"]/..' 'FooAPriv 🔒'
-    // @has 'foo/a/struct.FooAPriv.html' '//pre' 'struct FooAPriv'
-    // @!has 'foo/a/struct.FooAPriv.html' '//pre' 'pub'
+    //@ has 'foo/a/index.html' '//a[@href="struct.FooAPriv.html"]/..' 'FooAPriv 🔒'
+    //@ has 'foo/a/struct.FooAPriv.html' '//pre' 'struct FooAPriv'
+    //@ !has 'foo/a/struct.FooAPriv.html' '//pre' 'pub'
     struct FooAPriv;
 
-    // @has 'foo/a/index.html' '//a[@href="b/index.html"]/..' 'b 🔒'
+    //@ has 'foo/a/index.html' '//a[@href="b/index.html"]/..' 'b 🔒'
     mod b {
-        // @has 'foo/a/b/index.html' '//a[@href="struct.FooBSuper.html"]/..' 'FooBSuper 🔒'
-        // @has 'foo/a/b/struct.FooBSuper.html' '//pre' 'pub(super) struct FooBSuper'
+        //@ has 'foo/a/b/index.html' '//a[@href="struct.FooBSuper.html"]/..' 'FooBSuper 🔒'
+        //@ has 'foo/a/b/struct.FooBSuper.html' '//pre' 'pub(super) struct FooBSuper'
         pub(super) struct FooBSuper;
-        // @has 'foo/a/b/index.html' '//a[@href="struct.FooBInSuperSuper.html"]/..' 'FooBInSuperSuper 🔒'
-        // @has 'foo/a/b/struct.FooBInSuperSuper.html' '//pre' 'pub(crate) struct FooBInSuperSuper'
+        //@ has 'foo/a/b/index.html' '//a[@href="struct.FooBInSuperSuper.html"]/..' 'FooBInSuperSuper 🔒'
+        //@ has 'foo/a/b/struct.FooBInSuperSuper.html' '//pre' 'pub(crate) struct FooBInSuperSuper'
         pub(in super::super) struct FooBInSuperSuper;
-        // @has 'foo/a/b/index.html' '//a[@href="struct.FooBInAB.html"]/..' 'FooBInAB 🔒'
-        // @has 'foo/a/b/struct.FooBInAB.html' '//pre' 'struct FooBInAB'
-        // @!has 'foo/a/b/struct.FooBInAB.html' '//pre' 'pub'
+        //@ has 'foo/a/b/index.html' '//a[@href="struct.FooBInAB.html"]/..' 'FooBInAB 🔒'
+        //@ has 'foo/a/b/struct.FooBInAB.html' '//pre' 'struct FooBInAB'
+        //@ !has 'foo/a/b/struct.FooBInAB.html' '//pre' 'pub'
         pub(in a::b) struct FooBInAB;
-        // @has 'foo/a/b/index.html' '//a[@href="struct.FooBPriv.html"]/..' 'FooBPriv 🔒'
-        // @has 'foo/a/b/struct.FooBPriv.html' '//pre' 'struct FooBPriv'
-        // @!has 'foo/a/b/struct.FooBPriv.html' '//pre' 'pub'
+        //@ has 'foo/a/b/index.html' '//a[@href="struct.FooBPriv.html"]/..' 'FooBPriv 🔒'
+        //@ has 'foo/a/b/struct.FooBPriv.html' '//pre' 'struct FooBPriv'
+        //@ !has 'foo/a/b/struct.FooBPriv.html' '//pre' 'pub'
         struct FooBPriv;
 
-        // @!has 'foo/a/b/index.html' '//a[@href="struct.FooBPub.html"]/..' 'FooBPub 🔒'
-        // @has 'foo/a/b/struct.FooBPub.html' '//pre' 'pub struct FooBPub'
+        //@ !has 'foo/a/b/index.html' '//a[@href="struct.FooBPub.html"]/..' 'FooBPub 🔒'
+        //@ has 'foo/a/b/struct.FooBPub.html' '//pre' 'pub struct FooBPub'
         pub struct FooBPub;
     }
 }
 
-// @has 'foo/trait.PubTrait.html' '//pre' 'pub trait PubTrait'
+//@ has 'foo/trait.PubTrait.html' '//pre' 'pub trait PubTrait'
 //
-// @has 'foo/trait.PubTrait.html' '//pre' 'type Type;'
-// @!has 'foo/trait.PubTrait.html' '//pre' 'pub type Type;'
+//@ has 'foo/trait.PubTrait.html' '//pre' 'type Type;'
+//@ !has 'foo/trait.PubTrait.html' '//pre' 'pub type Type;'
 //
-// @has 'foo/trait.PubTrait.html' '//pre' 'const CONST: usize;'
-// @!has 'foo/trait.PubTrait.html' '//pre' 'pub const CONST: usize;'
+//@ has 'foo/trait.PubTrait.html' '//pre' 'const CONST: usize;'
+//@ !has 'foo/trait.PubTrait.html' '//pre' 'pub const CONST: usize;'
 //
-// @has 'foo/trait.PubTrait.html' '//pre' 'fn function();'
-// @!has 'foo/trait.PubTrait.html' '//pre' 'pub fn function();'
+//@ has 'foo/trait.PubTrait.html' '//pre' 'fn function();'
+//@ !has 'foo/trait.PubTrait.html' '//pre' 'pub fn function();'
 //
-// @!has 'foo/index.html' '//a[@href="trait.PubTrait.html"]/..' 'PubTrait 🔒'
+//@ !has 'foo/index.html' '//a[@href="trait.PubTrait.html"]/..' 'PubTrait 🔒'
 
 pub trait PubTrait {
     type Type;
@@ -88,17 +88,17 @@ pub trait PubTrait {
     fn function();
 }
 
-// @has 'foo/index.html' '//a[@href="trait.PrivTrait.html"]/..' 'PrivTrait 🔒'
+//@ has 'foo/index.html' '//a[@href="trait.PrivTrait.html"]/..' 'PrivTrait 🔒'
 trait PrivTrait {}
 
-// @has 'foo/struct.FooPublic.html' '//h4[@class="code-header"]' 'type Type'
-// @!has 'foo/struct.FooPublic.html' '//h4[@class="code-header"]' 'pub type Type'
+//@ has 'foo/struct.FooPublic.html' '//h4[@class="code-header"]' 'type Type'
+//@ !has 'foo/struct.FooPublic.html' '//h4[@class="code-header"]' 'pub type Type'
 //
-// @has 'foo/struct.FooPublic.html' '//h4[@class="code-header"]' 'const CONST: usize'
-// @!has 'foo/struct.FooPublic.html' '//h4[@class="code-header"]' 'pub const CONST: usize'
+//@ has 'foo/struct.FooPublic.html' '//h4[@class="code-header"]' 'const CONST: usize'
+//@ !has 'foo/struct.FooPublic.html' '//h4[@class="code-header"]' 'pub const CONST: usize'
 //
-// @has 'foo/struct.FooPublic.html' '//h4[@class="code-header"]' 'fn function()'
-// @!has 'foo/struct.FooPublic.html' '//h4[@class="code-header"]' 'pub fn function()'
+//@ has 'foo/struct.FooPublic.html' '//h4[@class="code-header"]' 'fn function()'
+//@ !has 'foo/struct.FooPublic.html' '//h4[@class="code-header"]' 'pub fn function()'
 
 impl PubTrait for FooPublic {
     type Type = usize;
@@ -108,23 +108,23 @@ impl PubTrait for FooPublic {
 
 pub struct Assoc;
 
-// @has foo/struct.Assoc.html
+//@ has foo/struct.Assoc.html
 impl Assoc {
-    // @has - '//*[@id="associatedtype.TypePub"]' 'pub type TypePub'
+    //@ has - '//*[@id="associatedtype.TypePub"]' 'pub type TypePub'
     pub type TypePub = usize;
 
-    // @has - '//*[@id="associatedtype.TypePriv"]' 'pub(crate) type TypePriv'
+    //@ has - '//*[@id="associatedtype.TypePriv"]' 'pub(crate) type TypePriv'
     type TypePriv = usize;
 
-    // @has - '//*[@id="associatedconstant.CONST_PUB"]' 'pub const CONST_PUB'
+    //@ has - '//*[@id="associatedconstant.CONST_PUB"]' 'pub const CONST_PUB'
     pub const CONST_PUB: usize = 0;
 
-    // @has - '//*[@id="associatedconstant.CONST_PRIV"]' 'pub(crate) const CONST_PRIV'
+    //@ has - '//*[@id="associatedconstant.CONST_PRIV"]' 'pub(crate) const CONST_PRIV'
     const CONST_PRIV: usize = 0;
 
-    // @has - '//*[@id="method.function_pub"]' 'pub fn function_pub()'
+    //@ has - '//*[@id="method.function_pub"]' 'pub fn function_pub()'
     pub fn function_pub() {}
 
-    // @has - '//*[@id="method.function_priv"]' 'pub(crate) fn function_priv()'
+    //@ has - '//*[@id="method.function_priv"]' 'pub(crate) fn function_priv()'
     fn function_priv() {}
 }
diff --git a/tests/rustdoc/where-clause-order.rs b/tests/rustdoc/where-clause-order.rs
index e3184b646bf..d765fc10c72 100644
--- a/tests/rustdoc/where-clause-order.rs
+++ b/tests/rustdoc/where-clause-order.rs
@@ -6,8 +6,8 @@ where
 {
 }
 
-// @has 'foo/trait.SomeTrait.html'
-// @has - "//*[@id='impl-SomeTrait-for-(A,+B,+C,+D,+E)']/h3" "impl<A, B, C, D, E> SomeTrait for (A, B, C, D, E)where A: PartialOrd<A> + PartialEq<A>, B: PartialOrd<B> + PartialEq<B>, C: PartialOrd<C> + PartialEq<C>, D: PartialOrd<D> + PartialEq<D>, E: PartialOrd<E> + PartialEq<E> + ?Sized, "
+//@ has 'foo/trait.SomeTrait.html'
+//@ has - "//*[@id='impl-SomeTrait-for-(A,+B,+C,+D,+E)']/h3" "impl<A, B, C, D, E> SomeTrait for (A, B, C, D, E)where A: PartialOrd<A> + PartialEq<A>, B: PartialOrd<B> + PartialEq<B>, C: PartialOrd<C> + PartialEq<C>, D: PartialOrd<D> + PartialEq<D>, E: PartialOrd<E> + PartialEq<E> + ?Sized, "
 impl<A, B, C, D, E> SomeTrait<(A, B, C, D, E)> for (A, B, C, D, E)
 where
     A: PartialOrd<A> + PartialEq<A>,
@@ -18,7 +18,7 @@ where
 {
 }
 
-// @has - "//*[@id='impl-SomeTrait%3C(A,+B,+C,+D)%3E-for-(A,+B,+C,+D,+E)']/h3" "impl<A, B, C, D, E> SomeTrait<(A, B, C, D)> for (A, B, C, D, E)where A: PartialOrd<A> + PartialEq<A>, B: PartialOrd<B> + PartialEq<B>, C: PartialOrd<C> + PartialEq<C>, D: PartialOrd<D> + PartialEq<D>, E: PartialOrd<E> + PartialEq<E> + ?Sized, "
+//@ has - "//*[@id='impl-SomeTrait%3C(A,+B,+C,+D)%3E-for-(A,+B,+C,+D,+E)']/h3" "impl<A, B, C, D, E> SomeTrait<(A, B, C, D)> for (A, B, C, D, E)where A: PartialOrd<A> + PartialEq<A>, B: PartialOrd<B> + PartialEq<B>, C: PartialOrd<C> + PartialEq<C>, D: PartialOrd<D> + PartialEq<D>, E: PartialOrd<E> + PartialEq<E> + ?Sized, "
 impl<A, B, C, D, E> SomeTrait<(A, B, C, D)> for (A, B, C, D, E)
 where
     A: PartialOrd<A> + PartialEq<A>,
diff --git a/tests/rustdoc/where-sized.rs b/tests/rustdoc/where-sized.rs
index c1ac834b2fc..28907de68d6 100644
--- a/tests/rustdoc/where-sized.rs
+++ b/tests/rustdoc/where-sized.rs
@@ -1,6 +1,6 @@
 #![crate_name = "foo"]
 
-// @has foo/fn.foo.html
-// @has - '//pre[@class="rust item-decl"]' 'pub fn foo<X, Y: ?Sized>(_: &X)'
-// @has - '//pre[@class="rust item-decl"]' 'where X: ?Sized,'
+//@ has foo/fn.foo.html
+//@ has - '//pre[@class="rust item-decl"]' 'pub fn foo<X, Y: ?Sized>(_: &X)'
+//@ has - '//pre[@class="rust item-decl"]' 'where X: ?Sized,'
 pub fn foo<X, Y: ?Sized>(_: &X) where X: ?Sized {}
diff --git a/tests/rustdoc/where.rs b/tests/rustdoc/where.rs
index aea02c14039..aa1d61a0a18 100644
--- a/tests/rustdoc/where.rs
+++ b/tests/rustdoc/where.rs
@@ -4,35 +4,35 @@ use std::io::Lines;
 
 pub trait MyTrait { fn dummy(&self) { } }
 
-// @has foo/struct.Alpha.html '//pre' "pub struct Alpha<A>(/* private fields */) where A: MyTrait"
-// @snapshot alpha_trait_decl - '//*[@class="rust item-decl"]/code'
+//@ has foo/struct.Alpha.html '//pre' "pub struct Alpha<A>(/* private fields */) where A: MyTrait"
+//@ snapshot alpha_trait_decl - '//*[@class="rust item-decl"]/code'
 pub struct Alpha<A>(A) where A: MyTrait;
-// @has foo/trait.Bravo.html '//pre' "pub trait Bravo<B>where B: MyTrait"
-// @snapshot bravo_trait_decl - '//*[@class="rust item-decl"]/code'
+//@ has foo/trait.Bravo.html '//pre' "pub trait Bravo<B>where B: MyTrait"
+//@ snapshot bravo_trait_decl - '//*[@class="rust item-decl"]/code'
 pub trait Bravo<B> where B: MyTrait { fn get(&self, B: B); }
-// @has foo/fn.charlie.html '//pre' "pub fn charlie<C>()where C: MyTrait"
-// @snapshot charlie_fn_decl - '//*[@class="rust item-decl"]/code'
+//@ has foo/fn.charlie.html '//pre' "pub fn charlie<C>()where C: MyTrait"
+//@ snapshot charlie_fn_decl - '//*[@class="rust item-decl"]/code'
 pub fn charlie<C>() where C: MyTrait {}
 
 pub struct Delta<D>(D);
 
-// @has foo/struct.Delta.html '//*[@class="impl"]//h3[@class="code-header"]' \
+//@ has foo/struct.Delta.html '//*[@class="impl"]//h3[@class="code-header"]' \
 //          "impl<D> Delta<D>where D: MyTrait"
-// @snapshot SWhere_Echo_impl - '//*[@id="impl-Delta%3CD%3E"]/h3[@class="code-header"]'
+//@ snapshot SWhere_Echo_impl - '//*[@id="impl-Delta%3CD%3E"]/h3[@class="code-header"]'
 impl<D> Delta<D> where D: MyTrait {
     pub fn delta() {}
 }
 
 pub struct Echo<E>(E);
 
-// @has 'foo/struct.Simd.html'
-// @snapshot SWhere_Simd_item-decl - '//pre[@class="rust item-decl"]'
+//@ has 'foo/struct.Simd.html'
+//@ snapshot SWhere_Simd_item-decl - '//pre[@class="rust item-decl"]'
 pub struct Simd<T>([T; 1])
 where
     T: MyTrait;
 
-// @has 'foo/trait.TraitWhere.html'
-// @snapshot SWhere_TraitWhere_item-decl - '//pre[@class="rust item-decl"]'
+//@ has 'foo/trait.TraitWhere.html'
+//@ snapshot SWhere_TraitWhere_item-decl - '//pre[@class="rust item-decl"]'
 pub trait TraitWhere {
     type Item<'a> where Self: 'a;
 
@@ -53,21 +53,21 @@ pub trait TraitWhere {
     { todo!() }
 }
 
-// @has foo/struct.Echo.html '//*[@class="impl"]//h3[@class="code-header"]' \
+//@ has foo/struct.Echo.html '//*[@class="impl"]//h3[@class="code-header"]' \
 //          "impl<E> MyTrait for Echo<E>where E: MyTrait"
-// @has foo/trait.MyTrait.html '//*[@id="implementors-list"]//h3[@class="code-header"]' \
+//@ has foo/trait.MyTrait.html '//*[@id="implementors-list"]//h3[@class="code-header"]' \
 //          "impl<E> MyTrait for Echo<E>where E: MyTrait"
 impl<E> MyTrait for Echo<E>where E: MyTrait {}
 
 pub enum Foxtrot<F> { Foxtrot1(F) }
 
-// @has foo/enum.Foxtrot.html '//*[@class="impl"]//h3[@class="code-header"]' \
+//@ has foo/enum.Foxtrot.html '//*[@class="impl"]//h3[@class="code-header"]' \
 //          "impl<F> MyTrait for Foxtrot<F>where F: MyTrait"
-// @has foo/trait.MyTrait.html '//*[@id="implementors-list"]//h3[@class="code-header"]' \
+//@ has foo/trait.MyTrait.html '//*[@id="implementors-list"]//h3[@class="code-header"]' \
 //          "impl<F> MyTrait for Foxtrot<F>where F: MyTrait"
 impl<F> MyTrait for Foxtrot<F>where F: MyTrait {}
 
-// @has foo/type.Golf.html '//pre[@class="rust item-decl"]' \
+//@ has foo/type.Golf.html '//pre[@class="rust item-decl"]' \
 //          "type Golf<T>where T: Clone, = (T, T)"
-// @snapshot golf_type_alias_decl - '//*[@class="rust item-decl"]/code'
+//@ snapshot golf_type_alias_decl - '//*[@class="rust item-decl"]/code'
 pub type Golf<T> where T: Clone = (T, T);
diff --git a/tests/rustdoc/whitespace-after-where-clause.rs b/tests/rustdoc/whitespace-after-where-clause.rs
index 832d3728e75..d1a45c7a768 100644
--- a/tests/rustdoc/whitespace-after-where-clause.rs
+++ b/tests/rustdoc/whitespace-after-where-clause.rs
@@ -3,8 +3,8 @@
 
 #![crate_name = "foo"]
 
-// @has 'foo/trait.ToOwned.html'
-// @snapshot trait - '//*[@class="rust item-decl"]'
+//@ has 'foo/trait.ToOwned.html'
+//@ snapshot trait - '//*[@class="rust item-decl"]'
 pub trait ToOwned<T>
 where
     T: Clone,
@@ -14,8 +14,8 @@ where
     fn whatever(&self) -> T;
 }
 
-// @has 'foo/trait.ToOwned2.html'
-// @snapshot trait2 - '//*[@class="rust item-decl"]'
+//@ has 'foo/trait.ToOwned2.html'
+//@ snapshot trait2 - '//*[@class="rust item-decl"]'
 // There should be a whitespace before `{` in this case!
 pub trait ToOwned2<T: Clone> {
     type Owned;
@@ -23,8 +23,8 @@ pub trait ToOwned2<T: Clone> {
     fn whatever(&self) -> T;
 }
 
-// @has 'foo/enum.Cow.html'
-// @snapshot enum - '//*[@class="rust item-decl"]'
+//@ has 'foo/enum.Cow.html'
+//@ snapshot enum - '//*[@class="rust item-decl"]'
 pub enum Cow<'a, B: ?Sized + 'a>
 where
     B: ToOwned<()>,
@@ -33,16 +33,16 @@ where
     Whatever(u32),
 }
 
-// @has 'foo/enum.Cow2.html'
-// @snapshot enum2 - '//*[@class="rust item-decl"]'
+//@ has 'foo/enum.Cow2.html'
+//@ snapshot enum2 - '//*[@class="rust item-decl"]'
 // There should be a whitespace before `{` in this case!
 pub enum Cow2<'a, B: ?Sized + ToOwned<()> + 'a> {
     Borrowed(&'a B),
     Whatever(u32),
 }
 
-// @has 'foo/struct.Struct.html'
-// @snapshot struct - '//*[@class="rust item-decl"]'
+//@ has 'foo/struct.Struct.html'
+//@ snapshot struct - '//*[@class="rust item-decl"]'
 pub struct Struct<'a, B: ?Sized + 'a>
 where
     B: ToOwned<()>,
@@ -51,16 +51,16 @@ where
     pub b: u32,
 }
 
-// @has 'foo/struct.Struct2.html'
-// @snapshot struct2 - '//*[@class="rust item-decl"]'
+//@ has 'foo/struct.Struct2.html'
+//@ snapshot struct2 - '//*[@class="rust item-decl"]'
 // There should be a whitespace before `{` in this case!
 pub struct Struct2<'a, B: ?Sized + ToOwned<()> + 'a> {
     pub a: &'a B,
     pub b: u32,
 }
 
-// @has 'foo/union.Union.html'
-// @snapshot union - '//*[@class="rust item-decl"]'
+//@ has 'foo/union.Union.html'
+//@ snapshot union - '//*[@class="rust item-decl"]'
 pub union Union<'a, B: ?Sized + 'a>
 where
     B: ToOwned<()>,
@@ -69,8 +69,8 @@ where
     b: u32,
 }
 
-// @has 'foo/union.Union2.html'
-// @snapshot union2 - '//*[@class="rust item-decl"]'
+//@ has 'foo/union.Union2.html'
+//@ snapshot union2 - '//*[@class="rust item-decl"]'
 // There should be a whitespace before `{` in this case!
 pub union Union2<'a, B: ?Sized + ToOwned<()> + 'a> {
     a: &'a B,
diff --git a/tests/rustdoc/without-redirect.rs b/tests/rustdoc/without-redirect.rs
index a076f8a3c5e..f8a332a5dd7 100644
--- a/tests/rustdoc/without-redirect.rs
+++ b/tests/rustdoc/without-redirect.rs
@@ -1,13 +1,13 @@
 #![crate_name = "foo"]
 
-// @has foo/macro.bar.html
-// @has foo/macro.bar!.html
-// @!has foo/bar.m.html
+//@ has foo/macro.bar.html
+//@ has foo/macro.bar!.html
+//@ !has foo/bar.m.html
 #[macro_export]
 macro_rules! bar {
     () => {}
 }
 
-// @has foo/struct.Bar.html
-// @!has foo/Bar.t.html
+//@ has foo/struct.Bar.html
+//@ !has foo/Bar.t.html
 pub struct Bar;
diff --git a/tests/rustdoc/wrapping.rs b/tests/rustdoc/wrapping.rs
index dd5c700329f..43146c73dd0 100644
--- a/tests/rustdoc/wrapping.rs
+++ b/tests/rustdoc/wrapping.rs
@@ -1,5 +1,5 @@
 use std::fmt::Debug;
 
-// @has 'wrapping/fn.foo.html' '//pre[@class="rust item-decl"]' 'pub fn foo() -> impl Debug'
-// @count - '//pre[@class="rust item-decl"]/br' 0
+//@ has 'wrapping/fn.foo.html' '//pre[@class="rust item-decl"]' 'pub fn foo() -> impl Debug'
+//@ count - '//pre[@class="rust item-decl"]/br' 0
 pub fn foo() -> impl Debug {}
diff --git a/tests/ui-fulldeps/stable-mir/check_abi.rs b/tests/ui-fulldeps/stable-mir/check_abi.rs
index 359dd4146ba..7518ea902ec 100644
--- a/tests/ui-fulldeps/stable-mir/check_abi.rs
+++ b/tests/ui-fulldeps/stable-mir/check_abi.rs
@@ -54,6 +54,21 @@ fn test_stable_mir() -> ControlFlow<()> {
     let variadic_fn = *get_item(&items, (ItemKind::Fn, "variadic_fn")).unwrap();
     check_variadic(variadic_fn);
 
+    // Extract function pointers.
+    let fn_ptr_holder = *get_item(&items, (ItemKind::Fn, "fn_ptr_holder")).unwrap();
+    let fn_ptr_holder_instance = Instance::try_from(fn_ptr_holder).unwrap();
+    let body = fn_ptr_holder_instance.body().unwrap();
+    let args = body.arg_locals();
+
+    // Test fn_abi of function pointer version.
+    let ptr_fn_abi = args[0].ty.kind().fn_sig().unwrap().fn_ptr_abi().unwrap();
+    assert_eq!(ptr_fn_abi, fn_abi);
+
+    // Test variadic_fn of function pointer version.
+    let ptr_variadic_fn_abi = args[1].ty.kind().fn_sig().unwrap().fn_ptr_abi().unwrap();
+    assert!(ptr_variadic_fn_abi.c_variadic);
+    assert_eq!(ptr_variadic_fn_abi.args.len(), 1);
+
     ControlFlow::Continue(())
 }
 
@@ -164,6 +179,14 @@ fn generate_input(path: &str) -> std::io::Result<()> {
         pub unsafe extern "C" fn variadic_fn(n: usize, mut args: ...) -> usize {{
             0
         }}
+
+        pub type ComplexFn = fn([u8; 0], char, NonZero<u8>) -> Result<usize, &'static str>;
+        pub type VariadicFn = unsafe extern "C" fn(usize, ...) -> usize;
+
+        pub fn fn_ptr_holder(complex_fn: ComplexFn, variadic_fn: VariadicFn) {{
+            // We only care about the signature.
+            todo!()
+        }}
         "#
     )?;
     Ok(())
diff --git a/tests/ui/abi/abi-typo-unstable.stderr b/tests/ui/abi/abi-typo-unstable.stderr
index d31cc2a896f..9ba67ad7dbe 100644
--- a/tests/ui/abi/abi-typo-unstable.stderr
+++ b/tests/ui/abi/abi-typo-unstable.stderr
@@ -4,7 +4,7 @@ error[E0703]: invalid ABI: found `rust-intrinsec`
 LL | extern "rust-intrinsec" fn rust_intrinsic() {}
    |        ^^^^^^^^^^^^^^^^ invalid ABI
    |
-   = note: invoke `rustc --print=calling-conventions` for a full list of supported calling conventions.
+   = note: invoke `rustc --print=calling-conventions` for a full list of supported calling conventions
 
 error: aborting due to 1 previous error
 
diff --git a/tests/ui/abi/riscv-discoverability-guidance.riscv32.stderr b/tests/ui/abi/riscv-discoverability-guidance.riscv32.stderr
index 02082c13f91..e80411fda34 100644
--- a/tests/ui/abi/riscv-discoverability-guidance.riscv32.stderr
+++ b/tests/ui/abi/riscv-discoverability-guidance.riscv32.stderr
@@ -7,7 +7,7 @@ LL | extern "riscv-interrupt" fn isr() {}
    |        invalid ABI
    |        help: did you mean: `"riscv-interrupt-m"`
    |
-   = note: invoke `rustc --print=calling-conventions` for a full list of supported calling conventions.
+   = note: invoke `rustc --print=calling-conventions` for a full list of supported calling conventions
    = note: please use one of riscv-interrupt-m or riscv-interrupt-s for machine- or supervisor-level interrupts, respectively
 
 error[E0703]: invalid ABI: found `riscv-interrupt-u`
@@ -19,7 +19,7 @@ LL | extern "riscv-interrupt-u" fn isr_U() {}
    |        invalid ABI
    |        help: did you mean: `"riscv-interrupt-m"`
    |
-   = note: invoke `rustc --print=calling-conventions` for a full list of supported calling conventions.
+   = note: invoke `rustc --print=calling-conventions` for a full list of supported calling conventions
    = note: user-mode interrupt handlers have been removed from LLVM pending standardization, see: https://reviews.llvm.org/D149314
 
 error: aborting due to 2 previous errors
diff --git a/tests/ui/abi/riscv-discoverability-guidance.riscv64.stderr b/tests/ui/abi/riscv-discoverability-guidance.riscv64.stderr
index 02082c13f91..e80411fda34 100644
--- a/tests/ui/abi/riscv-discoverability-guidance.riscv64.stderr
+++ b/tests/ui/abi/riscv-discoverability-guidance.riscv64.stderr
@@ -7,7 +7,7 @@ LL | extern "riscv-interrupt" fn isr() {}
    |        invalid ABI
    |        help: did you mean: `"riscv-interrupt-m"`
    |
-   = note: invoke `rustc --print=calling-conventions` for a full list of supported calling conventions.
+   = note: invoke `rustc --print=calling-conventions` for a full list of supported calling conventions
    = note: please use one of riscv-interrupt-m or riscv-interrupt-s for machine- or supervisor-level interrupts, respectively
 
 error[E0703]: invalid ABI: found `riscv-interrupt-u`
@@ -19,7 +19,7 @@ LL | extern "riscv-interrupt-u" fn isr_U() {}
    |        invalid ABI
    |        help: did you mean: `"riscv-interrupt-m"`
    |
-   = note: invoke `rustc --print=calling-conventions` for a full list of supported calling conventions.
+   = note: invoke `rustc --print=calling-conventions` for a full list of supported calling conventions
    = note: user-mode interrupt handlers have been removed from LLVM pending standardization, see: https://reviews.llvm.org/D149314
 
 error: aborting due to 2 previous errors
diff --git a/tests/ui/abi/variadic-ffi.rs b/tests/ui/abi/variadic-ffi.rs
index de4844ac860..6cfae0f2a32 100644
--- a/tests/ui/abi/variadic-ffi.rs
+++ b/tests/ui/abi/variadic-ffi.rs
@@ -14,6 +14,10 @@ pub unsafe extern "C" fn test_valist_forward(n: u64, mut ap: ...) -> f64 {
     rust_valist_interesting_average(n, ap.as_va_list())
 }
 
+pub unsafe extern "C-unwind" fn c_unwind_can_forward(n: u64, mut ap: ...) -> f64 {
+    rust_valist_interesting_average(n, ap.as_va_list())
+}
+
 pub unsafe extern "C" fn test_va_copy(_: u64, mut ap: ...) {
     let mut ap2 = ap.clone();
     assert_eq!(rust_valist_interesting_average(2, ap2.as_va_list()) as i64, 30);
@@ -73,6 +77,10 @@ pub fn main() {
     }
 
     unsafe {
+        assert_eq!(c_unwind_can_forward(2, 10i64, 10f64, 20i64, 20f64) as i64, 30);
+    }
+
+    unsafe {
         test_va_copy(4, 10i64, 10f64, 20i64, 20f64, 30i64, 30f64, 40i64, 40f64);
     }
 }
diff --git a/tests/ui/asm/aarch64/may_unwind.rs b/tests/ui/asm/aarch64/may_unwind.rs
index a483008c364..01d52f9022d 100644
--- a/tests/ui/asm/aarch64/may_unwind.rs
+++ b/tests/ui/asm/aarch64/may_unwind.rs
@@ -16,7 +16,7 @@ impl Drop for Foo<'_> {
     }
 }
 
-extern "C" fn panicky() {
+extern "C-unwind" fn panicky() {
     resume_unwind(Box::new(()));
 }
 
diff --git a/tests/ui/asm/arm-low-dreg.rs b/tests/ui/asm/arm-low-dreg.rs
new file mode 100644
index 00000000000..e9ff0117e2d
--- /dev/null
+++ b/tests/ui/asm/arm-low-dreg.rs
@@ -0,0 +1,33 @@
+//@ build-pass
+//@ compile-flags: --target=armv7-unknown-linux-gnueabihf
+//@ needs-llvm-components: arm
+#![feature(no_core, rustc_attrs, decl_macro, lang_items)]
+#![crate_type = "rlib"]
+#![no_std]
+#![no_core]
+
+// We accidentally classified "d0"..="d15" as dregs, even though they are in dreg_low16,
+// and thus didn't compile them on platforms with only 16 dregs.
+// Highlighted in https://github.com/rust-lang/rust/issues/126797
+
+#[lang = "sized"]
+trait Sized {}
+
+#[lang = "copy"]
+trait Copy {}
+
+impl Copy for f64 {}
+
+#[rustc_builtin_macro]
+pub macro asm("assembly template", $(operands,)* $(options($(option),*))?) {
+    /* compiler built-in */
+}
+
+
+fn f(x: f64) -> f64 {
+    let out: f64;
+    unsafe {
+        asm!("vmov.f64 d1, d0", out("d1") out, in("d0") x);
+    }
+    out
+}
diff --git a/tests/ui/asm/x86_64/may_unwind.rs b/tests/ui/asm/x86_64/may_unwind.rs
index 3b2c1edcd47..d3a2916df9d 100644
--- a/tests/ui/asm/x86_64/may_unwind.rs
+++ b/tests/ui/asm/x86_64/may_unwind.rs
@@ -16,7 +16,7 @@ impl Drop for Foo<'_> {
     }
 }
 
-extern "C" fn panicky() {
+extern "C-unwind" fn panicky() {
     resume_unwind(Box::new(()));
 }
 
diff --git a/tests/ui/async-await/async-is-unwindsafe.stderr b/tests/ui/async-await/async-is-unwindsafe.stderr
index 5d87fc74768..85fdcda3b8c 100644
--- a/tests/ui/async-await/async-is-unwindsafe.stderr
+++ b/tests/ui/async-await/async-is-unwindsafe.stderr
@@ -2,9 +2,8 @@ error[E0277]: the type `&mut Context<'_>` may not be safely transferred across a
   --> $DIR/async-is-unwindsafe.rs:12:5
    |
 LL |        is_unwindsafe(async {
-   |   _____^_____________-
-   |  |_____|
-   | ||
+   |  ______^             -
+   | | ___________________|
 LL | ||
 LL | ||         use std::ptr::null;
 LL | ||         use std::task::{Context, RawWaker, RawWakerVTable, Waker};
diff --git a/tests/ui/attributes/dump-preds.rs b/tests/ui/attributes/dump-preds.rs
new file mode 100644
index 00000000000..1e15ff2f9bd
--- /dev/null
+++ b/tests/ui/attributes/dump-preds.rs
@@ -0,0 +1,20 @@
+//@ normalize-stderr-test "DefId\(.+?\)" -> "DefId(..)"
+
+#![feature(rustc_attrs)]
+
+#[rustc_dump_predicates]
+trait Trait<T>: Iterator<Item: Copy>
+//~^ ERROR rustc_dump_predicates
+where
+    String: From<T>
+{
+    #[rustc_dump_predicates]
+    #[rustc_dump_item_bounds]
+    type Assoc<P: Eq>: std::ops::Deref<Target = ()>
+    //~^ ERROR rustc_dump_predicates
+    //~| ERROR rustc_dump_item_bounds
+    where
+        Self::Assoc<()>: Copy;
+}
+
+fn main() {}
diff --git a/tests/ui/attributes/dump-preds.stderr b/tests/ui/attributes/dump-preds.stderr
new file mode 100644
index 00000000000..26834376e76
--- /dev/null
+++ b/tests/ui/attributes/dump-preds.stderr
@@ -0,0 +1,39 @@
+error: rustc_dump_predicates
+  --> $DIR/dump-preds.rs:6:1
+   |
+LL | trait Trait<T>: Iterator<Item: Copy>
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+   |
+   = note: Binder { value: TraitPredicate(<Self as std::iter::Iterator>, polarity:Positive), bound_vars: [] }
+   = note: Binder { value: TraitPredicate(<<Self as std::iter::Iterator>::Item as std::marker::Copy>, polarity:Positive), bound_vars: [] }
+   = note: Binder { value: TraitPredicate(<T as std::marker::Sized>, polarity:Positive), bound_vars: [] }
+   = note: Binder { value: TraitPredicate(<std::string::String as std::convert::From<T>>, polarity:Positive), bound_vars: [] }
+   = note: Binder { value: TraitPredicate(<Self as Trait<T>>, polarity:Positive), bound_vars: [] }
+
+error: rustc_dump_predicates
+  --> $DIR/dump-preds.rs:13:5
+   |
+LL |     type Assoc<P: Eq>: std::ops::Deref<Target = ()>
+   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+   |
+   = note: Binder { value: TraitPredicate(<Self as std::iter::Iterator>, polarity:Positive), bound_vars: [] }
+   = note: Binder { value: TraitPredicate(<<Self as std::iter::Iterator>::Item as std::marker::Copy>, polarity:Positive), bound_vars: [] }
+   = note: Binder { value: TraitPredicate(<T as std::marker::Sized>, polarity:Positive), bound_vars: [] }
+   = note: Binder { value: TraitPredicate(<std::string::String as std::convert::From<T>>, polarity:Positive), bound_vars: [] }
+   = note: Binder { value: TraitPredicate(<Self as Trait<T>>, polarity:Positive), bound_vars: [] }
+   = note: Binder { value: TraitPredicate(<P as std::marker::Sized>, polarity:Positive), bound_vars: [] }
+   = note: Binder { value: TraitPredicate(<P as std::cmp::Eq>, polarity:Positive), bound_vars: [] }
+   = note: Binder { value: TraitPredicate(<<Self as Trait<T>>::Assoc<()> as std::marker::Copy>, polarity:Positive), bound_vars: [] }
+
+error: rustc_dump_item_bounds
+  --> $DIR/dump-preds.rs:13:5
+   |
+LL |     type Assoc<P: Eq>: std::ops::Deref<Target = ()>
+   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+   |
+   = note: Binder { value: ProjectionPredicate(AliasTerm { args: [Alias(Projection, AliasTy { args: [Self/#0, T/#1, P/#2], def_id: DefId(..) })], def_id: DefId(..) }, Term::Ty(())), bound_vars: [] }
+   = note: Binder { value: TraitPredicate(<<Self as Trait<T>>::Assoc<P> as std::ops::Deref>, polarity:Positive), bound_vars: [] }
+   = note: Binder { value: TraitPredicate(<<Self as Trait<T>>::Assoc<P> as std::marker::Sized>, polarity:Positive), bound_vars: [] }
+
+error: aborting due to 3 previous errors
+
diff --git a/tests/ui/attributes/unsafe/double-unsafe-attributes.stderr b/tests/ui/attributes/unsafe/double-unsafe-attributes.stderr
index 1c07a5bf8ba..ea82bac6df0 100644
--- a/tests/ui/attributes/unsafe/double-unsafe-attributes.stderr
+++ b/tests/ui/attributes/unsafe/double-unsafe-attributes.stderr
@@ -9,12 +9,6 @@ help: escape `unsafe` to use it as an identifier
 LL | #[unsafe(r#unsafe(no_mangle))]
    |          ++
 
-error: cannot find attribute `r#unsafe` in this scope
-  --> $DIR/double-unsafe-attributes.rs:3:10
-   |
-LL | #[unsafe(unsafe(no_mangle))]
-   |          ^^^^^^
-
 error: `r#unsafe` is not an unsafe attribute
   --> $DIR/double-unsafe-attributes.rs:3:3
    |
@@ -23,5 +17,11 @@ LL | #[unsafe(unsafe(no_mangle))]
    |
    = note: extraneous unsafe is not allowed in attributes
 
+error: cannot find attribute `r#unsafe` in this scope
+  --> $DIR/double-unsafe-attributes.rs:3:10
+   |
+LL | #[unsafe(unsafe(no_mangle))]
+   |          ^^^^^^
+
 error: aborting due to 3 previous errors
 
diff --git a/tests/ui/c-variadic/issue-86053-1.stderr b/tests/ui/c-variadic/issue-86053-1.stderr
index 69e19e1d4d2..67a619e46d5 100644
--- a/tests/ui/c-variadic/issue-86053-1.stderr
+++ b/tests/ui/c-variadic/issue-86053-1.stderr
@@ -46,7 +46,7 @@ error: `...` must be the last argument of a C-variadic function
 LL |     self , ... ,   self ,   self , ... ) where F : FnOnce ( & 'a & 'b usize ) {
    |            ^^^
 
-error: only foreign or `unsafe extern "C"` functions may be C-variadic
+error: only foreign, `unsafe extern "C"`, or `unsafe extern "C-unwind"` functions may have a C-variadic arg
   --> $DIR/issue-86053-1.rs:11:12
    |
 LL |     self , ... ,   self ,   self , ... ) where F : FnOnce ( & 'a & 'b usize ) {
diff --git a/tests/ui/check-cfg/mix.stderr b/tests/ui/check-cfg/mix.stderr
index b3d0046fc17..cc63466585a 100644
--- a/tests/ui/check-cfg/mix.stderr
+++ b/tests/ui/check-cfg/mix.stderr
@@ -251,7 +251,7 @@ warning: unexpected `cfg` condition value: `zebra`
 LL |     cfg!(target_feature = "zebra");
    |          ^^^^^^^^^^^^^^^^^^^^^^^^
    |
-   = note: expected values for `target_feature` are: `10e60`, `2e3`, `3e3r1`, `3e3r2`, `3e3r3`, `3e7`, `7e10`, `a`, `aclass`, `adx`, `aes`, `altivec`, `alu32`, `atomics`, `avx`, `avx2`, `avx512bf16`, `avx512bitalg`, `avx512bw`, `avx512cd`, `avx512dq`, `avx512f`, `avx512fp16`, `avx512ifma`, `avx512vbmi`, `avx512vbmi2`, `avx512vl`, `avx512vnni`, `avx512vp2intersect`, `avx512vpopcntdq`, `bf16`, `bmi1`, `bmi2`, `bti`, and `bulk-memory` and 186 more
+   = note: expected values for `target_feature` are: `10e60`, `2e3`, `3e3r1`, `3e3r2`, `3e3r3`, `3e7`, `7e10`, `a`, `aclass`, `adx`, `aes`, `altivec`, `alu32`, `atomics`, `avx`, `avx2`, `avx512bf16`, `avx512bitalg`, `avx512bw`, `avx512cd`, `avx512dq`, `avx512f`, `avx512fp16`, `avx512ifma`, `avx512vbmi`, `avx512vbmi2`, `avx512vl`, `avx512vnni`, `avx512vp2intersect`, `avx512vpopcntdq`, `avxifma`, `avxneconvert`, `avxvnni`, `avxvnniint16`, and `avxvnniint8` and 191 more
    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg.html> for more information about checking conditional configuration
 
 warning: 27 warnings emitted
diff --git a/tests/ui/check-cfg/well-known-values.stderr b/tests/ui/check-cfg/well-known-values.stderr
index d2026a68450..8a99ace75d8 100644
--- a/tests/ui/check-cfg/well-known-values.stderr
+++ b/tests/ui/check-cfg/well-known-values.stderr
@@ -165,7 +165,7 @@ warning: unexpected `cfg` condition value: `_UNEXPECTED_VALUE`
 LL |     target_feature = "_UNEXPECTED_VALUE",
    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |
-   = note: expected values for `target_feature` are: `10e60`, `2e3`, `3e3r1`, `3e3r2`, `3e3r3`, `3e7`, `7e10`, `a`, `aclass`, `adx`, `aes`, `altivec`, `alu32`, `atomics`, `avx`, `avx2`, `avx512bf16`, `avx512bitalg`, `avx512bw`, `avx512cd`, `avx512dq`, `avx512f`, `avx512fp16`, `avx512ifma`, `avx512vbmi`, `avx512vbmi2`, `avx512vl`, `avx512vnni`, `avx512vp2intersect`, `avx512vpopcntdq`, `bf16`, `bmi1`, `bmi2`, `bti`, `bulk-memory`, `c`, `cache`, `cmpxchg16b`, `crc`, `crt-static`, `d`, `d32`, `dit`, `doloop`, `dotprod`, `dpb`, `dpb2`, `dsp`, `dsp1e2`, `dspe60`, `e`, `e1`, `e2`, `edsp`, `elrw`, `ermsb`, `exception-handling`, `extended-const`, `f`, `f16c`, `f32mm`, `f64mm`, `fcma`, `fdivdu`, `fhm`, `flagm`, `float1e2`, `float1e3`, `float3e4`, `float7e60`, `floate1`, `fma`, `fp-armv8`, `fp16`, `fp64`, `fpuv2_df`, `fpuv2_sf`, `fpuv3_df`, `fpuv3_hf`, `fpuv3_hi`, `fpuv3_sf`, `frecipe`, `frintts`, `fxsr`, `gfni`, `hard-float`, `hard-float-abi`, `hard-tp`, `high-registers`, `hvx`, `hvx-length128b`, `hwdiv`, `i8mm`, `jsconv`, `lahfsahf`, `lasx`, `lbt`, `lor`, `lse`, `lsx`, `lvz`, `lzcnt`, `m`, `mclass`, `movbe`, `mp`, `mp1e2`, `msa`, `mte`, `multivalue`, `mutable-globals`, `neon`, `nontrapping-fptoint`, `nvic`, `paca`, `pacg`, `pan`, `pclmulqdq`, `pmuv3`, `popcnt`, `power10-vector`, `power8-altivec`, `power8-vector`, `power9-altivec`, `power9-vector`, `prfchw`, `rand`, `ras`, `rclass`, `rcpc`, `rcpc2`, `rdm`, `rdrand`, `rdseed`, `reference-types`, `relax`, `relaxed-simd`, `rtm`, `sb`, `sha`, `sha2`, `sha3`, `sign-ext`, `simd128`, `sm4`, `spe`, `ssbs`, `sse`, `sse2`, `sse3`, `sse4.1`, `sse4.2`, `sse4a`, `ssse3`, `sve`, `sve2`, `sve2-aes`, `sve2-bitperm`, `sve2-sha3`, `sve2-sm4`, `tbm`, `thumb-mode`, `thumb2`, `tme`, `trust`, `trustzone`, `ual`, `unaligned-scalar-mem`, `v`, `v5te`, `v6`, `v6k`, `v6t2`, `v7`, `v8`, `v8.1a`, `v8.2a`, `v8.3a`, `v8.4a`, `v8.5a`, `v8.6a`, `v8.7a`, `vaes`, `vdsp2e60f`, `vdspv1`, `vdspv2`, `vfp2`, `vfp3`, `vfp4`, `vh`, `virt`, `virtualization`, `vpclmulqdq`, `vsx`, `xsave`, `xsavec`, `xsaveopt`, `xsaves`, `zba`, `zbb`, `zbc`, `zbkb`, `zbkc`, `zbkx`, `zbs`, `zdinx`, `zfh`, `zfhmin`, `zfinx`, `zhinx`, `zhinxmin`, `zk`, `zkn`, `zknd`, `zkne`, `zknh`, `zkr`, `zks`, `zksed`, `zksh`, and `zkt`
+   = note: expected values for `target_feature` are: `10e60`, `2e3`, `3e3r1`, `3e3r2`, `3e3r3`, `3e7`, `7e10`, `a`, `aclass`, `adx`, `aes`, `altivec`, `alu32`, `atomics`, `avx`, `avx2`, `avx512bf16`, `avx512bitalg`, `avx512bw`, `avx512cd`, `avx512dq`, `avx512f`, `avx512fp16`, `avx512ifma`, `avx512vbmi`, `avx512vbmi2`, `avx512vl`, `avx512vnni`, `avx512vp2intersect`, `avx512vpopcntdq`, `avxifma`, `avxneconvert`, `avxvnni`, `avxvnniint16`, `avxvnniint8`, `bf16`, `bmi1`, `bmi2`, `bti`, `bulk-memory`, `c`, `cache`, `cmpxchg16b`, `crc`, `crt-static`, `d`, `d32`, `dit`, `doloop`, `dotprod`, `dpb`, `dpb2`, `dsp`, `dsp1e2`, `dspe60`, `e`, `e1`, `e2`, `edsp`, `elrw`, `ermsb`, `exception-handling`, `extended-const`, `f`, `f16c`, `f32mm`, `f64mm`, `fcma`, `fdivdu`, `fhm`, `flagm`, `float1e2`, `float1e3`, `float3e4`, `float7e60`, `floate1`, `fma`, `fp-armv8`, `fp16`, `fp64`, `fpuv2_df`, `fpuv2_sf`, `fpuv3_df`, `fpuv3_hf`, `fpuv3_hi`, `fpuv3_sf`, `frecipe`, `frintts`, `fxsr`, `gfni`, `hard-float`, `hard-float-abi`, `hard-tp`, `high-registers`, `hvx`, `hvx-length128b`, `hwdiv`, `i8mm`, `jsconv`, `lahfsahf`, `lasx`, `lbt`, `lor`, `lse`, `lsx`, `lvz`, `lzcnt`, `m`, `mclass`, `movbe`, `mp`, `mp1e2`, `msa`, `mte`, `multivalue`, `mutable-globals`, `neon`, `nontrapping-fptoint`, `nvic`, `paca`, `pacg`, `pan`, `pclmulqdq`, `pmuv3`, `popcnt`, `power10-vector`, `power8-altivec`, `power8-vector`, `power9-altivec`, `power9-vector`, `prfchw`, `rand`, `ras`, `rclass`, `rcpc`, `rcpc2`, `rdm`, `rdrand`, `rdseed`, `reference-types`, `relax`, `relaxed-simd`, `rtm`, `sb`, `sha`, `sha2`, `sha3`, `sign-ext`, `simd128`, `sm4`, `spe`, `ssbs`, `sse`, `sse2`, `sse3`, `sse4.1`, `sse4.2`, `sse4a`, `ssse3`, `sve`, `sve2`, `sve2-aes`, `sve2-bitperm`, `sve2-sha3`, `sve2-sm4`, `tbm`, `thumb-mode`, `thumb2`, `tme`, `trust`, `trustzone`, `ual`, `unaligned-scalar-mem`, `v`, `v5te`, `v6`, `v6k`, `v6t2`, `v7`, `v8`, `v8.1a`, `v8.2a`, `v8.3a`, `v8.4a`, `v8.5a`, `v8.6a`, `v8.7a`, `vaes`, `vdsp2e60f`, `vdspv1`, `vdspv2`, `vfp2`, `vfp3`, `vfp4`, `vh`, `virt`, `virtualization`, `vpclmulqdq`, `vsx`, `xsave`, `xsavec`, `xsaveopt`, `xsaves`, `zba`, `zbb`, `zbc`, `zbkb`, `zbkc`, `zbkx`, `zbs`, `zdinx`, `zfh`, `zfhmin`, `zfinx`, `zhinx`, `zhinxmin`, `zk`, `zkn`, `zknd`, `zkne`, `zknh`, `zkr`, `zks`, `zksed`, `zksh`, and `zkt`
    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg.html> for more information about checking conditional configuration
 
 warning: unexpected `cfg` condition value: `_UNEXPECTED_VALUE`
diff --git a/tests/ui/closures/2229_closure_analysis/migrations/auto_traits.stderr b/tests/ui/closures/2229_closure_analysis/migrations/auto_traits.stderr
index 856ec4a5b9e..fdcada468e0 100644
--- a/tests/ui/closures/2229_closure_analysis/migrations/auto_traits.stderr
+++ b/tests/ui/closures/2229_closure_analysis/migrations/auto_traits.stderr
@@ -17,7 +17,7 @@ help: add a dummy let to cause `fptr` to be fully captured
    |
 LL ~     thread::spawn(move || { let _ = &fptr; unsafe {
 LL |
- ...
+...
 LL |
 LL ~     } }).join().unwrap();
    |
@@ -39,7 +39,7 @@ help: add a dummy let to cause `fptr` to be fully captured
    |
 LL ~     thread::spawn(move || { let _ = &fptr; unsafe {
 LL |
- ...
+...
 LL |
 LL ~     } }).join().unwrap();
    |
diff --git a/tests/ui/closures/2229_closure_analysis/migrations/multi_diagnostics.stderr b/tests/ui/closures/2229_closure_analysis/migrations/multi_diagnostics.stderr
index 344bc662ee7..138778ff5d7 100644
--- a/tests/ui/closures/2229_closure_analysis/migrations/multi_diagnostics.stderr
+++ b/tests/ui/closures/2229_closure_analysis/migrations/multi_diagnostics.stderr
@@ -109,7 +109,7 @@ help: add a dummy let to cause `fptr1`, `fptr2` to be fully captured
    |
 LL ~     thread::spawn(move || { let _ = (&fptr1, &fptr2); unsafe {
 LL |
- ...
+...
 LL |
 LL ~     } }).join().unwrap();
    |
diff --git a/tests/ui/codegen/issue-82833-slice-miscompile.rs b/tests/ui/codegen/issue-82833-slice-miscompile.rs
index 7723679dab1..32eac923a63 100644
--- a/tests/ui/codegen/issue-82833-slice-miscompile.rs
+++ b/tests/ui/codegen/issue-82833-slice-miscompile.rs
@@ -1,5 +1,5 @@
 //@ run-pass
-//@ compile-flags: -Ccodegen-units=1 -Cinline-threshold=0 -Clink-dead-code -Copt-level=0 -Cdebuginfo=2
+//@ compile-flags: -Ccodegen-units=1 -Cllvm-args=--inline-threshold=0 -Clink-dead-code -Copt-level=0 -Cdebuginfo=2
 
 // Make sure LLVM does not miscompile this.
 
diff --git a/tests/ui/codemap_tests/unicode.normal.stderr b/tests/ui/codemap_tests/unicode.normal.stderr
index a6e22e1c38f..0f254e0246f 100644
--- a/tests/ui/codemap_tests/unicode.normal.stderr
+++ b/tests/ui/codemap_tests/unicode.normal.stderr
@@ -4,7 +4,7 @@ error[E0703]: invalid ABI: found `路濫狼á́́`
 LL | extern "路濫狼á́́" fn foo() {}
    |        ^^^^^^^^^ invalid ABI
    |
-   = note: invoke `rustc --print=calling-conventions` for a full list of supported calling conventions.
+   = note: invoke `rustc --print=calling-conventions` for a full list of supported calling conventions
 
 error: aborting due to 1 previous error
 
diff --git a/tests/ui/coherence/occurs-check/associated-type.next.stderr b/tests/ui/coherence/occurs-check/associated-type.next.stderr
index bd65cee58d9..4f15be4c7c8 100644
--- a/tests/ui/coherence/occurs-check/associated-type.next.stderr
+++ b/tests/ui/coherence/occurs-check/associated-type.next.stderr
@@ -1,7 +1,7 @@
- WARN rustc_infer::infer::relate::generalize may incompletely handle alias type: AliasTy { args: [*const ?1t, '^0.Named(DefId(0:27 ~ associated_type[f554]::{impl#3}::'a#1), "'a")], def_id: DefId(0:5 ~ associated_type[f554]::ToUnit::Unit), _use_alias_ty_new_instead: () }
- WARN rustc_infer::infer::relate::generalize may incompletely handle alias type: AliasTy { args: [*const ?1t, '^0.Named(DefId(0:27 ~ associated_type[f554]::{impl#3}::'a#1), "'a")], def_id: DefId(0:5 ~ associated_type[f554]::ToUnit::Unit), _use_alias_ty_new_instead: () }
- WARN rustc_infer::infer::relate::generalize may incompletely handle alias type: AliasTy { args: [*const ?1t, '^0.Named(DefId(0:27 ~ associated_type[f554]::{impl#3}::'a#1), "'a")], def_id: DefId(0:5 ~ associated_type[f554]::ToUnit::Unit), _use_alias_ty_new_instead: () }
- WARN rustc_infer::infer::relate::generalize may incompletely handle alias type: AliasTy { args: [*const ?1t, '^0.Named(DefId(0:27 ~ associated_type[f554]::{impl#3}::'a#1), "'a")], def_id: DefId(0:5 ~ associated_type[f554]::ToUnit::Unit), _use_alias_ty_new_instead: () }
+ WARN rustc_infer::infer::relate::generalize may incompletely handle alias type: AliasTy { args: [*const ?1t, '^0.Named(DefId(0:27 ~ associated_type[f554]::{impl#3}::'a#1), "'a")], def_id: DefId(0:5 ~ associated_type[f554]::ToUnit::Unit) }
+ WARN rustc_infer::infer::relate::generalize may incompletely handle alias type: AliasTy { args: [*const ?1t, '^0.Named(DefId(0:27 ~ associated_type[f554]::{impl#3}::'a#1), "'a")], def_id: DefId(0:5 ~ associated_type[f554]::ToUnit::Unit) }
+ WARN rustc_infer::infer::relate::generalize may incompletely handle alias type: AliasTy { args: [*const ?1t, '^0.Named(DefId(0:27 ~ associated_type[f554]::{impl#3}::'a#1), "'a")], def_id: DefId(0:5 ~ associated_type[f554]::ToUnit::Unit) }
+ WARN rustc_infer::infer::relate::generalize may incompletely handle alias type: AliasTy { args: [*const ?1t, '^0.Named(DefId(0:27 ~ associated_type[f554]::{impl#3}::'a#1), "'a")], def_id: DefId(0:5 ~ associated_type[f554]::ToUnit::Unit) }
 error[E0119]: conflicting implementations of trait `Overlap<for<'a> fn(&'a (), ())>` for type `for<'a> fn(&'a (), ())`
   --> $DIR/associated-type.rs:31:1
    |
diff --git a/tests/ui/coherence/occurs-check/associated-type.old.stderr b/tests/ui/coherence/occurs-check/associated-type.old.stderr
index d26f7665ee7..329086ab7df 100644
--- a/tests/ui/coherence/occurs-check/associated-type.old.stderr
+++ b/tests/ui/coherence/occurs-check/associated-type.old.stderr
@@ -1,11 +1,11 @@
- WARN rustc_infer::infer::relate::generalize may incompletely handle alias type: AliasTy { args: [*const ?1t, '^0.Named(DefId(0:27 ~ associated_type[f554]::{impl#3}::'a#1), "'a")], def_id: DefId(0:5 ~ associated_type[f554]::ToUnit::Unit), _use_alias_ty_new_instead: () }
- WARN rustc_infer::infer::relate::generalize may incompletely handle alias type: AliasTy { args: [*const ?1t, !2_0.Named(DefId(0:27 ~ associated_type[f554]::{impl#3}::'a#1), "'a")], def_id: DefId(0:5 ~ associated_type[f554]::ToUnit::Unit), _use_alias_ty_new_instead: () }
- WARN rustc_infer::infer::relate::generalize may incompletely handle alias type: AliasTy { args: [*const ?1t, '^0.Named(DefId(0:27 ~ associated_type[f554]::{impl#3}::'a#1), "'a")], def_id: DefId(0:5 ~ associated_type[f554]::ToUnit::Unit), _use_alias_ty_new_instead: () }
- WARN rustc_infer::infer::relate::generalize may incompletely handle alias type: AliasTy { args: [*const ?1t, !2_0.Named(DefId(0:27 ~ associated_type[f554]::{impl#3}::'a#1), "'a")], def_id: DefId(0:5 ~ associated_type[f554]::ToUnit::Unit), _use_alias_ty_new_instead: () }
- WARN rustc_infer::infer::relate::generalize may incompletely handle alias type: AliasTy { args: [*const ?1t, '^0.Named(DefId(0:27 ~ associated_type[f554]::{impl#3}::'a#1), "'a")], def_id: DefId(0:5 ~ associated_type[f554]::ToUnit::Unit), _use_alias_ty_new_instead: () }
- WARN rustc_infer::infer::relate::generalize may incompletely handle alias type: AliasTy { args: [*const ?1t, !2_0.Named(DefId(0:27 ~ associated_type[f554]::{impl#3}::'a#1), "'a")], def_id: DefId(0:5 ~ associated_type[f554]::ToUnit::Unit), _use_alias_ty_new_instead: () }
- WARN rustc_infer::infer::relate::generalize may incompletely handle alias type: AliasTy { args: [*const ?1t, '^0.Named(DefId(0:27 ~ associated_type[f554]::{impl#3}::'a#1), "'a")], def_id: DefId(0:5 ~ associated_type[f554]::ToUnit::Unit), _use_alias_ty_new_instead: () }
- WARN rustc_infer::infer::relate::generalize may incompletely handle alias type: AliasTy { args: [*const ?1t, !2_0.Named(DefId(0:27 ~ associated_type[f554]::{impl#3}::'a#1), "'a")], def_id: DefId(0:5 ~ associated_type[f554]::ToUnit::Unit), _use_alias_ty_new_instead: () }
+ WARN rustc_infer::infer::relate::generalize may incompletely handle alias type: AliasTy { args: [*const ?1t, '^0.Named(DefId(0:27 ~ associated_type[f554]::{impl#3}::'a#1), "'a")], def_id: DefId(0:5 ~ associated_type[f554]::ToUnit::Unit) }
+ WARN rustc_infer::infer::relate::generalize may incompletely handle alias type: AliasTy { args: [*const ?1t, !2_0.Named(DefId(0:27 ~ associated_type[f554]::{impl#3}::'a#1), "'a")], def_id: DefId(0:5 ~ associated_type[f554]::ToUnit::Unit) }
+ WARN rustc_infer::infer::relate::generalize may incompletely handle alias type: AliasTy { args: [*const ?1t, '^0.Named(DefId(0:27 ~ associated_type[f554]::{impl#3}::'a#1), "'a")], def_id: DefId(0:5 ~ associated_type[f554]::ToUnit::Unit) }
+ WARN rustc_infer::infer::relate::generalize may incompletely handle alias type: AliasTy { args: [*const ?1t, !2_0.Named(DefId(0:27 ~ associated_type[f554]::{impl#3}::'a#1), "'a")], def_id: DefId(0:5 ~ associated_type[f554]::ToUnit::Unit) }
+ WARN rustc_infer::infer::relate::generalize may incompletely handle alias type: AliasTy { args: [*const ?1t, '^0.Named(DefId(0:27 ~ associated_type[f554]::{impl#3}::'a#1), "'a")], def_id: DefId(0:5 ~ associated_type[f554]::ToUnit::Unit) }
+ WARN rustc_infer::infer::relate::generalize may incompletely handle alias type: AliasTy { args: [*const ?1t, !2_0.Named(DefId(0:27 ~ associated_type[f554]::{impl#3}::'a#1), "'a")], def_id: DefId(0:5 ~ associated_type[f554]::ToUnit::Unit) }
+ WARN rustc_infer::infer::relate::generalize may incompletely handle alias type: AliasTy { args: [*const ?1t, '^0.Named(DefId(0:27 ~ associated_type[f554]::{impl#3}::'a#1), "'a")], def_id: DefId(0:5 ~ associated_type[f554]::ToUnit::Unit) }
+ WARN rustc_infer::infer::relate::generalize may incompletely handle alias type: AliasTy { args: [*const ?1t, !2_0.Named(DefId(0:27 ~ associated_type[f554]::{impl#3}::'a#1), "'a")], def_id: DefId(0:5 ~ associated_type[f554]::ToUnit::Unit) }
 error[E0119]: conflicting implementations of trait `Overlap<for<'a> fn(&'a (), _)>` for type `for<'a> fn(&'a (), _)`
   --> $DIR/associated-type.rs:31:1
    |
diff --git a/tests/ui/const-generics/const_trait_fn-issue-88433.rs b/tests/ui/const-generics/const_trait_fn-issue-88433.rs
index 89bcd54c461..cd008aa2c9f 100644
--- a/tests/ui/const-generics/const_trait_fn-issue-88433.rs
+++ b/tests/ui/const-generics/const_trait_fn-issue-88433.rs
@@ -1,6 +1,6 @@
 //@ build-pass
 
-#![feature(const_trait_impl, effects)]
+#![feature(const_trait_impl, effects)] //~ WARN the feature `effects` is incomplete
 
 #[const_trait]
 trait Func<T> {
diff --git a/tests/ui/const-generics/const_trait_fn-issue-88433.stderr b/tests/ui/const-generics/const_trait_fn-issue-88433.stderr
new file mode 100644
index 00000000000..4e0d6370fbd
--- /dev/null
+++ b/tests/ui/const-generics/const_trait_fn-issue-88433.stderr
@@ -0,0 +1,11 @@
+warning: the feature `effects` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/const_trait_fn-issue-88433.rs:3:30
+   |
+LL | #![feature(const_trait_impl, effects)]
+   |                              ^^^^^^^
+   |
+   = note: see issue #102090 <https://github.com/rust-lang/rust/issues/102090> for more information
+   = note: `#[warn(incomplete_features)]` on by default
+
+warning: 1 warning emitted
+
diff --git a/tests/ui/const-generics/defaults/doesnt_infer.rs b/tests/ui/const-generics/defaults/doesnt_infer.rs
index 016685eee9d..f62088210fe 100644
--- a/tests/ui/const-generics/defaults/doesnt_infer.rs
+++ b/tests/ui/const-generics/defaults/doesnt_infer.rs
@@ -12,4 +12,5 @@ fn main() {
     let foo = Foo::<1>::foo();
     let foo = Foo::foo();
     //~^ ERROR type annotations needed for `Foo<_>`
+    //~| ERROR type annotations needed
 }
diff --git a/tests/ui/const-generics/defaults/doesnt_infer.stderr b/tests/ui/const-generics/defaults/doesnt_infer.stderr
index 1e779f75ce0..c17f57f36bc 100644
--- a/tests/ui/const-generics/defaults/doesnt_infer.stderr
+++ b/tests/ui/const-generics/defaults/doesnt_infer.stderr
@@ -1,14 +1,37 @@
-error[E0282]: type annotations needed for `Foo<_>`
+error[E0284]: type annotations needed for `Foo<_>`
   --> $DIR/doesnt_infer.rs:13:9
    |
 LL |     let foo = Foo::foo();
-   |         ^^^
+   |         ^^^   ---------- type must be known at this point
    |
+note: required by a const generic parameter in `Foo::<N>::foo`
+  --> $DIR/doesnt_infer.rs:5:6
+   |
+LL | impl<const N: u32> Foo<N> {
+   |      ^^^^^^^^^^^^ required by this const generic parameter in `Foo::<N>::foo`
+LL |     fn foo() -> Self {
+   |        --- required by a bound in this associated function
+help: consider giving `foo` an explicit type, where the value of const parameter `N` is specified
+   |
+LL |     let foo: Foo<N> = Foo::foo();
+   |            ++++++++
+
+error[E0284]: type annotations needed for `Foo<_>`
+  --> $DIR/doesnt_infer.rs:13:9
+   |
+LL |     let foo = Foo::foo();
+   |         ^^^   --- type must be known at this point
+   |
+note: required by a const generic parameter in `Foo`
+  --> $DIR/doesnt_infer.rs:3:12
+   |
+LL | struct Foo<const N: u32 = 2>;
+   |            ^^^^^^^^^^^^^^^^ required by this const generic parameter in `Foo`
 help: consider giving `foo` an explicit type, where the value of const parameter `N` is specified
    |
 LL |     let foo: Foo<N> = Foo::foo();
    |            ++++++++
 
-error: aborting due to 1 previous error
+error: aborting due to 2 previous errors
 
-For more information about this error, try `rustc --explain E0282`.
+For more information about this error, try `rustc --explain E0284`.
diff --git a/tests/ui/const-generics/defaults/rp_impl_trait_fail.stderr b/tests/ui/const-generics/defaults/rp_impl_trait_fail.stderr
index 4ed1c0ded9f..45be3126e3b 100644
--- a/tests/ui/const-generics/defaults/rp_impl_trait_fail.stderr
+++ b/tests/ui/const-generics/defaults/rp_impl_trait_fail.stderr
@@ -31,12 +31,17 @@ LL |     1_u64
    |
    = help: the trait `Traitor<1, 2>` is implemented for `u64`
 
-error[E0282]: type annotations needed
+error[E0284]: type annotations needed
   --> $DIR/rp_impl_trait_fail.rs:28:5
    |
 LL |     uwu();
    |     ^^^ cannot infer the value of the const parameter `N` declared on the function `uwu`
    |
+note: required by a const generic parameter in `uwu`
+  --> $DIR/rp_impl_trait_fail.rs:16:8
+   |
+LL | fn uwu<const N: u8>() -> impl Traitor<N> {
+   |        ^^^^^^^^^^^ required by this const generic parameter in `uwu`
 help: consider specifying the generic argument
    |
 LL |     uwu::<N>();
@@ -44,5 +49,5 @@ LL |     uwu::<N>();
 
 error: aborting due to 4 previous errors
 
-Some errors have detailed explanations: E0277, E0282.
+Some errors have detailed explanations: E0277, E0284.
 For more information about an error, try `rustc --explain E0277`.
diff --git a/tests/ui/const-generics/generic_arg_infer/issue-91614.rs b/tests/ui/const-generics/generic_arg_infer/issue-91614.rs
index cfbc5faecd9..a386b1e5c2b 100644
--- a/tests/ui/const-generics/generic_arg_infer/issue-91614.rs
+++ b/tests/ui/const-generics/generic_arg_infer/issue-91614.rs
@@ -5,4 +5,5 @@ use std::simd::Mask;
 fn main() {
     let y = Mask::<_, _>::splat(false);
     //~^ ERROR: type annotations needed
+    //~| ERROR type annotations needed
 }
diff --git a/tests/ui/const-generics/generic_arg_infer/issue-91614.stderr b/tests/ui/const-generics/generic_arg_infer/issue-91614.stderr
index 563406ad5ea..217f609459e 100644
--- a/tests/ui/const-generics/generic_arg_infer/issue-91614.stderr
+++ b/tests/ui/const-generics/generic_arg_infer/issue-91614.stderr
@@ -1,23 +1,29 @@
-error[E0283]: type annotations needed for `Mask<_, _>`
+error[E0284]: type annotations needed for `Mask<_, _>`
   --> $DIR/issue-91614.rs:6:9
    |
 LL |     let y = Mask::<_, _>::splat(false);
    |         ^   -------------------------- type must be known at this point
    |
-   = note: cannot satisfy `_: MaskElement`
-   = help: the following types implement trait `MaskElement`:
-             i16
-             i32
-             i64
-             i8
-             isize
-note: required by a bound in `Mask::<T, N>::splat`
+note: required by a const generic parameter in `Mask::<T, N>::splat`
   --> $SRC_DIR/core/src/../../portable-simd/crates/core_simd/src/masks.rs:LL:COL
-help: consider giving `y` an explicit type, where the type for type parameter `T` is specified
+help: consider giving `y` an explicit type, where the value of const parameter `N` is specified
    |
 LL |     let y: Mask<T, N> = Mask::<_, _>::splat(false);
    |          ++++++++++++
 
-error: aborting due to 1 previous error
+error[E0284]: type annotations needed for `Mask<_, _>`
+  --> $DIR/issue-91614.rs:6:9
+   |
+LL |     let y = Mask::<_, _>::splat(false);
+   |         ^   ------------ type must be known at this point
+   |
+note: required by a const generic parameter in `Mask`
+  --> $SRC_DIR/core/src/../../portable-simd/crates/core_simd/src/masks.rs:LL:COL
+help: consider giving `y` an explicit type, where the value of const parameter `N` is specified
+   |
+LL |     let y: Mask<T, N> = Mask::<_, _>::splat(false);
+   |          ++++++++++++
+
+error: aborting due to 2 previous errors
 
-For more information about this error, try `rustc --explain E0283`.
+For more information about this error, try `rustc --explain E0284`.
diff --git a/tests/ui/const-generics/generic_const_exprs/issue-62504.full.stderr b/tests/ui/const-generics/generic_const_exprs/issue-62504.full.stderr
index 5cda4681b5c..3739637c279 100644
--- a/tests/ui/const-generics/generic_const_exprs/issue-62504.full.stderr
+++ b/tests/ui/const-generics/generic_const_exprs/issue-62504.full.stderr
@@ -18,18 +18,41 @@ help: try adding a `where` bound
 LL |     pub const fn new() -> Self where [(); Self::SIZE]: {
    |                                +++++++++++++++++++++++
 
-error[E0282]: type annotations needed for `ArrayHolder<_>`
+error[E0284]: type annotations needed for `ArrayHolder<_>`
   --> $DIR/issue-62504.rs:26:9
    |
 LL |     let mut array = ArrayHolder::new();
-   |         ^^^^^^^^^
+   |         ^^^^^^^^^   ------------------ type must be known at this point
    |
+note: required by a const generic parameter in `ArrayHolder::<X>::new`
+  --> $DIR/issue-62504.rs:16:6
+   |
+LL | impl<const X: usize> ArrayHolder<X> {
+   |      ^^^^^^^^^^^^^^ required by this const generic parameter in `ArrayHolder::<X>::new`
+LL |     pub const fn new() -> Self {
+   |                  --- required by a bound in this associated function
+help: consider giving `array` an explicit type, where the value of const parameter `X` is specified
+   |
+LL |     let mut array: ArrayHolder<X> = ArrayHolder::new();
+   |                  ++++++++++++++++
+
+error[E0284]: type annotations needed for `ArrayHolder<_>`
+  --> $DIR/issue-62504.rs:26:9
+   |
+LL |     let mut array = ArrayHolder::new();
+   |         ^^^^^^^^^   ----------- type must be known at this point
+   |
+note: required by a const generic parameter in `ArrayHolder`
+  --> $DIR/issue-62504.rs:14:20
+   |
+LL | struct ArrayHolder<const X: usize>([u32; X]);
+   |                    ^^^^^^^^^^^^^^ required by this const generic parameter in `ArrayHolder`
 help: consider giving `array` an explicit type, where the value of const parameter `X` is specified
    |
 LL |     let mut array: ArrayHolder<X> = ArrayHolder::new();
    |                  ++++++++++++++++
 
-error: aborting due to 3 previous errors
+error: aborting due to 4 previous errors
 
-Some errors have detailed explanations: E0282, E0308.
-For more information about an error, try `rustc --explain E0282`.
+Some errors have detailed explanations: E0284, E0308.
+For more information about an error, try `rustc --explain E0284`.
diff --git a/tests/ui/const-generics/generic_const_exprs/issue-62504.min.stderr b/tests/ui/const-generics/generic_const_exprs/issue-62504.min.stderr
index beb159779ff..14c67e2528a 100644
--- a/tests/ui/const-generics/generic_const_exprs/issue-62504.min.stderr
+++ b/tests/ui/const-generics/generic_const_exprs/issue-62504.min.stderr
@@ -22,18 +22,41 @@ note: tuple struct defined here
 LL | struct ArrayHolder<const X: usize>([u32; X]);
    |        ^^^^^^^^^^^
 
-error[E0282]: type annotations needed for `ArrayHolder<_>`
+error[E0284]: type annotations needed for `ArrayHolder<_>`
   --> $DIR/issue-62504.rs:26:9
    |
 LL |     let mut array = ArrayHolder::new();
-   |         ^^^^^^^^^
+   |         ^^^^^^^^^   ------------------ type must be known at this point
    |
+note: required by a const generic parameter in `ArrayHolder::<X>::new`
+  --> $DIR/issue-62504.rs:16:6
+   |
+LL | impl<const X: usize> ArrayHolder<X> {
+   |      ^^^^^^^^^^^^^^ required by this const generic parameter in `ArrayHolder::<X>::new`
+LL |     pub const fn new() -> Self {
+   |                  --- required by a bound in this associated function
+help: consider giving `array` an explicit type, where the value of const parameter `X` is specified
+   |
+LL |     let mut array: ArrayHolder<X> = ArrayHolder::new();
+   |                  ++++++++++++++++
+
+error[E0284]: type annotations needed for `ArrayHolder<_>`
+  --> $DIR/issue-62504.rs:26:9
+   |
+LL |     let mut array = ArrayHolder::new();
+   |         ^^^^^^^^^   ----------- type must be known at this point
+   |
+note: required by a const generic parameter in `ArrayHolder`
+  --> $DIR/issue-62504.rs:14:20
+   |
+LL | struct ArrayHolder<const X: usize>([u32; X]);
+   |                    ^^^^^^^^^^^^^^ required by this const generic parameter in `ArrayHolder`
 help: consider giving `array` an explicit type, where the value of const parameter `X` is specified
    |
 LL |     let mut array: ArrayHolder<X> = ArrayHolder::new();
    |                  ++++++++++++++++
 
-error: aborting due to 3 previous errors
+error: aborting due to 4 previous errors
 
-Some errors have detailed explanations: E0282, E0308.
-For more information about an error, try `rustc --explain E0282`.
+Some errors have detailed explanations: E0284, E0308.
+For more information about an error, try `rustc --explain E0284`.
diff --git a/tests/ui/const-generics/generic_const_exprs/issue-62504.rs b/tests/ui/const-generics/generic_const_exprs/issue-62504.rs
index b6a6a277843..f021e103614 100644
--- a/tests/ui/const-generics/generic_const_exprs/issue-62504.rs
+++ b/tests/ui/const-generics/generic_const_exprs/issue-62504.rs
@@ -25,4 +25,5 @@ impl<const X: usize> ArrayHolder<X> {
 fn main() {
     let mut array = ArrayHolder::new();
     //~^ ERROR: type annotations needed
+    //~| ERROR type annotations needed
 }
diff --git a/tests/ui/const-generics/generic_const_exprs/object-safety-ok-infer-err.rs b/tests/ui/const-generics/generic_const_exprs/object-safety-ok-infer-err.rs
index 79e9834b54e..298cfb512e4 100644
--- a/tests/ui/const-generics/generic_const_exprs/object-safety-ok-infer-err.rs
+++ b/tests/ui/const-generics/generic_const_exprs/object-safety-ok-infer-err.rs
@@ -18,4 +18,5 @@ fn use_dyn<const N: usize>(v: &dyn Foo<N>) where [u8; N + 1]: Sized {
 fn main() {
     use_dyn(&());
     //~^ ERROR type annotations needed
+    //~| ERROR type annotations needed
 }
diff --git a/tests/ui/const-generics/generic_const_exprs/object-safety-ok-infer-err.stderr b/tests/ui/const-generics/generic_const_exprs/object-safety-ok-infer-err.stderr
index e800c5d059f..d1e1c976da6 100644
--- a/tests/ui/const-generics/generic_const_exprs/object-safety-ok-infer-err.stderr
+++ b/tests/ui/const-generics/generic_const_exprs/object-safety-ok-infer-err.stderr
@@ -4,16 +4,37 @@ error[E0284]: type annotations needed
 LL |     use_dyn(&());
    |     ^^^^^^^ cannot infer the value of the const parameter `N` declared on the function `use_dyn`
    |
-note: required by a bound in `use_dyn`
-  --> $DIR/object-safety-ok-infer-err.rs:14:55
+note: required by a const generic parameter in `use_dyn`
+  --> $DIR/object-safety-ok-infer-err.rs:14:12
    |
 LL | fn use_dyn<const N: usize>(v: &dyn Foo<N>) where [u8; N + 1]: Sized {
-   |                                                       ^^^^^ required by this bound in `use_dyn`
+   |            ^^^^^^^^^^^^^^ required by this const generic parameter in `use_dyn`
 help: consider specifying the generic argument
    |
 LL |     use_dyn::<N>(&());
    |            +++++
 
-error: aborting due to 1 previous error
+error[E0284]: type annotations needed
+  --> $DIR/object-safety-ok-infer-err.rs:19:5
+   |
+LL |     use_dyn(&());
+   |     ^^^^^^^ --- type must be known at this point
+   |     |
+   |     cannot infer the value of the const parameter `N` declared on the function `use_dyn`
+   |
+note: required for `()` to implement `Foo<_>`
+  --> $DIR/object-safety-ok-infer-err.rs:8:22
+   |
+LL | impl<const N: usize> Foo<N> for () {
+   |      --------------  ^^^^^^     ^^
+   |      |
+   |      unsatisfied trait bound introduced here
+   = note: required for the cast from `&()` to `&dyn Foo<_>`
+help: consider specifying the generic argument
+   |
+LL |     use_dyn::<N>(&());
+   |            +++++
+
+error: aborting due to 2 previous errors
 
 For more information about this error, try `rustc --explain E0284`.
diff --git a/tests/ui/const-generics/infer/cannot-infer-const-args.stderr b/tests/ui/const-generics/infer/cannot-infer-const-args.stderr
index e3caefef10f..c349a50a83f 100644
--- a/tests/ui/const-generics/infer/cannot-infer-const-args.stderr
+++ b/tests/ui/const-generics/infer/cannot-infer-const-args.stderr
@@ -1,9 +1,14 @@
-error[E0282]: type annotations needed
+error[E0284]: type annotations needed
   --> $DIR/cannot-infer-const-args.rs:6:5
    |
 LL |     foo();
    |     ^^^ cannot infer the value of the const parameter `X` declared on the function `foo`
    |
+note: required by a const generic parameter in `foo`
+  --> $DIR/cannot-infer-const-args.rs:1:8
+   |
+LL | fn foo<const X: usize>() -> usize {
+   |        ^^^^^^^^^^^^^^ required by this const generic parameter in `foo`
 help: consider specifying the generic argument
    |
 LL |     foo::<X>();
@@ -11,4 +16,4 @@ LL |     foo::<X>();
 
 error: aborting due to 1 previous error
 
-For more information about this error, try `rustc --explain E0282`.
+For more information about this error, try `rustc --explain E0284`.
diff --git a/tests/ui/const-generics/infer/issue-77092.rs b/tests/ui/const-generics/infer/issue-77092.rs
index fcf7d3282b4..47c594e5b11 100644
--- a/tests/ui/const-generics/infer/issue-77092.rs
+++ b/tests/ui/const-generics/infer/issue-77092.rs
@@ -1,14 +1,15 @@
 use std::convert::TryInto;
 
 fn take_array_from_mut<T, const N: usize>(data: &mut [T], start: usize) -> &mut [T; N] {
-    (&mut data[start .. start + N]).try_into().unwrap()
+    (&mut data[start..start + N]).try_into().unwrap()
 }
 
 fn main() {
     let mut arr = [0, 1, 2, 3, 4, 5, 6, 7, 8];
 
-    for i in 1 .. 4 {
+    for i in 1..4 {
         println!("{:?}", take_array_from_mut(&mut arr, i));
         //~^ ERROR type annotations needed
+        //~| ERROR type annotations needed
     }
 }
diff --git a/tests/ui/const-generics/infer/issue-77092.stderr b/tests/ui/const-generics/infer/issue-77092.stderr
index 5b411269862..9a6374a2adc 100644
--- a/tests/ui/const-generics/infer/issue-77092.stderr
+++ b/tests/ui/const-generics/infer/issue-77092.stderr
@@ -1,14 +1,37 @@
-error[E0282]: type annotations needed
+error[E0284]: type annotations needed
   --> $DIR/issue-77092.rs:11:26
    |
 LL |         println!("{:?}", take_array_from_mut(&mut arr, i));
    |                          ^^^^^^^^^^^^^^^^^^^ cannot infer the value of the const parameter `N` declared on the function `take_array_from_mut`
    |
+note: required by a const generic parameter in `take_array_from_mut`
+  --> $DIR/issue-77092.rs:3:27
+   |
+LL | fn take_array_from_mut<T, const N: usize>(data: &mut [T], start: usize) -> &mut [T; N] {
+   |                           ^^^^^^^^^^^^^^ required by this const generic parameter in `take_array_from_mut`
+help: consider specifying the generic arguments
+   |
+LL |         println!("{:?}", take_array_from_mut::<i32, N>(&mut arr, i));
+   |                                             ++++++++++
+
+error[E0284]: type annotations needed
+  --> $DIR/issue-77092.rs:11:26
+   |
+LL |         println!("{:?}", take_array_from_mut(&mut arr, i));
+   |                   ----   ^^^^^^^^^^^^^^^^^^^ cannot infer the value of the const parameter `N` declared on the function `take_array_from_mut`
+   |                   |
+   |                   type must be known at this point
+   |
+   = note: required for `[i32; _]` to implement `Debug`
+   = note: 1 redundant requirement hidden
+   = note: required for `&mut [i32; _]` to implement `Debug`
+note: required by a bound in `core::fmt::rt::Argument::<'a>::new_debug`
+  --> $SRC_DIR/core/src/fmt/rt.rs:LL:COL
 help: consider specifying the generic arguments
    |
 LL |         println!("{:?}", take_array_from_mut::<i32, N>(&mut arr, i));
    |                                             ++++++++++
 
-error: aborting due to 1 previous error
+error: aborting due to 2 previous errors
 
-For more information about this error, try `rustc --explain E0282`.
+For more information about this error, try `rustc --explain E0284`.
diff --git a/tests/ui/const-generics/infer/method-chain.stderr b/tests/ui/const-generics/infer/method-chain.stderr
index 2def9e85ab7..95044bb5203 100644
--- a/tests/ui/const-generics/infer/method-chain.stderr
+++ b/tests/ui/const-generics/infer/method-chain.stderr
@@ -1,9 +1,14 @@
-error[E0282]: type annotations needed
+error[E0284]: type annotations needed
   --> $DIR/method-chain.rs:15:33
    |
 LL |     Foo.bar().bar().bar().bar().baz();
    |                                 ^^^ cannot infer the value of the const parameter `N` declared on the method `baz`
    |
+note: required by a const generic parameter in `Foo::baz`
+  --> $DIR/method-chain.rs:8:12
+   |
+LL |     fn baz<const N: usize>(self) -> Foo {
+   |            ^^^^^^^^^^^^^^ required by this const generic parameter in `Foo::baz`
 help: consider specifying the generic argument
    |
 LL |     Foo.bar().bar().bar().bar().baz::<N>();
@@ -11,4 +16,4 @@ LL |     Foo.bar().bar().bar().bar().baz::<N>();
 
 error: aborting due to 1 previous error
 
-For more information about this error, try `rustc --explain E0282`.
+For more information about this error, try `rustc --explain E0284`.
diff --git a/tests/ui/const-generics/infer/one-param-uninferred.stderr b/tests/ui/const-generics/infer/one-param-uninferred.stderr
index 3e33fec9cef..f3aa7973e67 100644
--- a/tests/ui/const-generics/infer/one-param-uninferred.stderr
+++ b/tests/ui/const-generics/infer/one-param-uninferred.stderr
@@ -1,9 +1,14 @@
-error[E0282]: type annotations needed
+error[E0284]: type annotations needed
   --> $DIR/one-param-uninferred.rs:9:23
    |
 LL |     let _: [u8; 17] = foo();
    |                       ^^^ cannot infer the value of the const parameter `M` declared on the function `foo`
    |
+note: required by a const generic parameter in `foo`
+  --> $DIR/one-param-uninferred.rs:2:24
+   |
+LL | fn foo<const N: usize, const M: usize>() -> [u8; N] {
+   |                        ^^^^^^^^^^^^^^ required by this const generic parameter in `foo`
 help: consider specifying the generic arguments
    |
 LL |     let _: [u8; 17] = foo::<17, M>();
@@ -11,4 +16,4 @@ LL |     let _: [u8; 17] = foo::<17, M>();
 
 error: aborting due to 1 previous error
 
-For more information about this error, try `rustc --explain E0282`.
+For more information about this error, try `rustc --explain E0284`.
diff --git a/tests/ui/const-generics/infer/uninferred-consts.rs b/tests/ui/const-generics/infer/uninferred-consts.rs
index 657f4b51304..552e2a15c23 100644
--- a/tests/ui/const-generics/infer/uninferred-consts.rs
+++ b/tests/ui/const-generics/infer/uninferred-consts.rs
@@ -8,4 +8,5 @@ impl Foo {
 fn main() {
     Foo.foo();
     //~^ ERROR type annotations needed
+    //~| ERROR type annotations needed
 }
diff --git a/tests/ui/const-generics/infer/uninferred-consts.stderr b/tests/ui/const-generics/infer/uninferred-consts.stderr
index 0ec6ac9c22e..839fb25c4e1 100644
--- a/tests/ui/const-generics/infer/uninferred-consts.stderr
+++ b/tests/ui/const-generics/infer/uninferred-consts.stderr
@@ -1,14 +1,35 @@
-error[E0282]: type annotations needed
+error[E0284]: type annotations needed
   --> $DIR/uninferred-consts.rs:9:9
    |
 LL |     Foo.foo();
    |         ^^^ cannot infer the value of the const parameter `A` declared on the method `foo`
    |
+note: required by a const generic parameter in `Foo::foo`
+  --> $DIR/uninferred-consts.rs:6:12
+   |
+LL |     fn foo<const A: usize, const B: usize>(self) {}
+   |            ^^^^^^^^^^^^^^ required by this const generic parameter in `Foo::foo`
+help: consider specifying the generic arguments
+   |
+LL |     Foo.foo::<A, B>();
+   |            ++++++++
+
+error[E0284]: type annotations needed
+  --> $DIR/uninferred-consts.rs:9:9
+   |
+LL |     Foo.foo();
+   |         ^^^ cannot infer the value of the const parameter `B` declared on the method `foo`
+   |
+note: required by a const generic parameter in `Foo::foo`
+  --> $DIR/uninferred-consts.rs:6:28
+   |
+LL |     fn foo<const A: usize, const B: usize>(self) {}
+   |                            ^^^^^^^^^^^^^^ required by this const generic parameter in `Foo::foo`
 help: consider specifying the generic arguments
    |
 LL |     Foo.foo::<A, B>();
    |            ++++++++
 
-error: aborting due to 1 previous error
+error: aborting due to 2 previous errors
 
-For more information about this error, try `rustc --explain E0282`.
+For more information about this error, try `rustc --explain E0284`.
diff --git a/tests/crashes/125799.rs b/tests/ui/const-generics/mistyped_const_in_pat.rs
index 62d5438b4e4..6f1dd52872f 100644
--- a/tests/crashes/125799.rs
+++ b/tests/ui/const-generics/mistyped_const_in_pat.rs
@@ -1,4 +1,5 @@
-//@ known-bug: rust-lang/rust#125799
+//! Used to ICE rust-lang/rust#125799 due to `isize` != `()`
+//! not being detected early due to the conflicting impls.
 //@ only-x86_64
 
 trait Trait<T> {
@@ -10,6 +11,7 @@ impl<T> Trait<T> for Vec<T> {
 }
 
 impl Trait<u8> for Vec<u8> {}
+//~^ ERROR: conflicting implementations
 
 const BAR: <Vec<u8> as Trait<u8>>::Assoc = 3;
 
diff --git a/tests/ui/const-generics/mistyped_const_in_pat.stderr b/tests/ui/const-generics/mistyped_const_in_pat.stderr
new file mode 100644
index 00000000000..de7516fa37f
--- /dev/null
+++ b/tests/ui/const-generics/mistyped_const_in_pat.stderr
@@ -0,0 +1,12 @@
+error[E0119]: conflicting implementations of trait `Trait<u8>` for type `Vec<u8>`
+  --> $DIR/mistyped_const_in_pat.rs:13:1
+   |
+LL | impl<T> Trait<T> for Vec<T> {
+   | --------------------------- first implementation here
+...
+LL | impl Trait<u8> for Vec<u8> {}
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation for `Vec<u8>`
+
+error: aborting due to 1 previous error
+
+For more information about this error, try `rustc --explain E0119`.
diff --git a/tests/ui/const-generics/parent_generics_of_encoding_impl_trait.stderr b/tests/ui/const-generics/parent_generics_of_encoding_impl_trait.stderr
index 5bef6f3c795..4809f7d37dd 100644
--- a/tests/ui/const-generics/parent_generics_of_encoding_impl_trait.stderr
+++ b/tests/ui/const-generics/parent_generics_of_encoding_impl_trait.stderr
@@ -4,11 +4,11 @@ error[E0284]: type annotations needed
 LL |     generics_of_parent_impl_trait::foo([()]);
    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ cannot infer the value of const parameter `N` declared on the function `foo`
    |
-note: required by a bound in `foo`
-  --> $DIR/auxiliary/generics_of_parent_impl_trait.rs:5:48
+note: required by a const generic parameter in `foo`
+  --> $DIR/auxiliary/generics_of_parent_impl_trait.rs:5:12
    |
 LL | pub fn foo<const N: usize>(foo: impl Into<[(); N + 1]>) {
-   |                                                ^^^^^ required by this bound in `foo`
+   |            ^^^^^^^^^^^^^^ required by this const generic parameter in `foo`
 
 error: aborting due to 1 previous error
 
diff --git a/tests/ui/const-generics/type_mismatch.stderr b/tests/ui/const-generics/type_mismatch.stderr
index 07476ae76c6..026999827c0 100644
--- a/tests/ui/const-generics/type_mismatch.stderr
+++ b/tests/ui/const-generics/type_mismatch.stderr
@@ -4,11 +4,11 @@ error: the constant `N` is not of type `u8`
 LL |     bar::<N>()
    |           ^ expected `u8`, found `usize`
    |
-note: required by a bound in `bar`
+note: required by a const generic parameter in `bar`
   --> $DIR/type_mismatch.rs:6:8
    |
 LL | fn bar<const N: u8>() -> [u8; N] {}
-   |        ^^^^^^^^^^^ required by this bound in `bar`
+   |        ^^^^^^^^^^^ required by this const generic parameter in `bar`
 
 error[E0308]: mismatched types
   --> $DIR/type_mismatch.rs:6:26
diff --git a/tests/ui/const-generics/unify_with_nested_expr.stderr b/tests/ui/const-generics/unify_with_nested_expr.stderr
index e050254a3e9..b1aecdb3cb5 100644
--- a/tests/ui/const-generics/unify_with_nested_expr.stderr
+++ b/tests/ui/const-generics/unify_with_nested_expr.stderr
@@ -4,14 +4,11 @@ error[E0284]: type annotations needed
 LL |     bar();
    |     ^^^ cannot infer the value of the const parameter `N` declared on the function `bar`
    |
-note: required by a bound in `bar`
-  --> $DIR/unify_with_nested_expr.rs:14:10
+note: required by a const generic parameter in `bar`
+  --> $DIR/unify_with_nested_expr.rs:12:8
    |
 LL | fn bar<const N: usize>()
-   |    --- required by a bound in this function
-LL | where
-LL |     [(); N + 1]:,
-   |          ^^^^^ required by this bound in `bar`
+   |        ^^^^^^^^^^^^^^ required by this const generic parameter in `bar`
 help: consider specifying the generic argument
    |
 LL |     bar::<N>();
diff --git a/tests/ui/consts/auxiliary/closure-in-foreign-crate.rs b/tests/ui/consts/auxiliary/closure-in-foreign-crate.rs
index 8adf3ba433d..eb58233d1b1 100644
--- a/tests/ui/consts/auxiliary/closure-in-foreign-crate.rs
+++ b/tests/ui/consts/auxiliary/closure-in-foreign-crate.rs
@@ -1,5 +1,5 @@
 #![crate_type = "lib"]
-#![feature(const_closures, const_trait_impl, effects)]
+#![feature(const_closures, const_trait_impl, effects)] //~ WARN the feature `effects` is incomplete
 
 pub const fn test() {
     let cl = const || {};
diff --git a/tests/ui/consts/const-block-const-bound.stderr b/tests/ui/consts/const-block-const-bound.stderr
index 81790a62f61..42a42ae3938 100644
--- a/tests/ui/consts/const-block-const-bound.stderr
+++ b/tests/ui/consts/const-block-const-bound.stderr
@@ -1,3 +1,9 @@
+error: `~const` can only be applied to `#[const_trait]` traits
+  --> $DIR/const-block-const-bound.rs:8:22
+   |
+LL | const fn f<T: ~const Destruct>(x: T) {}
+   |                      ^^^^^^^^
+
 error[E0493]: destructor of `T` cannot be evaluated at compile-time
   --> $DIR/const-block-const-bound.rs:8:32
    |
@@ -6,6 +12,6 @@ LL | const fn f<T: ~const Destruct>(x: T) {}
    |                                |
    |                                the destructor for this type cannot be evaluated in constant functions
 
-error: aborting due to 1 previous error
+error: aborting due to 2 previous errors
 
 For more information about this error, try `rustc --explain E0493`.
diff --git a/tests/ui/consts/const-blocks/fn-call-in-non-const.stderr b/tests/ui/consts/const-blocks/fn-call-in-non-const.stderr
index 14bce10f787..9dce29732ac 100644
--- a/tests/ui/consts/const-blocks/fn-call-in-non-const.stderr
+++ b/tests/ui/consts/const-blocks/fn-call-in-non-const.stderr
@@ -6,17 +6,15 @@ LL |     let _: [Option<Bar>; 2] = [no_copy(); 2];
    |
    = note: required for `Option<Bar>` to implement `Copy`
    = note: the `Copy` trait is required because this value will be copied for each element of the array
-   = help: create an inline `const` block, see RFC #2920 <https://github.com/rust-lang/rfcs/pull/2920> for more information
 help: consider annotating `Bar` with `#[derive(Copy)]`
    |
 LL + #[derive(Copy)]
 LL | struct Bar;
    |
-help: consider creating a new `const` item and initializing it with the result of the function call to be used in the repeat position
-   |
-LL ~     const ARRAY_REPEAT_VALUE: Option<Bar> = no_copy();
-LL ~     let _: [Option<Bar>; 2] = [ARRAY_REPEAT_VALUE; 2];
+help: create an inline `const` block
    |
+LL |     let _: [Option<Bar>; 2] = [const { no_copy() }; 2];
+   |                                ~~~~~~~~~~~~~~~~~~~
 
 error: aborting due to 1 previous error
 
diff --git a/tests/ui/consts/const-blocks/trait-error.stderr b/tests/ui/consts/const-blocks/trait-error.stderr
index b0b1378bb7d..8f00f14dfb9 100644
--- a/tests/ui/consts/const-blocks/trait-error.stderr
+++ b/tests/ui/consts/const-blocks/trait-error.stderr
@@ -2,7 +2,10 @@ error[E0277]: the trait bound `String: Copy` is not satisfied
   --> $DIR/trait-error.rs:5:6
    |
 LL |     [Foo(String::new()); 4];
-   |      ^^^^^^^^^^^^^^^^^^ the trait `Copy` is not implemented for `String`, which is required by `Foo<String>: Copy`
+   |      ^^^^^^^^^^^^^^^^^^
+   |      |
+   |      the trait `Copy` is not implemented for `String`, which is required by `Foo<String>: Copy`
+   |      help: create an inline `const` block: `const { Foo(String::new()) }`
    |
 note: required for `Foo<String>` to implement `Copy`
   --> $DIR/trait-error.rs:1:10
@@ -10,13 +13,7 @@ note: required for `Foo<String>` to implement `Copy`
 LL | #[derive(Copy, Clone)]
    |          ^^^^ unsatisfied trait bound introduced in this `derive` macro
    = note: the `Copy` trait is required because this value will be copied for each element of the array
-   = help: create an inline `const` block, see RFC #2920 <https://github.com/rust-lang/rfcs/pull/2920> for more information
    = note: this error originates in the derive macro `Copy` (in Nightly builds, run with -Z macro-backtrace for more info)
-help: consider creating a new `const` item and initializing it with the result of the function call to be used in the repeat position
-   |
-LL ~     const ARRAY_REPEAT_VALUE: Foo<String> = Foo(String::new());
-LL ~     [ARRAY_REPEAT_VALUE; 4];
-   |
 
 error: aborting due to 1 previous error
 
diff --git a/tests/ui/consts/const-eval/issue-91827-extern-types-field-offset.stderr b/tests/ui/consts/const-eval/issue-91827-extern-types-field-offset.stderr
index 99f37fedd3d..54d45ee8ffb 100644
--- a/tests/ui/consts/const-eval/issue-91827-extern-types-field-offset.stderr
+++ b/tests/ui/consts/const-eval/issue-91827-extern-types-field-offset.stderr
@@ -2,7 +2,7 @@ error[E0080]: evaluation of constant value failed
   --> $DIR/issue-91827-extern-types-field-offset.rs:38:17
    |
 LL |     let field = &x.a;
-   |                 ^^^^ `extern type` does not have a known offset
+   |                 ^^^^ `extern type` field does not have a known offset
 
 error: aborting due to 1 previous error
 
diff --git a/tests/ui/consts/const-eval/unwind-abort.rs b/tests/ui/consts/const-eval/unwind-abort.rs
index 57959e7db6a..26113e23888 100644
--- a/tests/ui/consts/const-eval/unwind-abort.rs
+++ b/tests/ui/consts/const-eval/unwind-abort.rs
@@ -1,4 +1,4 @@
-#![feature(c_unwind, const_extern_fn)]
+#![feature(const_extern_fn)]
 
 const extern "C" fn foo() {
     panic!() //~ ERROR evaluation of constant value failed
diff --git a/tests/ui/consts/const-eval/validation-ice-extern-type-field.rs b/tests/ui/consts/const-eval/validation-ice-extern-type-field.rs
new file mode 100644
index 00000000000..3502409d576
--- /dev/null
+++ b/tests/ui/consts/const-eval/validation-ice-extern-type-field.rs
@@ -0,0 +1,15 @@
+#![feature(extern_types)]
+
+extern {
+    type Opaque;
+}
+
+struct ThinDst {
+    x: u8,
+    tail: Opaque,
+}
+
+const C1: &ThinDst = unsafe { std::mem::transmute(b"d".as_ptr()) };
+//~^ERROR: evaluation of constant value failed
+
+fn main() {}
diff --git a/tests/ui/consts/const-eval/validation-ice-extern-type-field.stderr b/tests/ui/consts/const-eval/validation-ice-extern-type-field.stderr
new file mode 100644
index 00000000000..1ec36abc2ec
--- /dev/null
+++ b/tests/ui/consts/const-eval/validation-ice-extern-type-field.stderr
@@ -0,0 +1,9 @@
+error[E0080]: evaluation of constant value failed
+  --> $DIR/validation-ice-extern-type-field.rs:12:1
+   |
+LL | const C1: &ThinDst = unsafe { std::mem::transmute(b"d".as_ptr()) };
+   | ^^^^^^^^^^^^^^^^^^ `extern type` field does not have a known offset
+
+error: aborting due to 1 previous error
+
+For more information about this error, try `rustc --explain E0080`.
diff --git a/tests/ui/consts/const-float-classify.rs b/tests/ui/consts/const-float-classify.rs
index 44772fb7313..ae094003c89 100644
--- a/tests/ui/consts/const-float-classify.rs
+++ b/tests/ui/consts/const-float-classify.rs
@@ -1,5 +1,6 @@
 //@ compile-flags: -Zmir-opt-level=0
-//@ run-pass
+//@ known-bug: #110395
+// FIXME(effects) run-pass
 
 #![feature(const_float_bits_conv)]
 #![feature(const_float_classify)]
diff --git a/tests/ui/consts/const-float-classify.stderr b/tests/ui/consts/const-float-classify.stderr
new file mode 100644
index 00000000000..1de27a072cf
--- /dev/null
+++ b/tests/ui/consts/const-float-classify.stderr
@@ -0,0 +1,223 @@
+warning: the feature `effects` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/const-float-classify.rs:7:30
+   |
+LL | #![feature(const_trait_impl, effects)]
+   |                              ^^^^^^^
+   |
+   = note: see issue #102090 <https://github.com/rust-lang/rust/issues/102090> for more information
+   = note: `#[warn(incomplete_features)]` on by default
+
+error: const `impl` for trait `PartialEq` which is not marked with `#[const_trait]`
+  --> $DIR/const-float-classify.rs:12:12
+   |
+LL | impl const PartialEq<NonDet> for bool {
+   |            ^^^^^^^^^^^^^^^^^
+   |
+   = note: marking a trait with `#[const_trait]` ensures all default method bodies are `const`
+   = note: adding a non-const method body in the future would be a breaking change
+
+error[E0207]: the const parameter `host` is not constrained by the impl trait, self type, or predicates
+  --> $DIR/const-float-classify.rs:12:6
+   |
+LL | impl const PartialEq<NonDet> for bool {
+   |      ^^^^^ unconstrained const parameter
+   |
+   = note: expressions using a const parameter must map each value to a distinct output value
+   = note: proving the result of expressions other than the parameter are unique is not supported
+
+error[E0284]: type annotations needed
+  --> $DIR/const-float-classify.rs:21:35
+   |
+LL |               const _: () = assert!($a == $b);
+   |                                     ^^ cannot infer the value of the constant `_`
+...
+LL | / suite! {
+LL | |                    [is_nan, is_infinite, is_finite, is_normal, is_sign_positive, is_sign_negative]
+LL | |      -0.0 / 0.0 => [  true,       false,     false,     false,           NonDet,           NonDet]
+LL | |       0.0 / 0.0 => [  true,       false,     false,     false,           NonDet,           NonDet]
+...  |
+LL | |      -1.0 / 0.0 => [ false,        true,     false,     false,            false,             true]
+LL | | }
+   | |_- in this macro invocation
+   |
+note: required for `bool` to implement `PartialEq<NonDet>`
+  --> $DIR/const-float-classify.rs:12:12
+   |
+LL | impl const PartialEq<NonDet> for bool {
+   |      ----- ^^^^^^^^^^^^^^^^^     ^^^^
+   |      |
+   |      unsatisfied trait bound introduced here
+   = note: this error originates in the macro `const_assert` which comes from the expansion of the macro `suite` (in Nightly builds, run with -Z macro-backtrace for more info)
+
+error[E0284]: type annotations needed
+  --> $DIR/const-float-classify.rs:21:35
+   |
+LL |               const _: () = assert!($a == $b);
+   |                                     ^^ cannot infer the value of the constant `_`
+...
+LL | / suite! {
+LL | |                    [is_nan, is_infinite, is_finite, is_normal, is_sign_positive, is_sign_negative]
+LL | |      -0.0 / 0.0 => [  true,       false,     false,     false,           NonDet,           NonDet]
+LL | |       0.0 / 0.0 => [  true,       false,     false,     false,           NonDet,           NonDet]
+...  |
+LL | |      -1.0 / 0.0 => [ false,        true,     false,     false,            false,             true]
+LL | | }
+   | |_- in this macro invocation
+   |
+note: required for `bool` to implement `PartialEq<NonDet>`
+  --> $DIR/const-float-classify.rs:12:12
+   |
+LL | impl const PartialEq<NonDet> for bool {
+   |      ----- ^^^^^^^^^^^^^^^^^     ^^^^
+   |      |
+   |      unsatisfied trait bound introduced here
+   = note: this error originates in the macro `const_assert` which comes from the expansion of the macro `suite` (in Nightly builds, run with -Z macro-backtrace for more info)
+
+error[E0284]: type annotations needed
+  --> $DIR/const-float-classify.rs:21:35
+   |
+LL |               const _: () = assert!($a == $b);
+   |                                     ^^ cannot infer the value of the constant `_`
+...
+LL | / suite! {
+LL | |                    [is_nan, is_infinite, is_finite, is_normal, is_sign_positive, is_sign_negative]
+LL | |      -0.0 / 0.0 => [  true,       false,     false,     false,           NonDet,           NonDet]
+LL | |       0.0 / 0.0 => [  true,       false,     false,     false,           NonDet,           NonDet]
+...  |
+LL | |      -1.0 / 0.0 => [ false,        true,     false,     false,            false,             true]
+LL | | }
+   | |_- in this macro invocation
+   |
+note: required for `bool` to implement `PartialEq<NonDet>`
+  --> $DIR/const-float-classify.rs:12:12
+   |
+LL | impl const PartialEq<NonDet> for bool {
+   |      ----- ^^^^^^^^^^^^^^^^^     ^^^^
+   |      |
+   |      unsatisfied trait bound introduced here
+   = note: this error originates in the macro `const_assert` which comes from the expansion of the macro `suite` (in Nightly builds, run with -Z macro-backtrace for more info)
+
+error[E0284]: type annotations needed
+  --> $DIR/const-float-classify.rs:21:35
+   |
+LL |               const _: () = assert!($a == $b);
+   |                                     ^^ cannot infer the value of the constant `_`
+...
+LL | / suite! {
+LL | |                    [is_nan, is_infinite, is_finite, is_normal, is_sign_positive, is_sign_negative]
+LL | |      -0.0 / 0.0 => [  true,       false,     false,     false,           NonDet,           NonDet]
+LL | |       0.0 / 0.0 => [  true,       false,     false,     false,           NonDet,           NonDet]
+...  |
+LL | |      -1.0 / 0.0 => [ false,        true,     false,     false,            false,             true]
+LL | | }
+   | |_- in this macro invocation
+   |
+note: required for `bool` to implement `PartialEq<NonDet>`
+  --> $DIR/const-float-classify.rs:12:12
+   |
+LL | impl const PartialEq<NonDet> for bool {
+   |      ----- ^^^^^^^^^^^^^^^^^     ^^^^
+   |      |
+   |      unsatisfied trait bound introduced here
+   = note: this error originates in the macro `const_assert` which comes from the expansion of the macro `suite` (in Nightly builds, run with -Z macro-backtrace for more info)
+
+error[E0284]: type annotations needed
+  --> $DIR/const-float-classify.rs:21:35
+   |
+LL |               const _: () = assert!($a == $b);
+   |                                     ^^ cannot infer the value of the constant `_`
+...
+LL | / suite! {
+LL | |                    [is_nan, is_infinite, is_finite, is_normal, is_sign_positive, is_sign_negative]
+LL | |      -0.0 / 0.0 => [  true,       false,     false,     false,           NonDet,           NonDet]
+LL | |       0.0 / 0.0 => [  true,       false,     false,     false,           NonDet,           NonDet]
+...  |
+LL | |      -1.0 / 0.0 => [ false,        true,     false,     false,            false,             true]
+LL | | }
+   | |_- in this macro invocation
+   |
+note: required for `bool` to implement `PartialEq<NonDet>`
+  --> $DIR/const-float-classify.rs:12:12
+   |
+LL | impl const PartialEq<NonDet> for bool {
+   |      ----- ^^^^^^^^^^^^^^^^^     ^^^^
+   |      |
+   |      unsatisfied trait bound introduced here
+   = note: this error originates in the macro `const_assert` which comes from the expansion of the macro `suite` (in Nightly builds, run with -Z macro-backtrace for more info)
+
+error[E0284]: type annotations needed
+  --> $DIR/const-float-classify.rs:21:35
+   |
+LL |               const _: () = assert!($a == $b);
+   |                                     ^^ cannot infer the value of the constant `_`
+...
+LL | / suite! {
+LL | |                    [is_nan, is_infinite, is_finite, is_normal, is_sign_positive, is_sign_negative]
+LL | |      -0.0 / 0.0 => [  true,       false,     false,     false,           NonDet,           NonDet]
+LL | |       0.0 / 0.0 => [  true,       false,     false,     false,           NonDet,           NonDet]
+...  |
+LL | |      -1.0 / 0.0 => [ false,        true,     false,     false,            false,             true]
+LL | | }
+   | |_- in this macro invocation
+   |
+note: required for `bool` to implement `PartialEq<NonDet>`
+  --> $DIR/const-float-classify.rs:12:12
+   |
+LL | impl const PartialEq<NonDet> for bool {
+   |      ----- ^^^^^^^^^^^^^^^^^     ^^^^
+   |      |
+   |      unsatisfied trait bound introduced here
+   = note: this error originates in the macro `const_assert` which comes from the expansion of the macro `suite` (in Nightly builds, run with -Z macro-backtrace for more info)
+
+error[E0284]: type annotations needed
+  --> $DIR/const-float-classify.rs:21:35
+   |
+LL |               const _: () = assert!($a == $b);
+   |                                     ^^ cannot infer the value of the constant `_`
+...
+LL | / suite! {
+LL | |                    [is_nan, is_infinite, is_finite, is_normal, is_sign_positive, is_sign_negative]
+LL | |      -0.0 / 0.0 => [  true,       false,     false,     false,           NonDet,           NonDet]
+LL | |       0.0 / 0.0 => [  true,       false,     false,     false,           NonDet,           NonDet]
+...  |
+LL | |      -1.0 / 0.0 => [ false,        true,     false,     false,            false,             true]
+LL | | }
+   | |_- in this macro invocation
+   |
+note: required for `bool` to implement `PartialEq<NonDet>`
+  --> $DIR/const-float-classify.rs:12:12
+   |
+LL | impl const PartialEq<NonDet> for bool {
+   |      ----- ^^^^^^^^^^^^^^^^^     ^^^^
+   |      |
+   |      unsatisfied trait bound introduced here
+   = note: this error originates in the macro `const_assert` which comes from the expansion of the macro `suite` (in Nightly builds, run with -Z macro-backtrace for more info)
+
+error[E0284]: type annotations needed
+  --> $DIR/const-float-classify.rs:21:35
+   |
+LL |               const _: () = assert!($a == $b);
+   |                                     ^^ cannot infer the value of the constant `_`
+...
+LL | / suite! {
+LL | |                    [is_nan, is_infinite, is_finite, is_normal, is_sign_positive, is_sign_negative]
+LL | |      -0.0 / 0.0 => [  true,       false,     false,     false,           NonDet,           NonDet]
+LL | |       0.0 / 0.0 => [  true,       false,     false,     false,           NonDet,           NonDet]
+...  |
+LL | |      -1.0 / 0.0 => [ false,        true,     false,     false,            false,             true]
+LL | | }
+   | |_- in this macro invocation
+   |
+note: required for `bool` to implement `PartialEq<NonDet>`
+  --> $DIR/const-float-classify.rs:12:12
+   |
+LL | impl const PartialEq<NonDet> for bool {
+   |      ----- ^^^^^^^^^^^^^^^^^     ^^^^
+   |      |
+   |      unsatisfied trait bound introduced here
+   = note: this error originates in the macro `const_assert` which comes from the expansion of the macro `suite` (in Nightly builds, run with -Z macro-backtrace for more info)
+
+error: aborting due to 10 previous errors; 1 warning emitted
+
+Some errors have detailed explanations: E0207, E0284.
+For more information about an error, try `rustc --explain E0207`.
diff --git a/tests/ui/consts/const-fn-in-vec.stderr b/tests/ui/consts/const-fn-in-vec.stderr
index 12098e8199c..7c6b3bee940 100644
--- a/tests/ui/consts/const-fn-in-vec.stderr
+++ b/tests/ui/consts/const-fn-in-vec.stderr
@@ -2,45 +2,36 @@ error[E0277]: the trait bound `String: Copy` is not satisfied
   --> $DIR/const-fn-in-vec.rs:1:47
    |
 LL | static _MAYBE_STRINGS: [Option<String>; 5] = [None; 5];
-   |                                               ^^^^ the trait `Copy` is not implemented for `String`, which is required by `Option<String>: Copy`
+   |                                               ^^^^
+   |                                               |
+   |                                               the trait `Copy` is not implemented for `String`, which is required by `Option<String>: Copy`
+   |                                               help: create an inline `const` block: `const { None }`
    |
    = note: required for `Option<String>` to implement `Copy`
    = note: the `Copy` trait is required because this value will be copied for each element of the array
-   = help: create an inline `const` block, see RFC #2920 <https://github.com/rust-lang/rfcs/pull/2920> for more information
-help: consider creating a new `const` item and initializing it with the result of the constructor to be used in the repeat position
-   |
-LL + const ARRAY_REPEAT_VALUE: Option<String> = None;
-LL ~ static _MAYBE_STRINGS: [Option<String>; 5] = [ARRAY_REPEAT_VALUE; 5];
-   |
 
 error[E0277]: the trait bound `String: Copy` is not satisfied
   --> $DIR/const-fn-in-vec.rs:7:34
    |
 LL |     let _strings: [String; 5] = [String::new(); 5];
-   |                                  ^^^^^^^^^^^^^ the trait `Copy` is not implemented for `String`
+   |                                  ^^^^^^^^^^^^^
+   |                                  |
+   |                                  the trait `Copy` is not implemented for `String`
+   |                                  help: create an inline `const` block: `const { String::new() }`
    |
    = note: the `Copy` trait is required because this value will be copied for each element of the array
-   = help: create an inline `const` block, see RFC #2920 <https://github.com/rust-lang/rfcs/pull/2920> for more information
-help: consider creating a new `const` item and initializing it with the result of the function call to be used in the repeat position
-   |
-LL ~     const ARRAY_REPEAT_VALUE: String = String::new();
-LL ~     let _strings: [String; 5] = [ARRAY_REPEAT_VALUE; 5];
-   |
 
 error[E0277]: the trait bound `String: Copy` is not satisfied
   --> $DIR/const-fn-in-vec.rs:9:48
    |
 LL |     let _maybe_strings: [Option<String>; 5] = [None; 5];
-   |                                                ^^^^ the trait `Copy` is not implemented for `String`, which is required by `Option<String>: Copy`
+   |                                                ^^^^
+   |                                                |
+   |                                                the trait `Copy` is not implemented for `String`, which is required by `Option<String>: Copy`
+   |                                                help: create an inline `const` block: `const { None }`
    |
    = note: required for `Option<String>` to implement `Copy`
    = note: the `Copy` trait is required because this value will be copied for each element of the array
-   = help: create an inline `const` block, see RFC #2920 <https://github.com/rust-lang/rfcs/pull/2920> for more information
-help: consider creating a new `const` item and initializing it with the result of the constructor to be used in the repeat position
-   |
-LL ~     const ARRAY_REPEAT_VALUE: Option<String> = None;
-LL ~     let _maybe_strings: [Option<String>; 5] = [ARRAY_REPEAT_VALUE; 5];
-   |
 
 error: aborting due to 3 previous errors
 
diff --git a/tests/ui/consts/const_cmp_type_id.stderr b/tests/ui/consts/const_cmp_type_id.stderr
index 98f5b3a5e90..e0e673d5fbd 100644
--- a/tests/ui/consts/const_cmp_type_id.stderr
+++ b/tests/ui/consts/const_cmp_type_id.stderr
@@ -1,3 +1,12 @@
+warning: the feature `effects` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/const_cmp_type_id.rs:3:30
+   |
+LL | #![feature(const_trait_impl, effects)]
+   |                              ^^^^^^^
+   |
+   = note: see issue #102090 <https://github.com/rust-lang/rust/issues/102090> for more information
+   = note: `#[warn(incomplete_features)]` on by default
+
 error[E0131]: `main` function is not allowed to have generic parameters
   --> $DIR/const_cmp_type_id.rs:7:14
    |
@@ -10,25 +19,7 @@ error[E0080]: evaluation of constant value failed
 LL |     const _A: bool = TypeId::of::<u8>() < TypeId::of::<u16>();
    |                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ calling non-const function `<TypeId as PartialOrd>::lt`
 
-error[E0308]: mismatched types
-  --> $DIR/const_cmp_type_id.rs:8:13
-   |
-LL |     assert!(TypeId::of::<u8>() == TypeId::of::<u8>());
-   |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `host`, found `true`
-   |
-   = note: expected constant `host`
-              found constant `true`
-
-error[E0308]: mismatched types
-  --> $DIR/const_cmp_type_id.rs:9:13
-   |
-LL |     assert!(TypeId::of::<()>() != TypeId::of::<u8>());
-   |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `host`, found `true`
-   |
-   = note: expected constant `host`
-              found constant `true`
-
-error: aborting due to 4 previous errors
+error: aborting due to 2 previous errors; 1 warning emitted
 
-Some errors have detailed explanations: E0080, E0131, E0308.
+Some errors have detailed explanations: E0080, E0131.
 For more information about an error, try `rustc --explain E0080`.
diff --git a/tests/ui/consts/const_in_pattern/f16-f128-const-reassign.rs b/tests/ui/consts/const_in_pattern/f16-f128-const-reassign.rs
new file mode 100644
index 00000000000..99d0e472485
--- /dev/null
+++ b/tests/ui/consts/const_in_pattern/f16-f128-const-reassign.rs
@@ -0,0 +1,14 @@
+//@ check-pass
+// issue: rust-lang/rust#122587
+
+#![feature(f128)]
+#![feature(f16)]
+#![allow(non_upper_case_globals)]
+
+const h: f16 = 0.0f16;
+const q: f128 = 0.0f128;
+
+pub fn main() {
+    let h = 0.0f16 else { unreachable!() };
+    let q = 0.0f128 else { unreachable!() };
+}
diff --git a/tests/ui/consts/fn_trait_refs.stderr b/tests/ui/consts/fn_trait_refs.stderr
index 4fb82c0683d..42a6026cfba 100644
--- a/tests/ui/consts/fn_trait_refs.stderr
+++ b/tests/ui/consts/fn_trait_refs.stderr
@@ -4,6 +4,12 @@ error[E0635]: unknown feature `const_fn_trait_ref_impls`
 LL | #![feature(const_fn_trait_ref_impls)]
    |            ^^^^^^^^^^^^^^^^^^^^^^^^
 
+error[E0635]: unknown feature `const_cmp`
+  --> $DIR/fn_trait_refs.rs:8:12
+   |
+LL | #![feature(const_cmp)]
+   |            ^^^^^^^^^
+
 error: `~const` can only be applied to `#[const_trait]` traits
   --> $DIR/fn_trait_refs.rs:15:15
    |
@@ -11,6 +17,12 @@ LL |     T: ~const Fn<()> + ~const Destruct,
    |               ^^^^^^
 
 error: `~const` can only be applied to `#[const_trait]` traits
+  --> $DIR/fn_trait_refs.rs:15:31
+   |
+LL |     T: ~const Fn<()> + ~const Destruct,
+   |                               ^^^^^^^^
+
+error: `~const` can only be applied to `#[const_trait]` traits
   --> $DIR/fn_trait_refs.rs:15:15
    |
 LL |     T: ~const Fn<()> + ~const Destruct,
@@ -25,6 +37,12 @@ LL |     T: ~const FnMut<()> + ~const Destruct,
    |               ^^^^^^^^^
 
 error: `~const` can only be applied to `#[const_trait]` traits
+  --> $DIR/fn_trait_refs.rs:22:34
+   |
+LL |     T: ~const FnMut<()> + ~const Destruct,
+   |                                  ^^^^^^^^
+
+error: `~const` can only be applied to `#[const_trait]` traits
   --> $DIR/fn_trait_refs.rs:22:15
    |
 LL |     T: ~const FnMut<()> + ~const Destruct,
@@ -53,6 +71,12 @@ LL |     T: ~const Fn<()> + ~const Destruct,
    |               ^^^^^^
 
 error: `~const` can only be applied to `#[const_trait]` traits
+  --> $DIR/fn_trait_refs.rs:36:31
+   |
+LL |     T: ~const Fn<()> + ~const Destruct,
+   |                               ^^^^^^^^
+
+error: `~const` can only be applied to `#[const_trait]` traits
   --> $DIR/fn_trait_refs.rs:36:15
    |
 LL |     T: ~const Fn<()> + ~const Destruct,
@@ -67,6 +91,12 @@ LL |     T: ~const FnMut<()> + ~const Destruct,
    |               ^^^^^^^^^
 
 error: `~const` can only be applied to `#[const_trait]` traits
+  --> $DIR/fn_trait_refs.rs:50:34
+   |
+LL |     T: ~const FnMut<()> + ~const Destruct,
+   |                                  ^^^^^^^^
+
+error: `~const` can only be applied to `#[const_trait]` traits
   --> $DIR/fn_trait_refs.rs:50:15
    |
 LL |     T: ~const FnMut<()> + ~const Destruct,
@@ -182,7 +212,7 @@ LL | const fn test_fn_mut<T>(mut f: T) -> (T::Output, T::Output)
 LL | }
    | - value is dropped here
 
-error: aborting due to 20 previous errors
+error: aborting due to 25 previous errors
 
 Some errors have detailed explanations: E0015, E0493, E0635.
 For more information about an error, try `rustc --explain E0015`.
diff --git a/tests/ui/consts/rustc-impl-const-stability.stderr b/tests/ui/consts/rustc-impl-const-stability.stderr
index ba8e6c1555c..250d1c3fc05 100644
--- a/tests/ui/consts/rustc-impl-const-stability.stderr
+++ b/tests/ui/consts/rustc-impl-const-stability.stderr
@@ -1,3 +1,12 @@
+warning: the feature `effects` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/rustc-impl-const-stability.rs:5:30
+   |
+LL | #![feature(const_trait_impl, effects)]
+   |                              ^^^^^^^
+   |
+   = note: see issue #102090 <https://github.com/rust-lang/rust/issues/102090> for more information
+   = note: `#[warn(incomplete_features)]` on by default
+
 error: const `impl` for trait `Default` which is not marked with `#[const_trait]`
   --> $DIR/rustc-impl-const-stability.rs:15:12
    |
@@ -16,6 +25,6 @@ LL | impl const Default for Data {
    = note: expressions using a const parameter must map each value to a distinct output value
    = note: proving the result of expressions other than the parameter are unique is not supported
 
-error: aborting due to 2 previous errors
+error: aborting due to 2 previous errors; 1 warning emitted
 
 For more information about this error, try `rustc --explain E0207`.
diff --git a/tests/ui/consts/unwind-abort.rs b/tests/ui/consts/unwind-abort.rs
index 35db9152bd5..1dd33f327fb 100644
--- a/tests/ui/consts/unwind-abort.rs
+++ b/tests/ui/consts/unwind-abort.rs
@@ -1,6 +1,6 @@
 //@ check-pass
 
-#![feature(c_unwind, const_extern_fn)]
+#![feature(const_extern_fn)]
 
 // We don't unwind in const-eval anyways.
 const extern "C" fn foo() {
diff --git a/tests/ui/coverage-attr/bad-syntax.rs b/tests/ui/coverage-attr/bad-syntax.rs
index 8783714992b..c8c92de8c38 100644
--- a/tests/ui/coverage-attr/bad-syntax.rs
+++ b/tests/ui/coverage-attr/bad-syntax.rs
@@ -1,58 +1,45 @@
 #![feature(coverage_attribute)]
+//@ edition: 2021
 
 // Tests the error messages produced (or not produced) by various unusual
 // uses of the `#[coverage(..)]` attribute.
 
-// FIXME(#84605): Multiple coverage attributes with the same value are useless,
-// and should probably produce a diagnostic.
-#[coverage(off)]
+#[coverage(off)] //~ ERROR multiple `coverage` attributes
 #[coverage(off)]
 fn multiple_consistent() {}
 
-// FIXME(#84605): When there are multiple inconsistent coverage attributes,
-// it's unclear which one will prevail.
-#[coverage(off)]
+#[coverage(off)] //~ ERROR multiple `coverage` attributes
 #[coverage(on)]
 fn multiple_inconsistent() {}
 
-#[coverage] //~ ERROR expected `coverage(off)` or `coverage(on)`
+#[coverage] //~ ERROR malformed `coverage` attribute input
 fn bare_word() {}
 
-// FIXME(#84605): This shows as multiple different errors, one of which suggests
-// writing bare `#[coverage]`, which is not allowed.
-#[coverage = true]
-//~^ ERROR expected `coverage(off)` or `coverage(on)`
-//~| ERROR malformed `coverage` attribute input
-//~| HELP the following are the possible correct uses
-//~| SUGGESTION #[coverage(on|off)]
+#[coverage = true] //~ ERROR malformed `coverage` attribute input
 fn key_value() {}
 
-#[coverage()] //~ ERROR expected `coverage(off)` or `coverage(on)`
+#[coverage()] //~ ERROR malformed `coverage` attribute input
 fn list_empty() {}
 
-#[coverage(off, off)] //~ ERROR expected `coverage(off)` or `coverage(on)`
+#[coverage(off, off)] //~ ERROR malformed `coverage` attribute input
 fn list_consistent() {}
 
-#[coverage(off, on)] //~ ERROR expected `coverage(off)` or `coverage(on)`
+#[coverage(off, on)] //~ ERROR malformed `coverage` attribute input
 fn list_inconsistent() {}
 
-#[coverage(bogus)] //~ ERROR expected `coverage(off)` or `coverage(on)`
+#[coverage(bogus)] //~ ERROR malformed `coverage` attribute input
 fn bogus_word() {}
 
-#[coverage(bogus, off)] //~ ERROR expected `coverage(off)` or `coverage(on)`
+#[coverage(bogus, off)] //~ ERROR malformed `coverage` attribute input
 fn bogus_word_before() {}
 
-#[coverage(off, bogus)] //~ ERROR expected `coverage(off)` or `coverage(on)`
+#[coverage(off, bogus)] //~ ERROR malformed `coverage` attribute input
 fn bogus_word_after() {}
 
-#[coverage(off,)]
+#[coverage(off,)] // (OK!)
 fn comma_after() {}
 
-// FIXME(#84605): This shows as multiple different errors.
-#[coverage(,off)]
-//~^ ERROR expected identifier, found `,`
-//~| HELP remove this comma
-//~| ERROR expected `coverage(off)` or `coverage(on)`
+#[coverage(,off)] //~ ERROR expected identifier, found `,`
 fn comma_before() {}
 
 fn main() {}
diff --git a/tests/ui/coverage-attr/bad-syntax.stderr b/tests/ui/coverage-attr/bad-syntax.stderr
index f6181d12a94..a5868fcf19c 100644
--- a/tests/ui/coverage-attr/bad-syntax.stderr
+++ b/tests/ui/coverage-attr/bad-syntax.stderr
@@ -1,78 +1,139 @@
 error: malformed `coverage` attribute input
-  --> $DIR/bad-syntax.rs:23:1
-   |
-LL | #[coverage = true]
-   | ^^^^^^^^^^^^^^^^^^
-   |
-help: the following are the possible correct uses
-   |
-LL | #[coverage(on|off)]
+  --> $DIR/bad-syntax.rs:15:1
    |
 LL | #[coverage]
+   | ^^^^^^^^^^^
    |
-
-error: expected identifier, found `,`
-  --> $DIR/bad-syntax.rs:52:12
+help: the following are the possible correct uses
    |
-LL | #[coverage(,off)]
-   |            ^
-   |            |
-   |            expected identifier
-   |            help: remove this comma
+LL | #[coverage(off)]
+   | ~~~~~~~~~~~~~~~~
+LL | #[coverage(on)]
+   | ~~~~~~~~~~~~~~~
 
-error: expected `coverage(off)` or `coverage(on)`
+error: malformed `coverage` attribute input
   --> $DIR/bad-syntax.rs:18:1
    |
-LL | #[coverage]
-   | ^^^^^^^^^^^
-
-error: expected `coverage(off)` or `coverage(on)`
-  --> $DIR/bad-syntax.rs:23:1
-   |
 LL | #[coverage = true]
    | ^^^^^^^^^^^^^^^^^^
+   |
+help: the following are the possible correct uses
+   |
+LL | #[coverage(off)]
+   | ~~~~~~~~~~~~~~~~
+LL | #[coverage(on)]
+   | ~~~~~~~~~~~~~~~
 
-error: expected `coverage(off)` or `coverage(on)`
-  --> $DIR/bad-syntax.rs:30:1
+error: malformed `coverage` attribute input
+  --> $DIR/bad-syntax.rs:21:1
    |
 LL | #[coverage()]
    | ^^^^^^^^^^^^^
+   |
+help: the following are the possible correct uses
+   |
+LL | #[coverage(off)]
+   | ~~~~~~~~~~~~~~~~
+LL | #[coverage(on)]
+   | ~~~~~~~~~~~~~~~
 
-error: expected `coverage(off)` or `coverage(on)`
-  --> $DIR/bad-syntax.rs:33:1
+error: malformed `coverage` attribute input
+  --> $DIR/bad-syntax.rs:24:1
    |
 LL | #[coverage(off, off)]
    | ^^^^^^^^^^^^^^^^^^^^^
+   |
+help: the following are the possible correct uses
+   |
+LL | #[coverage(off)]
+   | ~~~~~~~~~~~~~~~~
+LL | #[coverage(on)]
+   | ~~~~~~~~~~~~~~~
 
-error: expected `coverage(off)` or `coverage(on)`
-  --> $DIR/bad-syntax.rs:36:1
+error: malformed `coverage` attribute input
+  --> $DIR/bad-syntax.rs:27:1
    |
 LL | #[coverage(off, on)]
    | ^^^^^^^^^^^^^^^^^^^^
+   |
+help: the following are the possible correct uses
+   |
+LL | #[coverage(off)]
+   | ~~~~~~~~~~~~~~~~
+LL | #[coverage(on)]
+   | ~~~~~~~~~~~~~~~
 
-error: expected `coverage(off)` or `coverage(on)`
-  --> $DIR/bad-syntax.rs:39:1
+error: malformed `coverage` attribute input
+  --> $DIR/bad-syntax.rs:30:1
    |
 LL | #[coverage(bogus)]
    | ^^^^^^^^^^^^^^^^^^
+   |
+help: the following are the possible correct uses
+   |
+LL | #[coverage(off)]
+   | ~~~~~~~~~~~~~~~~
+LL | #[coverage(on)]
+   | ~~~~~~~~~~~~~~~
 
-error: expected `coverage(off)` or `coverage(on)`
-  --> $DIR/bad-syntax.rs:42:1
+error: malformed `coverage` attribute input
+  --> $DIR/bad-syntax.rs:33:1
    |
 LL | #[coverage(bogus, off)]
    | ^^^^^^^^^^^^^^^^^^^^^^^
+   |
+help: the following are the possible correct uses
+   |
+LL | #[coverage(off)]
+   | ~~~~~~~~~~~~~~~~
+LL | #[coverage(on)]
+   | ~~~~~~~~~~~~~~~
 
-error: expected `coverage(off)` or `coverage(on)`
-  --> $DIR/bad-syntax.rs:45:1
+error: malformed `coverage` attribute input
+  --> $DIR/bad-syntax.rs:36:1
    |
 LL | #[coverage(off, bogus)]
    | ^^^^^^^^^^^^^^^^^^^^^^^
+   |
+help: the following are the possible correct uses
+   |
+LL | #[coverage(off)]
+   | ~~~~~~~~~~~~~~~~
+LL | #[coverage(on)]
+   | ~~~~~~~~~~~~~~~
 
-error: expected `coverage(off)` or `coverage(on)`
-  --> $DIR/bad-syntax.rs:52:1
+error: expected identifier, found `,`
+  --> $DIR/bad-syntax.rs:42:12
    |
 LL | #[coverage(,off)]
-   | ^^^^^^^^^^^^^^^^^
+   |            ^
+   |            |
+   |            expected identifier
+   |            help: remove this comma
+
+error: multiple `coverage` attributes
+  --> $DIR/bad-syntax.rs:7:1
+   |
+LL | #[coverage(off)]
+   | ^^^^^^^^^^^^^^^^ help: remove this attribute
+   |
+note: attribute also specified here
+  --> $DIR/bad-syntax.rs:8:1
+   |
+LL | #[coverage(off)]
+   | ^^^^^^^^^^^^^^^^
+
+error: multiple `coverage` attributes
+  --> $DIR/bad-syntax.rs:11:1
+   |
+LL | #[coverage(off)]
+   | ^^^^^^^^^^^^^^^^ help: remove this attribute
+   |
+note: attribute also specified here
+  --> $DIR/bad-syntax.rs:12:1
+   |
+LL | #[coverage(on)]
+   | ^^^^^^^^^^^^^^^
 
 error: aborting due to 11 previous errors
 
diff --git a/tests/ui/coverage-attr/name-value.rs b/tests/ui/coverage-attr/name-value.rs
new file mode 100644
index 00000000000..cfd78a03e43
--- /dev/null
+++ b/tests/ui/coverage-attr/name-value.rs
@@ -0,0 +1,69 @@
+#![feature(coverage_attribute)]
+//@ edition: 2021
+
+// Demonstrates the diagnostics produced when using the syntax
+// `#[coverage = "off"]`, which should not be allowed.
+//
+// The syntax is tested both in places that can have a coverage attribute,
+// and in places that cannot have a coverage attribute, to demonstrate the
+// interaction between multiple errors.
+
+#[coverage = "off"]
+//~^ ERROR malformed `coverage` attribute input
+//~| ERROR attribute should be applied to a function definition or closure
+mod my_mod {}
+
+mod my_mod_inner {
+    #![coverage = "off"]
+    //~^ ERROR malformed `coverage` attribute input
+    //~| ERROR attribute should be applied to a function definition or closure
+}
+
+#[coverage = "off"]
+//~^ ERROR malformed `coverage` attribute input
+//~| ERROR attribute should be applied to a function definition or closure
+struct MyStruct;
+
+#[coverage = "off"]
+//~^ ERROR malformed `coverage` attribute input
+//~| ERROR attribute should be applied to a function definition or closure
+impl MyStruct {
+    #[coverage = "off"]
+    //~^ ERROR malformed `coverage` attribute input
+    //~| ERROR attribute should be applied to a function definition or closure
+    const X: u32 = 7;
+}
+
+#[coverage = "off"]
+//~^ ERROR malformed `coverage` attribute input
+//~| ERROR attribute should be applied to a function definition or closure
+trait MyTrait {
+    #[coverage = "off"]
+    //~^ ERROR malformed `coverage` attribute input
+    //~| ERROR attribute should be applied to a function definition or closure
+    const X: u32;
+
+    #[coverage = "off"]
+    //~^ ERROR malformed `coverage` attribute input
+    //~| ERROR attribute should be applied to a function definition or closure
+    type T;
+}
+
+#[coverage = "off"]
+//~^ ERROR malformed `coverage` attribute input
+//~| ERROR attribute should be applied to a function definition or closure
+impl MyTrait for MyStruct {
+    #[coverage = "off"]
+    //~^ ERROR malformed `coverage` attribute input
+    //~| ERROR attribute should be applied to a function definition or closure
+    const X: u32 = 8;
+
+    #[coverage = "off"]
+    //~^ ERROR malformed `coverage` attribute input
+    //~| ERROR attribute should be applied to a function definition or closure
+    type T = ();
+}
+
+#[coverage = "off"]
+//~^ ERROR malformed `coverage` attribute input
+fn main() {}
diff --git a/tests/ui/coverage-attr/name-value.stderr b/tests/ui/coverage-attr/name-value.stderr
new file mode 100644
index 00000000000..caac687c94d
--- /dev/null
+++ b/tests/ui/coverage-attr/name-value.stderr
@@ -0,0 +1,277 @@
+error: malformed `coverage` attribute input
+  --> $DIR/name-value.rs:11:1
+   |
+LL | #[coverage = "off"]
+   | ^^^^^^^^^^^^^^^^^^^
+   |
+help: the following are the possible correct uses
+   |
+LL | #[coverage(off)]
+   |
+LL | #[coverage(on)]
+   |
+
+error: malformed `coverage` attribute input
+  --> $DIR/name-value.rs:17:5
+   |
+LL |     #![coverage = "off"]
+   |     ^^^^^^^^^^^^^^^^^^^^
+   |
+help: the following are the possible correct uses
+   |
+LL |     #![coverage(off)]
+   |
+LL |     #![coverage(on)]
+   |
+
+error: malformed `coverage` attribute input
+  --> $DIR/name-value.rs:22:1
+   |
+LL | #[coverage = "off"]
+   | ^^^^^^^^^^^^^^^^^^^
+   |
+help: the following are the possible correct uses
+   |
+LL | #[coverage(off)]
+   |
+LL | #[coverage(on)]
+   |
+
+error: malformed `coverage` attribute input
+  --> $DIR/name-value.rs:31:5
+   |
+LL |     #[coverage = "off"]
+   |     ^^^^^^^^^^^^^^^^^^^
+   |
+help: the following are the possible correct uses
+   |
+LL |     #[coverage(off)]
+   |
+LL |     #[coverage(on)]
+   |
+
+error: malformed `coverage` attribute input
+  --> $DIR/name-value.rs:27:1
+   |
+LL | #[coverage = "off"]
+   | ^^^^^^^^^^^^^^^^^^^
+   |
+help: the following are the possible correct uses
+   |
+LL | #[coverage(off)]
+   |
+LL | #[coverage(on)]
+   |
+
+error: malformed `coverage` attribute input
+  --> $DIR/name-value.rs:41:5
+   |
+LL |     #[coverage = "off"]
+   |     ^^^^^^^^^^^^^^^^^^^
+   |
+help: the following are the possible correct uses
+   |
+LL |     #[coverage(off)]
+   |
+LL |     #[coverage(on)]
+   |
+
+error: malformed `coverage` attribute input
+  --> $DIR/name-value.rs:46:5
+   |
+LL |     #[coverage = "off"]
+   |     ^^^^^^^^^^^^^^^^^^^
+   |
+help: the following are the possible correct uses
+   |
+LL |     #[coverage(off)]
+   |
+LL |     #[coverage(on)]
+   |
+
+error: malformed `coverage` attribute input
+  --> $DIR/name-value.rs:37:1
+   |
+LL | #[coverage = "off"]
+   | ^^^^^^^^^^^^^^^^^^^
+   |
+help: the following are the possible correct uses
+   |
+LL | #[coverage(off)]
+   |
+LL | #[coverage(on)]
+   |
+
+error: malformed `coverage` attribute input
+  --> $DIR/name-value.rs:56:5
+   |
+LL |     #[coverage = "off"]
+   |     ^^^^^^^^^^^^^^^^^^^
+   |
+help: the following are the possible correct uses
+   |
+LL |     #[coverage(off)]
+   |
+LL |     #[coverage(on)]
+   |
+
+error: malformed `coverage` attribute input
+  --> $DIR/name-value.rs:61:5
+   |
+LL |     #[coverage = "off"]
+   |     ^^^^^^^^^^^^^^^^^^^
+   |
+help: the following are the possible correct uses
+   |
+LL |     #[coverage(off)]
+   |
+LL |     #[coverage(on)]
+   |
+
+error: malformed `coverage` attribute input
+  --> $DIR/name-value.rs:52:1
+   |
+LL | #[coverage = "off"]
+   | ^^^^^^^^^^^^^^^^^^^
+   |
+help: the following are the possible correct uses
+   |
+LL | #[coverage(off)]
+   |
+LL | #[coverage(on)]
+   |
+
+error: malformed `coverage` attribute input
+  --> $DIR/name-value.rs:67:1
+   |
+LL | #[coverage = "off"]
+   | ^^^^^^^^^^^^^^^^^^^
+   |
+help: the following are the possible correct uses
+   |
+LL | #[coverage(off)]
+   |
+LL | #[coverage(on)]
+   |
+
+error[E0788]: attribute should be applied to a function definition or closure
+  --> $DIR/name-value.rs:11:1
+   |
+LL | #[coverage = "off"]
+   | ^^^^^^^^^^^^^^^^^^^
+...
+LL | mod my_mod {}
+   | ------------- not a function or closure
+
+error[E0788]: attribute should be applied to a function definition or closure
+  --> $DIR/name-value.rs:17:5
+   |
+LL | / mod my_mod_inner {
+LL | |     #![coverage = "off"]
+   | |     ^^^^^^^^^^^^^^^^^^^^
+LL | |
+LL | |
+LL | | }
+   | |_- not a function or closure
+
+error[E0788]: attribute should be applied to a function definition or closure
+  --> $DIR/name-value.rs:22:1
+   |
+LL | #[coverage = "off"]
+   | ^^^^^^^^^^^^^^^^^^^
+...
+LL | struct MyStruct;
+   | ---------------- not a function or closure
+
+error[E0788]: attribute should be applied to a function definition or closure
+  --> $DIR/name-value.rs:27:1
+   |
+LL |   #[coverage = "off"]
+   |   ^^^^^^^^^^^^^^^^^^^
+...
+LL | / impl MyStruct {
+LL | |     #[coverage = "off"]
+LL | |
+LL | |
+LL | |     const X: u32 = 7;
+LL | | }
+   | |_- not a function or closure
+
+error[E0788]: attribute should be applied to a function definition or closure
+  --> $DIR/name-value.rs:37:1
+   |
+LL |   #[coverage = "off"]
+   |   ^^^^^^^^^^^^^^^^^^^
+...
+LL | / trait MyTrait {
+LL | |     #[coverage = "off"]
+LL | |
+LL | |
+...  |
+LL | |     type T;
+LL | | }
+   | |_- not a function or closure
+
+error[E0788]: attribute should be applied to a function definition or closure
+  --> $DIR/name-value.rs:52:1
+   |
+LL |   #[coverage = "off"]
+   |   ^^^^^^^^^^^^^^^^^^^
+...
+LL | / impl MyTrait for MyStruct {
+LL | |     #[coverage = "off"]
+LL | |
+LL | |
+...  |
+LL | |     type T = ();
+LL | | }
+   | |_- not a function or closure
+
+error[E0788]: attribute should be applied to a function definition or closure
+  --> $DIR/name-value.rs:41:5
+   |
+LL |     #[coverage = "off"]
+   |     ^^^^^^^^^^^^^^^^^^^
+...
+LL |     const X: u32;
+   |     ------------- not a function or closure
+
+error[E0788]: attribute should be applied to a function definition or closure
+  --> $DIR/name-value.rs:46:5
+   |
+LL |     #[coverage = "off"]
+   |     ^^^^^^^^^^^^^^^^^^^
+...
+LL |     type T;
+   |     ------- not a function or closure
+
+error[E0788]: attribute should be applied to a function definition or closure
+  --> $DIR/name-value.rs:31:5
+   |
+LL |     #[coverage = "off"]
+   |     ^^^^^^^^^^^^^^^^^^^
+...
+LL |     const X: u32 = 7;
+   |     ----------------- not a function or closure
+
+error[E0788]: attribute should be applied to a function definition or closure
+  --> $DIR/name-value.rs:56:5
+   |
+LL |     #[coverage = "off"]
+   |     ^^^^^^^^^^^^^^^^^^^
+...
+LL |     const X: u32 = 8;
+   |     ----------------- not a function or closure
+
+error[E0788]: attribute should be applied to a function definition or closure
+  --> $DIR/name-value.rs:61:5
+   |
+LL |     #[coverage = "off"]
+   |     ^^^^^^^^^^^^^^^^^^^
+...
+LL |     type T = ();
+   |     ------------ not a function or closure
+
+error: aborting due to 23 previous errors
+
+For more information about this error, try `rustc --explain E0788`.
diff --git a/tests/ui/coverage-attr/no-coverage.rs b/tests/ui/coverage-attr/no-coverage.rs
index 907d25d333e..5290fccca61 100644
--- a/tests/ui/coverage-attr/no-coverage.rs
+++ b/tests/ui/coverage-attr/no-coverage.rs
@@ -2,54 +2,48 @@
 #![feature(coverage_attribute)]
 #![feature(impl_trait_in_assoc_type)]
 #![warn(unused_attributes)]
-#![coverage(off)]
-//~^ WARN: `#[coverage]` does not propagate into items and must be applied to the contained functions directly
+#![coverage(off)] //~ ERROR attribute should be applied to a function definition or closure
 
-#[coverage(off)]
-//~^ WARN: `#[coverage]` does not propagate into items and must be applied to the contained functions directly
+#[coverage(off)] //~ ERROR attribute should be applied to a function definition or closure
 trait Trait {
-    #[coverage(off)] //~ ERROR `#[coverage]` must be applied to coverable code
+    #[coverage(off)] //~ ERROR attribute should be applied to a function definition or closure
     const X: u32;
 
-    #[coverage(off)] //~ ERROR `#[coverage]` must be applied to coverable code
+    #[coverage(off)] //~ ERROR attribute should be applied to a function definition or closure
     type T;
 
     type U;
 }
 
-#[coverage(off)]
-//~^ WARN: `#[coverage]` does not propagate into items and must be applied to the contained functions directly
+#[coverage(off)] //~ ERROR attribute should be applied to a function definition or closure
 impl Trait for () {
     const X: u32 = 0;
 
-    #[coverage(off)] //~ ERROR `#[coverage]` must be applied to coverable code
+    #[coverage(off)] //~ ERROR attribute should be applied to a function definition or closure
     type T = Self;
 
-    #[coverage(off)] //~ ERROR `#[coverage]` must be applied to coverable code
+    #[coverage(off)] //~ ERROR attribute should be applied to a function definition or closure
     type U = impl Trait; //~ ERROR unconstrained opaque type
 }
 
 extern "C" {
-    #[coverage(off)] //~ ERROR `#[coverage]` must be applied to coverable code
+    #[coverage(off)] //~ ERROR attribute should be applied to a function definition or closure
     static X: u32;
 
-    #[coverage(off)] //~ ERROR `#[coverage]` must be applied to coverable code
+    #[coverage(off)] //~ ERROR attribute should be applied to a function definition or closure
     type T;
 }
 
 #[coverage(off)]
 fn main() {
-    #[coverage(off)]
-    //~^ WARN `#[coverage]` may only be applied to function definitions
+    #[coverage(off)] //~ ERROR attribute should be applied to a function definition or closure
     let _ = ();
 
     match () {
-        #[coverage(off)]
-        //~^ WARN `#[coverage]` may only be applied to function definitions
+        #[coverage(off)] //~ ERROR attribute should be applied to a function definition or closure
         () => (),
     }
 
-    #[coverage(off)]
-    //~^ WARN `#[coverage]` may only be applied to function definitions
+    #[coverage(off)] //~ ERROR attribute should be applied to a function definition or closure
     return ();
 }
diff --git a/tests/ui/coverage-attr/no-coverage.stderr b/tests/ui/coverage-attr/no-coverage.stderr
index a87b0fb49f0..c5e3b0922cb 100644
--- a/tests/ui/coverage-attr/no-coverage.stderr
+++ b/tests/ui/coverage-attr/no-coverage.stderr
@@ -1,101 +1,116 @@
-warning: `#[coverage]` does not propagate into items and must be applied to the contained functions directly
-  --> $DIR/no-coverage.rs:8:1
-   |
-LL | #[coverage(off)]
-   | ^^^^^^^^^^^^^^^^
-   |
-note: the lint level is defined here
-  --> $DIR/no-coverage.rs:4:9
-   |
-LL | #![warn(unused_attributes)]
-   |         ^^^^^^^^^^^^^^^^^
+error[E0788]: attribute should be applied to a function definition or closure
+  --> $DIR/no-coverage.rs:7:1
+   |
+LL |   #[coverage(off)]
+   |   ^^^^^^^^^^^^^^^^
+LL | / trait Trait {
+LL | |     #[coverage(off)]
+LL | |     const X: u32;
+...  |
+LL | |     type U;
+LL | | }
+   | |_- not a function or closure
 
-warning: `#[coverage]` does not propagate into items and must be applied to the contained functions directly
-  --> $DIR/no-coverage.rs:20:1
-   |
-LL | #[coverage(off)]
-   | ^^^^^^^^^^^^^^^^
+error[E0788]: attribute should be applied to a function definition or closure
+  --> $DIR/no-coverage.rs:18:1
+   |
+LL |   #[coverage(off)]
+   |   ^^^^^^^^^^^^^^^^
+LL | / impl Trait for () {
+LL | |     const X: u32 = 0;
+LL | |
+LL | |     #[coverage(off)]
+...  |
+LL | |     type U = impl Trait;
+LL | | }
+   | |_- not a function or closure
 
-warning: `#[coverage]` may only be applied to function definitions
-  --> $DIR/no-coverage.rs:42:5
+error[E0788]: attribute should be applied to a function definition or closure
+  --> $DIR/no-coverage.rs:39:5
    |
 LL |     #[coverage(off)]
    |     ^^^^^^^^^^^^^^^^
+LL |     let _ = ();
+   |     ----------- not a function or closure
 
-warning: `#[coverage]` may only be applied to function definitions
-  --> $DIR/no-coverage.rs:47:9
+error[E0788]: attribute should be applied to a function definition or closure
+  --> $DIR/no-coverage.rs:43:9
    |
 LL |         #[coverage(off)]
    |         ^^^^^^^^^^^^^^^^
+LL |         () => (),
+   |         -------- not a function or closure
 
-warning: `#[coverage]` may only be applied to function definitions
-  --> $DIR/no-coverage.rs:52:5
+error[E0788]: attribute should be applied to a function definition or closure
+  --> $DIR/no-coverage.rs:47:5
    |
 LL |     #[coverage(off)]
    |     ^^^^^^^^^^^^^^^^
+LL |     return ();
+   |     --------- not a function or closure
 
-error[E0788]: `#[coverage]` must be applied to coverable code
-  --> $DIR/no-coverage.rs:11:5
+error[E0788]: attribute should be applied to a function definition or closure
+  --> $DIR/no-coverage.rs:9:5
    |
 LL |     #[coverage(off)]
    |     ^^^^^^^^^^^^^^^^
 LL |     const X: u32;
-   |     ------------- not coverable code
+   |     ------------- not a function or closure
 
-error[E0788]: `#[coverage]` must be applied to coverable code
-  --> $DIR/no-coverage.rs:14:5
+error[E0788]: attribute should be applied to a function definition or closure
+  --> $DIR/no-coverage.rs:12:5
    |
 LL |     #[coverage(off)]
    |     ^^^^^^^^^^^^^^^^
 LL |     type T;
-   |     ------- not coverable code
+   |     ------- not a function or closure
 
-error[E0788]: `#[coverage]` must be applied to coverable code
-  --> $DIR/no-coverage.rs:25:5
+error[E0788]: attribute should be applied to a function definition or closure
+  --> $DIR/no-coverage.rs:22:5
    |
 LL |     #[coverage(off)]
    |     ^^^^^^^^^^^^^^^^
 LL |     type T = Self;
-   |     -------------- not coverable code
+   |     -------------- not a function or closure
 
-error[E0788]: `#[coverage]` must be applied to coverable code
-  --> $DIR/no-coverage.rs:28:5
+error[E0788]: attribute should be applied to a function definition or closure
+  --> $DIR/no-coverage.rs:25:5
    |
 LL |     #[coverage(off)]
    |     ^^^^^^^^^^^^^^^^
 LL |     type U = impl Trait;
-   |     -------------------- not coverable code
+   |     -------------------- not a function or closure
 
-error[E0788]: `#[coverage]` must be applied to coverable code
-  --> $DIR/no-coverage.rs:33:5
+error[E0788]: attribute should be applied to a function definition or closure
+  --> $DIR/no-coverage.rs:30:5
    |
 LL |     #[coverage(off)]
    |     ^^^^^^^^^^^^^^^^
 LL |     static X: u32;
-   |     -------------- not coverable code
+   |     -------------- not a function or closure
 
-error[E0788]: `#[coverage]` must be applied to coverable code
-  --> $DIR/no-coverage.rs:36:5
+error[E0788]: attribute should be applied to a function definition or closure
+  --> $DIR/no-coverage.rs:33:5
    |
 LL |     #[coverage(off)]
    |     ^^^^^^^^^^^^^^^^
 LL |     type T;
-   |     ------- not coverable code
+   |     ------- not a function or closure
 
-warning: `#[coverage]` does not propagate into items and must be applied to the contained functions directly
+error[E0788]: attribute should be applied to a function definition or closure
   --> $DIR/no-coverage.rs:5:1
    |
 LL | #![coverage(off)]
-   | ^^^^^^^^^^^^^^^^^
+   | ^^^^^^^^^^^^^^^^^ not a function or closure
 
 error: unconstrained opaque type
-  --> $DIR/no-coverage.rs:29:14
+  --> $DIR/no-coverage.rs:26:14
    |
 LL |     type U = impl Trait;
    |              ^^^^^^^^^^
    |
    = note: `U` must be used in combination with a concrete type within the same impl
 
-error: aborting due to 7 previous errors; 6 warnings emitted
+error: aborting due to 13 previous errors
 
 For more information about this error, try `rustc --explain E0788`.
diff --git a/tests/ui/coverage-attr/subword.rs b/tests/ui/coverage-attr/subword.rs
new file mode 100644
index 00000000000..16582240b69
--- /dev/null
+++ b/tests/ui/coverage-attr/subword.rs
@@ -0,0 +1,19 @@
+#![feature(coverage_attribute)]
+//@ edition: 2021
+
+// Check that yes/no in `#[coverage(yes)]` and `#[coverage(no)]` must be bare
+// words, not part of a more complicated substructure.
+
+#[coverage(yes(milord))] //~ ERROR malformed `coverage` attribute input
+fn yes_list() {}
+
+#[coverage(no(milord))] //~ ERROR malformed `coverage` attribute input
+fn no_list() {}
+
+#[coverage(yes = "milord")] //~ ERROR malformed `coverage` attribute input
+fn yes_key() {}
+
+#[coverage(no = "milord")] //~ ERROR malformed `coverage` attribute input
+fn no_key() {}
+
+fn main() {}
diff --git a/tests/ui/coverage-attr/subword.stderr b/tests/ui/coverage-attr/subword.stderr
new file mode 100644
index 00000000000..3a106898f8b
--- /dev/null
+++ b/tests/ui/coverage-attr/subword.stderr
@@ -0,0 +1,54 @@
+error: malformed `coverage` attribute input
+  --> $DIR/subword.rs:7:1
+   |
+LL | #[coverage(yes(milord))]
+   | ^^^^^^^^^^^^^^^^^^^^^^^^
+   |
+help: the following are the possible correct uses
+   |
+LL | #[coverage(off)]
+   | ~~~~~~~~~~~~~~~~
+LL | #[coverage(on)]
+   | ~~~~~~~~~~~~~~~
+
+error: malformed `coverage` attribute input
+  --> $DIR/subword.rs:10:1
+   |
+LL | #[coverage(no(milord))]
+   | ^^^^^^^^^^^^^^^^^^^^^^^
+   |
+help: the following are the possible correct uses
+   |
+LL | #[coverage(off)]
+   | ~~~~~~~~~~~~~~~~
+LL | #[coverage(on)]
+   | ~~~~~~~~~~~~~~~
+
+error: malformed `coverage` attribute input
+  --> $DIR/subword.rs:13:1
+   |
+LL | #[coverage(yes = "milord")]
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^
+   |
+help: the following are the possible correct uses
+   |
+LL | #[coverage(off)]
+   | ~~~~~~~~~~~~~~~~
+LL | #[coverage(on)]
+   | ~~~~~~~~~~~~~~~
+
+error: malformed `coverage` attribute input
+  --> $DIR/subword.rs:16:1
+   |
+LL | #[coverage(no = "milord")]
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^^
+   |
+help: the following are the possible correct uses
+   |
+LL | #[coverage(off)]
+   | ~~~~~~~~~~~~~~~~
+LL | #[coverage(on)]
+   | ~~~~~~~~~~~~~~~
+
+error: aborting due to 4 previous errors
+
diff --git a/tests/ui/coverage-attr/word-only.rs b/tests/ui/coverage-attr/word-only.rs
new file mode 100644
index 00000000000..0a61d1e709f
--- /dev/null
+++ b/tests/ui/coverage-attr/word-only.rs
@@ -0,0 +1,69 @@
+#![feature(coverage_attribute)]
+//@ edition: 2021
+
+// Demonstrates the diagnostics produced when using the syntax `#[coverage]`,
+// which should not be allowed.
+//
+// The syntax is tested both in places that can have a coverage attribute,
+// and in places that cannot have a coverage attribute, to demonstrate the
+// interaction between multiple errors.
+
+#[coverage]
+//~^ ERROR malformed `coverage` attribute input
+//~| ERROR attribute should be applied to a function definition or closure
+mod my_mod {}
+
+mod my_mod_inner {
+    #![coverage]
+    //~^ ERROR malformed `coverage` attribute input
+    //~| ERROR attribute should be applied to a function definition or closure
+}
+
+#[coverage]
+//~^ ERROR malformed `coverage` attribute input
+//~| ERROR attribute should be applied to a function definition or closure
+struct MyStruct;
+
+#[coverage]
+//~^ ERROR malformed `coverage` attribute input
+//~| ERROR attribute should be applied to a function definition or closure
+impl MyStruct {
+    #[coverage]
+    //~^ ERROR malformed `coverage` attribute input
+    //~| ERROR attribute should be applied to a function definition or closure
+    const X: u32 = 7;
+}
+
+#[coverage]
+//~^ ERROR malformed `coverage` attribute input
+//~| ERROR attribute should be applied to a function definition or closure
+trait MyTrait {
+    #[coverage]
+    //~^ ERROR malformed `coverage` attribute input
+    //~| ERROR attribute should be applied to a function definition or closure
+    const X: u32;
+
+    #[coverage]
+    //~^ ERROR malformed `coverage` attribute input
+    //~| ERROR attribute should be applied to a function definition or closure
+    type T;
+}
+
+#[coverage]
+//~^ ERROR malformed `coverage` attribute input
+//~| ERROR attribute should be applied to a function definition or closure
+impl MyTrait for MyStruct {
+    #[coverage]
+    //~^ ERROR malformed `coverage` attribute input
+    //~| ERROR attribute should be applied to a function definition or closure
+    const X: u32 = 8;
+
+    #[coverage]
+    //~^ ERROR malformed `coverage` attribute input
+    //~| ERROR attribute should be applied to a function definition or closure
+    type T = ();
+}
+
+#[coverage]
+//~^ ERROR malformed `coverage` attribute input
+fn main() {}
diff --git a/tests/ui/coverage-attr/word-only.stderr b/tests/ui/coverage-attr/word-only.stderr
new file mode 100644
index 00000000000..18b5fed7484
--- /dev/null
+++ b/tests/ui/coverage-attr/word-only.stderr
@@ -0,0 +1,277 @@
+error: malformed `coverage` attribute input
+  --> $DIR/word-only.rs:11:1
+   |
+LL | #[coverage]
+   | ^^^^^^^^^^^
+   |
+help: the following are the possible correct uses
+   |
+LL | #[coverage(off)]
+   |
+LL | #[coverage(on)]
+   |
+
+error: malformed `coverage` attribute input
+  --> $DIR/word-only.rs:17:5
+   |
+LL |     #![coverage]
+   |     ^^^^^^^^^^^^
+   |
+help: the following are the possible correct uses
+   |
+LL |     #![coverage(off)]
+   |
+LL |     #![coverage(on)]
+   |
+
+error: malformed `coverage` attribute input
+  --> $DIR/word-only.rs:22:1
+   |
+LL | #[coverage]
+   | ^^^^^^^^^^^
+   |
+help: the following are the possible correct uses
+   |
+LL | #[coverage(off)]
+   |
+LL | #[coverage(on)]
+   |
+
+error: malformed `coverage` attribute input
+  --> $DIR/word-only.rs:31:5
+   |
+LL |     #[coverage]
+   |     ^^^^^^^^^^^
+   |
+help: the following are the possible correct uses
+   |
+LL |     #[coverage(off)]
+   |
+LL |     #[coverage(on)]
+   |
+
+error: malformed `coverage` attribute input
+  --> $DIR/word-only.rs:27:1
+   |
+LL | #[coverage]
+   | ^^^^^^^^^^^
+   |
+help: the following are the possible correct uses
+   |
+LL | #[coverage(off)]
+   |
+LL | #[coverage(on)]
+   |
+
+error: malformed `coverage` attribute input
+  --> $DIR/word-only.rs:41:5
+   |
+LL |     #[coverage]
+   |     ^^^^^^^^^^^
+   |
+help: the following are the possible correct uses
+   |
+LL |     #[coverage(off)]
+   |
+LL |     #[coverage(on)]
+   |
+
+error: malformed `coverage` attribute input
+  --> $DIR/word-only.rs:46:5
+   |
+LL |     #[coverage]
+   |     ^^^^^^^^^^^
+   |
+help: the following are the possible correct uses
+   |
+LL |     #[coverage(off)]
+   |
+LL |     #[coverage(on)]
+   |
+
+error: malformed `coverage` attribute input
+  --> $DIR/word-only.rs:37:1
+   |
+LL | #[coverage]
+   | ^^^^^^^^^^^
+   |
+help: the following are the possible correct uses
+   |
+LL | #[coverage(off)]
+   |
+LL | #[coverage(on)]
+   |
+
+error: malformed `coverage` attribute input
+  --> $DIR/word-only.rs:56:5
+   |
+LL |     #[coverage]
+   |     ^^^^^^^^^^^
+   |
+help: the following are the possible correct uses
+   |
+LL |     #[coverage(off)]
+   |
+LL |     #[coverage(on)]
+   |
+
+error: malformed `coverage` attribute input
+  --> $DIR/word-only.rs:61:5
+   |
+LL |     #[coverage]
+   |     ^^^^^^^^^^^
+   |
+help: the following are the possible correct uses
+   |
+LL |     #[coverage(off)]
+   |
+LL |     #[coverage(on)]
+   |
+
+error: malformed `coverage` attribute input
+  --> $DIR/word-only.rs:52:1
+   |
+LL | #[coverage]
+   | ^^^^^^^^^^^
+   |
+help: the following are the possible correct uses
+   |
+LL | #[coverage(off)]
+   |
+LL | #[coverage(on)]
+   |
+
+error: malformed `coverage` attribute input
+  --> $DIR/word-only.rs:67:1
+   |
+LL | #[coverage]
+   | ^^^^^^^^^^^
+   |
+help: the following are the possible correct uses
+   |
+LL | #[coverage(off)]
+   |
+LL | #[coverage(on)]
+   |
+
+error[E0788]: attribute should be applied to a function definition or closure
+  --> $DIR/word-only.rs:11:1
+   |
+LL | #[coverage]
+   | ^^^^^^^^^^^
+...
+LL | mod my_mod {}
+   | ------------- not a function or closure
+
+error[E0788]: attribute should be applied to a function definition or closure
+  --> $DIR/word-only.rs:17:5
+   |
+LL | / mod my_mod_inner {
+LL | |     #![coverage]
+   | |     ^^^^^^^^^^^^
+LL | |
+LL | |
+LL | | }
+   | |_- not a function or closure
+
+error[E0788]: attribute should be applied to a function definition or closure
+  --> $DIR/word-only.rs:22:1
+   |
+LL | #[coverage]
+   | ^^^^^^^^^^^
+...
+LL | struct MyStruct;
+   | ---------------- not a function or closure
+
+error[E0788]: attribute should be applied to a function definition or closure
+  --> $DIR/word-only.rs:27:1
+   |
+LL |   #[coverage]
+   |   ^^^^^^^^^^^
+...
+LL | / impl MyStruct {
+LL | |     #[coverage]
+LL | |
+LL | |
+LL | |     const X: u32 = 7;
+LL | | }
+   | |_- not a function or closure
+
+error[E0788]: attribute should be applied to a function definition or closure
+  --> $DIR/word-only.rs:37:1
+   |
+LL |   #[coverage]
+   |   ^^^^^^^^^^^
+...
+LL | / trait MyTrait {
+LL | |     #[coverage]
+LL | |
+LL | |
+...  |
+LL | |     type T;
+LL | | }
+   | |_- not a function or closure
+
+error[E0788]: attribute should be applied to a function definition or closure
+  --> $DIR/word-only.rs:52:1
+   |
+LL |   #[coverage]
+   |   ^^^^^^^^^^^
+...
+LL | / impl MyTrait for MyStruct {
+LL | |     #[coverage]
+LL | |
+LL | |
+...  |
+LL | |     type T = ();
+LL | | }
+   | |_- not a function or closure
+
+error[E0788]: attribute should be applied to a function definition or closure
+  --> $DIR/word-only.rs:41:5
+   |
+LL |     #[coverage]
+   |     ^^^^^^^^^^^
+...
+LL |     const X: u32;
+   |     ------------- not a function or closure
+
+error[E0788]: attribute should be applied to a function definition or closure
+  --> $DIR/word-only.rs:46:5
+   |
+LL |     #[coverage]
+   |     ^^^^^^^^^^^
+...
+LL |     type T;
+   |     ------- not a function or closure
+
+error[E0788]: attribute should be applied to a function definition or closure
+  --> $DIR/word-only.rs:31:5
+   |
+LL |     #[coverage]
+   |     ^^^^^^^^^^^
+...
+LL |     const X: u32 = 7;
+   |     ----------------- not a function or closure
+
+error[E0788]: attribute should be applied to a function definition or closure
+  --> $DIR/word-only.rs:56:5
+   |
+LL |     #[coverage]
+   |     ^^^^^^^^^^^
+...
+LL |     const X: u32 = 8;
+   |     ----------------- not a function or closure
+
+error[E0788]: attribute should be applied to a function definition or closure
+  --> $DIR/word-only.rs:61:5
+   |
+LL |     #[coverage]
+   |     ^^^^^^^^^^^
+...
+LL |     type T = ();
+   |     ------------ not a function or closure
+
+error: aborting due to 23 previous errors
+
+For more information about this error, try `rustc --explain E0788`.
diff --git a/tests/ui/delegation/glob-traitless-qpath.rs b/tests/ui/delegation/glob-traitless-qpath.rs
new file mode 100644
index 00000000000..abf4b3180ed
--- /dev/null
+++ b/tests/ui/delegation/glob-traitless-qpath.rs
@@ -0,0 +1,11 @@
+#![feature(fn_delegation)]
+#![allow(incomplete_features)]
+
+struct S;
+
+impl S {
+    reuse <u8>::*; //~ ERROR qualified path without a trait in glob delegation
+    reuse <()>::*; //~ ERROR qualified path without a trait in glob delegation
+}
+
+fn main() {}
diff --git a/tests/ui/delegation/glob-traitless-qpath.stderr b/tests/ui/delegation/glob-traitless-qpath.stderr
new file mode 100644
index 00000000000..e3257de347a
--- /dev/null
+++ b/tests/ui/delegation/glob-traitless-qpath.stderr
@@ -0,0 +1,14 @@
+error: qualified path without a trait in glob delegation
+  --> $DIR/glob-traitless-qpath.rs:7:5
+   |
+LL |     reuse <u8>::*;
+   |     ^^^^^^^^^^^^^^
+
+error: qualified path without a trait in glob delegation
+  --> $DIR/glob-traitless-qpath.rs:8:5
+   |
+LL |     reuse <()>::*;
+   |     ^^^^^^^^^^^^^^
+
+error: aborting due to 2 previous errors
+
diff --git a/tests/ui/deprecation/deprecated_inline_threshold.rs b/tests/ui/deprecation/deprecated_inline_threshold.rs
new file mode 100644
index 00000000000..56e033b8cf5
--- /dev/null
+++ b/tests/ui/deprecation/deprecated_inline_threshold.rs
@@ -0,0 +1,4 @@
+//@ check-pass
+//@ compile-flags: -Cinline-threshold=666
+
+fn main() {}
diff --git a/tests/ui/deprecation/deprecated_inline_threshold.stderr b/tests/ui/deprecation/deprecated_inline_threshold.stderr
new file mode 100644
index 00000000000..c4f8ff092b2
--- /dev/null
+++ b/tests/ui/deprecation/deprecated_inline_threshold.stderr
@@ -0,0 +1,2 @@
+warning: the `-Cinline-threshold` flag is deprecated and does nothing (consider using `-Cllvm-args=--inline-threshold=...`)
+
diff --git a/tests/ui/deriving/deriving-smart-pointer.rs b/tests/ui/deriving/deriving-smart-pointer.rs
new file mode 100644
index 00000000000..cfc3369850b
--- /dev/null
+++ b/tests/ui/deriving/deriving-smart-pointer.rs
@@ -0,0 +1,55 @@
+//@ run-pass
+#![feature(derive_smart_pointer, arbitrary_self_types)]
+
+use std::marker::SmartPointer;
+
+#[derive(SmartPointer)]
+struct MyPointer<'a, #[pointee] T: ?Sized> {
+    ptr: &'a T,
+}
+
+impl<T: ?Sized> Copy for MyPointer<'_, T> {}
+impl<T: ?Sized> Clone for MyPointer<'_, T> {
+    fn clone(&self) -> Self {
+        Self { ptr: self.ptr }
+    }
+}
+
+impl<'a, T: ?Sized> core::ops::Deref for MyPointer<'a, T> {
+    type Target = T;
+    fn deref(&self) -> &'a T {
+        self.ptr
+    }
+}
+
+struct MyValue(u32);
+impl MyValue {
+    fn through_pointer(self: MyPointer<'_, Self>) -> u32 {
+        self.ptr.0
+    }
+}
+
+trait MyTrait {
+    fn through_trait(&self) -> u32;
+    fn through_trait_and_pointer(self: MyPointer<'_, Self>) -> u32;
+}
+
+impl MyTrait for MyValue {
+    fn through_trait(&self) -> u32 {
+        self.0
+    }
+
+    fn through_trait_and_pointer(self: MyPointer<'_, Self>) -> u32 {
+        self.ptr.0
+    }
+}
+
+pub fn main() {
+    let v = MyValue(10);
+    let ptr = MyPointer { ptr: &v };
+    assert_eq!(v.0, ptr.through_pointer());
+    assert_eq!(v.0, ptr.through_pointer());
+    let dptr = ptr as MyPointer<dyn MyTrait>;
+    assert_eq!(v.0, dptr.through_trait());
+    assert_eq!(v.0, dptr.through_trait_and_pointer());
+}
diff --git a/tests/ui/error-codes/E0116.stderr b/tests/ui/error-codes/E0116.stderr
index bf215435ba6..1ea5a57f46d 100644
--- a/tests/ui/error-codes/E0116.stderr
+++ b/tests/ui/error-codes/E0116.stderr
@@ -2,7 +2,7 @@ error[E0116]: cannot define inherent `impl` for a type outside of the crate wher
   --> $DIR/E0116.rs:1:1
    |
 LL | impl Vec<u8> {}
-   | ^^^^^^^^^^^^ impl for type defined outside of crate.
+   | ^^^^^^^^^^^^ impl for type defined outside of crate
    |
    = note: define and implement a trait or new type instead
 
diff --git a/tests/ui/error-codes/E0519.stderr b/tests/ui/error-codes/E0519.stderr
index 4fbd268134f..a814277cafa 100644
--- a/tests/ui/error-codes/E0519.stderr
+++ b/tests/ui/error-codes/E0519.stderr
@@ -1,4 +1,4 @@
-error[E0519]: the current crate is indistinguishable from one of its dependencies: it has the same crate-name `crateresolve1` and was compiled with the same `-C metadata` arguments. This will result in symbol conflicts between the two.
+error[E0519]: the current crate is indistinguishable from one of its dependencies: it has the same crate-name `crateresolve1` and was compiled with the same `-C metadata` arguments, so this will result in symbol conflicts between the two
   --> $DIR/E0519.rs:8:1
    |
 LL | extern crate crateresolve1;
diff --git a/tests/ui/feature-gates/feature-gate-derive-smart-pointer.rs b/tests/ui/feature-gates/feature-gate-derive-smart-pointer.rs
new file mode 100644
index 00000000000..ae8005592cd
--- /dev/null
+++ b/tests/ui/feature-gates/feature-gate-derive-smart-pointer.rs
@@ -0,0 +1,9 @@
+use std::marker::SmartPointer; //~ ERROR use of unstable library feature 'derive_smart_pointer'
+
+#[derive(SmartPointer)] //~ ERROR use of unstable library feature 'derive_smart_pointer'
+struct MyPointer<'a, #[pointee] T: ?Sized> {
+    //~^ ERROR the `#[pointee]` attribute is an experimental feature
+    ptr: &'a T,
+}
+
+fn main() {}
diff --git a/tests/ui/feature-gates/feature-gate-derive-smart-pointer.stderr b/tests/ui/feature-gates/feature-gate-derive-smart-pointer.stderr
new file mode 100644
index 00000000000..0ffd82fb9e1
--- /dev/null
+++ b/tests/ui/feature-gates/feature-gate-derive-smart-pointer.stderr
@@ -0,0 +1,33 @@
+error[E0658]: use of unstable library feature 'derive_smart_pointer'
+  --> $DIR/feature-gate-derive-smart-pointer.rs:3:10
+   |
+LL | #[derive(SmartPointer)]
+   |          ^^^^^^^^^^^^
+   |
+   = note: see issue #123430 <https://github.com/rust-lang/rust/issues/123430> for more information
+   = help: add `#![feature(derive_smart_pointer)]` to the crate attributes to enable
+   = note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
+
+error[E0658]: the `#[pointee]` attribute is an experimental feature
+  --> $DIR/feature-gate-derive-smart-pointer.rs:4:22
+   |
+LL | struct MyPointer<'a, #[pointee] T: ?Sized> {
+   |                      ^^^^^^^^^^
+   |
+   = note: see issue #123430 <https://github.com/rust-lang/rust/issues/123430> for more information
+   = help: add `#![feature(derive_smart_pointer)]` to the crate attributes to enable
+   = note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
+
+error[E0658]: use of unstable library feature 'derive_smart_pointer'
+  --> $DIR/feature-gate-derive-smart-pointer.rs:1:5
+   |
+LL | use std::marker::SmartPointer;
+   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
+   |
+   = note: see issue #123430 <https://github.com/rust-lang/rust/issues/123430> for more information
+   = help: add `#![feature(derive_smart_pointer)]` to the crate attributes to enable
+   = note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
+
+error: aborting due to 3 previous errors
+
+For more information about this error, try `rustc --explain E0658`.
diff --git a/tests/ui/feature-gates/feature-gate-unsafe-extern-blocks.rs b/tests/ui/feature-gates/feature-gate-unsafe-extern-blocks.rs
index eab134a4a4d..3ea62e875b8 100644
--- a/tests/ui/feature-gates/feature-gate-unsafe-extern-blocks.rs
+++ b/tests/ui/feature-gates/feature-gate-unsafe-extern-blocks.rs
@@ -2,4 +2,12 @@ unsafe extern "C" {
     //~^ ERROR extern block cannot be declared unsafe
 }
 
+// We can't gate `unsafe extern` blocks themselves since they were previously
+// allowed, but we should gate the `safe` soft keyword.
+#[cfg(any())]
+unsafe extern "C" {
+    safe fn foo();
+    //~^ ERROR `unsafe extern {}` blocks and `safe` keyword are experimental
+}
+
 fn main() {}
diff --git a/tests/ui/feature-gates/feature-gate-unsafe-extern-blocks.stderr b/tests/ui/feature-gates/feature-gate-unsafe-extern-blocks.stderr
index 7e9b199a2db..84f00827c60 100644
--- a/tests/ui/feature-gates/feature-gate-unsafe-extern-blocks.stderr
+++ b/tests/ui/feature-gates/feature-gate-unsafe-extern-blocks.stderr
@@ -4,5 +4,16 @@ error: extern block cannot be declared unsafe
 LL | unsafe extern "C" {
    | ^^^^^^
 
-error: aborting due to 1 previous error
+error[E0658]: `unsafe extern {}` blocks and `safe` keyword are experimental
+  --> $DIR/feature-gate-unsafe-extern-blocks.rs:9:5
+   |
+LL |     safe fn foo();
+   |     ^^^^
+   |
+   = note: see issue #123743 <https://github.com/rust-lang/rust/issues/123743> for more information
+   = help: add `#![feature(unsafe_extern_blocks)]` to the crate attributes to enable
+   = note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
+
+error: aborting due to 2 previous errors
 
+For more information about this error, try `rustc --explain E0658`.
diff --git a/tests/ui/feature-gates/issue-43106-gating-of-builtin-attrs.stderr b/tests/ui/feature-gates/issue-43106-gating-of-builtin-attrs.stderr
index 30039267979..88732f75cb4 100644
--- a/tests/ui/feature-gates/issue-43106-gating-of-builtin-attrs.stderr
+++ b/tests/ui/feature-gates/issue-43106-gating-of-builtin-attrs.stderr
@@ -186,7 +186,7 @@ warning: unknown lint: `x5100`
 LL |     #[deny(x5100)] impl S { }
    |            ^^^^^
 
-warning: use of deprecated attribute `crate_id`: no longer used.
+warning: use of deprecated attribute `crate_id`: no longer used
   --> $DIR/issue-43106-gating-of-builtin-attrs.rs:84:1
    |
 LL | #![crate_id = "10"]
@@ -194,7 +194,7 @@ LL | #![crate_id = "10"]
    |
    = note: `#[warn(deprecated)]` on by default
 
-warning: use of deprecated attribute `no_start`: no longer used.
+warning: use of deprecated attribute `no_start`: no longer used
   --> $DIR/issue-43106-gating-of-builtin-attrs.rs:94:1
    |
 LL | #![no_start]
diff --git a/tests/ui/half-open-range-patterns/half-open-range-pats-semantics.rs b/tests/ui/half-open-range-patterns/half-open-range-pats-semantics.rs
index 3487bac5282..38ade060cb1 100644
--- a/tests/ui/half-open-range-patterns/half-open-range-pats-semantics.rs
+++ b/tests/ui/half-open-range-patterns/half-open-range-pats-semantics.rs
@@ -4,6 +4,8 @@
 // via `.contains(...)` and make sure the dynamic semantics match.
 
 #![allow(unreachable_patterns)]
+#![feature(f128)]
+#![feature(f16)]
 
 macro_rules! yes {
     ($scrutinee:expr, $($t:tt)+) => {
@@ -39,6 +41,17 @@ fn range_to_inclusive() {
     assert!(yes!('a', ..='a'));
     assert!(!yes!('b', ..='a'));
 
+    // f16; `..=X`
+    // FIXME(f16_f128): remove gate when ABI issues are resolved
+    #[cfg(all(target_arch = "aarch64", target_os = "linux"))]
+    {
+        // FIXME(f16_f128): enable infinity tests when constants are available
+        // assert!(yes!(f16::NEG_INFINITY, ..=f16::NEG_INFINITY));
+        // assert!(yes!(f16::NEG_INFINITY, ..=1.0f16));
+        assert!(yes!(1.5f16, ..=1.5f16));
+        assert!(!yes!(1.6f16, ..=-1.5f16));
+    }
+
     // f32; `..=X`
     assert!(yes!(f32::NEG_INFINITY, ..=f32::NEG_INFINITY));
     assert!(yes!(f32::NEG_INFINITY, ..=1.0f32));
@@ -50,6 +63,17 @@ fn range_to_inclusive() {
     assert!(yes!(f64::NEG_INFINITY, ..=1.0f64));
     assert!(yes!(1.5f64, ..=1.5f64));
     assert!(!yes!(1.6f64, ..=-1.5f64));
+
+    // f128; `..=X`
+    // FIXME(f16_f128): remove gate when ABI issues are resolved
+    #[cfg(all(target_arch = "aarch64", target_os = "linux"))]
+    {
+        // FIXME(f16_f128): enable infinity tests when constants are available
+        // assert!(yes!(f128::NEG_INFINITY, ..=f128::NEG_INFINITY));
+        // assert!(yes!(f128::NEG_INFINITY, ..=1.0f128));
+        assert!(yes!(1.5f128, ..=1.5f128));
+        assert!(!yes!(1.6f128, ..=-1.5f128));
+    }
 }
 
 fn range_to() {
@@ -83,6 +107,18 @@ fn range_to() {
     assert!(!yes!('a', ..'a'));
     assert!(!yes!('b', ..'a'));
 
+    // f16; `..X`
+    // FIXME(f16_f128): remove gate when ABI issues are resolved
+    #[cfg(all(target_arch = "aarch64", target_os = "linux"))]
+    {
+        // FIXME(f16_f128): enable infinity tests when constants are available
+        // assert!(yes!(f16::NEG_INFINITY, ..1.0f16));
+        assert!(!yes!(1.5f16, ..1.5f16));
+        const E16: f16 = 1.5f16 + f16::EPSILON;
+        assert!(yes!(1.5f16, ..E16));
+        assert!(!yes!(1.6f16, ..1.5f16));
+    }
+
     // f32; `..X`
     assert!(yes!(f32::NEG_INFINITY, ..1.0f32));
     assert!(!yes!(1.5f32, ..1.5f32));
@@ -96,6 +132,18 @@ fn range_to() {
     const E64: f64 = 1.5f64 + f64::EPSILON;
     assert!(yes!(1.5f64, ..E64));
     assert!(!yes!(1.6f64, ..1.5f64));
+
+    // f128; `..X`
+    // FIXME(f16_f128): remove gate when ABI issues are resolved
+    #[cfg(all(target_arch = "aarch64", target_os = "linux"))]
+    {
+        // FIXME(f16_f128): enable infinity tests when constants are available
+        // assert!(yes!(f128::NEG_INFINITY, ..1.0f128));
+        assert!(!yes!(1.5f128, ..1.5f128));
+        const E128: f128 = 1.5f128 + f128::EPSILON;
+        assert!(yes!(1.5f128, ..E128));
+        assert!(!yes!(1.6f128, ..1.5f128));
+    }
 }
 
 fn range_from() {
@@ -129,6 +177,21 @@ fn range_from() {
     assert!(!yes!('a', 'b'..));
     assert!(yes!(core::char::MAX, core::char::MAX..));
 
+    // f16; `X..`
+    // FIXME(f16_f128): remove gate when ABI issues are resolved
+    #[cfg(all(target_arch = "aarch64", target_os = "linux"))]
+    {
+        // FIXME(f16_f128): enable infinity tests when constants are available
+        // assert!(yes!(f16::NEG_INFINITY, f16::NEG_INFINITY..));
+        // assert!(yes!(f16::INFINITY, f16::NEG_INFINITY..));
+        // assert!(!yes!(f16::NEG_INFINITY, 1.0f16..));
+        // assert!(yes!(f16::INFINITY, 1.0f16..));
+        assert!(!yes!(1.0f16 - f16::EPSILON, 1.0f16..));
+        assert!(yes!(1.0f16, 1.0f16..));
+        // assert!(yes!(f16::INFINITY, 1.0f16..));
+        // assert!(yes!(f16::INFINITY, f16::INFINITY..));
+    }
+
     // f32; `X..`
     assert!(yes!(f32::NEG_INFINITY, f32::NEG_INFINITY..));
     assert!(yes!(f32::INFINITY, f32::NEG_INFINITY..));
@@ -148,6 +211,21 @@ fn range_from() {
     assert!(yes!(1.0f64, 1.0f64..));
     assert!(yes!(f64::INFINITY, 1.0f64..));
     assert!(yes!(f64::INFINITY, f64::INFINITY..));
+
+    // f128; `X..`
+    // FIXME(f16_f128): remove gate when ABI issues are resolved
+    #[cfg(all(target_arch = "aarch64", target_os = "linux"))]
+    {
+        // FIXME(f16_f128): enable infinity tests when constants are available
+        // assert!(yes!(f128::NEG_INFINITY, f128::NEG_INFINITY..));
+        // assert!(yes!(f128::INFINITY, f128::NEG_INFINITY..));
+        // assert!(!yes!(f128::NEG_INFINITY, 1.0f128..));
+        // assert!(yes!(f128::INFINITY, 1.0f128..));
+        assert!(!yes!(1.0f128 - f128::EPSILON, 1.0f128..));
+        assert!(yes!(1.0f128, 1.0f128..));
+        // assert!(yes!(f128::INFINITY, 1.0f128..));
+        // assert!(yes!(f128::INFINITY, f128::INFINITY..));
+    }
 }
 
 fn main() {
diff --git a/tests/ui/half-open-range-patterns/half-open-range-pats-thir-lower-empty.rs b/tests/ui/half-open-range-patterns/half-open-range-pats-thir-lower-empty.rs
index 9ca8dd25ed7..a35bb51acbc 100644
--- a/tests/ui/half-open-range-patterns/half-open-range-pats-thir-lower-empty.rs
+++ b/tests/ui/half-open-range-patterns/half-open-range-pats-thir-lower-empty.rs
@@ -27,6 +27,7 @@ fn main() {
     m!(0, ..i128::MIN);
     //~^ ERROR lower range bound must be less than upper
 
+    // FIXME(f16_f128): add tests when NEG_INFINITY is available
     m!(0f32, ..f32::NEG_INFINITY);
     //~^ ERROR lower range bound must be less than upper
     m!(0f64, ..f64::NEG_INFINITY);
diff --git a/tests/ui/half-open-range-patterns/half-open-range-pats-thir-lower-empty.stderr b/tests/ui/half-open-range-patterns/half-open-range-pats-thir-lower-empty.stderr
index 668b5c858f0..fb2f1841a6d 100644
--- a/tests/ui/half-open-range-patterns/half-open-range-pats-thir-lower-empty.stderr
+++ b/tests/ui/half-open-range-patterns/half-open-range-pats-thir-lower-empty.stderr
@@ -59,19 +59,19 @@ LL |     m!(0, ..i128::MIN);
    |           ^^^^^^^^^^^
 
 error[E0579]: lower range bound must be less than upper
-  --> $DIR/half-open-range-pats-thir-lower-empty.rs:30:14
+  --> $DIR/half-open-range-pats-thir-lower-empty.rs:31:14
    |
 LL |     m!(0f32, ..f32::NEG_INFINITY);
    |              ^^^^^^^^^^^^^^^^^^^
 
 error[E0579]: lower range bound must be less than upper
-  --> $DIR/half-open-range-pats-thir-lower-empty.rs:32:14
+  --> $DIR/half-open-range-pats-thir-lower-empty.rs:33:14
    |
 LL |     m!(0f64, ..f64::NEG_INFINITY);
    |              ^^^^^^^^^^^^^^^^^^^
 
 error[E0579]: lower range bound must be less than upper
-  --> $DIR/half-open-range-pats-thir-lower-empty.rs:35:13
+  --> $DIR/half-open-range-pats-thir-lower-empty.rs:36:13
    |
 LL |     m!('a', ..'\u{0}');
    |             ^^^^^^^^^
diff --git a/tests/ui/higher-ranked/structually-relate-aliases.stderr b/tests/ui/higher-ranked/structually-relate-aliases.stderr
index e1cffa0fc37..2f1dfd19c48 100644
--- a/tests/ui/higher-ranked/structually-relate-aliases.stderr
+++ b/tests/ui/higher-ranked/structually-relate-aliases.stderr
@@ -1,5 +1,5 @@
- WARN rustc_infer::infer::relate::generalize may incompletely handle alias type: AliasTy { args: [?1t, '^0.Named(DefId(0:15 ~ structually_relate_aliases[de75]::{impl#1}::'a), "'a")], def_id: DefId(0:5 ~ structually_relate_aliases[de75]::ToUnit::Unit), _use_alias_ty_new_instead: () }
- WARN rustc_infer::infer::relate::generalize may incompletely handle alias type: AliasTy { args: [?1t, !2_0.Named(DefId(0:15 ~ structually_relate_aliases[de75]::{impl#1}::'a), "'a")], def_id: DefId(0:5 ~ structually_relate_aliases[de75]::ToUnit::Unit), _use_alias_ty_new_instead: () }
+ WARN rustc_infer::infer::relate::generalize may incompletely handle alias type: AliasTy { args: [?1t, '^0.Named(DefId(0:15 ~ structually_relate_aliases[de75]::{impl#1}::'a), "'a")], def_id: DefId(0:5 ~ structually_relate_aliases[de75]::ToUnit::Unit) }
+ WARN rustc_infer::infer::relate::generalize may incompletely handle alias type: AliasTy { args: [?1t, !2_0.Named(DefId(0:15 ~ structually_relate_aliases[de75]::{impl#1}::'a), "'a")], def_id: DefId(0:5 ~ structually_relate_aliases[de75]::ToUnit::Unit) }
 error[E0277]: the trait bound `for<'a> T: ToUnit<'a>` is not satisfied
   --> $DIR/structually-relate-aliases.rs:13:36
    |
diff --git a/tests/ui/higher-ranked/trait-bounds/normalize-under-binder/norm-before-method-resolution-opaque-type.next.stderr b/tests/ui/higher-ranked/trait-bounds/normalize-under-binder/norm-before-method-resolution-opaque-type.next.stderr
new file mode 100644
index 00000000000..72646b7bc76
--- /dev/null
+++ b/tests/ui/higher-ranked/trait-bounds/normalize-under-binder/norm-before-method-resolution-opaque-type.next.stderr
@@ -0,0 +1,9 @@
+error[E0284]: type annotations needed: cannot satisfy `Foo == _`
+  --> $DIR/norm-before-method-resolution-opaque-type.rs:16:19
+   |
+LL | fn weird_bound<X>(x: &<X as Trait<'static>>::Out<Foo>) -> X
+   |                   ^ cannot satisfy `Foo == _`
+
+error: aborting due to 1 previous error
+
+For more information about this error, try `rustc --explain E0284`.
diff --git a/tests/ui/higher-ranked/trait-bounds/normalize-under-binder/norm-before-method-resolution-opaque-type.old.stderr b/tests/ui/higher-ranked/trait-bounds/normalize-under-binder/norm-before-method-resolution-opaque-type.old.stderr
new file mode 100644
index 00000000000..dbd0d5dc733
--- /dev/null
+++ b/tests/ui/higher-ranked/trait-bounds/normalize-under-binder/norm-before-method-resolution-opaque-type.old.stderr
@@ -0,0 +1,36 @@
+error: item does not constrain `Foo::{opaque#0}`, but has it in its signature
+  --> $DIR/norm-before-method-resolution-opaque-type.rs:16:4
+   |
+LL | fn weird_bound<X>(x: &<X as Trait<'static>>::Out<Foo>) -> X
+   |    ^^^^^^^^^^^
+   |
+   = note: consider moving the opaque type's declaration and defining uses into a separate module
+note: this opaque type is in the signature
+  --> $DIR/norm-before-method-resolution-opaque-type.rs:13:12
+   |
+LL | type Foo = impl Sized;
+   |            ^^^^^^^^^^
+
+error: unconstrained opaque type
+  --> $DIR/norm-before-method-resolution-opaque-type.rs:13:12
+   |
+LL | type Foo = impl Sized;
+   |            ^^^^^^^^^^
+   |
+   = note: `Foo` must be used in combination with a concrete type within the same module
+
+error[E0507]: cannot move out of `*x` which is behind a shared reference
+  --> $DIR/norm-before-method-resolution-opaque-type.rs:23:13
+   |
+LL |     let x = *x;
+   |             ^^ move occurs because `*x` has type `<X as Trait<'_>>::Out<Foo>`, which does not implement the `Copy` trait
+   |
+help: consider removing the dereference here
+   |
+LL -     let x = *x;
+LL +     let x = x;
+   |
+
+error: aborting due to 3 previous errors
+
+For more information about this error, try `rustc --explain E0507`.
diff --git a/tests/ui/higher-ranked/trait-bounds/normalize-under-binder/norm-before-method-resolution-opaque-type.rs b/tests/ui/higher-ranked/trait-bounds/normalize-under-binder/norm-before-method-resolution-opaque-type.rs
new file mode 100644
index 00000000000..cf752f814c9
--- /dev/null
+++ b/tests/ui/higher-ranked/trait-bounds/normalize-under-binder/norm-before-method-resolution-opaque-type.rs
@@ -0,0 +1,29 @@
+//@ revisions: old next
+//@[next] compile-flags: -Znext-solver
+
+#![feature(type_alias_impl_trait)]
+trait Trait<'a> {
+    type Out<U>;
+}
+
+impl<'a, T> Trait<'a> for T {
+    type Out<U> = T;
+}
+
+type Foo = impl Sized;
+//[old]~^ ERROR: unconstrained opaque type
+
+fn weird_bound<X>(x: &<X as Trait<'static>>::Out<Foo>) -> X
+//[old]~^ ERROR: item does not constrain
+//[next]~^^ ERROR: cannot satisfy `Foo == _`
+where
+    for<'a> X: Trait<'a>,
+    for<'a> <X as Trait<'a>>::Out<()>: Copy,
+{
+    let x = *x; //[old]~ ERROR: cannot move out of `*x`
+    todo!();
+}
+
+fn main() {
+    let _: () = weird_bound(&());
+}
diff --git a/tests/ui/higher-ranked/trait-bounds/normalize-under-binder/norm-before-method-resolution.rs b/tests/ui/higher-ranked/trait-bounds/normalize-under-binder/norm-before-method-resolution.rs
index e1aa1babdbb..f0e13a74b2c 100644
--- a/tests/ui/higher-ranked/trait-bounds/normalize-under-binder/norm-before-method-resolution.rs
+++ b/tests/ui/higher-ranked/trait-bounds/normalize-under-binder/norm-before-method-resolution.rs
@@ -1,6 +1,6 @@
 //@ check-pass
 
-// Should pass, but we normalize and check bounds before we resolve the generics
+// We normalize and check bounds before we resolve the generics
 // of the function (which we know because of the return type).
 
 trait Trait<'a> {
@@ -12,10 +12,12 @@ impl<'a, T> Trait<'a> for T {
 }
 
 fn weird_bound<X>() -> X
-    where
-        for<'a> X: Trait<'a>,
-        for<'a> <X as Trait<'a>>::Out: Copy
-{ todo!() }
+where
+    for<'a> X: Trait<'a>,
+    for<'a> <X as Trait<'a>>::Out: Copy,
+{
+    todo!()
+}
 
 fn main() {
     let _: () = weird_bound();
diff --git a/tests/ui/impl-trait/lazy_subtyping_of_opaques.rs b/tests/ui/impl-trait/lazy_subtyping_of_opaques.rs
index 65331894725..8fd1f35645a 100644
--- a/tests/ui/impl-trait/lazy_subtyping_of_opaques.rs
+++ b/tests/ui/impl-trait/lazy_subtyping_of_opaques.rs
@@ -2,58 +2,23 @@
 //! No hidden types are being constrained in the subtyping predicate, but type and
 //! lifetime variables get subtyped in the generic parameter list of the opaque.
 
-use std::iter;
-
-mod either {
-    pub enum Either<L, R> {
-        Left(L),
-        Right(R),
-    }
-
-    impl<L: Iterator, R: Iterator<Item = L::Item>> Iterator for Either<L, R> {
-        type Item = L::Item;
-        fn next(&mut self) -> Option<Self::Item> {
-            todo!()
-        }
-    }
-    pub use self::Either::{Left, Right};
-}
-
-pub enum BabeConsensusLogRef<'a> {
-    NextEpochData(BabeNextEpochRef<'a>),
-    NextConfigData,
-}
-
-impl<'a> BabeConsensusLogRef<'a> {
-    pub fn scale_encoding(
-        &self,
-    ) -> impl Iterator<Item = impl AsRef<[u8]> + Clone + 'a> + Clone + 'a {
-        //~^ ERROR is not satisfied
-        //~| ERROR is not satisfied
-        //~| ERROR is not satisfied
-        match self {
-            BabeConsensusLogRef::NextEpochData(digest) => either::Left(either::Left(
-                digest.scale_encoding().map(either::Left).map(either::Left),
-            )),
-            BabeConsensusLogRef::NextConfigData => either::Right(
-                // The Opaque type from ``scale_encoding` gets used opaquely here, while the `R`
-                // generic parameter of `Either` contains type variables that get subtyped and the
-                // opaque type contains lifetime variables that get subtyped.
-                iter::once(either::Right(either::Left([1])))
-                    .chain(std::iter::once([1]).map(either::Right).map(either::Right)),
-            ),
-        }
-    }
-}
-
-pub struct BabeNextEpochRef<'a>(&'a ());
-
-impl<'a> BabeNextEpochRef<'a> {
-    pub fn scale_encoding(
-        &self,
-    ) -> impl Iterator<Item = impl AsRef<[u8]> + Clone + 'a> + Clone + 'a {
-        std::iter::once([1])
+//@ check-pass
+
+fn foo() -> impl Default + Copy {
+    if false {
+        let x = Default::default();
+        // add `Subtype(?x, ?y)` obligation
+        let y = x;
+
+        // Make a tuple `(?x, ?y)` and equate it with `(impl Default, u32)`.
+        // For us to try and prove a `Subtype(impl Default, u32)` obligation,
+        // we have to instantiate both `?x` and `?y` without any
+        // `select_where_possible` calls inbetween.
+        let mut tup = &mut (x, y);
+        let assign_tup = &mut (foo(), 1u32);
+        tup = assign_tup;
     }
+    1u32
 }
 
 fn main() {}
diff --git a/tests/ui/impl-trait/lazy_subtyping_of_opaques.stderr b/tests/ui/impl-trait/lazy_subtyping_of_opaques.stderr
deleted file mode 100644
index 2f8c957c2c7..00000000000
--- a/tests/ui/impl-trait/lazy_subtyping_of_opaques.stderr
+++ /dev/null
@@ -1,21 +0,0 @@
-error[E0277]: the trait bound `Either<Either<Map<Map<impl Iterator<Item = impl AsRef<[u8]> + Clone + '_> + Clone + '_, fn(impl AsRef<[u8]> + Clone + '_) -> Either<impl AsRef<[u8]> + Clone + '_, _> {Either::<impl AsRef<[u8]> + Clone + '_, _>::Left}>, fn(Either<impl AsRef<[u8]> + Clone + '_, _>) -> Either<Either<impl AsRef<[u8]> + Clone + '_, _>, Either<[{integer}; 1], [{integer}; 1]>> {Either::<Either<impl AsRef<[u8]> + Clone + '_, _>, Either<[{integer}; 1], [{integer}; 1]>>::Left}>, _>, std::iter::Chain<std::iter::Once<Either<Either<impl AsRef<[u8]> + Clone + '_, _>, Either<[{integer}; 1], [{integer}; 1]>>>, Map<Map<std::iter::Once<[{integer}; 1]>, fn([{integer}; 1]) -> Either<[{integer}; 1], [{integer}; 1]> {Either::<[{integer}; 1], [{integer}; 1]>::Right}>, fn(Either<[{integer}; 1], [{integer}; 1]>) -> Either<Either<impl AsRef<[u8]> + Clone + '_, _>, Either<[{integer}; 1], [{integer}; 1]>> {Either::<Either<impl AsRef<[u8]> + Clone + '_, _>, Either<[{integer}; 1], [{integer}; 1]>>::Right}>>>: Clone` is not satisfied
-  --> $DIR/lazy_subtyping_of_opaques.rs:30:10
-   |
-LL |     ) -> impl Iterator<Item = impl AsRef<[u8]> + Clone + 'a> + Clone + 'a {
-   |          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `Clone` is not implemented for `Either<Either<Map<Map<impl Iterator<Item = impl AsRef<[u8]> + Clone + '_> + Clone + '_, fn(impl AsRef<[u8]> + Clone + '_) -> Either<impl AsRef<[u8]> + Clone + '_, _> {Either::<impl AsRef<[u8]> + Clone + '_, _>::Left}>, fn(Either<impl AsRef<[u8]> + Clone + '_, _>) -> Either<Either<impl AsRef<[u8]> + Clone + '_, _>, Either<[{integer}; 1], [{integer}; 1]>> {Either::<Either<impl AsRef<[u8]> + Clone + '_, _>, Either<[{integer}; 1], [{integer}; 1]>>::Left}>, _>, std::iter::Chain<std::iter::Once<Either<Either<impl AsRef<[u8]> + Clone + '_, _>, Either<[{integer}; 1], [{integer}; 1]>>>, Map<Map<std::iter::Once<[{integer}; 1]>, fn([{integer}; 1]) -> Either<[{integer}; 1], [{integer}; 1]> {Either::<[{integer}; 1], [{integer}; 1]>::Right}>, fn(Either<[{integer}; 1], [{integer}; 1]>) -> Either<Either<impl AsRef<[u8]> + Clone + '_, _>, Either<[{integer}; 1], [{integer}; 1]>> {Either::<Either<impl AsRef<[u8]> + Clone + '_, _>, Either<[{integer}; 1], [{integer}; 1]>>::Right}>>>`
-
-error[E0277]: the trait bound `Either<Either<impl AsRef<[u8]> + Clone + '_, _>, Either<[{integer}; 1], [{integer}; 1]>>: AsRef<[u8]>` is not satisfied
-  --> $DIR/lazy_subtyping_of_opaques.rs:30:31
-   |
-LL |     ) -> impl Iterator<Item = impl AsRef<[u8]> + Clone + 'a> + Clone + 'a {
-   |                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `AsRef<[u8]>` is not implemented for `Either<Either<impl AsRef<[u8]> + Clone + '_, _>, Either<[{integer}; 1], [{integer}; 1]>>`
-
-error[E0277]: the trait bound `Either<Either<impl AsRef<[u8]> + Clone + '_, _>, Either<[{integer}; 1], [{integer}; 1]>>: Clone` is not satisfied
-  --> $DIR/lazy_subtyping_of_opaques.rs:30:31
-   |
-LL |     ) -> impl Iterator<Item = impl AsRef<[u8]> + Clone + 'a> + Clone + 'a {
-   |                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `Clone` is not implemented for `Either<Either<impl AsRef<[u8]> + Clone + '_, _>, Either<[{integer}; 1], [{integer}; 1]>>`
-
-error: aborting due to 3 previous errors
-
-For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/impl-trait/normalize-tait-in-const.stderr b/tests/ui/impl-trait/normalize-tait-in-const.stderr
index 5e3c0ea054b..73f4d4c3885 100644
--- a/tests/ui/impl-trait/normalize-tait-in-const.stderr
+++ b/tests/ui/impl-trait/normalize-tait-in-const.stderr
@@ -4,6 +4,12 @@ error: `~const` can only be applied to `#[const_trait]` traits
 LL | const fn with_positive<F: ~const for<'a> Fn(&'a Alias<'a>) + ~const Destruct>(fun: F) {
    |                                          ^^^^^^^^^^^^^^^^^
 
+error: `~const` can only be applied to `#[const_trait]` traits
+  --> $DIR/normalize-tait-in-const.rs:27:69
+   |
+LL | const fn with_positive<F: ~const for<'a> Fn(&'a Alias<'a>) + ~const Destruct>(fun: F) {
+   |                                                                     ^^^^^^^^
+
 error[E0015]: cannot call non-const closure in constant functions
   --> $DIR/normalize-tait-in-const.rs:28:5
    |
@@ -29,7 +35,7 @@ LL |     fun(filter_positive());
 LL | }
    | - value is dropped here
 
-error: aborting due to 3 previous errors
+error: aborting due to 4 previous errors
 
 Some errors have detailed explanations: E0015, E0493.
 For more information about an error, try `rustc --explain E0015`.
diff --git a/tests/ui/impl-trait/upvar_captures.rs b/tests/ui/impl-trait/upvar_captures.rs
new file mode 100644
index 00000000000..61e3cda66f5
--- /dev/null
+++ b/tests/ui/impl-trait/upvar_captures.rs
@@ -0,0 +1,16 @@
+//! This test used to ICE: rust-lang/rust#123255
+//! Because the errors on `C` were ignored when trying
+//! to compute the MIR of the closure, which thus ended
+//! up with broken upvars.
+//@ edition:2021
+#![crate_type = "lib"]
+
+pub fn a() {}
+
+mod handlers {
+    pub struct C(&()); //~ ERROR missing lifetime specifier
+    pub fn c() -> impl Fn() -> C {
+        let a1 = ();
+        || C((crate::a(), a1).into())
+    }
+}
diff --git a/tests/ui/impl-trait/upvar_captures.stderr b/tests/ui/impl-trait/upvar_captures.stderr
new file mode 100644
index 00000000000..b87a16606cc
--- /dev/null
+++ b/tests/ui/impl-trait/upvar_captures.stderr
@@ -0,0 +1,14 @@
+error[E0106]: missing lifetime specifier
+  --> $DIR/upvar_captures.rs:11:18
+   |
+LL |     pub struct C(&());
+   |                  ^ expected named lifetime parameter
+   |
+help: consider introducing a named lifetime parameter
+   |
+LL |     pub struct C<'a>(&'a ());
+   |                 ++++  ++
+
+error: aborting due to 1 previous error
+
+For more information about this error, try `rustc --explain E0106`.
diff --git a/tests/ui/imports/issue-59764.stderr b/tests/ui/imports/issue-59764.stderr
index 293c2a60d80..74525c9c88f 100644
--- a/tests/ui/imports/issue-59764.stderr
+++ b/tests/ui/imports/issue-59764.stderr
@@ -209,7 +209,7 @@ help: a macro with this name exists at the root of the crate
    |
 LL ~         issue_59764::{makro as foobar, 
 LL |
- ...
+...
 LL |
 LL ~             foo::{baz}
    |
diff --git a/tests/ui/incoherent-inherent-impls/no-attr-empty-impl.stderr b/tests/ui/incoherent-inherent-impls/no-attr-empty-impl.stderr
index 6dc1680cf89..f8491697910 100644
--- a/tests/ui/incoherent-inherent-impls/no-attr-empty-impl.stderr
+++ b/tests/ui/incoherent-inherent-impls/no-attr-empty-impl.stderr
@@ -2,7 +2,7 @@ error[E0116]: cannot define inherent `impl` for a type outside of the crate wher
   --> $DIR/no-attr-empty-impl.rs:4:1
    |
 LL | impl extern_crate::StructWithAttr {}
-   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ impl for type defined outside of crate.
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ impl for type defined outside of crate
    |
    = note: define and implement a trait or new type instead
 
@@ -10,7 +10,7 @@ error[E0116]: cannot define inherent `impl` for a type outside of the crate wher
   --> $DIR/no-attr-empty-impl.rs:7:1
    |
 LL | impl extern_crate::StructNoAttr {}
-   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ impl for type defined outside of crate.
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ impl for type defined outside of crate
    |
    = note: define and implement a trait or new type instead
 
@@ -18,7 +18,7 @@ error[E0116]: cannot define inherent `impl` for a type outside of the crate wher
   --> $DIR/no-attr-empty-impl.rs:10:1
    |
 LL | impl extern_crate::EnumWithAttr {}
-   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ impl for type defined outside of crate.
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ impl for type defined outside of crate
    |
    = note: define and implement a trait or new type instead
 
@@ -26,7 +26,7 @@ error[E0116]: cannot define inherent `impl` for a type outside of the crate wher
   --> $DIR/no-attr-empty-impl.rs:13:1
    |
 LL | impl extern_crate::EnumNoAttr {}
-   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ impl for type defined outside of crate.
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ impl for type defined outside of crate
    |
    = note: define and implement a trait or new type instead
 
diff --git a/tests/ui/inference/issue-83606.stderr b/tests/ui/inference/issue-83606.stderr
index 8e6ff6d568d..69d1d71ef3c 100644
--- a/tests/ui/inference/issue-83606.stderr
+++ b/tests/ui/inference/issue-83606.stderr
@@ -1,9 +1,14 @@
-error[E0282]: type annotations needed for `[usize; _]`
+error[E0284]: type annotations needed for `[usize; _]`
   --> $DIR/issue-83606.rs:8:9
    |
 LL |     let _ = foo("foo");
-   |         ^
+   |         ^   ---------- type must be known at this point
    |
+note: required by a const generic parameter in `foo`
+  --> $DIR/issue-83606.rs:3:8
+   |
+LL | fn foo<const N: usize>(_: impl std::fmt::Display) -> [usize; N] {
+   |        ^^^^^^^^^^^^^^ required by this const generic parameter in `foo`
 help: consider giving this pattern a type, where the value of const parameter `N` is specified
    |
 LL |     let _: [usize; N] = foo("foo");
@@ -11,4 +16,4 @@ LL |     let _: [usize; N] = foo("foo");
 
 error: aborting due to 1 previous error
 
-For more information about this error, try `rustc --explain E0282`.
+For more information about this error, try `rustc --explain E0284`.
diff --git a/tests/ui/instrument-coverage/mcdc-condition-limit.bad.stderr b/tests/ui/instrument-coverage/mcdc-condition-limit.bad.stderr
index 5df6aaf9804..15fa3f6ee11 100644
--- a/tests/ui/instrument-coverage/mcdc-condition-limit.bad.stderr
+++ b/tests/ui/instrument-coverage/mcdc-condition-limit.bad.stderr
@@ -1,4 +1,4 @@
-warning: Number of conditions in decision (7) exceeds limit (6). MC/DC analysis will not count this expression.
+warning: number of conditions in decision (7) exceeds limit (6), so MC/DC analysis will not count this expression
   --> $DIR/mcdc-condition-limit.rs:29:8
    |
 LL |     if a && b && c && d && e && f && g {
diff --git a/tests/ui/instrument-coverage/mcdc-condition-limit.rs b/tests/ui/instrument-coverage/mcdc-condition-limit.rs
index de3770b5709..eb19ddec78f 100644
--- a/tests/ui/instrument-coverage/mcdc-condition-limit.rs
+++ b/tests/ui/instrument-coverage/mcdc-condition-limit.rs
@@ -26,7 +26,7 @@ fn main() {
 fn main() {
     // 7 conditions is too many, so issue a diagnostic.
     let [a, b, c, d, e, f, g] = <[bool; 7]>::default();
-    if a && b && c && d && e && f && g { //[bad]~ WARNING Number of conditions in decision
+    if a && b && c && d && e && f && g { //[bad]~ WARNING number of conditions in decision
         core::hint::black_box("hello");
     }
 }
diff --git a/tests/ui/intrinsics/not-overridden.rs b/tests/ui/intrinsics/not-overridden.rs
index d6655b51905..a53071e304d 100644
--- a/tests/ui/intrinsics/not-overridden.rs
+++ b/tests/ui/intrinsics/not-overridden.rs
@@ -1,6 +1,6 @@
 //! Check that intrinsics that do not get overridden, but are marked as such,
 //! cause an error instead of silently invoking the body.
-#![feature(rustc_attrs, effects)]
+#![feature(rustc_attrs/* , effects*/)] // FIXME(effects)
 //@ build-fail
 //@ failure-status:101
 //@ normalize-stderr-test ".*note: .*\n\n" -> ""
diff --git a/tests/ui/intrinsics/safe-intrinsic-mismatch.rs b/tests/ui/intrinsics/safe-intrinsic-mismatch.rs
index 23cd5f10835..c116ba7a62e 100644
--- a/tests/ui/intrinsics/safe-intrinsic-mismatch.rs
+++ b/tests/ui/intrinsics/safe-intrinsic-mismatch.rs
@@ -1,6 +1,6 @@
 #![feature(intrinsics)]
 #![feature(rustc_attrs)]
-#![feature(effects)]
+// FIXME(effects) do this with revisions #![feature(effects)]
 
 extern "rust-intrinsic" {
     fn size_of<T>() -> usize; //~ ERROR intrinsic safety mismatch
@@ -19,7 +19,7 @@ const fn const_deallocate(_ptr: *mut u8, _size: usize, _align: usize) {}
 mod foo {
     #[rustc_intrinsic]
     unsafe fn const_deallocate(_ptr: *mut u8, _size: usize, _align: usize) {}
-    //~^ ERROR wrong number of const parameters
+    // FIXME(effects) ~^ ERROR wrong number of const parameters
 }
 
 fn main() {}
diff --git a/tests/ui/intrinsics/safe-intrinsic-mismatch.stderr b/tests/ui/intrinsics/safe-intrinsic-mismatch.stderr
index d73d5bab8d7..7f37e0f8211 100644
--- a/tests/ui/intrinsics/safe-intrinsic-mismatch.stderr
+++ b/tests/ui/intrinsics/safe-intrinsic-mismatch.stderr
@@ -42,13 +42,6 @@ LL | const fn const_deallocate(_ptr: *mut u8, _size: usize, _align: usize) {}
    = note: expected signature `unsafe fn(_, _, _)`
               found signature `fn(_, _, _)`
 
-error[E0094]: intrinsic has wrong number of const parameters: found 0, expected 1
-  --> $DIR/safe-intrinsic-mismatch.rs:21:31
-   |
-LL |     unsafe fn const_deallocate(_ptr: *mut u8, _size: usize, _align: usize) {}
-   |                               ^ expected 1 const parameter
-
-error: aborting due to 7 previous errors
+error: aborting due to 6 previous errors
 
-Some errors have detailed explanations: E0094, E0308.
-For more information about an error, try `rustc --explain E0094`.
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/issues/issue-22644.stderr b/tests/ui/issues/issue-22644.stderr
index 7d8a0ff170a..c6d41cc856d 100644
--- a/tests/ui/issues/issue-22644.stderr
+++ b/tests/ui/issues/issue-22644.stderr
@@ -64,7 +64,7 @@ help: try comparing the cast value
    |
 LL ~     println!("{}", (a
 LL |
- ...
+...
 LL |
 LL ~                    usize)
    |
diff --git a/tests/ui/issues/issue-57271.stderr b/tests/ui/issues/issue-57271.stderr
index 10cbb34ef5d..a61419c61d7 100644
--- a/tests/ui/issues/issue-57271.stderr
+++ b/tests/ui/issues/issue-57271.stderr
@@ -17,7 +17,7 @@ help: insert some indirection (e.g., a `Box`, `Rc`, or `&`) to break the cycle
    |
 LL ~     Array(Box<TypeSignature>),
 LL |     TypeVariable(()),
- ...
+...
 LL |     Base(BaseType),
 LL ~     Object(Box<ObjectType>),
    |
diff --git a/tests/ui/issues/issue-98299.rs b/tests/ui/issues/issue-98299.rs
index 63c058f91fc..ba63d963475 100644
--- a/tests/ui/issues/issue-98299.rs
+++ b/tests/ui/issues/issue-98299.rs
@@ -3,6 +3,8 @@ use std::convert::TryFrom;
 pub fn test_usage(p: ()) {
     SmallCString::try_from(p).map(|cstr| cstr);
     //~^ ERROR: type annotations needed
+    //~| ERROR: type annotations needed
+    //~| ERROR: type annotations needed
 }
 
 pub struct SmallCString<const N: usize> {}
diff --git a/tests/ui/issues/issue-98299.stderr b/tests/ui/issues/issue-98299.stderr
index becf16d1db9..b645267e3b9 100644
--- a/tests/ui/issues/issue-98299.stderr
+++ b/tests/ui/issues/issue-98299.stderr
@@ -1,14 +1,61 @@
-error[E0282]: type annotations needed for `SmallCString<_>`
+error[E0284]: type annotations needed for `SmallCString<_>`
   --> $DIR/issue-98299.rs:4:36
    |
 LL |     SmallCString::try_from(p).map(|cstr| cstr);
-   |                                    ^^^^
+   |     ------------                   ^^^^
+   |     |
+   |     type must be known at this point
    |
+note: required by a const generic parameter in `SmallCString`
+  --> $DIR/issue-98299.rs:10:25
+   |
+LL | pub struct SmallCString<const N: usize> {}
+   |                         ^^^^^^^^^^^^^^ required by this const generic parameter in `SmallCString`
+help: consider giving this closure parameter an explicit type, where the value of const parameter `N` is specified
+   |
+LL |     SmallCString::try_from(p).map(|cstr: SmallCString<N>| cstr);
+   |                                        +++++++++++++++++
+
+error[E0284]: type annotations needed for `SmallCString<_>`
+  --> $DIR/issue-98299.rs:4:36
+   |
+LL |     SmallCString::try_from(p).map(|cstr| cstr);
+   |     ------------                   ^^^^
+   |     |
+   |     type must be known at this point
+   |
+note: required for `SmallCString<_>` to implement `TryFrom<()>`
+  --> $DIR/issue-98299.rs:12:22
+   |
+LL | impl<const N: usize> TryFrom<()> for SmallCString<N> {
+   |      --------------  ^^^^^^^^^^^     ^^^^^^^^^^^^^^^
+   |      |
+   |      unsatisfied trait bound introduced here
+help: consider giving this closure parameter an explicit type, where the value of const parameter `N` is specified
+   |
+LL |     SmallCString::try_from(p).map(|cstr: SmallCString<N>| cstr);
+   |                                        +++++++++++++++++
+
+error[E0284]: type annotations needed for `SmallCString<_>`
+  --> $DIR/issue-98299.rs:4:36
+   |
+LL |     SmallCString::try_from(p).map(|cstr| cstr);
+   |     -------------------------      ^^^^
+   |     |
+   |     type must be known at this point
+   |
+note: required for `SmallCString<_>` to implement `TryFrom<()>`
+  --> $DIR/issue-98299.rs:12:22
+   |
+LL | impl<const N: usize> TryFrom<()> for SmallCString<N> {
+   |      --------------  ^^^^^^^^^^^     ^^^^^^^^^^^^^^^
+   |      |
+   |      unsatisfied trait bound introduced here
 help: consider giving this closure parameter an explicit type, where the value of const parameter `N` is specified
    |
 LL |     SmallCString::try_from(p).map(|cstr: SmallCString<N>| cstr);
    |                                        +++++++++++++++++
 
-error: aborting due to 1 previous error
+error: aborting due to 3 previous errors
 
-For more information about this error, try `rustc --explain E0282`.
+For more information about this error, try `rustc --explain E0284`.
diff --git a/tests/ui/let-else/let-else-if.stderr b/tests/ui/let-else/let-else-if.stderr
index c8058ec6692..7e2215c8c05 100644
--- a/tests/ui/let-else/let-else-if.stderr
+++ b/tests/ui/let-else/let-else-if.stderr
@@ -8,7 +8,7 @@ help: try placing this code inside a block
    |
 LL ~     let Some(_) = Some(()) else { if true {
 LL |
- ...
+...
 LL |         return;
 LL ~     } };
    |
diff --git a/tests/ui/lifetimes/no_lending_iterators.stderr b/tests/ui/lifetimes/no_lending_iterators.stderr
index c3784770d79..9ceaef2f9b1 100644
--- a/tests/ui/lifetimes/no_lending_iterators.stderr
+++ b/tests/ui/lifetimes/no_lending_iterators.stderr
@@ -4,7 +4,7 @@ error: associated type `Iterator::Item` is declared without lifetime parameters,
 LL |     type Item = &str;
    |                 ^
    |
-note: you can't create an `Iterator` that borrows each `Item` from itself, but you can instead create a new type that borrows your existing type and implement `Iterator` for that new type.
+note: you can't create an `Iterator` that borrows each `Item` from itself, but you can instead create a new type that borrows your existing type and implement `Iterator` for that new type
   --> $DIR/no_lending_iterators.rs:3:19
    |
 LL | impl Iterator for Data {
diff --git a/tests/ui/lifetimes/tail-expr-lock-poisoning.rs b/tests/ui/lifetimes/tail-expr-lock-poisoning.rs
index 69b8f286d77..cdfd35304b4 100644
--- a/tests/ui/lifetimes/tail-expr-lock-poisoning.rs
+++ b/tests/ui/lifetimes/tail-expr-lock-poisoning.rs
@@ -3,6 +3,7 @@
 //@ [edition2024] compile-flags: -Zunstable-options
 //@ [edition2024] edition: 2024
 //@ run-pass
+//@ needs-unwind
 #![cfg_attr(edition2024, feature(shorter_tail_lifetimes))]
 
 use std::sync::Mutex;
diff --git a/tests/ui/lint/dead-code/tuple-struct-field.rs b/tests/ui/lint/dead-code/tuple-struct-field.rs
index d13fe029289..ff3da410500 100644
--- a/tests/ui/lint/dead-code/tuple-struct-field.rs
+++ b/tests/ui/lint/dead-code/tuple-struct-field.rs
@@ -5,15 +5,20 @@ use std::marker::PhantomData;
 
 const LEN: usize = 4;
 
-struct SingleUnused(i32, [u8; LEN], String);
-//~^ ERROR: field `1` is never read
+struct UnusedAtTheEnd(i32, f32, [u8; LEN], String, u8);
+//~^ ERROR:fields `1`, `2`, `3`, and `4` are never read
+//~| NOTE: fields in this struct
+//~| HELP: consider removing these fields
+
+struct UnusedJustOneField(i32);
+//~^ ERROR: field `0` is never read
 //~| NOTE: field in this struct
-//~| HELP: consider changing the field to be of unit type
+//~| HELP: consider removing this field
 
-struct MultipleUnused(i32, f32, String, u8);
-//~^ ERROR: fields `0`, `1`, `2`, and `3` are never read
+struct UnusedInTheMiddle(i32, f32, String, u8, u32);
+//~^ ERROR: fields `1`, `2`, and `4` are never read
 //~| NOTE: fields in this struct
-//~| HELP: consider changing the fields to be of unit type
+//~| HELP: consider changing the fields to be of unit type to suppress this warning while preserving the field numbering, or remove the fields
 
 struct GoodUnit(());
 
@@ -23,15 +28,19 @@ struct Void;
 struct GoodVoid(Void);
 
 fn main() {
-    let w = SingleUnused(42, [0, 1, 2, 3], "abc".to_string());
-    let _ = w.0;
-    let _ = w.2;
+    let u1 = UnusedAtTheEnd(42, 3.14, [0, 1, 2, 3], "def".to_string(), 4u8);
+    let _ = u1.0;
+
+    let _ = UnusedJustOneField(42);
+
+    let u2 = UnusedInTheMiddle(42, 3.14, "def".to_string(), 4u8, 5);
+    let _ = u2.0;
+    let _ = u2.3;
 
-    let m = MultipleUnused(42, 3.14, "def".to_string(), 4u8);
 
     let gu = GoodUnit(());
     let gp = GoodPhantom(PhantomData);
     let gv = GoodVoid(Void);
 
-    let _ = (gu, gp, gv, m);
+    let _ = (gu, gp, gv);
 }
diff --git a/tests/ui/lint/dead-code/tuple-struct-field.stderr b/tests/ui/lint/dead-code/tuple-struct-field.stderr
index 0154d5489f9..434554d7ae5 100644
--- a/tests/ui/lint/dead-code/tuple-struct-field.stderr
+++ b/tests/ui/lint/dead-code/tuple-struct-field.stderr
@@ -1,33 +1,40 @@
-error: field `1` is never read
-  --> $DIR/tuple-struct-field.rs:8:26
+error: fields `1`, `2`, `3`, and `4` are never read
+  --> $DIR/tuple-struct-field.rs:8:28
    |
-LL | struct SingleUnused(i32, [u8; LEN], String);
-   |        ------------      ^^^^^^^^^
+LL | struct UnusedAtTheEnd(i32, f32, [u8; LEN], String, u8);
+   |        --------------      ^^^  ^^^^^^^^^  ^^^^^^  ^^
    |        |
-   |        field in this struct
+   |        fields in this struct
    |
+   = help: consider removing these fields
 note: the lint level is defined here
   --> $DIR/tuple-struct-field.rs:1:9
    |
 LL | #![deny(dead_code)]
    |         ^^^^^^^^^
-help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field
+
+error: field `0` is never read
+  --> $DIR/tuple-struct-field.rs:13:27
+   |
+LL | struct UnusedJustOneField(i32);
+   |        ------------------ ^^^
+   |        |
+   |        field in this struct
    |
-LL | struct SingleUnused(i32, (), String);
-   |                          ~~
+   = help: consider removing this field
 
-error: fields `0`, `1`, `2`, and `3` are never read
-  --> $DIR/tuple-struct-field.rs:13:23
+error: fields `1`, `2`, and `4` are never read
+  --> $DIR/tuple-struct-field.rs:18:31
    |
-LL | struct MultipleUnused(i32, f32, String, u8);
-   |        -------------- ^^^  ^^^  ^^^^^^  ^^
+LL | struct UnusedInTheMiddle(i32, f32, String, u8, u32);
+   |        -----------------      ^^^  ^^^^^^      ^^^
    |        |
    |        fields in this struct
    |
 help: consider changing the fields to be of unit type to suppress this warning while preserving the field numbering, or remove the fields
    |
-LL | struct MultipleUnused((), (), (), ());
-   |                       ~~  ~~  ~~  ~~
+LL | struct UnusedInTheMiddle(i32, (), (), u8, ());
+   |                               ~~  ~~      ~~
 
-error: aborting due to 2 previous errors
+error: aborting due to 3 previous errors
 
diff --git a/tests/ui/lint/dead-code/unused-variant.rs b/tests/ui/lint/dead-code/unused-variant.rs
index 82108fa9c13..7030681eb36 100644
--- a/tests/ui/lint/dead-code/unused-variant.rs
+++ b/tests/ui/lint/dead-code/unused-variant.rs
@@ -6,7 +6,22 @@ enum Enum {
     Variant2,
 }
 
+#[derive(Debug)]
+enum TupleVariant {
+    Variant1(i32), //~ ERROR: variant `Variant1` is never constructed
+    Variant2,
+}
+
+#[derive(Debug)]
+enum StructVariant {
+    Variant1 { id: i32 }, //~ ERROR: variant `Variant1` is never constructed
+    Variant2,
+}
+
 fn main() {
     let e = Enum::Variant2;
     e.clone();
+
+    let _ = TupleVariant::Variant2;
+    let _ = StructVariant::Variant2;
 }
diff --git a/tests/ui/lint/dead-code/unused-variant.stderr b/tests/ui/lint/dead-code/unused-variant.stderr
index 0ae15fde47b..4bc8cf420da 100644
--- a/tests/ui/lint/dead-code/unused-variant.stderr
+++ b/tests/ui/lint/dead-code/unused-variant.stderr
@@ -13,5 +13,25 @@ note: the lint level is defined here
 LL | #![deny(dead_code)]
    |         ^^^^^^^^^
 
-error: aborting due to 1 previous error
+error: variant `Variant1` is never constructed
+  --> $DIR/unused-variant.rs:11:5
+   |
+LL | enum TupleVariant {
+   |      ------------ variant in this enum
+LL |     Variant1(i32),
+   |     ^^^^^^^^
+   |
+   = note: `TupleVariant` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
+
+error: variant `Variant1` is never constructed
+  --> $DIR/unused-variant.rs:17:5
+   |
+LL | enum StructVariant {
+   |      ------------- variant in this enum
+LL |     Variant1 { id: i32 },
+   |     ^^^^^^^^
+   |
+   = note: `StructVariant` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
+
+error: aborting due to 3 previous errors
 
diff --git a/tests/ui/lint/expect-future_breakage-crash-issue-126521.rs b/tests/ui/lint/expect-future_breakage-crash-issue-126521.rs
new file mode 100644
index 00000000000..0e622ff3aaf
--- /dev/null
+++ b/tests/ui/lint/expect-future_breakage-crash-issue-126521.rs
@@ -0,0 +1,23 @@
+// This test covers similar crashes from both #126521 and #126751.
+
+macro_rules! foo {
+    ($val:ident) => {
+        true;
+    };
+}
+
+macro_rules! bar {
+    ($val:ident) => {
+        (5_i32.overflowing_sub(3));
+    };
+}
+
+fn main() {
+    #[expect(semicolon_in_expressions_from_macros)]
+    //~^ ERROR the `#[expect]` attribute is an experimental feature
+    let _ = foo!(x);
+
+    #[expect(semicolon_in_expressions_from_macros)]
+    //~^ ERROR the `#[expect]` attribute is an experimental feature
+    let _ = bar!(x);
+}
diff --git a/tests/ui/lint/expect-future_breakage-crash-issue-126521.stderr b/tests/ui/lint/expect-future_breakage-crash-issue-126521.stderr
new file mode 100644
index 00000000000..994630ec23b
--- /dev/null
+++ b/tests/ui/lint/expect-future_breakage-crash-issue-126521.stderr
@@ -0,0 +1,23 @@
+error[E0658]: the `#[expect]` attribute is an experimental feature
+  --> $DIR/expect-future_breakage-crash-issue-126521.rs:16:5
+   |
+LL |     #[expect(semicolon_in_expressions_from_macros)]
+   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+   |
+   = note: see issue #54503 <https://github.com/rust-lang/rust/issues/54503> for more information
+   = help: add `#![feature(lint_reasons)]` to the crate attributes to enable
+   = note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
+
+error[E0658]: the `#[expect]` attribute is an experimental feature
+  --> $DIR/expect-future_breakage-crash-issue-126521.rs:20:5
+   |
+LL |     #[expect(semicolon_in_expressions_from_macros)]
+   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+   |
+   = note: see issue #54503 <https://github.com/rust-lang/rust/issues/54503> for more information
+   = help: add `#![feature(lint_reasons)]` to the crate attributes to enable
+   = note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0658`.
diff --git a/tests/ui/lint/lint-attr-everywhere-late.stderr b/tests/ui/lint/lint-attr-everywhere-late.stderr
index 7fe078068fe..ddc31905afb 100644
--- a/tests/ui/lint/lint-attr-everywhere-late.stderr
+++ b/tests/ui/lint/lint-attr-everywhere-late.stderr
@@ -154,7 +154,7 @@ error: the return value of `mem::discriminant` is unspecified when called with a
 LL |     fn assoc_fn() { discriminant::<i32>(&123); }
    |                     ^^^^^^^^^^^^^^^^^^^^^^^^^
    |
-note: the argument to `discriminant` should be a reference to an enum, but it was passed a reference to a `i32`, which is not an enum.
+note: the argument to `discriminant` should be a reference to an enum, but it was passed a reference to a `i32`, which is not an enum
   --> $DIR/lint-attr-everywhere-late.rs:96:41
    |
 LL |     fn assoc_fn() { discriminant::<i32>(&123); }
@@ -208,7 +208,7 @@ error: the return value of `mem::discriminant` is unspecified when called with a
 LL |     let _ = discriminant::<i32>(&123);
    |             ^^^^^^^^^^^^^^^^^^^^^^^^^
    |
-note: the argument to `discriminant` should be a reference to an enum, but it was passed a reference to a `i32`, which is not an enum.
+note: the argument to `discriminant` should be a reference to an enum, but it was passed a reference to a `i32`, which is not an enum
   --> $DIR/lint-attr-everywhere-late.rs:139:33
    |
 LL |     let _ = discriminant::<i32>(&123);
@@ -237,7 +237,7 @@ error: the return value of `mem::discriminant` is unspecified when called with a
 LL |             discriminant::<i32>(&123);
    |             ^^^^^^^^^^^^^^^^^^^^^^^^^
    |
-note: the argument to `discriminant` should be a reference to an enum, but it was passed a reference to a `i32`, which is not an enum.
+note: the argument to `discriminant` should be a reference to an enum, but it was passed a reference to a `i32`, which is not an enum
   --> $DIR/lint-attr-everywhere-late.rs:155:33
    |
 LL |             discriminant::<i32>(&123);
@@ -254,7 +254,7 @@ error: the return value of `mem::discriminant` is unspecified when called with a
 LL |             discriminant::<i32>(&123);
    |             ^^^^^^^^^^^^^^^^^^^^^^^^^
    |
-note: the argument to `discriminant` should be a reference to an enum, but it was passed a reference to a `i32`, which is not an enum.
+note: the argument to `discriminant` should be a reference to an enum, but it was passed a reference to a `i32`, which is not an enum
   --> $DIR/lint-attr-everywhere-late.rs:161:33
    |
 LL |             discriminant::<i32>(&123);
@@ -283,7 +283,7 @@ error: the return value of `mem::discriminant` is unspecified when called with a
 LL |         discriminant::<i32>(&123);
    |         ^^^^^^^^^^^^^^^^^^^^^^^^^
    |
-note: the argument to `discriminant` should be a reference to an enum, but it was passed a reference to a `i32`, which is not an enum.
+note: the argument to `discriminant` should be a reference to an enum, but it was passed a reference to a `i32`, which is not an enum
   --> $DIR/lint-attr-everywhere-late.rs:173:29
    |
 LL |         discriminant::<i32>(&123);
@@ -300,7 +300,7 @@ error: the return value of `mem::discriminant` is unspecified when called with a
 LL |         discriminant::<i32>(&123);
    |         ^^^^^^^^^^^^^^^^^^^^^^^^^
    |
-note: the argument to `discriminant` should be a reference to an enum, but it was passed a reference to a `i32`, which is not an enum.
+note: the argument to `discriminant` should be a reference to an enum, but it was passed a reference to a `i32`, which is not an enum
   --> $DIR/lint-attr-everywhere-late.rs:177:29
    |
 LL |         discriminant::<i32>(&123);
@@ -317,7 +317,7 @@ error: the return value of `mem::discriminant` is unspecified when called with a
 LL |     discriminant::<i32>(&123);
    |     ^^^^^^^^^^^^^^^^^^^^^^^^^
    |
-note: the argument to `discriminant` should be a reference to an enum, but it was passed a reference to a `i32`, which is not an enum.
+note: the argument to `discriminant` should be a reference to an enum, but it was passed a reference to a `i32`, which is not an enum
   --> $DIR/lint-attr-everywhere-late.rs:182:25
    |
 LL |     discriminant::<i32>(&123);
@@ -334,7 +334,7 @@ error: the return value of `mem::discriminant` is unspecified when called with a
 LL |     [#[deny(enum_intrinsics_non_enums)] discriminant::<i32>(&123)];
    |                                         ^^^^^^^^^^^^^^^^^^^^^^^^^
    |
-note: the argument to `discriminant` should be a reference to an enum, but it was passed a reference to a `i32`, which is not an enum.
+note: the argument to `discriminant` should be a reference to an enum, but it was passed a reference to a `i32`, which is not an enum
   --> $DIR/lint-attr-everywhere-late.rs:184:61
    |
 LL |     [#[deny(enum_intrinsics_non_enums)] discriminant::<i32>(&123)];
@@ -351,7 +351,7 @@ error: the return value of `mem::discriminant` is unspecified when called with a
 LL |     (#[deny(enum_intrinsics_non_enums)] discriminant::<i32>(&123),);
    |                                         ^^^^^^^^^^^^^^^^^^^^^^^^^
    |
-note: the argument to `discriminant` should be a reference to an enum, but it was passed a reference to a `i32`, which is not an enum.
+note: the argument to `discriminant` should be a reference to an enum, but it was passed a reference to a `i32`, which is not an enum
   --> $DIR/lint-attr-everywhere-late.rs:185:61
    |
 LL |     (#[deny(enum_intrinsics_non_enums)] discriminant::<i32>(&123),);
@@ -368,7 +368,7 @@ error: the return value of `mem::discriminant` is unspecified when called with a
 LL |     call(#[deny(enum_intrinsics_non_enums)] discriminant::<i32>(&123));
    |                                             ^^^^^^^^^^^^^^^^^^^^^^^^^
    |
-note: the argument to `discriminant` should be a reference to an enum, but it was passed a reference to a `i32`, which is not an enum.
+note: the argument to `discriminant` should be a reference to an enum, but it was passed a reference to a `i32`, which is not an enum
   --> $DIR/lint-attr-everywhere-late.rs:187:65
    |
 LL |     call(#[deny(enum_intrinsics_non_enums)] discriminant::<i32>(&123));
@@ -385,7 +385,7 @@ error: the return value of `mem::discriminant` is unspecified when called with a
 LL |     TupleStruct(#[deny(enum_intrinsics_non_enums)] discriminant::<i32>(&123));
    |                                                    ^^^^^^^^^^^^^^^^^^^^^^^^^
    |
-note: the argument to `discriminant` should be a reference to an enum, but it was passed a reference to a `i32`, which is not an enum.
+note: the argument to `discriminant` should be a reference to an enum, but it was passed a reference to a `i32`, which is not an enum
   --> $DIR/lint-attr-everywhere-late.rs:189:72
    |
 LL |     TupleStruct(#[deny(enum_intrinsics_non_enums)] discriminant::<i32>(&123));
diff --git a/tests/ui/lint/lint-enum-intrinsics-non-enums.stderr b/tests/ui/lint/lint-enum-intrinsics-non-enums.stderr
index 63ed2503cf3..f9eeaebe21f 100644
--- a/tests/ui/lint/lint-enum-intrinsics-non-enums.stderr
+++ b/tests/ui/lint/lint-enum-intrinsics-non-enums.stderr
@@ -4,7 +4,7 @@ error: the return value of `mem::discriminant` is unspecified when called with a
 LL |     discriminant(&());
    |     ^^^^^^^^^^^^^^^^^
    |
-note: the argument to `discriminant` should be a reference to an enum, but it was passed a reference to a `()`, which is not an enum.
+note: the argument to `discriminant` should be a reference to an enum, but it was passed a reference to a `()`, which is not an enum
   --> $DIR/lint-enum-intrinsics-non-enums.rs:26:18
    |
 LL |     discriminant(&());
@@ -17,7 +17,7 @@ error: the return value of `mem::discriminant` is unspecified when called with a
 LL |     discriminant(&&SomeEnum::B);
    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |
-note: the argument to `discriminant` should be a reference to an enum, but it was passed a reference to a `&SomeEnum`, which is not an enum.
+note: the argument to `discriminant` should be a reference to an enum, but it was passed a reference to a `&SomeEnum`, which is not an enum
   --> $DIR/lint-enum-intrinsics-non-enums.rs:29:18
    |
 LL |     discriminant(&&SomeEnum::B);
@@ -29,7 +29,7 @@ error: the return value of `mem::discriminant` is unspecified when called with a
 LL |     discriminant(&SomeStruct);
    |     ^^^^^^^^^^^^^^^^^^^^^^^^^
    |
-note: the argument to `discriminant` should be a reference to an enum, but it was passed a reference to a `SomeStruct`, which is not an enum.
+note: the argument to `discriminant` should be a reference to an enum, but it was passed a reference to a `SomeStruct`, which is not an enum
   --> $DIR/lint-enum-intrinsics-non-enums.rs:32:18
    |
 LL |     discriminant(&SomeStruct);
@@ -41,7 +41,7 @@ error: the return value of `mem::discriminant` is unspecified when called with a
 LL |     discriminant(&123u32);
    |     ^^^^^^^^^^^^^^^^^^^^^
    |
-note: the argument to `discriminant` should be a reference to an enum, but it was passed a reference to a `u32`, which is not an enum.
+note: the argument to `discriminant` should be a reference to an enum, but it was passed a reference to a `u32`, which is not an enum
   --> $DIR/lint-enum-intrinsics-non-enums.rs:35:18
    |
 LL |     discriminant(&123u32);
@@ -53,7 +53,7 @@ error: the return value of `mem::discriminant` is unspecified when called with a
 LL |     discriminant(&&123i8);
    |     ^^^^^^^^^^^^^^^^^^^^^
    |
-note: the argument to `discriminant` should be a reference to an enum, but it was passed a reference to a `&i8`, which is not an enum.
+note: the argument to `discriminant` should be a reference to an enum, but it was passed a reference to a `&i8`, which is not an enum
   --> $DIR/lint-enum-intrinsics-non-enums.rs:38:18
    |
 LL |     discriminant(&&123i8);
@@ -65,7 +65,7 @@ error: the return value of `mem::variant_count` is unspecified when called with
 LL |     variant_count::<&str>();
    |     ^^^^^^^^^^^^^^^^^^^^^^^
    |
-   = note: the type parameter of `variant_count` should be an enum, but it was instantiated with the type `&str`, which is not an enum.
+   = note: the type parameter of `variant_count` should be an enum, but it was instantiated with the type `&str`, which is not an enum
 
 error: the return value of `mem::variant_count` is unspecified when called with a non-enum type
   --> $DIR/lint-enum-intrinsics-non-enums.rs:49:5
@@ -73,7 +73,7 @@ error: the return value of `mem::variant_count` is unspecified when called with
 LL |     variant_count::<*const u8>();
    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |
-   = note: the type parameter of `variant_count` should be an enum, but it was instantiated with the type `*const u8`, which is not an enum.
+   = note: the type parameter of `variant_count` should be an enum, but it was instantiated with the type `*const u8`, which is not an enum
 
 error: the return value of `mem::variant_count` is unspecified when called with a non-enum type
   --> $DIR/lint-enum-intrinsics-non-enums.rs:52:5
@@ -81,7 +81,7 @@ error: the return value of `mem::variant_count` is unspecified when called with
 LL |     variant_count::<()>();
    |     ^^^^^^^^^^^^^^^^^^^^^
    |
-   = note: the type parameter of `variant_count` should be an enum, but it was instantiated with the type `()`, which is not an enum.
+   = note: the type parameter of `variant_count` should be an enum, but it was instantiated with the type `()`, which is not an enum
 
 error: the return value of `mem::variant_count` is unspecified when called with a non-enum type
   --> $DIR/lint-enum-intrinsics-non-enums.rs:55:5
@@ -89,7 +89,7 @@ error: the return value of `mem::variant_count` is unspecified when called with
 LL |     variant_count::<&SomeEnum>();
    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |
-   = note: the type parameter of `variant_count` should be an enum, but it was instantiated with the type `&SomeEnum`, which is not an enum.
+   = note: the type parameter of `variant_count` should be an enum, but it was instantiated with the type `&SomeEnum`, which is not an enum
 
 error: aborting due to 9 previous errors
 
diff --git a/tests/ui/lint/non-local-defs/cargo-update.stderr b/tests/ui/lint/non-local-defs/cargo-update.stderr
index afd37d03a23..bccf8622bac 100644
--- a/tests/ui/lint/non-local-defs/cargo-update.stderr
+++ b/tests/ui/lint/non-local-defs/cargo-update.stderr
@@ -12,7 +12,7 @@ LL | non_local_macro::non_local_impl!(LocalStruct);
    = note: the macro `non_local_macro::non_local_impl` may come from an old version of the `non_local_macro` crate, try updating your dependency with `cargo update -p non_local_macro`
    = note: `impl` may be usable in bounds, etc. from outside the expression, which might e.g. make something constructible that previously wasn't, because it's still on a publicly-visible type
    = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl`
-   = note: items in an anonymous const item (`const _: () = { ... }`) are treated as in the same scope as the anonymous const's declaration
+   = note: items in an anonymous const item (`const _: () = { ... }`) are treated as in the same scope as the anonymous const's declaration for the purpose of this lint
    = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
    = note: `#[warn(non_local_definitions)]` on by default
    = note: this warning originates in the macro `non_local_macro::non_local_impl` (in Nightly builds, run with -Z macro-backtrace for more info)
diff --git a/tests/ui/lint/non-local-defs/consts.stderr b/tests/ui/lint/non-local-defs/consts.stderr
index 2756ea40138..9f70119e0f8 100644
--- a/tests/ui/lint/non-local-defs/consts.stderr
+++ b/tests/ui/lint/non-local-defs/consts.stderr
@@ -15,7 +15,7 @@ LL |     impl Uto for &Test {}
    |
    = note: `impl` may be usable in bounds, etc. from outside the expression, which might e.g. make something constructible that previously wasn't, because it's still on a publicly-visible type
    = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl`
-   = note: items in an anonymous const item (`const _: () = { ... }`) are treated as in the same scope as the anonymous const's declaration
+   = note: items in an anonymous const item (`const _: () = { ... }`) are treated as in the same scope as the anonymous const's declaration for the purpose of this lint
    = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
    = note: `#[warn(non_local_definitions)]` on by default
 
@@ -32,7 +32,7 @@ LL |     impl Uto2 for Test {}
    |
    = note: `impl` may be usable in bounds, etc. from outside the expression, which might e.g. make something constructible that previously wasn't, because it's still on a publicly-visible type
    = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl`
-   = note: items in an anonymous const item (`const _: () = { ... }`) are treated as in the same scope as the anonymous const's declaration
+   = note: items in an anonymous const item (`const _: () = { ... }`) are treated as in the same scope as the anonymous const's declaration for the purpose of this lint
    = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
 
 warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item
@@ -48,7 +48,7 @@ LL |     impl Uto3 for Test {}
    |
    = note: `impl` may be usable in bounds, etc. from outside the expression, which might e.g. make something constructible that previously wasn't, because it's still on a publicly-visible type
    = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl`
-   = note: items in an anonymous const item (`const _: () = { ... }`) are treated as in the same scope as the anonymous const's declaration
+   = note: items in an anonymous const item (`const _: () = { ... }`) are treated as in the same scope as the anonymous const's declaration for the purpose of this lint
    = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
 
 warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item
@@ -94,7 +94,7 @@ LL |         impl Test {
    |              `Test` is not local
    |
    = note: methods and associated constants are still usable outside the current expression, only `impl Local` and `impl dyn Local` can ever be private, and only if the type is nested in the same item as the `impl`
-   = note: items in an anonymous const item (`const _: () = { ... }`) are treated as in the same scope as the anonymous const's declaration
+   = note: items in an anonymous const item (`const _: () = { ... }`) are treated as in the same scope as the anonymous const's declaration for the purpose of this lint
    = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
 
 warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item
diff --git a/tests/ui/lint/suggestions.stderr b/tests/ui/lint/suggestions.stderr
index 4caee777a13..a4871ead74b 100644
--- a/tests/ui/lint/suggestions.stderr
+++ b/tests/ui/lint/suggestions.stderr
@@ -41,9 +41,8 @@ warning: variable does not need to be mutable
   --> $DIR/suggestions.rs:54:13
    |
 LL |            let mut
-   |  ______________^
-   | | _____________|
-   | ||
+   |   _____________^
+   |  |_____________|
 LL | ||             b = 1;
    | ||____________-^
    | |_____________|
diff --git a/tests/ui/loops/loop-else-break-with-value.stderr b/tests/ui/loops/loop-else-break-with-value.stderr
index 13d4c5faf73..ca18f0fdd7f 100644
--- a/tests/ui/loops/loop-else-break-with-value.stderr
+++ b/tests/ui/loops/loop-else-break-with-value.stderr
@@ -27,7 +27,7 @@ help: you might want to use `if let` to ignore the variant that isn't matched
    |
 LL ~     if let Some(1) = loop {
 LL |
- ...
+...
 LL |         return;
 LL ~     } { todo!() };
    |
diff --git a/tests/ui/macros/auxiliary/expr_2021_implicit.rs b/tests/ui/macros/auxiliary/expr_2021_implicit.rs
new file mode 100644
index 00000000000..61762e41dee
--- /dev/null
+++ b/tests/ui/macros/auxiliary/expr_2021_implicit.rs
@@ -0,0 +1,9 @@
+//@ edition:2021
+
+#[macro_export]
+macro_rules! m {
+    ($expr:expr) => {
+        compile_error!("did not expect an expression to be parsed");
+    };
+    (const { }) => {};
+}
diff --git a/tests/ui/macros/expr_2021_implicit_in_2024.rs b/tests/ui/macros/expr_2021_implicit_in_2024.rs
new file mode 100644
index 00000000000..b3f7a31a802
--- /dev/null
+++ b/tests/ui/macros/expr_2021_implicit_in_2024.rs
@@ -0,0 +1,12 @@
+//@ compile-flags: --edition=2024 -Zunstable-options
+//@ aux-build:expr_2021_implicit.rs
+
+//@ check-pass
+
+extern crate expr_2021_implicit;
+
+// Makes sure that a `:expr` fragment matcher defined in a edition 2021 crate
+// still parses like an `expr_2021` fragment matcher in a 2024 user crate.
+expr_2021_implicit::m!(const {});
+
+fn main() {}
diff --git a/tests/ui/macros/expr_2021_old_edition.rs b/tests/ui/macros/expr_2021_old_edition.rs
deleted file mode 100644
index a7711266106..00000000000
--- a/tests/ui/macros/expr_2021_old_edition.rs
+++ /dev/null
@@ -1,13 +0,0 @@
-//@  compile-flags: --edition=2018
-
-// This test ensures that expr_2021 is not allowed on pre-2021 editions
-
-macro_rules! m {
-    ($e:expr_2021) => { //~ ERROR: invalid fragment specifier `expr_2021`
-        $e
-    };
-}
-
-fn main() {
-    m!(()); //~ ERROR: no rules expected the token `(`
-}
diff --git a/tests/ui/macros/expr_2021_old_edition.stderr b/tests/ui/macros/expr_2021_old_edition.stderr
deleted file mode 100644
index bffa8a1ca17..00000000000
--- a/tests/ui/macros/expr_2021_old_edition.stderr
+++ /dev/null
@@ -1,26 +0,0 @@
-error: invalid fragment specifier `expr_2021`
-  --> $DIR/expr_2021_old_edition.rs:6:6
-   |
-LL |     ($e:expr_2021) => {
-   |      ^^^^^^^^^^^^
-   |
-   = help: fragment specifier `expr_2021` requires Rust 2021 or later
-           valid fragment specifiers are `ident`, `block`, `stmt`, `expr`, `pat`, `ty`, `lifetime`, `literal`, `path`, `meta`, `tt`, `item` and `vis`
-
-error: no rules expected the token `(`
-  --> $DIR/expr_2021_old_edition.rs:12:8
-   |
-LL | macro_rules! m {
-   | -------------- when calling this macro
-...
-LL |     m!(());
-   |        ^ no rules expected this token in macro call
-   |
-note: while trying to match meta-variable `$e:ident`
-  --> $DIR/expr_2021_old_edition.rs:6:6
-   |
-LL |     ($e:expr_2021) => {
-   |      ^^^^^^^^^^^^
-
-error: aborting due to 2 previous errors
-
diff --git a/tests/ui/match/match-float.rs b/tests/ui/match/match-float.rs
index f8514568d15..70283eaeec5 100644
--- a/tests/ui/match/match-float.rs
+++ b/tests/ui/match/match-float.rs
@@ -1,7 +1,22 @@
 //@ run-pass
 // Makes sure we use `==` (not bitwise) semantics for float comparison.
 
-fn main() {
+#![feature(f128)]
+#![feature(f16)]
+
+// FIXME(f16_f128): remove gates when ABI issues are resolved
+
+#[cfg(all(target_arch = "aarch64", target_os = "linux"))]
+fn check_f16() {
+    const F1: f16 = 0.0;
+    const F2: f16 = -0.0;
+    assert_eq!(F1, F2);
+    assert_ne!(F1.to_bits(), F2.to_bits());
+    assert!(matches!(F1, F2));
+    assert!(matches!(F2, F1));
+}
+
+fn check_f32() {
     const F1: f32 = 0.0;
     const F2: f32 = -0.0;
     assert_eq!(F1, F2);
@@ -9,3 +24,31 @@ fn main() {
     assert!(matches!(F1, F2));
     assert!(matches!(F2, F1));
 }
+
+fn check_f64() {
+    const F1: f64 = 0.0;
+    const F2: f64 = -0.0;
+    assert_eq!(F1, F2);
+    assert_ne!(F1.to_bits(), F2.to_bits());
+    assert!(matches!(F1, F2));
+    assert!(matches!(F2, F1));
+}
+
+#[cfg(all(target_arch = "aarch64", target_os = "linux"))]
+fn check_f128() {
+    const F1: f128 = 0.0;
+    const F2: f128 = -0.0;
+    assert_eq!(F1, F2);
+    assert_ne!(F1.to_bits(), F2.to_bits());
+    assert!(matches!(F1, F2));
+    assert!(matches!(F2, F1));
+}
+
+fn main() {
+    #[cfg(all(target_arch = "aarch64", target_os = "linux"))]
+    check_f16();
+    check_f32();
+    check_f64();
+    #[cfg(all(target_arch = "aarch64", target_os = "linux"))]
+    check_f128();
+}
diff --git a/tests/ui/mir/issue-83499-input-output-iteration-ice.rs b/tests/ui/mir/issue-83499-input-output-iteration-ice.rs
index 0086d2ec18c..78e5c961802 100644
--- a/tests/ui/mir/issue-83499-input-output-iteration-ice.rs
+++ b/tests/ui/mir/issue-83499-input-output-iteration-ice.rs
@@ -5,6 +5,6 @@
 fn main() {}
 
 fn foo(_: Bar, ...) -> impl {}
-//~^ ERROR only foreign or `unsafe extern "C"` functions may be C-variadic
+//~^ ERROR only foreign, `unsafe extern "C"`, or `unsafe extern "C-unwind"` functions may have a C-variadic arg
 //~| ERROR cannot find type `Bar` in this scope
 //~| ERROR at least one trait must be specified
diff --git a/tests/ui/mir/issue-83499-input-output-iteration-ice.stderr b/tests/ui/mir/issue-83499-input-output-iteration-ice.stderr
index 4eb3adc8b4f..80a8a94aea4 100644
--- a/tests/ui/mir/issue-83499-input-output-iteration-ice.stderr
+++ b/tests/ui/mir/issue-83499-input-output-iteration-ice.stderr
@@ -1,4 +1,4 @@
-error: only foreign or `unsafe extern "C"` functions may be C-variadic
+error: only foreign, `unsafe extern "C"`, or `unsafe extern "C-unwind"` functions may have a C-variadic arg
   --> $DIR/issue-83499-input-output-iteration-ice.rs:7:16
    |
 LL | fn foo(_: Bar, ...) -> impl {}
diff --git a/tests/ui/mismatched_types/mismatched-types-issue-126222.fixed b/tests/ui/mismatched_types/mismatched-types-issue-126222.fixed
new file mode 100644
index 00000000000..30fd0028f19
--- /dev/null
+++ b/tests/ui/mismatched_types/mismatched-types-issue-126222.fixed
@@ -0,0 +1,34 @@
+//@ run-rustfix
+#![allow(unreachable_code, dead_code)]
+
+fn main() {
+    fn mismatch_types1() -> i32 {
+        match 1 {
+            x => return dbg!(x), //~ ERROR mismatched types
+        }
+        todo!()
+    }
+
+    fn mismatch_types2() -> i32 {
+        match 2 {
+            x => {
+                return dbg!(x) //~ ERROR mismatched types
+            }
+        }
+        todo!()
+    }
+
+    fn mismatch_types3() -> i32 {
+        match 1 {
+            _ => return dbg!(1) //~ ERROR mismatched types
+        }
+        todo!()
+    }
+
+    fn mismatch_types4() -> i32 {
+        match 1 {
+            _ => {return dbg!(1)} //~ ERROR mismatched types
+        }
+        todo!()
+    }
+}
diff --git a/tests/ui/mismatched_types/mismatched-types-issue-126222.rs b/tests/ui/mismatched_types/mismatched-types-issue-126222.rs
new file mode 100644
index 00000000000..59178702489
--- /dev/null
+++ b/tests/ui/mismatched_types/mismatched-types-issue-126222.rs
@@ -0,0 +1,34 @@
+//@ run-rustfix
+#![allow(unreachable_code, dead_code)]
+
+fn main() {
+    fn mismatch_types1() -> i32 {
+        match 1 {
+            x => dbg!(x), //~ ERROR mismatched types
+        }
+        todo!()
+    }
+
+    fn mismatch_types2() -> i32 {
+        match 2 {
+            x => {
+                dbg!(x) //~ ERROR mismatched types
+            }
+        }
+        todo!()
+    }
+
+    fn mismatch_types3() -> i32 {
+        match 1 {
+            _ => dbg!(1) //~ ERROR mismatched types
+        }
+        todo!()
+    }
+
+    fn mismatch_types4() -> i32 {
+        match 1 {
+            _ => {dbg!(1)} //~ ERROR mismatched types
+        }
+        todo!()
+    }
+}
diff --git a/tests/ui/mismatched_types/mismatched-types-issue-126222.stderr b/tests/ui/mismatched_types/mismatched-types-issue-126222.stderr
new file mode 100644
index 00000000000..2a8f9867abb
--- /dev/null
+++ b/tests/ui/mismatched_types/mismatched-types-issue-126222.stderr
@@ -0,0 +1,51 @@
+error[E0308]: mismatched types
+  --> $DIR/mismatched-types-issue-126222.rs:7:18
+   |
+LL |             x => dbg!(x),
+   |                  ^^^^^^^ expected `()`, found integer
+   |
+   = note: this error originates in the macro `dbg` (in Nightly builds, run with -Z macro-backtrace for more info)
+help: you might have meant to return this value
+   |
+LL |             x => return dbg!(x),
+   |                  ++++++
+
+error[E0308]: mismatched types
+  --> $DIR/mismatched-types-issue-126222.rs:15:17
+   |
+LL |                 dbg!(x)
+   |                 ^^^^^^^ expected `()`, found integer
+   |
+   = note: this error originates in the macro `dbg` (in Nightly builds, run with -Z macro-backtrace for more info)
+help: you might have meant to return this value
+   |
+LL |                 return dbg!(x)
+   |                 ++++++
+
+error[E0308]: mismatched types
+  --> $DIR/mismatched-types-issue-126222.rs:23:18
+   |
+LL |             _ => dbg!(1)
+   |                  ^^^^^^^ expected `()`, found integer
+   |
+   = note: this error originates in the macro `dbg` (in Nightly builds, run with -Z macro-backtrace for more info)
+help: you might have meant to return this value
+   |
+LL |             _ => return dbg!(1)
+   |                  ++++++
+
+error[E0308]: mismatched types
+  --> $DIR/mismatched-types-issue-126222.rs:30:19
+   |
+LL |             _ => {dbg!(1)}
+   |                   ^^^^^^^ expected `()`, found integer
+   |
+   = note: this error originates in the macro `dbg` (in Nightly builds, run with -Z macro-backtrace for more info)
+help: you might have meant to return this value
+   |
+LL |             _ => {return dbg!(1)}
+   |                   ++++++
+
+error: aborting due to 4 previous errors
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/moves/nested-loop-moved-value-wrong-continue.stderr b/tests/ui/moves/nested-loop-moved-value-wrong-continue.stderr
index 3247513d42c..cf863ff8af1 100644
--- a/tests/ui/moves/nested-loop-moved-value-wrong-continue.stderr
+++ b/tests/ui/moves/nested-loop-moved-value-wrong-continue.stderr
@@ -26,7 +26,7 @@ help: consider moving the expression out of the loop so it is only moved once
 LL ~     for foo in foos { let mut value = baz.push(foo);
 LL ~     for bar in &bars { if foo == *bar {
 LL |
- ...
+...
 LL |
 LL ~         value;
    |
@@ -69,7 +69,7 @@ help: consider moving the expression out of the loop so it is only moved once
 LL ~         let mut value = baz.push(foo);
 LL ~         for bar in &bars {
 LL |
- ...
+...
 LL |             if foo == *bar {
 LL ~                 value;
    |
diff --git a/tests/ui/object-safety/assoc_type_bounds_sized_unnecessary.stderr b/tests/ui/object-safety/assoc_type_bounds_sized_unnecessary.stderr
index f2bc8bd8400..7cd6175a5ad 100644
--- a/tests/ui/object-safety/assoc_type_bounds_sized_unnecessary.stderr
+++ b/tests/ui/object-safety/assoc_type_bounds_sized_unnecessary.stderr
@@ -4,7 +4,7 @@ warning: unnecessary associated type bound for not object safe associated type
 LL | fn foo(_: &dyn Foo<Bar = ()>) {}
    |                    ^^^^^^^^ help: remove this bound
    |
-   = note: this associated type has a `where Self: Sized` bound. Thus, while the associated type can be specified, it cannot be used in any way, because trait objects are not `Sized`.
+   = note: this associated type has a `where Self: Sized` bound, and while the associated type can be specified, it cannot be used because trait objects are never `Sized`
    = note: `#[warn(unused_associated_type_bounds)]` on by default
 
 warning: 1 warning emitted
diff --git a/tests/ui/or-patterns/bindings-runpass-2.rs b/tests/ui/or-patterns/bindings-runpass-2.rs
index 657d7f1ed18..a9ae9981084 100644
--- a/tests/ui/or-patterns/bindings-runpass-2.rs
+++ b/tests/ui/or-patterns/bindings-runpass-2.rs
@@ -26,5 +26,6 @@ fn main() {
     assert_eq!(or_at(Err(7)), 207);
     assert_eq!(or_at(Err(8)), 8);
     assert_eq!(or_at(Err(20)), 220);
+    assert_eq!(or_at(Err(34)), 134);
     assert_eq!(or_at(Err(50)), 500);
 }
diff --git a/tests/ui/or-patterns/inner-or-pat.or3.stderr b/tests/ui/or-patterns/inner-or-pat.or3.stderr
index 10ec7c202e4..5c522a97cce 100644
--- a/tests/ui/or-patterns/inner-or-pat.or3.stderr
+++ b/tests/ui/or-patterns/inner-or-pat.or3.stderr
@@ -1,5 +1,5 @@
 error[E0308]: mismatched types
-  --> $DIR/inner-or-pat.rs:38:54
+  --> $DIR/inner-or-pat.rs:36:54
    |
 LL |     match x {
    |           - this expression has type `&str`
diff --git a/tests/ui/or-patterns/inner-or-pat.or4.stderr b/tests/ui/or-patterns/inner-or-pat.or4.stderr
index 97800161d82..508520c8237 100644
--- a/tests/ui/or-patterns/inner-or-pat.or4.stderr
+++ b/tests/ui/or-patterns/inner-or-pat.or4.stderr
@@ -1,5 +1,5 @@
 error[E0408]: variable `x` is not bound in all patterns
-  --> $DIR/inner-or-pat.rs:53:37
+  --> $DIR/inner-or-pat.rs:51:37
    |
 LL |         (x @ "red" | (x @ "blue" |  "red")) => {
    |                       -             ^^^^^ pattern doesn't bind `x`
diff --git a/tests/ui/or-patterns/inner-or-pat.rs b/tests/ui/or-patterns/inner-or-pat.rs
index ceb0a8b3f79..4d136de0053 100644
--- a/tests/ui/or-patterns/inner-or-pat.rs
+++ b/tests/ui/or-patterns/inner-or-pat.rs
@@ -1,7 +1,5 @@
-//@ revisions: or1 or2 or3 or4 or5
+//@ revisions: or1 or3 or4
 //@ [or1] run-pass
-//@ [or2] run-pass
-//@ [or5] run-pass
 
 #![allow(unreachable_patterns)]
 #![allow(unused_variables)]
diff --git a/tests/ui/or-patterns/issue-70413-no-unreachable-pat-and-guard.rs b/tests/ui/or-patterns/issue-70413-no-unreachable-pat-and-guard.rs
index 7d62364a6ae..76dc298a5c8 100644
--- a/tests/ui/or-patterns/issue-70413-no-unreachable-pat-and-guard.rs
+++ b/tests/ui/or-patterns/issue-70413-no-unreachable-pat-and-guard.rs
@@ -1,21 +1,20 @@
-//@ check-pass
+//@ run-pass
 
 #![deny(unreachable_patterns)]
 
 fn main() {
-    match (3,42) {
-        (a,_) | (_,a) if a > 10 => {println!("{}", a)}
-        _ => ()
+    match (3, 42) {
+        (a, _) | (_, a) if a > 10 => {}
+        _ => unreachable!(),
     }
 
-    match Some((3,42)) {
-        Some((a, _)) | Some((_, a)) if a > 10 => {println!("{}", a)}
-        _ => ()
-
+    match Some((3, 42)) {
+        Some((a, _)) | Some((_, a)) if a > 10 => {}
+        _ => unreachable!(),
     }
 
-    match Some((3,42)) {
-        Some((a, _) | (_, a)) if a > 10 => {println!("{}", a)}
-        _ => ()
+    match Some((3, 42)) {
+        Some((a, _) | (_, a)) if a > 10 => {}
+        _ => unreachable!(),
     }
 }
diff --git a/tests/ui/or-patterns/search-via-bindings.rs b/tests/ui/or-patterns/search-via-bindings.rs
index a760112f1d4..42174bd7cef 100644
--- a/tests/ui/or-patterns/search-via-bindings.rs
+++ b/tests/ui/or-patterns/search-via-bindings.rs
@@ -42,6 +42,23 @@ fn search_old_style(target: (bool, bool, bool)) -> u32 {
     }
 }
 
+// Check that a dummy or-pattern also leads to running the guard multiple times.
+fn search_with_dummy(target: (bool, bool)) -> u32 {
+    let x = ((false, true), (false, true), ());
+    let mut guard_count = 0;
+    match x {
+        ((a, _) | (_, a), (b, _) | (_, b), _ | _)
+            if {
+                guard_count += 1;
+                (a, b) == target
+            } =>
+        {
+            guard_count
+        }
+        _ => unreachable!(),
+    }
+}
+
 fn main() {
     assert_eq!(search((false, false, false)), 1);
     assert_eq!(search((false, false, true)), 2);
@@ -60,4 +77,9 @@ fn main() {
     assert_eq!(search_old_style((true, false, true)), 6);
     assert_eq!(search_old_style((true, true, false)), 7);
     assert_eq!(search_old_style((true, true, true)), 8);
+
+    assert_eq!(search_with_dummy((false, false)), 1);
+    assert_eq!(search_with_dummy((false, true)), 3);
+    assert_eq!(search_with_dummy((true, false)), 5);
+    assert_eq!(search_with_dummy((true, true)), 7);
 }
diff --git a/tests/ui/or-patterns/simplification_subtleties.rs b/tests/ui/or-patterns/simplification_subtleties.rs
new file mode 100644
index 00000000000..a932bd531e6
--- /dev/null
+++ b/tests/ui/or-patterns/simplification_subtleties.rs
@@ -0,0 +1,11 @@
+//@ run-pass
+
+#[allow(unreachable_patterns)]
+fn main() {
+    // Test that we don't naively sort the two `2`s together and confuse the failure paths.
+    match (1, true) {
+        (1 | 2, false | false) => unreachable!(),
+        (2, _) => unreachable!(),
+        _ => {}
+    }
+}
diff --git a/tests/ui/panics/abort-on-panic.rs b/tests/ui/panics/abort-on-panic.rs
index 5736ecf8685..feccefb2537 100644
--- a/tests/ui/panics/abort-on-panic.rs
+++ b/tests/ui/panics/abort-on-panic.rs
@@ -4,7 +4,6 @@
 //@[next] compile-flags: -Znext-solver
 
 #![allow(unused_must_use)]
-#![feature(c_unwind)]
 #![feature(panic_always_abort)]
 // Since we mark some ABIs as "nounwind" to LLVM, we must make sure that
 // we never unwind through them.
diff --git a/tests/ui/panics/panic-in-ffi.rs b/tests/ui/panics/panic-in-ffi.rs
index 6f54acb3e04..88f45f9a871 100644
--- a/tests/ui/panics/panic-in-ffi.rs
+++ b/tests/ui/panics/panic-in-ffi.rs
@@ -7,7 +7,6 @@
 //@ normalize-stderr-test: "(core/src/panicking\.rs):[0-9]+:[0-9]+" -> "$1:$$LINE:$$COL"
 //@ needs-unwind
 //@ ignore-emscripten "RuntimeError" junk in output
-#![feature(c_unwind)]
 
 extern "C" fn panic_in_ffi() {
     panic!("Test");
diff --git a/tests/ui/panics/panic-in-ffi.run.stderr b/tests/ui/panics/panic-in-ffi.run.stderr
index a92a66c57fd..596355399c8 100644
--- a/tests/ui/panics/panic-in-ffi.run.stderr
+++ b/tests/ui/panics/panic-in-ffi.run.stderr
@@ -1,4 +1,4 @@
-thread 'main' panicked at $DIR/panic-in-ffi.rs:13:5:
+thread 'main' panicked at $DIR/panic-in-ffi.rs:12:5:
 Test
 note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
 thread 'main' panicked at library/core/src/panicking.rs:$LINE:$COL:
diff --git a/tests/ui/parser/attribute/attr-stmt-expr-attr-bad.rs b/tests/ui/parser/attribute/attr-stmt-expr-attr-bad.rs
index d1950087c4c..26761a1d254 100644
--- a/tests/ui/parser/attribute/attr-stmt-expr-attr-bad.rs
+++ b/tests/ui/parser/attribute/attr-stmt-expr-attr-bad.rs
@@ -28,9 +28,9 @@ fn main() {}
 #[cfg(FALSE)] fn e() { let _ = move || #![attr] {foo}; }
 //~^ ERROR an inner attribute is not permitted in this context
 #[cfg(FALSE)] fn e() { let _ = #[attr] ..#[attr] 0; }
-//~^ ERROR expected expression, found `..`
+//~^ ERROR attributes are not allowed on range expressions starting with `..`
 #[cfg(FALSE)] fn e() { let _ = #[attr] ..; }
-//~^ ERROR expected expression, found `..`
+//~^ ERROR attributes are not allowed on range expressions starting with `..`
 #[cfg(FALSE)] fn e() { let _ = #[attr] &#![attr] 0; }
 //~^ ERROR an inner attribute is not permitted in this context
 #[cfg(FALSE)] fn e() { let _ = #[attr] &mut #![attr] 0; }
diff --git a/tests/ui/parser/attribute/attr-stmt-expr-attr-bad.stderr b/tests/ui/parser/attribute/attr-stmt-expr-attr-bad.stderr
index e46c591080d..3593c5182ce 100644
--- a/tests/ui/parser/attribute/attr-stmt-expr-attr-bad.stderr
+++ b/tests/ui/parser/attribute/attr-stmt-expr-attr-bad.stderr
@@ -119,17 +119,17 @@ LL | #[cfg(FALSE)] fn e() { let _ = move || #![attr] {foo}; }
    = note: inner attributes, like `#![no_std]`, annotate the item enclosing them, and are usually found at the beginning of source files
    = note: outer attributes, like `#[test]`, annotate the item following them
 
-error: expected expression, found `..`
+error: attributes are not allowed on range expressions starting with `..`
   --> $DIR/attr-stmt-expr-attr-bad.rs:30:40
    |
 LL | #[cfg(FALSE)] fn e() { let _ = #[attr] ..#[attr] 0; }
-   |                                        ^^ expected expression
+   |                                        ^^
 
-error: expected expression, found `..`
+error: attributes are not allowed on range expressions starting with `..`
   --> $DIR/attr-stmt-expr-attr-bad.rs:32:40
    |
 LL | #[cfg(FALSE)] fn e() { let _ = #[attr] ..; }
-   |                                        ^^ expected expression
+   |                                        ^^
 
 error: an inner attribute is not permitted in this context
   --> $DIR/attr-stmt-expr-attr-bad.rs:34:41
diff --git a/tests/ui/parser/diff-markers/enum-2.stderr b/tests/ui/parser/diff-markers/enum-2.stderr
index 20e551c2f95..b76cf5d5a01 100644
--- a/tests/ui/parser/diff-markers/enum-2.stderr
+++ b/tests/ui/parser/diff-markers/enum-2.stderr
@@ -2,20 +2,25 @@ error: encountered diff marker
   --> $DIR/enum-2.rs:3:1
    |
 LL | <<<<<<< HEAD
-   | ^^^^^^^ after this is the code before the merge
+   | ^^^^^^^ between this marker and `|||||||` is the code that we're merging into
 LL |         x: u8,
 LL | |||||||
-   | -------
+   | ------- between this marker and `=======` is the base code (what the two refs diverged from)
 LL |         z: (),
 LL | =======
-   | -------
+   | ------- between this marker and `>>>>>>>` is the incoming code
 LL |         y: i8,
 LL | >>>>>>> branch
-   | ^^^^^^^ above this are the incoming code changes
+   | ^^^^^^^ this marker concludes the conflict region
    |
-   = help: if you're having merge conflicts after pulling new code, the top section is the code you already had and the bottom section is the remote code
-   = help: if you're in the middle of a rebase, the top section is the code being rebased onto and the bottom section is the code coming from the current commit being rebased
-   = note: for an explanation on these markers from the `git` documentation, visit <https://git-scm.com/book/en/v2/Git-Tools-Advanced-Merging#_checking_out_conflicts>
+   = note: conflict markers indicate that a merge was started but could not be completed due to merge conflicts
+           to resolve a conflict, keep only the code you want and then delete the lines containing conflict markers
+   = help: if you're having merge conflicts after pulling new code:
+           the top section is the code you already had and the bottom section is the remote code
+           if you're in the middle of a rebase:
+           the top section is the code being rebased onto and the bottom section is the code coming from the current commit being rebased
+   = note: for an explanation on these markers from the `git` documentation:
+           visit <https://git-scm.com/book/en/v2/Git-Tools-Advanced-Merging#_checking_out_conflicts>
 
 error: aborting due to 1 previous error
 
diff --git a/tests/ui/parser/diff-markers/enum.stderr b/tests/ui/parser/diff-markers/enum.stderr
index be94331dce5..0ce473bc702 100644
--- a/tests/ui/parser/diff-markers/enum.stderr
+++ b/tests/ui/parser/diff-markers/enum.stderr
@@ -2,17 +2,22 @@ error: encountered diff marker
   --> $DIR/enum.rs:2:1
    |
 LL | <<<<<<< HEAD
-   | ^^^^^^^ after this is the code before the merge
+   | ^^^^^^^ between this marker and `=======` is the code that we're merging into
 LL |     Foo(u8),
 LL | =======
-   | -------
+   | ------- between this marker and `>>>>>>>` is the incoming code
 LL |     Bar(i8),
 LL | >>>>>>> branch
-   | ^^^^^^^ above this are the incoming code changes
+   | ^^^^^^^ this marker concludes the conflict region
    |
-   = help: if you're having merge conflicts after pulling new code, the top section is the code you already had and the bottom section is the remote code
-   = help: if you're in the middle of a rebase, the top section is the code being rebased onto and the bottom section is the code coming from the current commit being rebased
-   = note: for an explanation on these markers from the `git` documentation, visit <https://git-scm.com/book/en/v2/Git-Tools-Advanced-Merging#_checking_out_conflicts>
+   = note: conflict markers indicate that a merge was started but could not be completed due to merge conflicts
+           to resolve a conflict, keep only the code you want and then delete the lines containing conflict markers
+   = help: if you're having merge conflicts after pulling new code:
+           the top section is the code you already had and the bottom section is the remote code
+           if you're in the middle of a rebase:
+           the top section is the code being rebased onto and the bottom section is the code coming from the current commit being rebased
+   = note: for an explanation on these markers from the `git` documentation:
+           visit <https://git-scm.com/book/en/v2/Git-Tools-Advanced-Merging#_checking_out_conflicts>
 
 error: aborting due to 1 previous error
 
diff --git a/tests/ui/parser/diff-markers/fn-arg.stderr b/tests/ui/parser/diff-markers/fn-arg.stderr
index aabcb826c12..24521ffa626 100644
--- a/tests/ui/parser/diff-markers/fn-arg.stderr
+++ b/tests/ui/parser/diff-markers/fn-arg.stderr
@@ -2,17 +2,22 @@ error: encountered diff marker
   --> $DIR/fn-arg.rs:3:1
    |
 LL | <<<<<<< HEAD
-   | ^^^^^^^ after this is the code before the merge
+   | ^^^^^^^ between this marker and `=======` is the code that we're merging into
 LL |         x: u8,
 LL | =======
-   | -------
+   | ------- between this marker and `>>>>>>>` is the incoming code
 LL |         x: i8,
 LL | >>>>>>> branch
-   | ^^^^^^^ above this are the incoming code changes
+   | ^^^^^^^ this marker concludes the conflict region
    |
-   = help: if you're having merge conflicts after pulling new code, the top section is the code you already had and the bottom section is the remote code
-   = help: if you're in the middle of a rebase, the top section is the code being rebased onto and the bottom section is the code coming from the current commit being rebased
-   = note: for an explanation on these markers from the `git` documentation, visit <https://git-scm.com/book/en/v2/Git-Tools-Advanced-Merging#_checking_out_conflicts>
+   = note: conflict markers indicate that a merge was started but could not be completed due to merge conflicts
+           to resolve a conflict, keep only the code you want and then delete the lines containing conflict markers
+   = help: if you're having merge conflicts after pulling new code:
+           the top section is the code you already had and the bottom section is the remote code
+           if you're in the middle of a rebase:
+           the top section is the code being rebased onto and the bottom section is the code coming from the current commit being rebased
+   = note: for an explanation on these markers from the `git` documentation:
+           visit <https://git-scm.com/book/en/v2/Git-Tools-Advanced-Merging#_checking_out_conflicts>
 
 error: aborting due to 1 previous error
 
diff --git a/tests/ui/parser/diff-markers/item-with-attr.stderr b/tests/ui/parser/diff-markers/item-with-attr.stderr
index eefb2792e90..432673cd551 100644
--- a/tests/ui/parser/diff-markers/item-with-attr.stderr
+++ b/tests/ui/parser/diff-markers/item-with-attr.stderr
@@ -2,17 +2,22 @@ error: encountered diff marker
   --> $DIR/item-with-attr.rs:2:1
    |
 LL | <<<<<<< HEAD
-   | ^^^^^^^ after this is the code before the merge
+   | ^^^^^^^ between this marker and `=======` is the code that we're merging into
 LL | fn foo() {}
 LL | =======
-   | -------
+   | ------- between this marker and `>>>>>>>` is the incoming code
 LL | fn bar() {}
 LL | >>>>>>> branch
-   | ^^^^^^^ above this are the incoming code changes
+   | ^^^^^^^ this marker concludes the conflict region
    |
-   = help: if you're having merge conflicts after pulling new code, the top section is the code you already had and the bottom section is the remote code
-   = help: if you're in the middle of a rebase, the top section is the code being rebased onto and the bottom section is the code coming from the current commit being rebased
-   = note: for an explanation on these markers from the `git` documentation, visit <https://git-scm.com/book/en/v2/Git-Tools-Advanced-Merging#_checking_out_conflicts>
+   = note: conflict markers indicate that a merge was started but could not be completed due to merge conflicts
+           to resolve a conflict, keep only the code you want and then delete the lines containing conflict markers
+   = help: if you're having merge conflicts after pulling new code:
+           the top section is the code you already had and the bottom section is the remote code
+           if you're in the middle of a rebase:
+           the top section is the code being rebased onto and the bottom section is the code coming from the current commit being rebased
+   = note: for an explanation on these markers from the `git` documentation:
+           visit <https://git-scm.com/book/en/v2/Git-Tools-Advanced-Merging#_checking_out_conflicts>
 
 error: aborting due to 1 previous error
 
diff --git a/tests/ui/parser/diff-markers/item.stderr b/tests/ui/parser/diff-markers/item.stderr
index a3092ebfcfd..180c74e5d69 100644
--- a/tests/ui/parser/diff-markers/item.stderr
+++ b/tests/ui/parser/diff-markers/item.stderr
@@ -2,17 +2,22 @@ error: encountered diff marker
   --> $DIR/item.rs:1:1
    |
 LL | <<<<<<< HEAD
-   | ^^^^^^^ after this is the code before the merge
+   | ^^^^^^^ between this marker and `=======` is the code that we're merging into
 LL | fn foo() {}
 LL | =======
-   | -------
+   | ------- between this marker and `>>>>>>>` is the incoming code
 LL | fn bar() {}
 LL | >>>>>>> branch
-   | ^^^^^^^ above this are the incoming code changes
+   | ^^^^^^^ this marker concludes the conflict region
    |
-   = help: if you're having merge conflicts after pulling new code, the top section is the code you already had and the bottom section is the remote code
-   = help: if you're in the middle of a rebase, the top section is the code being rebased onto and the bottom section is the code coming from the current commit being rebased
-   = note: for an explanation on these markers from the `git` documentation, visit <https://git-scm.com/book/en/v2/Git-Tools-Advanced-Merging#_checking_out_conflicts>
+   = note: conflict markers indicate that a merge was started but could not be completed due to merge conflicts
+           to resolve a conflict, keep only the code you want and then delete the lines containing conflict markers
+   = help: if you're having merge conflicts after pulling new code:
+           the top section is the code you already had and the bottom section is the remote code
+           if you're in the middle of a rebase:
+           the top section is the code being rebased onto and the bottom section is the code coming from the current commit being rebased
+   = note: for an explanation on these markers from the `git` documentation:
+           visit <https://git-scm.com/book/en/v2/Git-Tools-Advanced-Merging#_checking_out_conflicts>
 
 error: aborting due to 1 previous error
 
diff --git a/tests/ui/parser/diff-markers/statement.stderr b/tests/ui/parser/diff-markers/statement.stderr
index c6c6cae8765..6dccce4a48e 100644
--- a/tests/ui/parser/diff-markers/statement.stderr
+++ b/tests/ui/parser/diff-markers/statement.stderr
@@ -2,17 +2,22 @@ error: encountered diff marker
   --> $DIR/statement.rs:10:1
    |
 LL | <<<<<<< HEAD
-   | ^^^^^^^ after this is the code before the merge
+   | ^^^^^^^ between this marker and `=======` is the code that we're merging into
 LL |     S::foo();
 LL | =======
-   | -------
+   | ------- between this marker and `>>>>>>>` is the incoming code
 LL |     S::bar();
 LL | >>>>>>> branch
-   | ^^^^^^^ above this are the incoming code changes
+   | ^^^^^^^ this marker concludes the conflict region
    |
-   = help: if you're having merge conflicts after pulling new code, the top section is the code you already had and the bottom section is the remote code
-   = help: if you're in the middle of a rebase, the top section is the code being rebased onto and the bottom section is the code coming from the current commit being rebased
-   = note: for an explanation on these markers from the `git` documentation, visit <https://git-scm.com/book/en/v2/Git-Tools-Advanced-Merging#_checking_out_conflicts>
+   = note: conflict markers indicate that a merge was started but could not be completed due to merge conflicts
+           to resolve a conflict, keep only the code you want and then delete the lines containing conflict markers
+   = help: if you're having merge conflicts after pulling new code:
+           the top section is the code you already had and the bottom section is the remote code
+           if you're in the middle of a rebase:
+           the top section is the code being rebased onto and the bottom section is the code coming from the current commit being rebased
+   = note: for an explanation on these markers from the `git` documentation:
+           visit <https://git-scm.com/book/en/v2/Git-Tools-Advanced-Merging#_checking_out_conflicts>
 
 error: aborting due to 1 previous error
 
diff --git a/tests/ui/parser/diff-markers/struct-expr.stderr b/tests/ui/parser/diff-markers/struct-expr.stderr
index bdea8c841c6..3733cdd3496 100644
--- a/tests/ui/parser/diff-markers/struct-expr.stderr
+++ b/tests/ui/parser/diff-markers/struct-expr.stderr
@@ -2,17 +2,22 @@ error: encountered diff marker
   --> $DIR/struct-expr.rs:6:1
    |
 LL | <<<<<<< HEAD
-   | ^^^^^^^ after this is the code before the merge
+   | ^^^^^^^ between this marker and `=======` is the code that we're merging into
 LL |         x: 42,
 LL | =======
-   | -------
+   | ------- between this marker and `>>>>>>>` is the incoming code
 LL |         x: 0,
 LL | >>>>>>> branch
-   | ^^^^^^^ above this are the incoming code changes
+   | ^^^^^^^ this marker concludes the conflict region
    |
-   = help: if you're having merge conflicts after pulling new code, the top section is the code you already had and the bottom section is the remote code
-   = help: if you're in the middle of a rebase, the top section is the code being rebased onto and the bottom section is the code coming from the current commit being rebased
-   = note: for an explanation on these markers from the `git` documentation, visit <https://git-scm.com/book/en/v2/Git-Tools-Advanced-Merging#_checking_out_conflicts>
+   = note: conflict markers indicate that a merge was started but could not be completed due to merge conflicts
+           to resolve a conflict, keep only the code you want and then delete the lines containing conflict markers
+   = help: if you're having merge conflicts after pulling new code:
+           the top section is the code you already had and the bottom section is the remote code
+           if you're in the middle of a rebase:
+           the top section is the code being rebased onto and the bottom section is the code coming from the current commit being rebased
+   = note: for an explanation on these markers from the `git` documentation:
+           visit <https://git-scm.com/book/en/v2/Git-Tools-Advanced-Merging#_checking_out_conflicts>
 
 error: aborting due to 1 previous error
 
diff --git a/tests/ui/parser/diff-markers/struct.stderr b/tests/ui/parser/diff-markers/struct.stderr
index 749941290cb..44f8346613e 100644
--- a/tests/ui/parser/diff-markers/struct.stderr
+++ b/tests/ui/parser/diff-markers/struct.stderr
@@ -2,17 +2,22 @@ error: encountered diff marker
   --> $DIR/struct.rs:2:1
    |
 LL | <<<<<<< HEAD
-   | ^^^^^^^ after this is the code before the merge
+   | ^^^^^^^ between this marker and `=======` is the code that we're merging into
 LL |     x: u8,
 LL | =======
-   | -------
+   | ------- between this marker and `>>>>>>>` is the incoming code
 LL |     x: i8,
 LL | >>>>>>> branch
-   | ^^^^^^^ above this are the incoming code changes
+   | ^^^^^^^ this marker concludes the conflict region
    |
-   = help: if you're having merge conflicts after pulling new code, the top section is the code you already had and the bottom section is the remote code
-   = help: if you're in the middle of a rebase, the top section is the code being rebased onto and the bottom section is the code coming from the current commit being rebased
-   = note: for an explanation on these markers from the `git` documentation, visit <https://git-scm.com/book/en/v2/Git-Tools-Advanced-Merging#_checking_out_conflicts>
+   = note: conflict markers indicate that a merge was started but could not be completed due to merge conflicts
+           to resolve a conflict, keep only the code you want and then delete the lines containing conflict markers
+   = help: if you're having merge conflicts after pulling new code:
+           the top section is the code you already had and the bottom section is the remote code
+           if you're in the middle of a rebase:
+           the top section is the code being rebased onto and the bottom section is the code coming from the current commit being rebased
+   = note: for an explanation on these markers from the `git` documentation:
+           visit <https://git-scm.com/book/en/v2/Git-Tools-Advanced-Merging#_checking_out_conflicts>
 
 error: aborting due to 1 previous error
 
diff --git a/tests/ui/parser/diff-markers/trait-item.stderr b/tests/ui/parser/diff-markers/trait-item.stderr
index f01bbe8ba03..4361542c774 100644
--- a/tests/ui/parser/diff-markers/trait-item.stderr
+++ b/tests/ui/parser/diff-markers/trait-item.stderr
@@ -2,17 +2,22 @@ error: encountered diff marker
   --> $DIR/trait-item.rs:2:1
    |
 LL | <<<<<<< HEAD
-   | ^^^^^^^ after this is the code before the merge
+   | ^^^^^^^ between this marker and `=======` is the code that we're merging into
 LL |     fn foo() {}
 LL | =======
-   | -------
+   | ------- between this marker and `>>>>>>>` is the incoming code
 LL |     fn bar() {}
 LL | >>>>>>> branch
-   | ^^^^^^^ above this are the incoming code changes
+   | ^^^^^^^ this marker concludes the conflict region
    |
-   = help: if you're having merge conflicts after pulling new code, the top section is the code you already had and the bottom section is the remote code
-   = help: if you're in the middle of a rebase, the top section is the code being rebased onto and the bottom section is the code coming from the current commit being rebased
-   = note: for an explanation on these markers from the `git` documentation, visit <https://git-scm.com/book/en/v2/Git-Tools-Advanced-Merging#_checking_out_conflicts>
+   = note: conflict markers indicate that a merge was started but could not be completed due to merge conflicts
+           to resolve a conflict, keep only the code you want and then delete the lines containing conflict markers
+   = help: if you're having merge conflicts after pulling new code:
+           the top section is the code you already had and the bottom section is the remote code
+           if you're in the middle of a rebase:
+           the top section is the code being rebased onto and the bottom section is the code coming from the current commit being rebased
+   = note: for an explanation on these markers from the `git` documentation:
+           visit <https://git-scm.com/book/en/v2/Git-Tools-Advanced-Merging#_checking_out_conflicts>
 
 error: aborting due to 1 previous error
 
diff --git a/tests/ui/parser/diff-markers/tuple-struct.stderr b/tests/ui/parser/diff-markers/tuple-struct.stderr
index 8dae123c96d..7fda24ba485 100644
--- a/tests/ui/parser/diff-markers/tuple-struct.stderr
+++ b/tests/ui/parser/diff-markers/tuple-struct.stderr
@@ -2,17 +2,22 @@ error: encountered diff marker
   --> $DIR/tuple-struct.rs:2:1
    |
 LL | <<<<<<< HEAD
-   | ^^^^^^^ after this is the code before the merge
+   | ^^^^^^^ between this marker and `=======` is the code that we're merging into
 LL |     u8,
 LL | =======
-   | -------
+   | ------- between this marker and `>>>>>>>` is the incoming code
 LL |     i8,
 LL | >>>>>>> branch
-   | ^^^^^^^ above this are the incoming code changes
+   | ^^^^^^^ this marker concludes the conflict region
    |
-   = help: if you're having merge conflicts after pulling new code, the top section is the code you already had and the bottom section is the remote code
-   = help: if you're in the middle of a rebase, the top section is the code being rebased onto and the bottom section is the code coming from the current commit being rebased
-   = note: for an explanation on these markers from the `git` documentation, visit <https://git-scm.com/book/en/v2/Git-Tools-Advanced-Merging#_checking_out_conflicts>
+   = note: conflict markers indicate that a merge was started but could not be completed due to merge conflicts
+           to resolve a conflict, keep only the code you want and then delete the lines containing conflict markers
+   = help: if you're having merge conflicts after pulling new code:
+           the top section is the code you already had and the bottom section is the remote code
+           if you're in the middle of a rebase:
+           the top section is the code being rebased onto and the bottom section is the code coming from the current commit being rebased
+   = note: for an explanation on these markers from the `git` documentation:
+           visit <https://git-scm.com/book/en/v2/Git-Tools-Advanced-Merging#_checking_out_conflicts>
 
 error: aborting due to 1 previous error
 
diff --git a/tests/ui/parser/diff-markers/unclosed-delims-in-macro.stderr b/tests/ui/parser/diff-markers/unclosed-delims-in-macro.stderr
index 6995b8e6f23..927821ddfae 100644
--- a/tests/ui/parser/diff-markers/unclosed-delims-in-macro.stderr
+++ b/tests/ui/parser/diff-markers/unclosed-delims-in-macro.stderr
@@ -2,17 +2,22 @@ error: encountered diff marker
   --> $DIR/unclosed-delims-in-macro.rs:2:1
    |
 LL | <<<<<<< HEAD
-   | ^^^^^^^ after this is the code before the merge
+   | ^^^^^^^ between this marker and `=======` is the code that we're merging into
 ...
 LL | =======
-   | -------
+   | ------- between this marker and `>>>>>>>` is the incoming code
 LL |     () { //
 LL | >>>>>>> 7a4f13c blah blah blah
-   | ^^^^^^^ above this are the incoming code changes
+   | ^^^^^^^ this marker concludes the conflict region
    |
-   = help: if you're having merge conflicts after pulling new code, the top section is the code you already had and the bottom section is the remote code
-   = help: if you're in the middle of a rebase, the top section is the code being rebased onto and the bottom section is the code coming from the current commit being rebased
-   = note: for an explanation on these markers from the `git` documentation, visit <https://git-scm.com/book/en/v2/Git-Tools-Advanced-Merging#_checking_out_conflicts>
+   = note: conflict markers indicate that a merge was started but could not be completed due to merge conflicts
+           to resolve a conflict, keep only the code you want and then delete the lines containing conflict markers
+   = help: if you're having merge conflicts after pulling new code:
+           the top section is the code you already had and the bottom section is the remote code
+           if you're in the middle of a rebase:
+           the top section is the code being rebased onto and the bottom section is the code coming from the current commit being rebased
+   = note: for an explanation on these markers from the `git` documentation:
+           visit <https://git-scm.com/book/en/v2/Git-Tools-Advanced-Merging#_checking_out_conflicts>
 
 error: aborting due to 1 previous error
 
diff --git a/tests/ui/parser/diff-markers/unclosed-delims.rs b/tests/ui/parser/diff-markers/unclosed-delims.rs
index 653a605c28c..7d400c3827b 100644
--- a/tests/ui/parser/diff-markers/unclosed-delims.rs
+++ b/tests/ui/parser/diff-markers/unclosed-delims.rs
@@ -2,13 +2,17 @@ mod tests {
     #[test]
 <<<<<<< HEAD
 //~^ ERROR encountered diff marker
-//~| NOTE after this is the code before the merge
+//~| NOTE between this marker and `=======`
+
+//~| NOTE conflict markers indicate that
+//~| HELP if you're having merge conflicts
 //~| NOTE for an explanation on these markers
+
     fn test1() {
 =======
-//~^ NOTE
+//~^ NOTE between this marker and `>>>>>>>`
     fn test2() {
 >>>>>>> 7a4f13c blah blah blah
-//~^ NOTE above this are the incoming code changes
+//~^ NOTE this marker concludes the conflict region
     }
 }
diff --git a/tests/ui/parser/diff-markers/unclosed-delims.stderr b/tests/ui/parser/diff-markers/unclosed-delims.stderr
index d4636150e66..1eab96442b4 100644
--- a/tests/ui/parser/diff-markers/unclosed-delims.stderr
+++ b/tests/ui/parser/diff-markers/unclosed-delims.stderr
@@ -2,17 +2,22 @@ error: encountered diff marker
   --> $DIR/unclosed-delims.rs:3:1
    |
 LL | <<<<<<< HEAD
-   | ^^^^^^^ after this is the code before the merge
+   | ^^^^^^^ between this marker and `=======` is the code that we're merging into
 ...
 LL | =======
-   | -------
+   | ------- between this marker and `>>>>>>>` is the incoming code
 ...
 LL | >>>>>>> 7a4f13c blah blah blah
-   | ^^^^^^^ above this are the incoming code changes
+   | ^^^^^^^ this marker concludes the conflict region
    |
-   = help: if you're having merge conflicts after pulling new code, the top section is the code you already had and the bottom section is the remote code
-   = help: if you're in the middle of a rebase, the top section is the code being rebased onto and the bottom section is the code coming from the current commit being rebased
-   = note: for an explanation on these markers from the `git` documentation, visit <https://git-scm.com/book/en/v2/Git-Tools-Advanced-Merging#_checking_out_conflicts>
+   = note: conflict markers indicate that a merge was started but could not be completed due to merge conflicts
+           to resolve a conflict, keep only the code you want and then delete the lines containing conflict markers
+   = help: if you're having merge conflicts after pulling new code:
+           the top section is the code you already had and the bottom section is the remote code
+           if you're in the middle of a rebase:
+           the top section is the code being rebased onto and the bottom section is the code coming from the current commit being rebased
+   = note: for an explanation on these markers from the `git` documentation:
+           visit <https://git-scm.com/book/en/v2/Git-Tools-Advanced-Merging#_checking_out_conflicts>
 
 error: aborting due to 1 previous error
 
diff --git a/tests/ui/parser/diff-markers/use-statement.stderr b/tests/ui/parser/diff-markers/use-statement.stderr
index 6d376166a7f..3eac7bebb5a 100644
--- a/tests/ui/parser/diff-markers/use-statement.stderr
+++ b/tests/ui/parser/diff-markers/use-statement.stderr
@@ -2,17 +2,22 @@ error: encountered diff marker
   --> $DIR/use-statement.rs:2:1
    |
 LL | <<<<<<< HEAD
-   | ^^^^^^^ after this is the code before the merge
+   | ^^^^^^^ between this marker and `=======` is the code that we're merging into
 LL |     bar,
 LL | =======
-   | -------
+   | ------- between this marker and `>>>>>>>` is the incoming code
 LL |     baz,
 LL | >>>>>>> branch
-   | ^^^^^^^ above this are the incoming code changes
+   | ^^^^^^^ this marker concludes the conflict region
    |
-   = help: if you're having merge conflicts after pulling new code, the top section is the code you already had and the bottom section is the remote code
-   = help: if you're in the middle of a rebase, the top section is the code being rebased onto and the bottom section is the code coming from the current commit being rebased
-   = note: for an explanation on these markers from the `git` documentation, visit <https://git-scm.com/book/en/v2/Git-Tools-Advanced-Merging#_checking_out_conflicts>
+   = note: conflict markers indicate that a merge was started but could not be completed due to merge conflicts
+           to resolve a conflict, keep only the code you want and then delete the lines containing conflict markers
+   = help: if you're having merge conflicts after pulling new code:
+           the top section is the code you already had and the bottom section is the remote code
+           if you're in the middle of a rebase:
+           the top section is the code being rebased onto and the bottom section is the code coming from the current commit being rebased
+   = note: for an explanation on these markers from the `git` documentation:
+           visit <https://git-scm.com/book/en/v2/Git-Tools-Advanced-Merging#_checking_out_conflicts>
 
 error: aborting due to 1 previous error
 
diff --git a/tests/ui/parser/fn-header-semantic-fail.stderr b/tests/ui/parser/fn-header-semantic-fail.stderr
index abaa6527b0a..29404f1793b 100644
--- a/tests/ui/parser/fn-header-semantic-fail.stderr
+++ b/tests/ui/parser/fn-header-semantic-fail.stderr
@@ -105,15 +105,6 @@ LL |     extern "C" {
 LL |         extern "C" fn fe4();
    |         ^^^^^^^^^^ help: remove this qualifier
 
-error: items in unadorned `extern` blocks cannot have safety qualifiers
-  --> $DIR/fn-header-semantic-fail.rs:50:9
-   |
-LL |     extern "C" {
-   |     ---------- help: add unsafe to this `extern` block
-...
-LL |         const async unsafe extern "C" fn fe5();
-   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
 error: functions in `extern` blocks cannot have qualifiers
   --> $DIR/fn-header-semantic-fail.rs:50:15
    |
@@ -141,6 +132,15 @@ LL |     extern "C" {
 LL |         const async unsafe extern "C" fn fe5();
    |                            ^^^^^^^^^^ help: remove this qualifier
 
+error: items in unadorned `extern` blocks cannot have safety qualifiers
+  --> $DIR/fn-header-semantic-fail.rs:50:9
+   |
+LL |     extern "C" {
+   |     ---------- help: add unsafe to this `extern` block
+...
+LL |         const async unsafe extern "C" fn fe5();
+   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
 error: functions cannot be both `const` and `async`
   --> $DIR/fn-header-semantic-fail.rs:50:9
    |
diff --git a/tests/ui/parser/impls-nested-within-fns-semantic-1.rs b/tests/ui/parser/impls-nested-within-fns-semantic-1.rs
index 43530e41a66..0e95fc757f3 100644
--- a/tests/ui/parser/impls-nested-within-fns-semantic-1.rs
+++ b/tests/ui/parser/impls-nested-within-fns-semantic-1.rs
@@ -1,7 +1,7 @@
 // Regression test for part of issue #119924.
 //@ check-pass
 
-#![feature(const_trait_impl, effects)]
+#![feature(const_trait_impl, effects)] //~ WARN the feature `effects` is incomplete
 
 #[const_trait]
 trait Trait {
diff --git a/tests/ui/parser/impls-nested-within-fns-semantic-1.stderr b/tests/ui/parser/impls-nested-within-fns-semantic-1.stderr
new file mode 100644
index 00000000000..6670b3772db
--- /dev/null
+++ b/tests/ui/parser/impls-nested-within-fns-semantic-1.stderr
@@ -0,0 +1,11 @@
+warning: the feature `effects` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/impls-nested-within-fns-semantic-1.rs:4:30
+   |
+LL | #![feature(const_trait_impl, effects)]
+   |                              ^^^^^^^
+   |
+   = note: see issue #102090 <https://github.com/rust-lang/rust/issues/102090> for more information
+   = note: `#[warn(incomplete_features)]` on by default
+
+warning: 1 warning emitted
+
diff --git a/tests/ui/parser/issues/issue-8537.stderr b/tests/ui/parser/issues/issue-8537.stderr
index 0d636bd28a5..b685464d8d4 100644
--- a/tests/ui/parser/issues/issue-8537.stderr
+++ b/tests/ui/parser/issues/issue-8537.stderr
@@ -4,7 +4,7 @@ error[E0703]: invalid ABI: found `invalid-ab_isize`
 LL |   "invalid-ab_isize"
    |   ^^^^^^^^^^^^^^^^^^ invalid ABI
    |
-   = note: invoke `rustc --print=calling-conventions` for a full list of supported calling conventions.
+   = note: invoke `rustc --print=calling-conventions` for a full list of supported calling conventions
 
 error: aborting due to 1 previous error
 
diff --git a/tests/ui/parser/no-const-fn-in-extern-block.stderr b/tests/ui/parser/no-const-fn-in-extern-block.stderr
index 892024ce893..f575acc839d 100644
--- a/tests/ui/parser/no-const-fn-in-extern-block.stderr
+++ b/tests/ui/parser/no-const-fn-in-extern-block.stderr
@@ -6,23 +6,23 @@ LL | extern "C" {
 LL |     const fn foo();
    |     ^^^^^ help: remove this qualifier
 
-error: items in unadorned `extern` blocks cannot have safety qualifiers
+error: functions in `extern` blocks cannot have qualifiers
   --> $DIR/no-const-fn-in-extern-block.rs:4:5
    |
 LL | extern "C" {
-   | ---------- help: add unsafe to this `extern` block
+   | ---------- in this `extern` block
 ...
 LL |     const unsafe fn bar();
-   |     ^^^^^^^^^^^^^^^^^^^^^^
+   |     ^^^^^ help: remove this qualifier
 
-error: functions in `extern` blocks cannot have qualifiers
+error: items in unadorned `extern` blocks cannot have safety qualifiers
   --> $DIR/no-const-fn-in-extern-block.rs:4:5
    |
 LL | extern "C" {
-   | ---------- in this `extern` block
+   | ---------- help: add unsafe to this `extern` block
 ...
 LL |     const unsafe fn bar();
-   |     ^^^^^ help: remove this qualifier
+   |     ^^^^^^^^^^^^^^^^^^^^^^
 
 error: aborting due to 3 previous errors
 
diff --git a/tests/ui/parser/recover/recover-labeled-non-block-expr.stderr b/tests/ui/parser/recover/recover-labeled-non-block-expr.stderr
index d66ce695090..c8107997c2e 100644
--- a/tests/ui/parser/recover/recover-labeled-non-block-expr.stderr
+++ b/tests/ui/parser/recover/recover-labeled-non-block-expr.stderr
@@ -54,7 +54,7 @@ help: consider enclosing expression in a block
    |
 LL ~     let _i = 'label: { match x {
 LL |         0 => 42,
- ...
+...
 LL |         _ => 1,
 LL ~     } };
    |
diff --git a/tests/ui/parser/variadic-ffi-semantic-restrictions.rs b/tests/ui/parser/variadic-ffi-semantic-restrictions.rs
index 11126dbc65d..1cd6d13d56b 100644
--- a/tests/ui/parser/variadic-ffi-semantic-restrictions.rs
+++ b/tests/ui/parser/variadic-ffi-semantic-restrictions.rs
@@ -4,29 +4,29 @@
 fn main() {}
 
 fn f1_1(x: isize, ...) {}
-//~^ ERROR only foreign or `unsafe extern "C"` functions may be C-variadic
+//~^ ERROR only foreign, `unsafe extern "C"`, or `unsafe extern "C-unwind"` functions may have a C-variadic arg
 
 fn f1_2(...) {}
-//~^ ERROR only foreign or `unsafe extern "C"` functions may be C-variadic
+//~^ ERROR only foreign, `unsafe extern "C"`, or `unsafe extern "C-unwind"` functions may have a C-variadic arg
 
 extern "C" fn f2_1(x: isize, ...) {}
-//~^ ERROR only foreign or `unsafe extern "C"` functions may be C-variadic
+//~^ ERROR only foreign, `unsafe extern "C"`, or `unsafe extern "C-unwind"` functions may have a C-variadic arg
 
 extern "C" fn f2_2(...) {}
-//~^ ERROR only foreign or `unsafe extern "C"` functions may be C-variadic
+//~^ ERROR only foreign, `unsafe extern "C"`, or `unsafe extern "C-unwind"` functions may have a C-variadic arg
 
 extern "C" fn f2_3(..., x: isize) {}
-//~^ ERROR only foreign or `unsafe extern "C"` functions may be C-variadic
+//~^ ERROR only foreign, `unsafe extern "C"`, or `unsafe extern "C-unwind"` functions may have a C-variadic arg
 //~| ERROR `...` must be the last argument of a C-variadic function
 
 extern "C" fn f3_1(x: isize, ...) {}
-//~^ ERROR only foreign or `unsafe extern "C"` functions may be C-variadic
+//~^ ERROR only foreign, `unsafe extern "C"`, or `unsafe extern "C-unwind"` functions may have a C-variadic arg
 
 extern "C" fn f3_2(...) {}
-//~^ ERROR only foreign or `unsafe extern "C"` functions may be C-variadic
+//~^ ERROR only foreign, `unsafe extern "C"`, or `unsafe extern "C-unwind"` functions may have a C-variadic arg
 
 extern "C" fn f3_3(..., x: isize) {}
-//~^ ERROR only foreign or `unsafe extern "C"` functions may be C-variadic
+//~^ ERROR only foreign, `unsafe extern "C"`, or `unsafe extern "C-unwind"` functions may have a C-variadic arg
 //~| ERROR `...` must be the last argument of a C-variadic function
 
 const unsafe extern "C" fn f4_1(x: isize, ...) {}
@@ -35,12 +35,12 @@ const unsafe extern "C" fn f4_1(x: isize, ...) {}
 
 const extern "C" fn f4_2(x: isize, ...) {}
 //~^ ERROR functions cannot be both `const` and C-variadic
-//~| ERROR only foreign or `unsafe extern "C"` functions may be C-variadic
+//~| ERROR only foreign, `unsafe extern "C"`, or `unsafe extern "C-unwind"` functions may have a C-variadic arg
 //~| ERROR destructor of `VaListImpl<'_>` cannot be evaluated at compile-time
 
 const extern "C" fn f4_3(..., x: isize, ...) {}
 //~^ ERROR functions cannot be both `const` and C-variadic
-//~| ERROR only foreign or `unsafe extern "C"` functions may be C-variadic
+//~| ERROR only foreign, `unsafe extern "C"`, or `unsafe extern "C-unwind"` functions may have a C-variadic arg
 //~| ERROR `...` must be the last argument of a C-variadic function
 
 extern "C" {
@@ -52,34 +52,34 @@ struct X;
 
 impl X {
     fn i_f1(x: isize, ...) {}
-    //~^ ERROR only foreign or `unsafe extern "C"` functions may be C-variadic
+    //~^ ERROR only foreign, `unsafe extern "C"`, or `unsafe extern "C-unwind"` functions may have a C-variadic arg
     fn i_f2(...) {}
-    //~^ ERROR only foreign or `unsafe extern "C"` functions may be C-variadic
+    //~^ ERROR only foreign, `unsafe extern "C"`, or `unsafe extern "C-unwind"` functions may have a C-variadic arg
     fn i_f3(..., x: isize, ...) {}
-    //~^ ERROR only foreign or `unsafe extern "C"` functions may be C-variadic
+    //~^ ERROR only foreign, `unsafe extern "C"`, or `unsafe extern "C-unwind"` functions may have a C-variadic arg
     //~| ERROR `...` must be the last argument of a C-variadic function
     fn i_f4(..., x: isize, ...) {}
-    //~^ ERROR only foreign or `unsafe extern "C"` functions may be C-variadic
+    //~^ ERROR only foreign, `unsafe extern "C"`, or `unsafe extern "C-unwind"` functions may have a C-variadic arg
     //~| ERROR `...` must be the last argument of a C-variadic function
     const fn i_f5(x: isize, ...) {}
-    //~^ ERROR only foreign or `unsafe extern "C"` functions may be C-variadic
+    //~^ ERROR only foreign, `unsafe extern "C"`, or `unsafe extern "C-unwind"` functions may have a C-variadic arg
     //~| ERROR functions cannot be both `const` and C-variadic
     //~| ERROR destructor of `VaListImpl<'_>` cannot be evaluated at compile-time
 }
 
 trait T {
     fn t_f1(x: isize, ...) {}
-    //~^ ERROR only foreign or `unsafe extern "C"` functions may be C-variadic
+    //~^ ERROR only foreign, `unsafe extern "C"`, or `unsafe extern "C-unwind"` functions may have a C-variadic arg
     fn t_f2(x: isize, ...);
-    //~^ ERROR only foreign or `unsafe extern "C"` functions may be C-variadic
+    //~^ ERROR only foreign, `unsafe extern "C"`, or `unsafe extern "C-unwind"` functions may have a C-variadic arg
     fn t_f3(...) {}
-    //~^ ERROR only foreign or `unsafe extern "C"` functions may be C-variadic
+    //~^ ERROR only foreign, `unsafe extern "C"`, or `unsafe extern "C-unwind"` functions may have a C-variadic arg
     fn t_f4(...);
-    //~^ ERROR only foreign or `unsafe extern "C"` functions may be C-variadic
+    //~^ ERROR only foreign, `unsafe extern "C"`, or `unsafe extern "C-unwind"` functions may have a C-variadic arg
     fn t_f5(..., x: isize) {}
-    //~^ ERROR only foreign or `unsafe extern "C"` functions may be C-variadic
+    //~^ ERROR only foreign, `unsafe extern "C"`, or `unsafe extern "C-unwind"` functions may have a C-variadic arg
     //~| ERROR `...` must be the last argument of a C-variadic function
     fn t_f6(..., x: isize);
-    //~^ ERROR only foreign or `unsafe extern "C"` functions may be C-variadic
+    //~^ ERROR only foreign, `unsafe extern "C"`, or `unsafe extern "C-unwind"` functions may have a C-variadic arg
     //~| ERROR `...` must be the last argument of a C-variadic function
 }
diff --git a/tests/ui/parser/variadic-ffi-semantic-restrictions.stderr b/tests/ui/parser/variadic-ffi-semantic-restrictions.stderr
index f71e3863440..b740cef0200 100644
--- a/tests/ui/parser/variadic-ffi-semantic-restrictions.stderr
+++ b/tests/ui/parser/variadic-ffi-semantic-restrictions.stderr
@@ -1,22 +1,22 @@
-error: only foreign or `unsafe extern "C"` functions may be C-variadic
+error: only foreign, `unsafe extern "C"`, or `unsafe extern "C-unwind"` functions may have a C-variadic arg
   --> $DIR/variadic-ffi-semantic-restrictions.rs:6:19
    |
 LL | fn f1_1(x: isize, ...) {}
    |                   ^^^
 
-error: only foreign or `unsafe extern "C"` functions may be C-variadic
+error: only foreign, `unsafe extern "C"`, or `unsafe extern "C-unwind"` functions may have a C-variadic arg
   --> $DIR/variadic-ffi-semantic-restrictions.rs:9:9
    |
 LL | fn f1_2(...) {}
    |         ^^^
 
-error: only foreign or `unsafe extern "C"` functions may be C-variadic
+error: only foreign, `unsafe extern "C"`, or `unsafe extern "C-unwind"` functions may have a C-variadic arg
   --> $DIR/variadic-ffi-semantic-restrictions.rs:12:30
    |
 LL | extern "C" fn f2_1(x: isize, ...) {}
    |                              ^^^
 
-error: only foreign or `unsafe extern "C"` functions may be C-variadic
+error: only foreign, `unsafe extern "C"`, or `unsafe extern "C-unwind"` functions may have a C-variadic arg
   --> $DIR/variadic-ffi-semantic-restrictions.rs:15:20
    |
 LL | extern "C" fn f2_2(...) {}
@@ -28,19 +28,19 @@ error: `...` must be the last argument of a C-variadic function
 LL | extern "C" fn f2_3(..., x: isize) {}
    |                    ^^^
 
-error: only foreign or `unsafe extern "C"` functions may be C-variadic
+error: only foreign, `unsafe extern "C"`, or `unsafe extern "C-unwind"` functions may have a C-variadic arg
   --> $DIR/variadic-ffi-semantic-restrictions.rs:18:20
    |
 LL | extern "C" fn f2_3(..., x: isize) {}
    |                    ^^^
 
-error: only foreign or `unsafe extern "C"` functions may be C-variadic
+error: only foreign, `unsafe extern "C"`, or `unsafe extern "C-unwind"` functions may have a C-variadic arg
   --> $DIR/variadic-ffi-semantic-restrictions.rs:22:30
    |
 LL | extern "C" fn f3_1(x: isize, ...) {}
    |                              ^^^
 
-error: only foreign or `unsafe extern "C"` functions may be C-variadic
+error: only foreign, `unsafe extern "C"`, or `unsafe extern "C-unwind"` functions may have a C-variadic arg
   --> $DIR/variadic-ffi-semantic-restrictions.rs:25:20
    |
 LL | extern "C" fn f3_2(...) {}
@@ -52,7 +52,7 @@ error: `...` must be the last argument of a C-variadic function
 LL | extern "C" fn f3_3(..., x: isize) {}
    |                    ^^^
 
-error: only foreign or `unsafe extern "C"` functions may be C-variadic
+error: only foreign, `unsafe extern "C"`, or `unsafe extern "C-unwind"` functions may have a C-variadic arg
   --> $DIR/variadic-ffi-semantic-restrictions.rs:28:20
    |
 LL | extern "C" fn f3_3(..., x: isize) {}
@@ -70,7 +70,7 @@ error: functions cannot be both `const` and C-variadic
 LL | const extern "C" fn f4_2(x: isize, ...) {}
    | ^^^^^ `const` because of this      ^^^ C-variadic because of this
 
-error: only foreign or `unsafe extern "C"` functions may be C-variadic
+error: only foreign, `unsafe extern "C"`, or `unsafe extern "C-unwind"` functions may have a C-variadic arg
   --> $DIR/variadic-ffi-semantic-restrictions.rs:36:36
    |
 LL | const extern "C" fn f4_2(x: isize, ...) {}
@@ -91,7 +91,7 @@ LL | const extern "C" fn f4_3(..., x: isize, ...) {}
    | |                        C-variadic because of this
    | `const` because of this
 
-error: only foreign or `unsafe extern "C"` functions may be C-variadic
+error: only foreign, `unsafe extern "C"`, or `unsafe extern "C-unwind"` functions may have a C-variadic arg
   --> $DIR/variadic-ffi-semantic-restrictions.rs:41:26
    |
 LL | const extern "C" fn f4_3(..., x: isize, ...) {}
@@ -103,13 +103,13 @@ error: `...` must be the last argument of a C-variadic function
 LL |     fn e_f2(..., x: isize);
    |             ^^^
 
-error: only foreign or `unsafe extern "C"` functions may be C-variadic
+error: only foreign, `unsafe extern "C"`, or `unsafe extern "C-unwind"` functions may have a C-variadic arg
   --> $DIR/variadic-ffi-semantic-restrictions.rs:54:23
    |
 LL |     fn i_f1(x: isize, ...) {}
    |                       ^^^
 
-error: only foreign or `unsafe extern "C"` functions may be C-variadic
+error: only foreign, `unsafe extern "C"`, or `unsafe extern "C-unwind"` functions may have a C-variadic arg
   --> $DIR/variadic-ffi-semantic-restrictions.rs:56:13
    |
 LL |     fn i_f2(...) {}
@@ -121,7 +121,7 @@ error: `...` must be the last argument of a C-variadic function
 LL |     fn i_f3(..., x: isize, ...) {}
    |             ^^^
 
-error: only foreign or `unsafe extern "C"` functions may be C-variadic
+error: only foreign, `unsafe extern "C"`, or `unsafe extern "C-unwind"` functions may have a C-variadic arg
   --> $DIR/variadic-ffi-semantic-restrictions.rs:58:13
    |
 LL |     fn i_f3(..., x: isize, ...) {}
@@ -133,7 +133,7 @@ error: `...` must be the last argument of a C-variadic function
 LL |     fn i_f4(..., x: isize, ...) {}
    |             ^^^
 
-error: only foreign or `unsafe extern "C"` functions may be C-variadic
+error: only foreign, `unsafe extern "C"`, or `unsafe extern "C-unwind"` functions may have a C-variadic arg
   --> $DIR/variadic-ffi-semantic-restrictions.rs:61:13
    |
 LL |     fn i_f4(..., x: isize, ...) {}
@@ -147,31 +147,31 @@ LL |     const fn i_f5(x: isize, ...) {}
    |     |
    |     `const` because of this
 
-error: only foreign or `unsafe extern "C"` functions may be C-variadic
+error: only foreign, `unsafe extern "C"`, or `unsafe extern "C-unwind"` functions may have a C-variadic arg
   --> $DIR/variadic-ffi-semantic-restrictions.rs:64:29
    |
 LL |     const fn i_f5(x: isize, ...) {}
    |                             ^^^
 
-error: only foreign or `unsafe extern "C"` functions may be C-variadic
+error: only foreign, `unsafe extern "C"`, or `unsafe extern "C-unwind"` functions may have a C-variadic arg
   --> $DIR/variadic-ffi-semantic-restrictions.rs:71:23
    |
 LL |     fn t_f1(x: isize, ...) {}
    |                       ^^^
 
-error: only foreign or `unsafe extern "C"` functions may be C-variadic
+error: only foreign, `unsafe extern "C"`, or `unsafe extern "C-unwind"` functions may have a C-variadic arg
   --> $DIR/variadic-ffi-semantic-restrictions.rs:73:23
    |
 LL |     fn t_f2(x: isize, ...);
    |                       ^^^
 
-error: only foreign or `unsafe extern "C"` functions may be C-variadic
+error: only foreign, `unsafe extern "C"`, or `unsafe extern "C-unwind"` functions may have a C-variadic arg
   --> $DIR/variadic-ffi-semantic-restrictions.rs:75:13
    |
 LL |     fn t_f3(...) {}
    |             ^^^
 
-error: only foreign or `unsafe extern "C"` functions may be C-variadic
+error: only foreign, `unsafe extern "C"`, or `unsafe extern "C-unwind"` functions may have a C-variadic arg
   --> $DIR/variadic-ffi-semantic-restrictions.rs:77:13
    |
 LL |     fn t_f4(...);
@@ -183,7 +183,7 @@ error: `...` must be the last argument of a C-variadic function
 LL |     fn t_f5(..., x: isize) {}
    |             ^^^
 
-error: only foreign or `unsafe extern "C"` functions may be C-variadic
+error: only foreign, `unsafe extern "C"`, or `unsafe extern "C-unwind"` functions may have a C-variadic arg
   --> $DIR/variadic-ffi-semantic-restrictions.rs:79:13
    |
 LL |     fn t_f5(..., x: isize) {}
@@ -195,7 +195,7 @@ error: `...` must be the last argument of a C-variadic function
 LL |     fn t_f6(..., x: isize);
    |             ^^^
 
-error: only foreign or `unsafe extern "C"` functions may be C-variadic
+error: only foreign, `unsafe extern "C"`, or `unsafe extern "C-unwind"` functions may have a C-variadic arg
   --> $DIR/variadic-ffi-semantic-restrictions.rs:82:13
    |
 LL |     fn t_f6(..., x: isize);
diff --git a/tests/ui/pattern/usefulness/floats.rs b/tests/ui/pattern/usefulness/floats.rs
index b3d49ba8e15..0b27e33e4ef 100644
--- a/tests/ui/pattern/usefulness/floats.rs
+++ b/tests/ui/pattern/usefulness/floats.rs
@@ -1,4 +1,6 @@
 #![deny(unreachable_patterns)]
+#![feature(f128)]
+#![feature(f16)]
 
 fn main() {
     match 0.0 {
@@ -11,6 +13,32 @@ fn main() {
         0.0..=1.0 => {}
     }
 
+    match 1.0f16 {
+        0.01f16..=6.5f16 => {}
+        0.01f16 => {} //~ ERROR unreachable pattern
+        0.02f16 => {} //~ ERROR unreachable pattern
+        6.5f16 => {}  //~ ERROR unreachable pattern
+        _ => {}
+    };
+    match 1.0f16 {
+        0.01f16..6.5f16 => {}
+        6.5f16 => {} // this is reachable
+        _ => {}
+    };
+
+    match 1.0f32 {
+        0.01f32..=6.5f32 => {}
+        0.01f32 => {} //~ ERROR unreachable pattern
+        0.02f32 => {} //~ ERROR unreachable pattern
+        6.5f32 => {}  //~ ERROR unreachable pattern
+        _ => {}
+    };
+    match 1.0f32 {
+        0.01f32..6.5f32 => {}
+        6.5f32 => {} // this is reachable
+        _ => {}
+    };
+
     match 1.0f64 {
         0.01f64..=6.5f64 => {}
         0.005f64 => {}
@@ -28,16 +56,20 @@ fn main() {
         _ => {}
     };
 
-    match 1.0f32 {
-        0.01f32..=6.5f32 => {}
-        0.01f32 => {} //~ ERROR unreachable pattern
-        0.02f32 => {} //~ ERROR unreachable pattern
-        6.5f32 => {}  //~ ERROR unreachable pattern
+    match 1.0f128 {
+        0.01f128..=6.5f128 => {}
+        0.005f128 => {}
+        0.01f128 => {} //~ ERROR unreachable pattern
+        0.02f128 => {} //~ ERROR unreachable pattern
+        6.5f128 => {}  //~ ERROR unreachable pattern
+        6.6f128 => {}
+        1.0f128..=4.0f128 => {} //~ ERROR unreachable pattern
+        5.0f128..=7.0f128 => {}
         _ => {}
     };
-    match 1.0f32 {
-        0.01f32..6.5f32 => {}
-        6.5f32 => {} // this is reachable
+    match 1.0f128 {
+        0.01f128..6.5f128 => {}
+        6.5f128 => {} // this is reachable
         _ => {}
     };
 }
diff --git a/tests/ui/pattern/usefulness/floats.stderr b/tests/ui/pattern/usefulness/floats.stderr
index 04f2fe3cd94..684f6c93a16 100644
--- a/tests/ui/pattern/usefulness/floats.stderr
+++ b/tests/ui/pattern/usefulness/floats.stderr
@@ -1,5 +1,5 @@
 error[E0004]: non-exhaustive patterns: `_` not covered
-  --> $DIR/floats.rs:9:11
+  --> $DIR/floats.rs:11:11
    |
 LL |     match 0.0 {
    |           ^^^ pattern `_` not covered
@@ -12,9 +12,9 @@ LL +         _ => todo!()
    |
 
 error: unreachable pattern
-  --> $DIR/floats.rs:17:9
+  --> $DIR/floats.rs:18:9
    |
-LL |         0.01f64 => {}
+LL |         0.01f16 => {}
    |         ^^^^^^^
    |
 note: the lint level is defined here
@@ -24,41 +24,83 @@ LL | #![deny(unreachable_patterns)]
    |         ^^^^^^^^^^^^^^^^^^^^
 
 error: unreachable pattern
-  --> $DIR/floats.rs:18:9
+  --> $DIR/floats.rs:19:9
+   |
+LL |         0.02f16 => {}
+   |         ^^^^^^^
+
+error: unreachable pattern
+  --> $DIR/floats.rs:20:9
+   |
+LL |         6.5f16 => {}
+   |         ^^^^^^
+
+error: unreachable pattern
+  --> $DIR/floats.rs:31:9
+   |
+LL |         0.01f32 => {}
+   |         ^^^^^^^
+
+error: unreachable pattern
+  --> $DIR/floats.rs:32:9
+   |
+LL |         0.02f32 => {}
+   |         ^^^^^^^
+
+error: unreachable pattern
+  --> $DIR/floats.rs:33:9
+   |
+LL |         6.5f32 => {}
+   |         ^^^^^^
+
+error: unreachable pattern
+  --> $DIR/floats.rs:45:9
+   |
+LL |         0.01f64 => {}
+   |         ^^^^^^^
+
+error: unreachable pattern
+  --> $DIR/floats.rs:46:9
    |
 LL |         0.02f64 => {}
    |         ^^^^^^^
 
 error: unreachable pattern
-  --> $DIR/floats.rs:19:9
+  --> $DIR/floats.rs:47:9
    |
 LL |         6.5f64 => {}
    |         ^^^^^^
 
 error: unreachable pattern
-  --> $DIR/floats.rs:21:9
+  --> $DIR/floats.rs:49:9
    |
 LL |         1.0f64..=4.0f64 => {}
    |         ^^^^^^^^^^^^^^^
 
 error: unreachable pattern
-  --> $DIR/floats.rs:33:9
+  --> $DIR/floats.rs:62:9
    |
-LL |         0.01f32 => {}
-   |         ^^^^^^^
+LL |         0.01f128 => {}
+   |         ^^^^^^^^
 
 error: unreachable pattern
-  --> $DIR/floats.rs:34:9
+  --> $DIR/floats.rs:63:9
    |
-LL |         0.02f32 => {}
+LL |         0.02f128 => {}
+   |         ^^^^^^^^
+
+error: unreachable pattern
+  --> $DIR/floats.rs:64:9
+   |
+LL |         6.5f128 => {}
    |         ^^^^^^^
 
 error: unreachable pattern
-  --> $DIR/floats.rs:35:9
+  --> $DIR/floats.rs:66:9
    |
-LL |         6.5f32 => {}
-   |         ^^^^^^
+LL |         1.0f128..=4.0f128 => {}
+   |         ^^^^^^^^^^^^^^^^^
 
-error: aborting due to 8 previous errors
+error: aborting due to 15 previous errors
 
 For more information about this error, try `rustc --explain E0004`.
diff --git a/tests/ui/proc-macro/expr-stmt-nonterminal-tokens.stdout b/tests/ui/proc-macro/expr-stmt-nonterminal-tokens.stdout
index 6523f2485cd..0168689b605 100644
--- a/tests/ui/proc-macro/expr-stmt-nonterminal-tokens.stdout
+++ b/tests/ui/proc-macro/expr-stmt-nonterminal-tokens.stdout
@@ -1,4 +1,4 @@
-PRINT-DERIVE INPUT (DISPLAY): enum E { V = { let _ = #[allow(warnings)] #[allow(warnings)] 0; 0 }, }
+PRINT-DERIVE INPUT (DISPLAY): enum E { V = { let _ = #[allow(warnings)] 0; 0 }, }
 PRINT-DERIVE INPUT (DEBUG): TokenStream [
     Ident {
         ident: "enum",
@@ -64,31 +64,6 @@ PRINT-DERIVE INPUT (DEBUG): TokenStream [
                                 ],
                                 span: #0 bytes(544..561),
                             },
-                            Punct {
-                                ch: '#',
-                                spacing: Alone,
-                                span: #0 bytes(543..544),
-                            },
-                            Group {
-                                delimiter: Bracket,
-                                stream: TokenStream [
-                                    Ident {
-                                        ident: "allow",
-                                        span: #0 bytes(545..550),
-                                    },
-                                    Group {
-                                        delimiter: Parenthesis,
-                                        stream: TokenStream [
-                                            Ident {
-                                                ident: "warnings",
-                                                span: #0 bytes(551..559),
-                                            },
-                                        ],
-                                        span: #0 bytes(550..560),
-                                    },
-                                ],
-                                span: #0 bytes(544..561),
-                            },
                             Literal {
                                 kind: Integer,
                                 symbol: "0",
diff --git a/tests/ui/resolve/path-attr-in-const-block.rs b/tests/ui/resolve/path-attr-in-const-block.rs
new file mode 100644
index 00000000000..076511d26d6
--- /dev/null
+++ b/tests/ui/resolve/path-attr-in-const-block.rs
@@ -0,0 +1,9 @@
+// issue#126516
+// issue#126647
+
+fn main() {
+    const {
+        #![path = foo!()]
+        //~^ ERROR: cannot find macro `foo` in this scope
+    }
+}
diff --git a/tests/ui/resolve/path-attr-in-const-block.stderr b/tests/ui/resolve/path-attr-in-const-block.stderr
new file mode 100644
index 00000000000..8f9e58157c8
--- /dev/null
+++ b/tests/ui/resolve/path-attr-in-const-block.stderr
@@ -0,0 +1,8 @@
+error: cannot find macro `foo` in this scope
+  --> $DIR/path-attr-in-const-block.rs:6:19
+   |
+LL |         #![path = foo!()]
+   |                   ^^^
+
+error: aborting due to 1 previous error
+
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/assoc-type-const-bound-usage-0.qualified.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/assoc-type-const-bound-usage-0.qualified.stderr
index 62c8a442ab9..3aec4383eab 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/assoc-type-const-bound-usage-0.qualified.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/assoc-type-const-bound-usage-0.qualified.stderr
@@ -1,3 +1,12 @@
+warning: the feature `effects` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/assoc-type-const-bound-usage-0.rs:6:30
+   |
+LL | #![feature(const_trait_impl, effects)]
+   |                              ^^^^^^^
+   |
+   = note: see issue #102090 <https://github.com/rust-lang/rust/issues/102090> for more information
+   = note: `#[warn(incomplete_features)]` on by default
+
 error[E0277]: the trait bound `T: Trait` is not satisfied
   --> $DIR/assoc-type-const-bound-usage-0.rs:21:6
    |
@@ -9,6 +18,6 @@ help: consider further restricting this bound
 LL | const fn qualified<T: ~const Trait + Trait>() -> i32 {
    |                                    +++++++
 
-error: aborting due to 1 previous error
+error: aborting due to 1 previous error; 1 warning emitted
 
 For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/assoc-type-const-bound-usage-0.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/assoc-type-const-bound-usage-0.rs
index 6b55e82629b..eecd6e6109c 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/assoc-type-const-bound-usage-0.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/assoc-type-const-bound-usage-0.rs
@@ -3,7 +3,7 @@
 //@[unqualified] check-pass
 //@[qualified] known-bug: unknown
 
-#![feature(const_trait_impl, effects)]
+#![feature(const_trait_impl, effects)] //[unqualified]~ WARN the feature `effects` is incomplete
 
 #[const_trait]
 trait Trait {
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/assoc-type-const-bound-usage-0.unqualified.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/assoc-type-const-bound-usage-0.unqualified.stderr
new file mode 100644
index 00000000000..3d592834600
--- /dev/null
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/assoc-type-const-bound-usage-0.unqualified.stderr
@@ -0,0 +1,11 @@
+warning: the feature `effects` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/assoc-type-const-bound-usage-0.rs:6:30
+   |
+LL | #![feature(const_trait_impl, effects)]
+   |                              ^^^^^^^
+   |
+   = note: see issue #102090 <https://github.com/rust-lang/rust/issues/102090> for more information
+   = note: `#[warn(incomplete_features)]` on by default
+
+warning: 1 warning emitted
+
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/assoc-type.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/assoc-type.rs
index 886fa6577d7..645fff4e014 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/assoc-type.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/assoc-type.rs
@@ -1,5 +1,5 @@
 // FIXME(effects): Replace `Add` with `std::ops::Add` once the latter a `#[const_trait]` again.
-#![feature(const_trait_impl, effects)]
+#![feature(const_trait_impl, effects)] //~ WARN the feature `effects` is incomplete
 
 #[const_trait]
 trait Add<Rhs = Self> {
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/assoc-type.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/assoc-type.stderr
index a9cae2a70be..cc3abea25eb 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/assoc-type.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/assoc-type.stderr
@@ -1,3 +1,12 @@
+warning: the feature `effects` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/assoc-type.rs:2:30
+   |
+LL | #![feature(const_trait_impl, effects)]
+   |                              ^^^^^^^
+   |
+   = note: see issue #102090 <https://github.com/rust-lang/rust/issues/102090> for more information
+   = note: `#[warn(incomplete_features)]` on by default
+
 error[E0277]: the trait bound `NonConstAdd: ~const Add` is not satisfied
   --> $DIR/assoc-type.rs:35:16
    |
@@ -11,6 +20,6 @@ note: required by a bound in `Foo::Bar`
 LL |     type Bar: ~const Add;
    |               ^^^^^^^^^^ required by this bound in `Foo::Bar`
 
-error: aborting due to 1 previous error
+error: aborting due to 1 previous error; 1 warning emitted
 
 For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/auxiliary/cross-crate.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/auxiliary/cross-crate.rs
index f40dc27cb4c..62609384cff 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/auxiliary/cross-crate.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/auxiliary/cross-crate.rs
@@ -1,4 +1,4 @@
-#![feature(const_trait_impl, effects)]
+#![feature(const_trait_impl, effects)] //~ WARN the feature `effects` is incomplete
 
 #[const_trait]
 pub trait MyTrait {
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/auxiliary/staged-api.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/auxiliary/staged-api.rs
index 687cb128b05..fd4e1ff803d 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/auxiliary/staged-api.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/auxiliary/staged-api.rs
@@ -1,4 +1,4 @@
-#![feature(const_trait_impl, effects)]
+#![feature(const_trait_impl, effects)] //~ WARN the feature `effects` is incomplete
 #![feature(staged_api)]
 #![stable(feature = "rust1", since = "1.0.0")]
 
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/call-const-trait-method-fail.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/call-const-trait-method-fail.rs
index 771c35cf6ab..bb9e9045f8f 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/call-const-trait-method-fail.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/call-const-trait-method-fail.rs
@@ -1,4 +1,4 @@
-#![feature(const_trait_impl, effects)]
+#![feature(const_trait_impl, effects)] //~ WARN the feature `effects` is incomplete
 
 #[const_trait]
 pub trait Plus {
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/call-const-trait-method-fail.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/call-const-trait-method-fail.stderr
index 93d520f29ef..0e4dcf0f302 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/call-const-trait-method-fail.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/call-const-trait-method-fail.stderr
@@ -1,3 +1,12 @@
+warning: the feature `effects` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/call-const-trait-method-fail.rs:1:30
+   |
+LL | #![feature(const_trait_impl, effects)]
+   |                              ^^^^^^^
+   |
+   = note: see issue #102090 <https://github.com/rust-lang/rust/issues/102090> for more information
+   = note: `#[warn(incomplete_features)]` on by default
+
 error[E0277]: the trait bound `u32: ~const Plus` is not satisfied
   --> $DIR/call-const-trait-method-fail.rs:25:5
    |
@@ -6,6 +15,6 @@ LL |     a.plus(b)
    |
    = help: the trait `Plus` is implemented for `u32`
 
-error: aborting due to 1 previous error
+error: aborting due to 1 previous error; 1 warning emitted
 
 For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-in-impl.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-in-impl.rs
index b63458b39e9..6b3a4ae1b95 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-in-impl.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-in-impl.rs
@@ -1,4 +1,5 @@
-//@ check-pass
+//@ known-bug: #110395
+// FIXME(effects) check-pass
 #![feature(const_trait_impl)]
 
 #[const_trait]
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-in-impl.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-in-impl.stderr
new file mode 100644
index 00000000000..12027c4d713
--- /dev/null
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-in-impl.stderr
@@ -0,0 +1,8 @@
+error: `~const` can only be applied to `#[const_trait]` traits
+  --> $DIR/call-generic-in-impl.rs:10:16
+   |
+LL | impl<T: ~const PartialEq> const MyPartialEq for T {
+   |                ^^^^^^^^^
+
+error: aborting due to 1 previous error
+
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-chain.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-chain.rs
index 37b2de0fd2d..9df694a02f5 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-chain.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-chain.rs
@@ -1,6 +1,7 @@
 //! Basic test for calling methods on generic type parameters in `const fn`.
 
-//@ check-pass
+//@ known-bug: #110395
+// FIXME(effects) check-pass
 
 #![feature(const_trait_impl, effects)]
 
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-chain.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-chain.stderr
new file mode 100644
index 00000000000..36c7a654430
--- /dev/null
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-chain.stderr
@@ -0,0 +1,71 @@
+warning: the feature `effects` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/call-generic-method-chain.rs:6:30
+   |
+LL | #![feature(const_trait_impl, effects)]
+   |                              ^^^^^^^
+   |
+   = note: see issue #102090 <https://github.com/rust-lang/rust/issues/102090> for more information
+   = note: `#[warn(incomplete_features)]` on by default
+
+error: const `impl` for trait `PartialEq` which is not marked with `#[const_trait]`
+  --> $DIR/call-generic-method-chain.rs:10:12
+   |
+LL | impl const PartialEq for S {
+   |            ^^^^^^^^^
+   |
+   = note: marking a trait with `#[const_trait]` ensures all default method bodies are `const`
+   = note: adding a non-const method body in the future would be a breaking change
+
+error[E0207]: the const parameter `host` is not constrained by the impl trait, self type, or predicates
+  --> $DIR/call-generic-method-chain.rs:10:6
+   |
+LL | impl const PartialEq for S {
+   |      ^^^^^ unconstrained const parameter
+   |
+   = note: expressions using a const parameter must map each value to a distinct output value
+   = note: proving the result of expressions other than the parameter are unique is not supported
+
+error: `~const` can only be applied to `#[const_trait]` traits
+  --> $DIR/call-generic-method-chain.rs:19:32
+   |
+LL | const fn equals_self<T: ~const PartialEq>(t: &T) -> bool {
+   |                                ^^^^^^^^^
+
+error: `~const` can only be applied to `#[const_trait]` traits
+  --> $DIR/call-generic-method-chain.rs:23:40
+   |
+LL | const fn equals_self_wrapper<T: ~const PartialEq>(t: &T) -> bool {
+   |                                        ^^^^^^^^^
+
+error[E0284]: type annotations needed
+  --> $DIR/call-generic-method-chain.rs:27:22
+   |
+LL | pub const EQ: bool = equals_self_wrapper(&S);
+   |                      ^^^^^^^^^^^^^^^^^^^^^^^ cannot infer the value of the constant `_`
+   |
+note: required for `S` to implement `PartialEq`
+  --> $DIR/call-generic-method-chain.rs:10:12
+   |
+LL | impl const PartialEq for S {
+   |      ----- ^^^^^^^^^     ^
+   |      |
+   |      unsatisfied trait bound introduced here
+
+error[E0284]: type annotations needed
+  --> $DIR/call-generic-method-chain.rs:15:10
+   |
+LL |         !self.eq(other)
+   |          ^^^^^^^^^^^^^^ cannot infer the value of the constant `_`
+   |
+note: required for `S` to implement `PartialEq`
+  --> $DIR/call-generic-method-chain.rs:10:12
+   |
+LL | impl const PartialEq for S {
+   |      ----- ^^^^^^^^^     ^
+   |      |
+   |      unsatisfied trait bound introduced here
+
+error: aborting due to 6 previous errors; 1 warning emitted
+
+Some errors have detailed explanations: E0207, E0284.
+For more information about an error, try `rustc --explain E0207`.
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-dup-bound.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-dup-bound.rs
index ea8fd005561..f46a34911f1 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-dup-bound.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-dup-bound.rs
@@ -1,4 +1,5 @@
-//@ check-pass
+//@ known-bug: #110395
+// FIXME(effects) check-pass
 
 #![feature(const_trait_impl, effects)]
 
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-dup-bound.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-dup-bound.stderr
new file mode 100644
index 00000000000..320e420b80a
--- /dev/null
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-dup-bound.stderr
@@ -0,0 +1,85 @@
+warning: the feature `effects` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/call-generic-method-dup-bound.rs:4:30
+   |
+LL | #![feature(const_trait_impl, effects)]
+   |                              ^^^^^^^
+   |
+   = note: see issue #102090 <https://github.com/rust-lang/rust/issues/102090> for more information
+   = note: `#[warn(incomplete_features)]` on by default
+
+error: const `impl` for trait `PartialEq` which is not marked with `#[const_trait]`
+  --> $DIR/call-generic-method-dup-bound.rs:8:12
+   |
+LL | impl const PartialEq for S {
+   |            ^^^^^^^^^
+   |
+   = note: marking a trait with `#[const_trait]` ensures all default method bodies are `const`
+   = note: adding a non-const method body in the future would be a breaking change
+
+error[E0207]: the const parameter `host` is not constrained by the impl trait, self type, or predicates
+  --> $DIR/call-generic-method-dup-bound.rs:8:6
+   |
+LL | impl const PartialEq for S {
+   |      ^^^^^ unconstrained const parameter
+   |
+   = note: expressions using a const parameter must map each value to a distinct output value
+   = note: proving the result of expressions other than the parameter are unique is not supported
+
+error: `~const` can only be applied to `#[const_trait]` traits
+  --> $DIR/call-generic-method-dup-bound.rs:19:44
+   |
+LL | const fn equals_self<T: PartialEq + ~const PartialEq>(t: &T) -> bool {
+   |                                            ^^^^^^^^^
+
+error: `~const` can only be applied to `#[const_trait]` traits
+  --> $DIR/call-generic-method-dup-bound.rs:26:37
+   |
+LL | const fn equals_self2<T: A + ~const PartialEq>(t: &T) -> bool {
+   |                                     ^^^^^^^^^
+
+error[E0284]: type annotations needed
+  --> $DIR/call-generic-method-dup-bound.rs:30:22
+   |
+LL | pub const EQ: bool = equals_self(&S) && equals_self2(&S);
+   |                      ^^^^^^^^^^^^^^^ cannot infer the value of the constant `_`
+   |
+note: required for `S` to implement `PartialEq`
+  --> $DIR/call-generic-method-dup-bound.rs:8:12
+   |
+LL | impl const PartialEq for S {
+   |      ----- ^^^^^^^^^     ^
+   |      |
+   |      unsatisfied trait bound introduced here
+
+error[E0284]: type annotations needed
+  --> $DIR/call-generic-method-dup-bound.rs:30:41
+   |
+LL | pub const EQ: bool = equals_self(&S) && equals_self2(&S);
+   |                                         ^^^^^^^^^^^^^^^^ cannot infer the value of the constant `_`
+   |
+note: required for `S` to implement `PartialEq`
+  --> $DIR/call-generic-method-dup-bound.rs:8:12
+   |
+LL | impl const PartialEq for S {
+   |      ----- ^^^^^^^^^     ^
+   |      |
+   |      unsatisfied trait bound introduced here
+
+error[E0284]: type annotations needed
+  --> $DIR/call-generic-method-dup-bound.rs:13:10
+   |
+LL |         !self.eq(other)
+   |          ^^^^^^^^^^^^^^ cannot infer the value of the constant `_`
+   |
+note: required for `S` to implement `PartialEq`
+  --> $DIR/call-generic-method-dup-bound.rs:8:12
+   |
+LL | impl const PartialEq for S {
+   |      ----- ^^^^^^^^^     ^
+   |      |
+   |      unsatisfied trait bound introduced here
+
+error: aborting due to 7 previous errors; 1 warning emitted
+
+Some errors have detailed explanations: E0207, E0284.
+For more information about an error, try `rustc --explain E0207`.
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-fail.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-fail.rs
index 043939750a8..a9ed5a639d7 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-fail.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-fail.rs
@@ -1,8 +1,10 @@
-#![feature(const_trait_impl, effects)]
+//@ check-pass
+
+#![feature(const_trait_impl, effects)] //~ WARN the feature `effects` is incomplete
 
 pub const fn equals_self<T: PartialEq>(t: &T) -> bool {
     *t == *t
-    //~^ ERROR mismatched types
+    // FIXME(effects) ~^ ERROR mismatched types
     // FIXME(effects): diagnostic
 }
 
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-fail.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-fail.stderr
index 5074c4a2261..74b74052da0 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-fail.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-fail.stderr
@@ -1,12 +1,11 @@
-error[E0308]: mismatched types
-  --> $DIR/call-generic-method-fail.rs:4:5
+warning: the feature `effects` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/call-generic-method-fail.rs:3:30
    |
-LL |     *t == *t
-   |     ^^^^^^^^ expected `host`, found `true`
+LL | #![feature(const_trait_impl, effects)]
+   |                              ^^^^^^^
    |
-   = note: expected constant `host`
-              found constant `true`
+   = note: see issue #102090 <https://github.com/rust-lang/rust/issues/102090> for more information
+   = note: `#[warn(incomplete_features)]` on by default
 
-error: aborting due to 1 previous error
+warning: 1 warning emitted
 
-For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-nonconst.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-nonconst.rs
index 8d6176a5bac..222bff2db88 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-nonconst.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-nonconst.rs
@@ -1,4 +1,4 @@
-#![feature(const_trait_impl, effects)]
+#![feature(const_trait_impl, effects)] //~ WARN the feature `effects` is incomplete
 
 struct S;
 
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-nonconst.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-nonconst.stderr
index 3581b1fcd7d..fa59e5ee03d 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-nonconst.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-nonconst.stderr
@@ -1,3 +1,12 @@
+warning: the feature `effects` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/call-generic-method-nonconst.rs:1:30
+   |
+LL | #![feature(const_trait_impl, effects)]
+   |                              ^^^^^^^
+   |
+   = note: see issue #102090 <https://github.com/rust-lang/rust/issues/102090> for more information
+   = note: `#[warn(incomplete_features)]` on by default
+
 error[E0277]: the trait bound `S: const Foo` is not satisfied
   --> $DIR/call-generic-method-nonconst.rs:23:34
    |
@@ -13,6 +22,6 @@ note: required by a bound in `equals_self`
 LL | const fn equals_self<T: ~const Foo>(t: &T) -> bool {
    |                         ^^^^^^^^^^ required by this bound in `equals_self`
 
-error: aborting due to 1 previous error
+error: aborting due to 1 previous error; 1 warning emitted
 
 For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-pass.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-pass.rs
index 55d8afa8d47..413685d8b34 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-pass.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-pass.rs
@@ -1,6 +1,7 @@
 //! Basic test for calling methods on generic type parameters in `const fn`.
 
-//@ check-pass
+//@ known-bug: #110395
+// FIXME(effects) check-pass
 
 #![feature(const_trait_impl, effects)]
 
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-pass.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-pass.stderr
new file mode 100644
index 00000000000..6b9d290839e
--- /dev/null
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-pass.stderr
@@ -0,0 +1,65 @@
+warning: the feature `effects` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/call-generic-method-pass.rs:6:30
+   |
+LL | #![feature(const_trait_impl, effects)]
+   |                              ^^^^^^^
+   |
+   = note: see issue #102090 <https://github.com/rust-lang/rust/issues/102090> for more information
+   = note: `#[warn(incomplete_features)]` on by default
+
+error: const `impl` for trait `PartialEq` which is not marked with `#[const_trait]`
+  --> $DIR/call-generic-method-pass.rs:10:12
+   |
+LL | impl const PartialEq for S {
+   |            ^^^^^^^^^
+   |
+   = note: marking a trait with `#[const_trait]` ensures all default method bodies are `const`
+   = note: adding a non-const method body in the future would be a breaking change
+
+error[E0207]: the const parameter `host` is not constrained by the impl trait, self type, or predicates
+  --> $DIR/call-generic-method-pass.rs:10:6
+   |
+LL | impl const PartialEq for S {
+   |      ^^^^^ unconstrained const parameter
+   |
+   = note: expressions using a const parameter must map each value to a distinct output value
+   = note: proving the result of expressions other than the parameter are unique is not supported
+
+error: `~const` can only be applied to `#[const_trait]` traits
+  --> $DIR/call-generic-method-pass.rs:19:32
+   |
+LL | const fn equals_self<T: ~const PartialEq>(t: &T) -> bool {
+   |                                ^^^^^^^^^
+
+error[E0284]: type annotations needed
+  --> $DIR/call-generic-method-pass.rs:23:22
+   |
+LL | pub const EQ: bool = equals_self(&S);
+   |                      ^^^^^^^^^^^^^^^ cannot infer the value of the constant `_`
+   |
+note: required for `S` to implement `PartialEq`
+  --> $DIR/call-generic-method-pass.rs:10:12
+   |
+LL | impl const PartialEq for S {
+   |      ----- ^^^^^^^^^     ^
+   |      |
+   |      unsatisfied trait bound introduced here
+
+error[E0284]: type annotations needed
+  --> $DIR/call-generic-method-pass.rs:15:10
+   |
+LL |         !self.eq(other)
+   |          ^^^^^^^^^^^^^^ cannot infer the value of the constant `_`
+   |
+note: required for `S` to implement `PartialEq`
+  --> $DIR/call-generic-method-pass.rs:10:12
+   |
+LL | impl const PartialEq for S {
+   |      ----- ^^^^^^^^^     ^
+   |      |
+   |      unsatisfied trait bound introduced here
+
+error: aborting due to 5 previous errors; 1 warning emitted
+
+Some errors have detailed explanations: E0207, E0284.
+For more information about an error, try `rustc --explain E0207`.
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/const-and-non-const-impl.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-and-non-const-impl.stderr
index 54bc4347722..8916450df2d 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/const-and-non-const-impl.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-and-non-const-impl.stderr
@@ -1,3 +1,12 @@
+error[E0119]: conflicting implementations of trait `Add` for type `Int`
+  --> $DIR/const-and-non-const-impl.rs:23:1
+   |
+LL | impl std::ops::Add for Int {
+   | -------------------------- first implementation here
+...
+LL | impl const std::ops::Add for Int {
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation for `Int`
+
 error[E0117]: only traits defined in the current crate can be implemented for primitive types
   --> $DIR/const-and-non-const-impl.rs:7:1
    |
@@ -10,15 +19,6 @@ LL | impl const std::ops::Add for i32 {
    |
    = note: define and implement a trait or new type instead
 
-error[E0119]: conflicting implementations of trait `Add` for type `Int`
-  --> $DIR/const-and-non-const-impl.rs:23:1
-   |
-LL | impl std::ops::Add for Int {
-   | -------------------------- first implementation here
-...
-LL | impl const std::ops::Add for Int {
-   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation for `Int`
-
 error: aborting due to 2 previous errors
 
 Some errors have detailed explanations: E0117, E0119.
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/const-bounds-non-const-trait.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-bounds-non-const-trait.rs
index 3582e5e050c..db446f8bc2e 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/const-bounds-non-const-trait.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-bounds-non-const-trait.rs
@@ -1,5 +1,5 @@
 // Regression test for issue #117244.
-#![feature(const_trait_impl, effects)]
+#![feature(const_trait_impl, effects)] //~ WARN the feature `effects` is incomplete
 
 trait NonConst {}
 
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/const-bounds-non-const-trait.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-bounds-non-const-trait.stderr
index 08954987d31..d04e5490b76 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/const-bounds-non-const-trait.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-bounds-non-const-trait.stderr
@@ -1,3 +1,12 @@
+warning: the feature `effects` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/const-bounds-non-const-trait.rs:2:30
+   |
+LL | #![feature(const_trait_impl, effects)]
+   |                              ^^^^^^^
+   |
+   = note: see issue #102090 <https://github.com/rust-lang/rust/issues/102090> for more information
+   = note: `#[warn(incomplete_features)]` on by default
+
 error: `~const` can only be applied to `#[const_trait]` traits
   --> $DIR/const-bounds-non-const-trait.rs:6:28
    |
@@ -10,5 +19,5 @@ error: `const` can only be applied to `#[const_trait]` traits
 LL | fn operate<T: const NonConst>() {}
    |                     ^^^^^^^^
 
-error: aborting due to 2 previous errors
+error: aborting due to 2 previous errors; 1 warning emitted
 
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/const-check-fns-in-const-impl.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-check-fns-in-const-impl.rs
index 4854f41bf04..a1710e65252 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/const-check-fns-in-const-impl.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-check-fns-in-const-impl.rs
@@ -1,4 +1,4 @@
-#![feature(const_trait_impl, effects)]
+#![feature(const_trait_impl, effects)] //~ WARN the feature `effects` is incomplete
 
 struct S;
 #[const_trait]
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/const-check-fns-in-const-impl.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-check-fns-in-const-impl.stderr
index ae035b26ec5..d93327cea1b 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/const-check-fns-in-const-impl.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-check-fns-in-const-impl.stderr
@@ -1,3 +1,12 @@
+warning: the feature `effects` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/const-check-fns-in-const-impl.rs:1:30
+   |
+LL | #![feature(const_trait_impl, effects)]
+   |                              ^^^^^^^
+   |
+   = note: see issue #102090 <https://github.com/rust-lang/rust/issues/102090> for more information
+   = note: `#[warn(incomplete_features)]` on by default
+
 error[E0015]: cannot call non-const fn `non_const` in constant functions
   --> $DIR/const-check-fns-in-const-impl.rs:12:16
    |
@@ -6,6 +15,6 @@ LL |     fn foo() { non_const() }
    |
    = note: calls in constant functions are limited to constant functions, tuple structs and tuple variants
 
-error: aborting due to 1 previous error
+error: aborting due to 1 previous error; 1 warning emitted
 
 For more information about this error, try `rustc --explain E0015`.
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/const-default-method-bodies.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-default-method-bodies.rs
index be668b4f13a..2fd58b05178 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/const-default-method-bodies.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-default-method-bodies.rs
@@ -1,4 +1,4 @@
-#![feature(const_trait_impl, effects)]
+#![feature(const_trait_impl, effects)] //~ WARN the feature `effects` is incomplete
 
 #[const_trait]
 trait ConstDefaultFn: Sized {
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/const-default-method-bodies.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-default-method-bodies.stderr
index f39e6dcadba..8e04d0bd20d 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/const-default-method-bodies.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-default-method-bodies.stderr
@@ -1,3 +1,12 @@
+warning: the feature `effects` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/const-default-method-bodies.rs:1:30
+   |
+LL | #![feature(const_trait_impl, effects)]
+   |                              ^^^^^^^
+   |
+   = note: see issue #102090 <https://github.com/rust-lang/rust/issues/102090> for more information
+   = note: `#[warn(incomplete_features)]` on by default
+
 error[E0277]: the trait bound `NonConstImpl: ~const ConstDefaultFn` is not satisfied
   --> $DIR/const-default-method-bodies.rs:24:18
    |
@@ -6,6 +15,6 @@ LL |     NonConstImpl.a();
    |
    = help: the trait `ConstDefaultFn` is implemented for `NonConstImpl`
 
-error: aborting due to 1 previous error
+error: aborting due to 1 previous error; 1 warning emitted
 
 For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/const-drop-bound.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-drop-bound.stderr
index 16ed615907b..be197006f02 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/const-drop-bound.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-drop-bound.stderr
@@ -1,9 +1,27 @@
+error: `~const` can only be applied to `#[const_trait]` traits
+  --> $DIR/const-drop-bound.rs:9:68
+   |
+LL | const fn foo<T, E>(res: Result<T, E>) -> Option<T> where E: ~const Destruct {
+   |                                                                    ^^^^^^^^
+
+error: `~const` can only be applied to `#[const_trait]` traits
+  --> $DIR/const-drop-bound.rs:20:15
+   |
+LL |     T: ~const Destruct,
+   |               ^^^^^^^^
+
+error: `~const` can only be applied to `#[const_trait]` traits
+  --> $DIR/const-drop-bound.rs:21:15
+   |
+LL |     E: ~const Destruct,
+   |               ^^^^^^^^
+
 error[E0493]: destructor of `E` cannot be evaluated at compile-time
   --> $DIR/const-drop-bound.rs:12:13
    |
 LL |         Err(_e) => None,
    |             ^^ the destructor for this type cannot be evaluated in constant functions
 
-error: aborting due to 1 previous error
+error: aborting due to 4 previous errors
 
 For more information about this error, try `rustc --explain E0493`.
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/const-drop-fail-2.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-drop-fail-2.stderr
index 6f75924f0aa..085d9e71012 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/const-drop-fail-2.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-drop-fail-2.stderr
@@ -1,3 +1,9 @@
+error: `~const` can only be applied to `#[const_trait]` traits
+  --> $DIR/const-drop-fail-2.rs:21:26
+   |
+LL | const fn check<T: ~const Destruct>(_: T) {}
+   |                          ^^^^^^^^
+
 error[E0493]: destructor of `T` cannot be evaluated at compile-time
   --> $DIR/const-drop-fail-2.rs:21:36
    |
@@ -6,6 +12,6 @@ LL | const fn check<T: ~const Destruct>(_: T) {}
    |                                    |
    |                                    the destructor for this type cannot be evaluated in constant functions
 
-error: aborting due to 1 previous error
+error: aborting due to 2 previous errors
 
 For more information about this error, try `rustc --explain E0493`.
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/const-drop-fail.precise.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-drop-fail.precise.stderr
index 9afa2072dde..e95215d4715 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/const-drop-fail.precise.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-drop-fail.precise.stderr
@@ -1,3 +1,9 @@
+error: `~const` can only be applied to `#[const_trait]` traits
+  --> $DIR/const-drop-fail.rs:24:26
+   |
+LL | const fn check<T: ~const Destruct>(_: T) {}
+   |                          ^^^^^^^^
+
 error[E0493]: destructor of `T` cannot be evaluated at compile-time
   --> $DIR/const-drop-fail.rs:24:36
    |
@@ -54,7 +60,7 @@ LL | | }
    | |_- in this macro invocation
    = note: this error originates in the macro `check_all` (in Nightly builds, run with -Z macro-backtrace for more info)
 
-error: aborting due to 3 previous errors
+error: aborting due to 4 previous errors
 
 Some errors have detailed explanations: E0080, E0493.
 For more information about an error, try `rustc --explain E0080`.
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/const-drop-fail.stock.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-drop-fail.stock.stderr
index 09ebf55c57c..f9bd9953fcf 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/const-drop-fail.stock.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-drop-fail.stock.stderr
@@ -1,3 +1,9 @@
+error: `~const` can only be applied to `#[const_trait]` traits
+  --> $DIR/const-drop-fail.rs:24:26
+   |
+LL | const fn check<T: ~const Destruct>(_: T) {}
+   |                          ^^^^^^^^
+
 error[E0493]: destructor of `T` cannot be evaluated at compile-time
   --> $DIR/const-drop-fail.rs:24:36
    |
@@ -6,6 +12,6 @@ LL | const fn check<T: ~const Destruct>(_: T) {}
    |                                    |
    |                                    the destructor for this type cannot be evaluated in constant functions
 
-error: aborting due to 1 previous error
+error: aborting due to 2 previous errors
 
 For more information about this error, try `rustc --explain E0493`.
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/const-drop.precise.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-drop.precise.stderr
index 5ff3be713a7..6aace105896 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/const-drop.precise.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-drop.precise.stderr
@@ -1,3 +1,9 @@
+error: `~const` can only be applied to `#[const_trait]` traits
+  --> $DIR/const-drop.rs:19:22
+   |
+LL | const fn a<T: ~const Destruct>(_: T) {}
+   |                      ^^^^^^^^
+
 error[E0493]: destructor of `S<'_>` cannot be evaluated at compile-time
   --> $DIR/const-drop.rs:24:13
    |
@@ -86,7 +92,7 @@ LL | | }
    | |_- in this macro invocation
    = note: this error originates in the macro `implements_const_drop` (in Nightly builds, run with -Z macro-backtrace for more info)
 
-error: aborting due to 5 previous errors
+error: aborting due to 6 previous errors
 
 Some errors have detailed explanations: E0080, E0493.
 For more information about an error, try `rustc --explain E0080`.
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/const-drop.stock.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-drop.stock.stderr
index 40e39cbefbc..18dd4543c3d 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/const-drop.stock.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-drop.stock.stderr
@@ -1,3 +1,9 @@
+error: `~const` can only be applied to `#[const_trait]` traits
+  --> $DIR/const-drop.rs:19:22
+   |
+LL | const fn a<T: ~const Destruct>(_: T) {}
+   |                      ^^^^^^^^
+
 error[E0493]: destructor of `S<'_>` cannot be evaluated at compile-time
   --> $DIR/const-drop.rs:24:13
    |
@@ -14,6 +20,6 @@ LL | const fn a<T: ~const Destruct>(_: T) {}
    |                                |
    |                                the destructor for this type cannot be evaluated in constant functions
 
-error: aborting due to 2 previous errors
+error: aborting due to 3 previous errors
 
 For more information about this error, try `rustc --explain E0493`.
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/const-fns-are-early-bound.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-fns-are-early-bound.rs
index f6bba19a19e..faa913c7598 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/const-fns-are-early-bound.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-fns-are-early-bound.rs
@@ -7,7 +7,7 @@
 #![feature(
     auto_traits,
     const_trait_impl,
-    effects,
+    effects,  //~ WARN the feature `effects` is incomplete
     lang_items,
     no_core,
     staged_api,
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/const-fns-are-early-bound.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-fns-are-early-bound.stderr
new file mode 100644
index 00000000000..42b19fce28e
--- /dev/null
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-fns-are-early-bound.stderr
@@ -0,0 +1,11 @@
+warning: the feature `effects` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/const-fns-are-early-bound.rs:10:5
+   |
+LL |     effects,
+   |     ^^^^^^^
+   |
+   = note: see issue #102090 <https://github.com/rust-lang/rust/issues/102090> for more information
+   = note: `#[warn(incomplete_features)]` on by default
+
+warning: 1 warning emitted
+
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/const-impl-requires-const-trait.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-impl-requires-const-trait.stderr
index d20404e63b3..fb282d9ee2b 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/const-impl-requires-const-trait.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-impl-requires-const-trait.stderr
@@ -1,3 +1,12 @@
+warning: the feature `effects` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/const-impl-requires-const-trait.rs:3:30
+   |
+LL | #![feature(const_trait_impl, effects)]
+   |                              ^^^^^^^
+   |
+   = note: see issue #102090 <https://github.com/rust-lang/rust/issues/102090> for more information
+   = note: `#[warn(incomplete_features)]` on by default
+
 error: const `impl` for trait `A` which is not marked with `#[const_trait]`
   --> $DIR/const-impl-requires-const-trait.rs:8:12
    |
@@ -19,6 +28,6 @@ LL | impl const A for () {}
    = note: expressions using a const parameter must map each value to a distinct output value
    = note: proving the result of expressions other than the parameter are unique is not supported
 
-error: aborting due to 2 previous errors
+error: aborting due to 2 previous errors; 1 warning emitted
 
 For more information about this error, try `rustc --explain E0207`.
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/const-impl-trait.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-impl-trait.stderr
index 03038eb5c84..af50a115c69 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/const-impl-trait.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-impl-trait.stderr
@@ -1,28 +1,244 @@
-error[E0277]: can't compare `()` with `()`
-  --> $DIR/const-impl-trait.rs:36:17
+error[E0635]: unknown feature `const_cmp`
+  --> $DIR/const-impl-trait.rs:8:5
    |
-LL |     assert!(cmp(&()));
-   |             --- ^^^ no implementation for `() == ()`
+LL |     const_cmp,
+   |     ^^^^^^^^^
+
+error: `~const` can only be applied to `#[const_trait]` traits
+  --> $DIR/const-impl-trait.rs:13:30
+   |
+LL | const fn cmp(a: &impl ~const PartialEq) -> bool {
+   |                              ^^^^^^^^^
+
+error: `~const` can only be applied to `#[const_trait]` traits
+  --> $DIR/const-impl-trait.rs:17:30
+   |
+LL | const fn wrap(x: impl ~const PartialEq + ~const Destruct)
+   |                              ^^^^^^^^^
+
+error: `~const` can only be applied to `#[const_trait]` traits
+  --> $DIR/const-impl-trait.rs:17:49
+   |
+LL | const fn wrap(x: impl ~const PartialEq + ~const Destruct)
+   |                                                 ^^^^^^^^
+
+error: `~const` can only be applied to `#[const_trait]` traits
+  --> $DIR/const-impl-trait.rs:18:20
+   |
+LL |     -> impl ~const PartialEq + ~const Destruct
+   |                    ^^^^^^^^^
+
+error: `~const` can only be applied to `#[const_trait]` traits
+  --> $DIR/const-impl-trait.rs:18:39
+   |
+LL |     -> impl ~const PartialEq + ~const Destruct
+   |                                       ^^^^^^^^
+
+error: `~const` can only be applied to `#[const_trait]` traits
+  --> $DIR/const-impl-trait.rs:18:20
+   |
+LL |     -> impl ~const PartialEq + ~const Destruct
+   |                    ^^^^^^^^^
+   |
+   = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
+
+error: `~const` can only be applied to `#[const_trait]` traits
+  --> $DIR/const-impl-trait.rs:18:39
+   |
+LL |     -> impl ~const PartialEq + ~const Destruct
+   |                                       ^^^^^^^^
+   |
+   = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
+
+error: `~const` can only be applied to `#[const_trait]` traits
+  --> $DIR/const-impl-trait.rs:25:29
+   |
+LL |     fn huh() -> impl ~const PartialEq + ~const Destruct + Copy;
+   |                             ^^^^^^^^^
+
+error: `~const` can only be applied to `#[const_trait]` traits
+  --> $DIR/const-impl-trait.rs:25:48
+   |
+LL |     fn huh() -> impl ~const PartialEq + ~const Destruct + Copy;
+   |                                                ^^^^^^^^
+
+error: `~const` can only be applied to `#[const_trait]` traits
+  --> $DIR/const-impl-trait.rs:25:29
+   |
+LL |     fn huh() -> impl ~const PartialEq + ~const Destruct + Copy;
+   |                             ^^^^^^^^^
+   |
+   = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
+
+error: `~const` can only be applied to `#[const_trait]` traits
+  --> $DIR/const-impl-trait.rs:25:48
+   |
+LL |     fn huh() -> impl ~const PartialEq + ~const Destruct + Copy;
+   |                                                ^^^^^^^^
+   |
+   = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
+
+error: `~const` can only be applied to `#[const_trait]` traits
+  --> $DIR/const-impl-trait.rs:25:29
+   |
+LL |     fn huh() -> impl ~const PartialEq + ~const Destruct + Copy;
+   |                             ^^^^^^^^^
+   |
+   = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
+
+error: `~const` can only be applied to `#[const_trait]` traits
+  --> $DIR/const-impl-trait.rs:25:48
+   |
+LL |     fn huh() -> impl ~const PartialEq + ~const Destruct + Copy;
+   |                                                ^^^^^^^^
+   |
+   = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
+
+error: `~const` can only be applied to `#[const_trait]` traits
+  --> $DIR/const-impl-trait.rs:29:29
+   |
+LL |     fn huh() -> impl ~const PartialEq + ~const Destruct + Copy {
+   |                             ^^^^^^^^^
+
+error: `~const` can only be applied to `#[const_trait]` traits
+  --> $DIR/const-impl-trait.rs:29:48
+   |
+LL |     fn huh() -> impl ~const PartialEq + ~const Destruct + Copy {
+   |                                                ^^^^^^^^
+
+error: `~const` can only be applied to `#[const_trait]` traits
+  --> $DIR/const-impl-trait.rs:29:29
+   |
+LL |     fn huh() -> impl ~const PartialEq + ~const Destruct + Copy {
+   |                             ^^^^^^^^^
+   |
+   = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
+
+error: `~const` can only be applied to `#[const_trait]` traits
+  --> $DIR/const-impl-trait.rs:29:48
+   |
+LL |     fn huh() -> impl ~const PartialEq + ~const Destruct + Copy {
+   |                                                ^^^^^^^^
+   |
+   = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
+
+error: `~const` can only be applied to `#[const_trait]` traits
+  --> $DIR/const-impl-trait.rs:50:41
+   |
+LL | const fn apit(_: impl ~const T + ~const Destruct) {}
+   |                                         ^^^^^^^^
+
+error: `~const` can only be applied to `#[const_trait]` traits
+  --> $DIR/const-impl-trait.rs:54:73
+   |
+LL | const fn apit_assoc_bound(_: impl IntoIterator<Item: ~const T> + ~const Destruct) {}
+   |                                                                         ^^^^^^^^
+
+error: `~const` can only be applied to `#[const_trait]` traits
+  --> $DIR/const-impl-trait.rs:25:29
+   |
+LL |     fn huh() -> impl ~const PartialEq + ~const Destruct + Copy;
+   |                             ^^^^^^^^^
+   |
+   = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
+
+error: `~const` can only be applied to `#[const_trait]` traits
+  --> $DIR/const-impl-trait.rs:25:48
+   |
+LL |     fn huh() -> impl ~const PartialEq + ~const Destruct + Copy;
+   |                                                ^^^^^^^^
+   |
+   = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
+
+error[E0493]: destructor of `impl PartialEq + Destruct` cannot be evaluated at compile-time
+  --> $DIR/const-impl-trait.rs:37:26
+   |
+LL |     assert!(wrap(123) == wrap(123));
+   |                          ^^^^^^^^^- value is dropped here
+   |                          |
+   |                          the destructor for this type cannot be evaluated in constants
+
+error[E0493]: destructor of `impl PartialEq + Destruct` cannot be evaluated at compile-time
+  --> $DIR/const-impl-trait.rs:37:26
+   |
+LL |     assert!(wrap(123) == wrap(123));
+   |                          ^^^^^^^^^- value is dropped here
+   |                          |
+   |                          the destructor for this type cannot be evaluated in constants
+   |
+   = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
+
+error[E0493]: destructor of `impl PartialEq + Destruct` cannot be evaluated at compile-time
+  --> $DIR/const-impl-trait.rs:37:13
+   |
+LL |     assert!(wrap(123) == wrap(123));
+   |             ^^^^^^^^^             - value is dropped here
    |             |
-   |             required by a bound introduced by this call
+   |             the destructor for this type cannot be evaluated in constants
+
+error[E0493]: destructor of `impl PartialEq + Destruct` cannot be evaluated at compile-time
+  --> $DIR/const-impl-trait.rs:37:13
    |
-   = help: the trait `const PartialEq` is not implemented for `()`
-   = help: the trait `PartialEq` is implemented for `()`
-note: required by a bound in `cmp`
-  --> $DIR/const-impl-trait.rs:13:23
+LL |     assert!(wrap(123) == wrap(123));
+   |             ^^^^^^^^^             - value is dropped here
+   |             |
+   |             the destructor for this type cannot be evaluated in constants
    |
-LL | const fn cmp(a: &impl ~const PartialEq) -> bool {
-   |                       ^^^^^^^^^^^^^^^^ required by this bound in `cmp`
+   = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
+
+error[E0493]: destructor of `impl PartialEq + Destruct` cannot be evaluated at compile-time
+  --> $DIR/const-impl-trait.rs:38:26
+   |
+LL |     assert!(wrap(123) != wrap(456));
+   |                          ^^^^^^^^^- value is dropped here
+   |                          |
+   |                          the destructor for this type cannot be evaluated in constants
+
+error[E0493]: destructor of `impl PartialEq + Destruct` cannot be evaluated at compile-time
+  --> $DIR/const-impl-trait.rs:38:26
+   |
+LL |     assert!(wrap(123) != wrap(456));
+   |                          ^^^^^^^^^- value is dropped here
+   |                          |
+   |                          the destructor for this type cannot be evaluated in constants
+   |
+   = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
+
+error[E0493]: destructor of `impl PartialEq + Destruct` cannot be evaluated at compile-time
+  --> $DIR/const-impl-trait.rs:38:13
+   |
+LL |     assert!(wrap(123) != wrap(456));
+   |             ^^^^^^^^^             - value is dropped here
+   |             |
+   |             the destructor for this type cannot be evaluated in constants
+
+error[E0493]: destructor of `impl PartialEq + Destruct` cannot be evaluated at compile-time
+  --> $DIR/const-impl-trait.rs:38:13
+   |
+LL |     assert!(wrap(123) != wrap(456));
+   |             ^^^^^^^^^             - value is dropped here
+   |             |
+   |             the destructor for this type cannot be evaluated in constants
+   |
+   = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
+
+error[E0493]: destructor of `impl ~const T + ~const Destruct` cannot be evaluated at compile-time
+  --> $DIR/const-impl-trait.rs:50:15
+   |
+LL | const fn apit(_: impl ~const T + ~const Destruct) {}
+   |               ^                                    - value is dropped here
+   |               |
+   |               the destructor for this type cannot be evaluated in constant functions
 
-error[E0369]: binary operation `==` cannot be applied to type `&impl ~const PartialEq`
-  --> $DIR/const-impl-trait.rs:14:7
+error[E0493]: destructor of `impl IntoIterator<Item : ~const T> + ~const Destruct` cannot be evaluated at compile-time
+  --> $DIR/const-impl-trait.rs:54:27
    |
-LL |     a == a
-   |     - ^^ - &impl ~const PartialEq
-   |     |
-   |     &impl ~const PartialEq
+LL | const fn apit_assoc_bound(_: impl IntoIterator<Item: ~const T> + ~const Destruct) {}
+   |                           ^                                                        - value is dropped here
+   |                           |
+   |                           the destructor for this type cannot be evaluated in constant functions
 
-error: aborting due to 2 previous errors
+error: aborting due to 32 previous errors
 
-Some errors have detailed explanations: E0277, E0369.
-For more information about an error, try `rustc --explain E0277`.
+Some errors have detailed explanations: E0493, E0635.
+For more information about an error, try `rustc --explain E0493`.
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/const-trait-bounds-trait-objects.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-trait-bounds-trait-objects.rs
index 79719dae44f..8e71fa4d519 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/const-trait-bounds-trait-objects.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-trait-bounds-trait-objects.rs
@@ -1,4 +1,4 @@
-#![feature(const_trait_impl, effects)]
+#![feature(const_trait_impl, effects)] //~ WARN the feature `effects` is incomplete
 //@ edition: 2021
 
 #[const_trait]
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/const-trait-bounds-trait-objects.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-trait-bounds-trait-objects.stderr
index 04c2dc2e2e0..7d774bef0e9 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/const-trait-bounds-trait-objects.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-trait-bounds-trait-objects.stderr
@@ -26,5 +26,14 @@ LL | const fn take(_: &dyn ~const NonConst) {}
    |
    = note: trait objects cannot have `~const` trait bounds
 
-error: aborting due to 4 previous errors
+warning: the feature `effects` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/const-trait-bounds-trait-objects.rs:1:30
+   |
+LL | #![feature(const_trait_impl, effects)]
+   |                              ^^^^^^^
+   |
+   = note: see issue #102090 <https://github.com/rust-lang/rust/issues/102090> for more information
+   = note: `#[warn(incomplete_features)]` on by default
+
+error: aborting due to 4 previous errors; 1 warning emitted
 
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/const_derives/derive-const-non-const-type.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/const_derives/derive-const-non-const-type.stderr
index 4b009446dbc..1e091283510 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/const_derives/derive-const-non-const-type.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/const_derives/derive-const-non-const-type.stderr
@@ -1,3 +1,12 @@
+warning: the feature `effects` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/derive-const-non-const-type.rs:2:26
+   |
+LL | #![feature(derive_const, effects)]
+   |                          ^^^^^^^
+   |
+   = note: see issue #102090 <https://github.com/rust-lang/rust/issues/102090> for more information
+   = note: `#[warn(incomplete_features)]` on by default
+
 error: const `impl` for trait `Default` which is not marked with `#[const_trait]`
   --> $DIR/derive-const-non-const-type.rs:10:16
    |
@@ -13,6 +22,6 @@ error[E0207]: the const parameter `host` is not constrained by the impl trait, s
    = note: expressions using a const parameter must map each value to a distinct output value
    = note: proving the result of expressions other than the parameter are unique is not supported
 
-error: aborting due to 2 previous errors
+error: aborting due to 2 previous errors; 1 warning emitted
 
 For more information about this error, try `rustc --explain E0207`.
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/const_derives/derive-const-use.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/const_derives/derive-const-use.stderr
index e45c1a1f46f..925b2c58ed7 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/const_derives/derive-const-use.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/const_derives/derive-const-use.stderr
@@ -1,3 +1,18 @@
+warning: the feature `effects` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/derive-const-use.rs:3:76
+   |
+LL | #![feature(const_trait_impl, const_cmp, const_default_impls, derive_const, effects)]
+   |                                                                            ^^^^^^^
+   |
+   = note: see issue #102090 <https://github.com/rust-lang/rust/issues/102090> for more information
+   = note: `#[warn(incomplete_features)]` on by default
+
+error[E0635]: unknown feature `const_cmp`
+  --> $DIR/derive-const-use.rs:3:30
+   |
+LL | #![feature(const_trait_impl, const_cmp, const_default_impls, derive_const, effects)]
+   |                              ^^^^^^^^^
+
 error[E0635]: unknown feature `const_default_impls`
   --> $DIR/derive-const-use.rs:3:41
    |
@@ -22,6 +37,24 @@ LL | impl const Default for A {
    = note: expressions using a const parameter must map each value to a distinct output value
    = note: proving the result of expressions other than the parameter are unique is not supported
 
+error: const `impl` for trait `PartialEq` which is not marked with `#[const_trait]`
+  --> $DIR/derive-const-use.rs:11:12
+   |
+LL | impl const PartialEq for A {
+   |            ^^^^^^^^^
+   |
+   = note: marking a trait with `#[const_trait]` ensures all default method bodies are `const`
+   = note: adding a non-const method body in the future would be a breaking change
+
+error[E0207]: the const parameter `host` is not constrained by the impl trait, self type, or predicates
+  --> $DIR/derive-const-use.rs:11:6
+   |
+LL | impl const PartialEq for A {
+   |      ^^^^^ unconstrained const parameter
+   |
+   = note: expressions using a const parameter must map each value to a distinct output value
+   = note: proving the result of expressions other than the parameter are unique is not supported
+
 error: const `impl` for trait `Default` which is not marked with `#[const_trait]`
   --> $DIR/derive-const-use.rs:15:16
    |
@@ -37,19 +70,83 @@ error[E0207]: the const parameter `host` is not constrained by the impl trait, s
    = note: expressions using a const parameter must map each value to a distinct output value
    = note: proving the result of expressions other than the parameter are unique is not supported
 
-error[E0308]: mismatched types
-  --> $DIR/derive-const-use.rs:16:14
+error: const `impl` for trait `PartialEq` which is not marked with `#[const_trait]`
+  --> $DIR/derive-const-use.rs:15:25
+   |
+LL | #[derive_const(Default, PartialEq)]
+   |                         ^^^^^^^^^
+   |
+   = note: marking a trait with `#[const_trait]` ensures all default method bodies are `const`
+   = note: adding a non-const method body in the future would be a breaking change
+   = note: this error originates in the derive macro `PartialEq` (in Nightly builds, run with -Z macro-backtrace for more info)
+
+error[E0207]: the const parameter `host` is not constrained by the impl trait, self type, or predicates
+   |
+   = note: expressions using a const parameter must map each value to a distinct output value
+   = note: proving the result of expressions other than the parameter are unique is not supported
+   = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
+
+error[E0284]: type annotations needed
+  --> $DIR/derive-const-use.rs:18:35
+   |
+LL | const _: () = assert!(S((), A) == S::default());
+   |                                   ^^^^^^^^^^^^ cannot infer the value of the constant `_`
+   |
+note: required for `S` to implement `Default`
+  --> $DIR/derive-const-use.rs:15:16
+   |
+LL | #[derive_const(Default, PartialEq)]
+   |                ^^^^^^^ unsatisfied trait bound introduced in this `derive` macro
+   = note: this error originates in the derive macro `Default` (in Nightly builds, run with -Z macro-backtrace for more info)
+
+error[E0284]: type annotations needed
+  --> $DIR/derive-const-use.rs:18:23
+   |
+LL | const _: () = assert!(S((), A) == S::default());
+   |                       ^^^^^^^^^^^^^^^^^^^^^^^^ cannot infer the value of the constant `_`
+   |
+note: required for `S` to implement `PartialEq`
+  --> $DIR/derive-const-use.rs:15:25
+   |
+LL | #[derive_const(Default, PartialEq)]
+   |                         ^^^^^^^^^ unsatisfied trait bound introduced in this `derive` macro
+   = note: this error originates in the derive macro `PartialEq` (in Nightly builds, run with -Z macro-backtrace for more info)
+
+error[E0284]: type annotations needed
+  --> $DIR/derive-const-use.rs:16:18
+   |
+LL | #[derive_const(Default, PartialEq)]
+   |                ------- in this derive macro expansion
+LL | pub struct S((), A);
+   |                  ^ cannot infer the value of the constant `_`
+   |
+note: required for `A` to implement `Default`
+  --> $DIR/derive-const-use.rs:7:12
+   |
+LL | impl const Default for A {
+   |      ----- ^^^^^^^     ^
+   |      |
+   |      unsatisfied trait bound introduced here
+   = note: this error originates in the derive macro `Default` (in Nightly builds, run with -Z macro-backtrace for more info)
+
+error[E0284]: type annotations needed
+  --> $DIR/derive-const-use.rs:16:18
    |
 LL | #[derive_const(Default, PartialEq)]
    |                         --------- in this derive macro expansion
 LL | pub struct S((), A);
-   |              ^^ expected `host`, found `true`
+   |                  ^ cannot infer the value of the constant `_`
+   |
+note: required for `A` to implement `PartialEq`
+  --> $DIR/derive-const-use.rs:11:12
    |
-   = note: expected constant `host`
-              found constant `true`
+LL | impl const PartialEq for A {
+   |      ----- ^^^^^^^^^     ^
+   |      |
+   |      unsatisfied trait bound introduced here
    = note: this error originates in the derive macro `PartialEq` (in Nightly builds, run with -Z macro-backtrace for more info)
 
-error: aborting due to 6 previous errors
+error: aborting due to 14 previous errors; 1 warning emitted
 
-Some errors have detailed explanations: E0207, E0308, E0635.
+Some errors have detailed explanations: E0207, E0284, E0635.
 For more information about an error, try `rustc --explain E0207`.
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/const_derives/derive-const-with-params.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/const_derives/derive-const-with-params.rs
index 0eb422728c6..c032c76d38f 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/const_derives/derive-const-with-params.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/const_derives/derive-const-with-params.rs
@@ -1,4 +1,5 @@
-//@ check-pass
+//@ known-bug: #110395
+// FIXME(effects) check-pass
 
 #![feature(derive_const)]
 #![feature(const_trait_impl, effects)]
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/const_derives/derive-const-with-params.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/const_derives/derive-const-with-params.stderr
new file mode 100644
index 00000000000..5d3aa250d18
--- /dev/null
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/const_derives/derive-const-with-params.stderr
@@ -0,0 +1,49 @@
+warning: the feature `effects` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/derive-const-with-params.rs:5:30
+   |
+LL | #![feature(const_trait_impl, effects)]
+   |                              ^^^^^^^
+   |
+   = note: see issue #102090 <https://github.com/rust-lang/rust/issues/102090> for more information
+   = note: `#[warn(incomplete_features)]` on by default
+
+error: const `impl` for trait `PartialEq` which is not marked with `#[const_trait]`
+  --> $DIR/derive-const-with-params.rs:7:16
+   |
+LL | #[derive_const(PartialEq)]
+   |                ^^^^^^^^^
+   |
+   = note: marking a trait with `#[const_trait]` ensures all default method bodies are `const`
+   = note: adding a non-const method body in the future would be a breaking change
+   = note: this error originates in the derive macro `PartialEq` (in Nightly builds, run with -Z macro-backtrace for more info)
+
+error: `~const` can only be applied to `#[const_trait]` traits
+  --> $DIR/derive-const-with-params.rs:7:16
+   |
+LL | #[derive_const(PartialEq)]
+   |                ^^^^^^^^^
+   |
+   = note: this error originates in the derive macro `PartialEq` (in Nightly builds, run with -Z macro-backtrace for more info)
+
+error[E0207]: the const parameter `host` is not constrained by the impl trait, self type, or predicates
+   |
+   = note: expressions using a const parameter must map each value to a distinct output value
+   = note: proving the result of expressions other than the parameter are unique is not supported
+
+error[E0284]: type annotations needed
+  --> $DIR/derive-const-with-params.rs:11:5
+   |
+LL |     a == b
+   |     ^^^^^^ cannot infer the value of the constant `_`
+   |
+note: required for `Reverse<i32>` to implement `PartialEq`
+  --> $DIR/derive-const-with-params.rs:7:16
+   |
+LL | #[derive_const(PartialEq)]
+   |                ^^^^^^^^^ unsatisfied trait bound introduced in this `derive` macro
+   = note: this error originates in the derive macro `PartialEq` (in Nightly builds, run with -Z macro-backtrace for more info)
+
+error: aborting due to 4 previous errors; 1 warning emitted
+
+Some errors have detailed explanations: E0207, E0284.
+For more information about an error, try `rustc --explain E0207`.
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/cross-crate-default-method-body-is-const.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/cross-crate-default-method-body-is-const.rs
index 54e5c95c259..d8be8b13d08 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/cross-crate-default-method-body-is-const.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/cross-crate-default-method-body-is-const.rs
@@ -3,7 +3,7 @@
 //
 //@ check-pass
 
-#![feature(const_trait_impl, effects)]
+#![feature(const_trait_impl, effects)] //~ WARN the feature `effects` is incomplete
 
 //@ aux-build: cross-crate.rs
 extern crate cross_crate;
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/cross-crate-default-method-body-is-const.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/cross-crate-default-method-body-is-const.stderr
new file mode 100644
index 00000000000..2f1e1e6b8d2
--- /dev/null
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/cross-crate-default-method-body-is-const.stderr
@@ -0,0 +1,11 @@
+warning: the feature `effects` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/cross-crate-default-method-body-is-const.rs:6:30
+   |
+LL | #![feature(const_trait_impl, effects)]
+   |                              ^^^^^^^
+   |
+   = note: see issue #102090 <https://github.com/rust-lang/rust/issues/102090> for more information
+   = note: `#[warn(incomplete_features)]` on by default
+
+warning: 1 warning emitted
+
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/cross-crate.gated.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/cross-crate.gated.stderr
new file mode 100644
index 00000000000..2ce29a74eae
--- /dev/null
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/cross-crate.gated.stderr
@@ -0,0 +1,11 @@
+warning: the feature `effects` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/cross-crate.rs:3:60
+   |
+LL | #![cfg_attr(any(gated, gatednc), feature(const_trait_impl, effects))]
+   |                                                            ^^^^^^^
+   |
+   = note: see issue #102090 <https://github.com/rust-lang/rust/issues/102090> for more information
+   = note: `#[warn(incomplete_features)]` on by default
+
+warning: 1 warning emitted
+
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/cross-crate.gatednc.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/cross-crate.gatednc.stderr
index f0ac953fd5d..ddb5b3c7c50 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/cross-crate.gatednc.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/cross-crate.gatednc.stderr
@@ -1,11 +1,20 @@
+warning: the feature `effects` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/cross-crate.rs:3:60
+   |
+LL | #![cfg_attr(any(gated, gatednc), feature(const_trait_impl, effects))]
+   |                                                            ^^^^^^^
+   |
+   = note: see issue #102090 <https://github.com/rust-lang/rust/issues/102090> for more information
+   = note: `#[warn(incomplete_features)]` on by default
+
 error[E0277]: the trait bound `cross_crate::NonConst: ~const cross_crate::MyTrait` is not satisfied
-  --> $DIR/cross-crate.rs:17:14
+  --> $DIR/cross-crate.rs:18:14
    |
 LL |     NonConst.func();
    |              ^^^^ the trait `~const cross_crate::MyTrait` is not implemented for `cross_crate::NonConst`
    |
    = help: the trait `cross_crate::MyTrait` is implemented for `cross_crate::NonConst`
 
-error: aborting due to 1 previous error
+error: aborting due to 1 previous error; 1 warning emitted
 
 For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/cross-crate.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/cross-crate.rs
index 587dd70c18b..04c101d0fc5 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/cross-crate.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/cross-crate.rs
@@ -1,6 +1,7 @@
 //@ revisions: stock gated stocknc gatednc
 //@ [gated] check-pass
 #![cfg_attr(any(gated, gatednc), feature(const_trait_impl, effects))]
+//[gated,gatednc]~^ WARN the feature `effects` is incomplete
 
 //@ aux-build: cross-crate.rs
 extern crate cross_crate;
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/cross-crate.stock.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/cross-crate.stock.stderr
index a0c50ac7e61..3df875057f2 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/cross-crate.stock.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/cross-crate.stock.stderr
@@ -1,5 +1,5 @@
 error[E0015]: cannot call non-const fn `<cross_crate::Const as cross_crate::MyTrait>::func` in constant functions
-  --> $DIR/cross-crate.rs:20:11
+  --> $DIR/cross-crate.rs:21:11
    |
 LL |     Const.func();
    |           ^^^^^^
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/cross-crate.stocknc.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/cross-crate.stocknc.stderr
index 312818ae631..e56a5e4165c 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/cross-crate.stocknc.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/cross-crate.stocknc.stderr
@@ -1,5 +1,5 @@
 error[E0015]: cannot call non-const fn `<cross_crate::NonConst as cross_crate::MyTrait>::func` in constant functions
-  --> $DIR/cross-crate.rs:17:14
+  --> $DIR/cross-crate.rs:18:14
    |
 LL |     NonConst.func();
    |              ^^^^^^
@@ -11,7 +11,7 @@ LL + #![feature(const_trait_impl)]
    |
 
 error[E0015]: cannot call non-const fn `<cross_crate::Const as cross_crate::MyTrait>::func` in constant functions
-  --> $DIR/cross-crate.rs:20:11
+  --> $DIR/cross-crate.rs:21:11
    |
 LL |     Const.func();
    |           ^^^^^^
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/default-method-body-is-const-same-trait-ck.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/default-method-body-is-const-same-trait-ck.rs
index da27724007d..64f23824b39 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/default-method-body-is-const-same-trait-ck.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/default-method-body-is-const-same-trait-ck.rs
@@ -1,4 +1,4 @@
-#![feature(const_trait_impl, effects)]
+#![feature(const_trait_impl, effects)] //~ WARN the feature `effects` is incomplete
 
 #[const_trait]
 pub trait Tr {
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/default-method-body-is-const-same-trait-ck.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/default-method-body-is-const-same-trait-ck.stderr
index 29db6109a98..67a936d0882 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/default-method-body-is-const-same-trait-ck.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/default-method-body-is-const-same-trait-ck.stderr
@@ -1,3 +1,12 @@
+warning: the feature `effects` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/default-method-body-is-const-same-trait-ck.rs:1:30
+   |
+LL | #![feature(const_trait_impl, effects)]
+   |                              ^^^^^^^
+   |
+   = note: see issue #102090 <https://github.com/rust-lang/rust/issues/102090> for more information
+   = note: `#[warn(incomplete_features)]` on by default
+
 error[E0277]: the trait bound `(): ~const Tr` is not satisfied
   --> $DIR/default-method-body-is-const-same-trait-ck.rs:8:12
    |
@@ -6,6 +15,6 @@ LL |         ().a()
    |
    = help: the trait `Tr` is implemented for `()`
 
-error: aborting due to 1 previous error
+error: aborting due to 1 previous error; 1 warning emitted
 
 For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/do-not-const-check-override.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/do-not-const-check-override.rs
index 8b51f65fd04..be5e66478df 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/do-not-const-check-override.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/do-not-const-check-override.rs
@@ -1,5 +1,5 @@
 //@ check-pass
-#![feature(const_trait_impl, rustc_attrs, effects)]
+#![feature(const_trait_impl, rustc_attrs, effects)] //~ WARN the feature `effects` is incomplete
 
 #[const_trait]
 trait Foo {
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/do-not-const-check-override.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/do-not-const-check-override.stderr
new file mode 100644
index 00000000000..4be1160b58c
--- /dev/null
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/do-not-const-check-override.stderr
@@ -0,0 +1,11 @@
+warning: the feature `effects` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/do-not-const-check-override.rs:2:43
+   |
+LL | #![feature(const_trait_impl, rustc_attrs, effects)]
+   |                                           ^^^^^^^
+   |
+   = note: see issue #102090 <https://github.com/rust-lang/rust/issues/102090> for more information
+   = note: `#[warn(incomplete_features)]` on by default
+
+warning: 1 warning emitted
+
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/auxiliary/cross-crate.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/auxiliary/cross-crate.rs
index a74c50cc8fa..5c32eee8737 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/auxiliary/cross-crate.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/auxiliary/cross-crate.rs
@@ -1,4 +1,4 @@
-#![feature(const_trait_impl, effects)]
+#![feature(const_trait_impl, effects)] //~ WARN the feature `effects` is incomplete
 
 pub const fn foo() {}
 
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/effect-param-infer.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/effect-param-infer.rs
index d35e9bb7f1e..b354591e007 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/effect-param-infer.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/effect-param-infer.rs
@@ -3,7 +3,7 @@
 //
 //@ check-pass
 
-#![feature(const_trait_impl, effects)]
+#![feature(const_trait_impl, effects)] //~ WARN the feature `effects` is incomplete
 
 #[const_trait]
 pub trait Foo<Rhs: ?Sized = Self> {
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/effect-param-infer.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/effect-param-infer.stderr
new file mode 100644
index 00000000000..7ceb3669e59
--- /dev/null
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/effect-param-infer.stderr
@@ -0,0 +1,11 @@
+warning: the feature `effects` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/effect-param-infer.rs:6:30
+   |
+LL | #![feature(const_trait_impl, effects)]
+   |                              ^^^^^^^
+   |
+   = note: see issue #102090 <https://github.com/rust-lang/rust/issues/102090> for more information
+   = note: `#[warn(incomplete_features)]` on by default
+
+warning: 1 warning emitted
+
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/fallback.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/fallback.rs
index aa75aa9c989..d949e4b829f 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/fallback.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/fallback.rs
@@ -1,6 +1,6 @@
 //@ check-pass
 
-#![feature(effects)]
+#![feature(effects)] //~ WARN the feature `effects` is incomplete
 
 pub const fn owo() {}
 
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/fallback.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/fallback.stderr
new file mode 100644
index 00000000000..f7d5de829b2
--- /dev/null
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/fallback.stderr
@@ -0,0 +1,11 @@
+warning: the feature `effects` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/fallback.rs:3:12
+   |
+LL | #![feature(effects)]
+   |            ^^^^^^^
+   |
+   = note: see issue #102090 <https://github.com/rust-lang/rust/issues/102090> for more information
+   = note: `#[warn(incomplete_features)]` on by default
+
+warning: 1 warning emitted
+
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/helloworld.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/helloworld.rs
index 502062a559c..eed8cdc447c 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/helloworld.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/helloworld.rs
@@ -3,7 +3,12 @@
 // gate-test-effects
 // ^ effects doesn't have a gate so we will trick tidy into thinking this is a gate test
 
-#![feature(const_trait_impl, effects, core_intrinsics, const_eval_select)]
+#![feature(
+    const_trait_impl,
+    effects, //~ WARN the feature `effects` is incomplete
+    core_intrinsics,
+    const_eval_select
+)]
 
 // ensure we are passing in the correct host effect in always const contexts.
 
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/helloworld.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/helloworld.stderr
new file mode 100644
index 00000000000..8719c5cbcef
--- /dev/null
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/helloworld.stderr
@@ -0,0 +1,11 @@
+warning: the feature `effects` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/helloworld.rs:8:5
+   |
+LL |     effects,
+   |     ^^^^^^^
+   |
+   = note: see issue #102090 <https://github.com/rust-lang/rust/issues/102090> for more information
+   = note: `#[warn(incomplete_features)]` on by default
+
+warning: 1 warning emitted
+
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/ice-112822-expected-type-for-param.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/ice-112822-expected-type-for-param.rs
index 21197fcaa27..9a9016de3a0 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/ice-112822-expected-type-for-param.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/ice-112822-expected-type-for-param.rs
@@ -1,16 +1,15 @@
-#![feature(const_trait_impl, effects)]
+#![feature(const_trait_impl, effects)] //~ WARN the feature `effects` is incomplete
 
 const fn test() -> impl ~const Fn() {
     //~^ ERROR `~const` can only be applied to `#[const_trait]` traits
     //~| ERROR `~const` can only be applied to `#[const_trait]` traits
-    //~| ERROR cycle detected
     const move || { //~ ERROR const closures are experimental
         let sl: &[u8] = b"foo";
 
         match sl {
             [first, remainder @ ..] => {
                 assert_eq!(first, &b'f');
-                //~^ ERROR can't compare `&u8` with `&u8`
+                //~^ ERROR cannot call non-const fn
             }
             [] => panic!(),
         }
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/ice-112822-expected-type-for-param.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/ice-112822-expected-type-for-param.stderr
index 2f805110917..3f0ed13d665 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/ice-112822-expected-type-for-param.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/ice-112822-expected-type-for-param.stderr
@@ -1,5 +1,5 @@
 error[E0658]: const closures are experimental
-  --> $DIR/ice-112822-expected-type-for-param.rs:7:5
+  --> $DIR/ice-112822-expected-type-for-param.rs:6:5
    |
 LL |     const move || {
    |     ^^^^^
@@ -8,6 +8,15 @@ LL |     const move || {
    = help: add `#![feature(const_closures)]` to the crate attributes to enable
    = note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
 
+warning: the feature `effects` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/ice-112822-expected-type-for-param.rs:1:30
+   |
+LL | #![feature(const_trait_impl, effects)]
+   |                              ^^^^^^^
+   |
+   = note: see issue #102090 <https://github.com/rust-lang/rust/issues/102090> for more information
+   = note: `#[warn(incomplete_features)]` on by default
+
 error: `~const` can only be applied to `#[const_trait]` traits
   --> $DIR/ice-112822-expected-type-for-param.rs:3:32
    |
@@ -22,47 +31,16 @@ LL | const fn test() -> impl ~const Fn() {
    |
    = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
 
-error[E0277]: can't compare `&u8` with `&u8`
-  --> $DIR/ice-112822-expected-type-for-param.rs:12:17
+error[E0015]: cannot call non-const fn `core::panicking::assert_failed::<&u8, &u8>` in constant functions
+  --> $DIR/ice-112822-expected-type-for-param.rs:11:17
    |
 LL |                 assert_eq!(first, &b'f');
-   |                 ^^^^^^^^^^^^^^^^^^^^^^^^ no implementation for `&u8 == &u8`
+   |                 ^^^^^^^^^^^^^^^^^^^^^^^^
    |
-   = help: the trait `~const PartialEq<&u8>` is not implemented for `&u8`
+   = note: calls in constant functions are limited to constant functions, tuple structs and tuple variants
    = note: this error originates in the macro `assert_eq` (in Nightly builds, run with -Z macro-backtrace for more info)
 
-error[E0391]: cycle detected when computing type of opaque `test::{opaque#0}`
-  --> $DIR/ice-112822-expected-type-for-param.rs:3:20
-   |
-LL | const fn test() -> impl ~const Fn() {
-   |                    ^^^^^^^^^^^^^^^^
-   |
-note: ...which requires borrow-checking `test`...
-  --> $DIR/ice-112822-expected-type-for-param.rs:3:1
-   |
-LL | const fn test() -> impl ~const Fn() {
-   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-note: ...which requires promoting constants in MIR for `test`...
-  --> $DIR/ice-112822-expected-type-for-param.rs:3:1
-   |
-LL | const fn test() -> impl ~const Fn() {
-   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-note: ...which requires const checking `test`...
-  --> $DIR/ice-112822-expected-type-for-param.rs:3:1
-   |
-LL | const fn test() -> impl ~const Fn() {
-   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-   = note: ...which requires computing whether `test::{opaque#0}` is freeze...
-   = note: ...which requires evaluating trait selection obligation `test::{opaque#0}: core::marker::Freeze`...
-   = note: ...which again requires computing type of opaque `test::{opaque#0}`, completing the cycle
-note: cycle used when computing type of `test::{opaque#0}`
-  --> $DIR/ice-112822-expected-type-for-param.rs:3:20
-   |
-LL | const fn test() -> impl ~const Fn() {
-   |                    ^^^^^^^^^^^^^^^^
-   = note: see https://rustc-dev-guide.rust-lang.org/overview.html#queries and https://rustc-dev-guide.rust-lang.org/query.html for more information
-
-error: aborting due to 5 previous errors
+error: aborting due to 4 previous errors; 1 warning emitted
 
-Some errors have detailed explanations: E0277, E0391, E0658.
-For more information about an error, try `rustc --explain E0277`.
+Some errors have detailed explanations: E0015, E0658.
+For more information about an error, try `rustc --explain E0015`.
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/infer-fallback.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/infer-fallback.rs
index 85aabe46640..ff3a27c3ee4 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/infer-fallback.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/infer-fallback.rs
@@ -1,5 +1,5 @@
 //@ check-pass
-#![feature(const_trait_impl, effects)]
+#![feature(const_trait_impl, effects)] //~ WARN the feature `effects` is incomplete
 
 const fn a() {}
 
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/infer-fallback.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/infer-fallback.stderr
new file mode 100644
index 00000000000..49c7d395846
--- /dev/null
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/infer-fallback.stderr
@@ -0,0 +1,11 @@
+warning: the feature `effects` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/infer-fallback.rs:2:30
+   |
+LL | #![feature(const_trait_impl, effects)]
+   |                              ^^^^^^^
+   |
+   = note: see issue #102090 <https://github.com/rust-lang/rust/issues/102090> for more information
+   = note: `#[warn(incomplete_features)]` on by default
+
+warning: 1 warning emitted
+
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/minicore.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/minicore.rs
index 281cfdaef28..af88a73b4d6 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/minicore.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/minicore.rs
@@ -1,4 +1,6 @@
-//@ check-pass
+//@ known-bug: #110395
+// FIXME(effects) check-pass
+// FIXME(effects) fix intrinsics const parameter counting
 
 #![crate_type = "lib"]
 #![feature(no_core, lang_items, unboxed_closures, auto_traits, intrinsics, rustc_attrs, staged_api)]
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/minicore.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/minicore.stderr
new file mode 100644
index 00000000000..e4a5f368608
--- /dev/null
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/minicore.stderr
@@ -0,0 +1,18 @@
+warning: the feature `effects` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/minicore.rs:8:30
+   |
+LL | #![feature(const_trait_impl, effects, const_mut_refs)]
+   |                              ^^^^^^^
+   |
+   = note: see issue #102090 <https://github.com/rust-lang/rust/issues/102090> for more information
+   = note: `#[warn(incomplete_features)]` on by default
+
+error[E0094]: intrinsic has wrong number of const parameters: found 1, expected 0
+  --> $DIR/minicore.rs:517:27
+   |
+LL | const fn const_eval_select<ARG: Tuple, F, G, RET>(
+   |                           ^^^^^^^^^^^^^^^^^^^^^^^ expected 0 const parameters
+
+error: aborting due to 1 previous error; 1 warning emitted
+
+For more information about this error, try `rustc --explain E0094`.
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/no-explicit-const-params.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/no-explicit-const-params.rs
index 929da1ca8fa..84f5f2803e1 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/no-explicit-const-params.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/no-explicit-const-params.rs
@@ -1,4 +1,4 @@
-#![feature(const_trait_impl, effects)]
+#![feature(const_trait_impl, effects)] //~ WARN the feature `effects` is incomplete
 
 const fn foo() {}
 
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/no-explicit-const-params.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/no-explicit-const-params.stderr
index 0745d0304b9..39aa5825611 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/no-explicit-const-params.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/no-explicit-const-params.stderr
@@ -1,3 +1,12 @@
+warning: the feature `effects` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/no-explicit-const-params.rs:1:30
+   |
+LL | #![feature(const_trait_impl, effects)]
+   |                              ^^^^^^^
+   |
+   = note: see issue #102090 <https://github.com/rust-lang/rust/issues/102090> for more information
+   = note: `#[warn(incomplete_features)]` on by default
+
 error[E0107]: function takes 0 generic arguments but 1 generic argument was supplied
   --> $DIR/no-explicit-const-params.rs:22:5
    |
@@ -63,7 +72,7 @@ note: trait defined here, with 0 generic parameters
 LL | trait Bar {
    |       ^^^
 
-error: aborting due to 5 previous errors
+error: aborting due to 5 previous errors; 1 warning emitted
 
 Some errors have detailed explanations: E0107, E0308.
 For more information about an error, try `rustc --explain E0107`.
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/project.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/project.stderr
index eac3ee9e4e2..ab5f7b55a4e 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/project.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/project.stderr
@@ -1,3 +1,12 @@
+warning: the feature `effects` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/project.rs:4:30
+   |
+LL | #![feature(const_trait_impl, effects)]
+   |                              ^^^^^^^
+   |
+   = note: see issue #102090 <https://github.com/rust-lang/rust/issues/102090> for more information
+   = note: `#[warn(incomplete_features)]` on by default
+
 error[E0277]: the trait bound `Self: Uwu` is not satisfied
   --> $DIR/project.rs:12:1
    |
@@ -60,6 +69,6 @@ help: consider further restricting `Self`
 LL | pub trait Uwu: Owo + Uwu {
    |                    +++++
 
-error: aborting due to 5 previous errors
+error: aborting due to 5 previous errors; 1 warning emitted
 
 For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/span-bug-issue-121418.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/span-bug-issue-121418.rs
index 7bead45b35a..987a162cd6c 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/span-bug-issue-121418.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/span-bug-issue-121418.rs
@@ -1,5 +1,5 @@
 #![feature(const_trait_impl)]
-#![feature(effects)]
+#![feature(effects)] //~ WARN the feature `effects` is incomplete
 
 struct S;
 trait T {}
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/span-bug-issue-121418.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/span-bug-issue-121418.stderr
index 3ff1efb5988..f24d7c7a160 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/span-bug-issue-121418.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/span-bug-issue-121418.stderr
@@ -8,6 +8,15 @@ LL | impl const dyn T {
    |
    = note: only trait implementations may be annotated with `const`
 
+warning: the feature `effects` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/span-bug-issue-121418.rs:2:12
+   |
+LL | #![feature(effects)]
+   |            ^^^^^^^
+   |
+   = note: see issue #102090 <https://github.com/rust-lang/rust/issues/102090> for more information
+   = note: `#[warn(incomplete_features)]` on by default
+
 error[E0207]: the const parameter `host` is not constrained by the impl trait, self type, or predicates
   --> $DIR/span-bug-issue-121418.rs:7:6
    |
@@ -39,7 +48,7 @@ note: required because it appears within the type `Mutex<(dyn T + 'static)>`
   --> $SRC_DIR/std/src/sync/mutex.rs:LL:COL
    = note: the return type of a function must have a statically known size
 
-error: aborting due to 4 previous errors
+error: aborting due to 4 previous errors; 1 warning emitted
 
 Some errors have detailed explanations: E0207, E0277, E0308.
 For more information about an error, try `rustc --explain E0207`.
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/spec-effectvar-ice.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/spec-effectvar-ice.rs
index 6b5ba5bb624..00465b0f53d 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/spec-effectvar-ice.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/spec-effectvar-ice.rs
@@ -1,7 +1,7 @@
 //@ check-fail
 // Fixes #119830
 
-#![feature(effects)]
+#![feature(effects)] //~ WARN the feature `effects` is incomplete
 #![feature(min_specialization)]
 #![feature(const_trait_impl)]
 
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/spec-effectvar-ice.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/spec-effectvar-ice.stderr
index 70dd0350dc4..8d69151bf74 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/spec-effectvar-ice.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/spec-effectvar-ice.stderr
@@ -1,3 +1,12 @@
+warning: the feature `effects` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/spec-effectvar-ice.rs:4:12
+   |
+LL | #![feature(effects)]
+   |            ^^^^^^^
+   |
+   = note: see issue #102090 <https://github.com/rust-lang/rust/issues/102090> for more information
+   = note: `#[warn(incomplete_features)]` on by default
+
 error: const `impl` for trait `Foo` which is not marked with `#[const_trait]`
   --> $DIR/spec-effectvar-ice.rs:12:15
    |
@@ -55,7 +64,7 @@ LL | impl<T> const Foo for T where T: const Specialize {}
    = note: expressions using a const parameter must map each value to a distinct output value
    = note: proving the result of expressions other than the parameter are unique is not supported
 
-error: aborting due to 6 previous errors
+error: aborting due to 6 previous errors; 1 warning emitted
 
 Some errors have detailed explanations: E0119, E0207.
 For more information about an error, try `rustc --explain E0119`.
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/trait-fn-const.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/trait-fn-const.rs
index 891e87d3b97..d63dbfbf57d 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/trait-fn-const.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/trait-fn-const.rs
@@ -1,5 +1,5 @@
 // Regression test for issue #113378.
-#![feature(const_trait_impl, effects)]
+#![feature(const_trait_impl, effects)] //~ WARN the feature `effects` is incomplete
 
 #[const_trait]
 trait Trait {
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/trait-fn-const.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/trait-fn-const.stderr
index 4d0b03046d2..33914cb306d 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/trait-fn-const.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/trait-fn-const.stderr
@@ -54,6 +54,15 @@ LL + #[const_trait]
 LL | trait NonConst {
    |
 
-error: aborting due to 4 previous errors
+warning: the feature `effects` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/trait-fn-const.rs:2:30
+   |
+LL | #![feature(const_trait_impl, effects)]
+   |                              ^^^^^^^
+   |
+   = note: see issue #102090 <https://github.com/rust-lang/rust/issues/102090> for more information
+   = note: `#[warn(incomplete_features)]` on by default
+
+error: aborting due to 4 previous errors; 1 warning emitted
 
 For more information about this error, try `rustc --explain E0379`.
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/hir-const-check.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/hir-const-check.rs
index 426534deb67..f5fb0fd516a 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/hir-const-check.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/hir-const-check.rs
@@ -1,6 +1,6 @@
 // Regression test for #69615.
 
-#![feature(const_trait_impl, effects)]
+#![feature(const_trait_impl, effects)] //~ WARN the feature `effects` is incomplete
 
 #[const_trait]
 pub trait MyTrait {
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/hir-const-check.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/hir-const-check.stderr
index 5b14ef46d25..416ba248a5f 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/hir-const-check.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/hir-const-check.stderr
@@ -1,3 +1,12 @@
+warning: the feature `effects` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/hir-const-check.rs:3:30
+   |
+LL | #![feature(const_trait_impl, effects)]
+   |                              ^^^^^^^
+   |
+   = note: see issue #102090 <https://github.com/rust-lang/rust/issues/102090> for more information
+   = note: `#[warn(incomplete_features)]` on by default
+
 error[E0658]: `?` is not allowed in a `const fn`
   --> $DIR/hir-const-check.rs:12:9
    |
@@ -8,6 +17,6 @@ LL |         Some(())?;
    = help: add `#![feature(const_try)]` to the crate attributes to enable
    = note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
 
-error: aborting due to 1 previous error
+error: aborting due to 1 previous error; 1 warning emitted
 
 For more information about this error, try `rustc --explain E0658`.
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/ice-120503-async-const-method.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/ice-120503-async-const-method.rs
new file mode 100644
index 00000000000..ab46d49073c
--- /dev/null
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/ice-120503-async-const-method.rs
@@ -0,0 +1,18 @@
+//@ edition: 2021
+#![feature(effects)] //~ WARN the feature `effects` is incomplete
+
+trait MyTrait {}
+
+impl MyTrait for i32 {
+    async const fn bar(&self) {
+        //~^ ERROR expected one of `extern`
+        //~| ERROR functions in trait impls cannot be declared const
+        //~| ERROR functions cannot be both `const` and `async`
+        //~| ERROR method `bar` is not a member
+        //~| ERROR cycle detected when computing type
+        main8().await;
+        //~^ ERROR cannot find function
+    }
+}
+
+fn main() {}
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/ice-120503-async-const-method.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/ice-120503-async-const-method.stderr
new file mode 100644
index 00000000000..011232f30b8
--- /dev/null
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/ice-120503-async-const-method.stderr
@@ -0,0 +1,101 @@
+error: expected one of `extern`, `fn`, `safe`, or `unsafe`, found keyword `const`
+  --> $DIR/ice-120503-async-const-method.rs:7:11
+   |
+LL |     async const fn bar(&self) {
+   |     ------^^^^^
+   |     |     |
+   |     |     expected one of `extern`, `fn`, `safe`, or `unsafe`
+   |     help: `const` must come before `async`: `const async`
+   |
+   = note: keyword order for functions declaration is `pub`, `default`, `const`, `async`, `unsafe`, `extern`
+
+error[E0379]: functions in trait impls cannot be declared const
+  --> $DIR/ice-120503-async-const-method.rs:7:11
+   |
+LL |     async const fn bar(&self) {
+   |           ^^^^^-
+   |           |
+   |           functions in trait impls cannot be const
+   |           help: remove the `const`
+
+error: functions cannot be both `const` and `async`
+  --> $DIR/ice-120503-async-const-method.rs:7:5
+   |
+LL |       async const fn bar(&self) {
+   |       -^^^^ ^^^^^ `const` because of this
+   |       |
+   |  _____`async` because of this
+   | |
+LL | |
+LL | |
+LL | |
+...  |
+LL | |
+LL | |     }
+   | |_____-
+
+error[E0407]: method `bar` is not a member of trait `MyTrait`
+  --> $DIR/ice-120503-async-const-method.rs:7:5
+   |
+LL | /     async const fn bar(&self) {
+LL | |
+LL | |
+LL | |
+...  |
+LL | |
+LL | |     }
+   | |_____^ not a member of trait `MyTrait`
+
+warning: the feature `effects` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/ice-120503-async-const-method.rs:2:12
+   |
+LL | #![feature(effects)]
+   |            ^^^^^^^
+   |
+   = note: see issue #102090 <https://github.com/rust-lang/rust/issues/102090> for more information
+   = note: `#[warn(incomplete_features)]` on by default
+
+error[E0425]: cannot find function `main8` in this scope
+  --> $DIR/ice-120503-async-const-method.rs:13:9
+   |
+LL |         main8().await;
+   |         ^^^^^ help: a function with a similar name exists: `main`
+...
+LL | fn main() {}
+   | --------- similarly named function `main` defined here
+
+error[E0391]: cycle detected when computing type of opaque `<impl at $DIR/ice-120503-async-const-method.rs:6:1: 6:21>::bar::{opaque#0}`
+  --> $DIR/ice-120503-async-const-method.rs:7:5
+   |
+LL |     async const fn bar(&self) {
+   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
+   |
+note: ...which requires borrow-checking `<impl at $DIR/ice-120503-async-const-method.rs:6:1: 6:21>::bar`...
+  --> $DIR/ice-120503-async-const-method.rs:7:5
+   |
+LL |     async const fn bar(&self) {
+   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
+note: ...which requires promoting constants in MIR for `<impl at $DIR/ice-120503-async-const-method.rs:6:1: 6:21>::bar`...
+  --> $DIR/ice-120503-async-const-method.rs:7:5
+   |
+LL |     async const fn bar(&self) {
+   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
+note: ...which requires const checking `<impl at $DIR/ice-120503-async-const-method.rs:6:1: 6:21>::bar`...
+  --> $DIR/ice-120503-async-const-method.rs:7:5
+   |
+LL |     async const fn bar(&self) {
+   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
+   = note: ...which requires computing whether `<impl at $DIR/ice-120503-async-const-method.rs:6:1: 6:21>::bar::{opaque#0}` is freeze...
+   = note: ...which requires evaluating trait selection obligation `<impl at $DIR/ice-120503-async-const-method.rs:6:1: 6:21>::bar::{opaque#0}: core::marker::Freeze`...
+   = note: ...which again requires computing type of opaque `<impl at $DIR/ice-120503-async-const-method.rs:6:1: 6:21>::bar::{opaque#0}`, completing the cycle
+note: cycle used when computing type of `<impl at $DIR/ice-120503-async-const-method.rs:6:1: 6:21>::bar::{opaque#0}`
+  --> $DIR/ice-120503-async-const-method.rs:7:5
+   |
+LL |     async const fn bar(&self) {
+   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
+   = note: see https://rustc-dev-guide.rust-lang.org/overview.html#queries and https://rustc-dev-guide.rust-lang.org/query.html for more information
+
+error: aborting due to 6 previous errors; 1 warning emitted
+
+Some errors have detailed explanations: E0379, E0391, E0407, E0425.
+For more information about an error, try `rustc --explain E0379`.
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/ice-121536-const-method.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/ice-121536-const-method.rs
new file mode 100644
index 00000000000..a01329278d7
--- /dev/null
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/ice-121536-const-method.rs
@@ -0,0 +1,17 @@
+#![feature(const_trait_impl, effects)] //~ WARN the feature `effects` is incomplete
+
+pub struct Vec3;
+
+#[const_trait]
+pub trait Add {
+    fn add(self) -> Vec3;
+}
+
+impl Add for Vec3 {
+    const fn add(self) -> Vec3 {
+        //~^ ERROR functions in trait impls cannot be declared const
+        self
+    }
+}
+
+fn main() {}
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/ice-121536-const-method.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/ice-121536-const-method.stderr
new file mode 100644
index 00000000000..4fe88f263c8
--- /dev/null
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/ice-121536-const-method.stderr
@@ -0,0 +1,28 @@
+error[E0379]: functions in trait impls cannot be declared const
+  --> $DIR/ice-121536-const-method.rs:11:5
+   |
+LL |     const fn add(self) -> Vec3 {
+   |     ^^^^^ functions in trait impls cannot be const
+   |
+help: remove the `const` ...
+   |
+LL -     const fn add(self) -> Vec3 {
+LL +     fn add(self) -> Vec3 {
+   |
+help: ... and declare the impl to be const instead
+   |
+LL | impl const Add for Vec3 {
+   |      +++++
+
+warning: the feature `effects` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/ice-121536-const-method.rs:1:30
+   |
+LL | #![feature(const_trait_impl, effects)]
+   |                              ^^^^^^^
+   |
+   = note: see issue #102090 <https://github.com/rust-lang/rust/issues/102090> for more information
+   = note: `#[warn(incomplete_features)]` on by default
+
+error: aborting due to 1 previous error; 1 warning emitted
+
+For more information about this error, try `rustc --explain E0379`.
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/issue-79450.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/issue-79450.rs
index 269fd87ba0d..36c82dfe684 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/issue-79450.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/issue-79450.rs
@@ -1,5 +1,5 @@
 #![feature(const_fmt_arguments_new)]
-#![feature(const_trait_impl, effects)]
+#![feature(const_trait_impl, effects)] //~ WARN the feature `effects` is incomplete
 
 #[const_trait]
 trait Tr {
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/issue-79450.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/issue-79450.stderr
index 85996c21211..9da31486faa 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/issue-79450.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/issue-79450.stderr
@@ -1,3 +1,12 @@
+warning: the feature `effects` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/issue-79450.rs:2:30
+   |
+LL | #![feature(const_trait_impl, effects)]
+   |                              ^^^^^^^
+   |
+   = note: see issue #102090 <https://github.com/rust-lang/rust/issues/102090> for more information
+   = note: `#[warn(incomplete_features)]` on by default
+
 error[E0015]: cannot call non-const fn `_print` in constant functions
   --> $DIR/issue-79450.rs:9:9
    |
@@ -7,6 +16,6 @@ LL |         println!("lul");
    = note: calls in constant functions are limited to constant functions, tuple structs and tuple variants
    = note: this error originates in the macro `println` (in Nightly builds, run with -Z macro-backtrace for more info)
 
-error: aborting due to 1 previous error
+error: aborting due to 1 previous error; 1 warning emitted
 
 For more information about this error, try `rustc --explain E0015`.
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/issue-92111.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/issue-92111.stderr
index 2edaca60623..ecc994a3fe6 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/issue-92111.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/issue-92111.stderr
@@ -1,3 +1,9 @@
+error: `~const` can only be applied to `#[const_trait]` traits
+  --> $DIR/issue-92111.rs:20:22
+   |
+LL | const fn a<T: ~const Destruct>(t: T) {}
+   |                      ^^^^^^^^
+
 error[E0493]: destructor of `T` cannot be evaluated at compile-time
   --> $DIR/issue-92111.rs:20:32
    |
@@ -6,6 +12,6 @@ LL | const fn a<T: ~const Destruct>(t: T) {}
    |                                |
    |                                the destructor for this type cannot be evaluated in constant functions
 
-error: aborting due to 1 previous error
+error: aborting due to 2 previous errors
 
 For more information about this error, try `rustc --explain E0493`.
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/specialization/const-default-const-specialized.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/specialization/const-default-const-specialized.rs
index 6153e2770a4..c653e62032e 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/specialization/const-default-const-specialized.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/specialization/const-default-const-specialized.rs
@@ -3,7 +3,7 @@
 
 //@ run-pass
 
-#![feature(const_trait_impl, effects)]
+#![feature(const_trait_impl, effects)] //~ WARN the feature `effects` is incomplete
 #![feature(min_specialization)]
 
 #[const_trait]
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/specialization/const-default-const-specialized.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/specialization/const-default-const-specialized.stderr
new file mode 100644
index 00000000000..f533fb61aad
--- /dev/null
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/specialization/const-default-const-specialized.stderr
@@ -0,0 +1,11 @@
+warning: the feature `effects` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/const-default-const-specialized.rs:6:30
+   |
+LL | #![feature(const_trait_impl, effects)]
+   |                              ^^^^^^^
+   |
+   = note: see issue #102090 <https://github.com/rust-lang/rust/issues/102090> for more information
+   = note: `#[warn(incomplete_features)]` on by default
+
+warning: 1 warning emitted
+
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/specialization/const-default-impl-non-const-specialized-impl.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/specialization/const-default-impl-non-const-specialized-impl.rs
index 9a93d01ed06..40fc3b17ae4 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/specialization/const-default-impl-non-const-specialized-impl.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/specialization/const-default-impl-non-const-specialized-impl.rs
@@ -1,6 +1,6 @@
 // Tests that specializing trait impls must be at least as const as the default impl.
 
-#![feature(const_trait_impl, effects)]
+#![feature(const_trait_impl, effects)] //~ WARN the feature `effects` is incomplete
 #![feature(min_specialization)]
 
 #[const_trait]
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/specialization/const-default-impl-non-const-specialized-impl.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/specialization/const-default-impl-non-const-specialized-impl.stderr
index e356621ba47..363fbee1f8b 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/specialization/const-default-impl-non-const-specialized-impl.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/specialization/const-default-impl-non-const-specialized-impl.stderr
@@ -1,8 +1,17 @@
+warning: the feature `effects` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/const-default-impl-non-const-specialized-impl.rs:3:30
+   |
+LL | #![feature(const_trait_impl, effects)]
+   |                              ^^^^^^^
+   |
+   = note: see issue #102090 <https://github.com/rust-lang/rust/issues/102090> for more information
+   = note: `#[warn(incomplete_features)]` on by default
+
 error: cannot specialize on const impl with non-const impl
   --> $DIR/const-default-impl-non-const-specialized-impl.rs:19:1
    |
 LL | impl Value for FortyTwo {
    | ^^^^^^^^^^^^^^^^^^^^^^^
 
-error: aborting due to 1 previous error
+error: aborting due to 1 previous error; 1 warning emitted
 
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/specialization/non-const-default-const-specialized.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/specialization/non-const-default-const-specialized.stderr
index 68eac990aaa..bcccc855aab 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/specialization/non-const-default-const-specialized.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/specialization/non-const-default-const-specialized.stderr
@@ -1,3 +1,12 @@
+warning: the feature `effects` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/non-const-default-const-specialized.rs:6:30
+   |
+LL | #![feature(const_trait_impl, effects)]
+   |                              ^^^^^^^
+   |
+   = note: see issue #102090 <https://github.com/rust-lang/rust/issues/102090> for more information
+   = note: `#[warn(incomplete_features)]` on by default
+
 error[E0119]: conflicting implementations of trait `Value` for type `FortyTwo`
   --> $DIR/non-const-default-const-specialized.rs:27:1
    |
@@ -7,6 +16,6 @@ LL | impl<T> Value for T {
 LL | impl const Value for FortyTwo {
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation for `FortyTwo`
 
-error: aborting due to 1 previous error
+error: aborting due to 1 previous error; 1 warning emitted
 
 For more information about this error, try `rustc --explain E0119`.
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/specializing-constness-2.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/specializing-constness-2.stderr
index e5b9493b3ce..7404b6a8b11 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/specializing-constness-2.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/specializing-constness-2.stderr
@@ -1,3 +1,12 @@
+warning: the feature `effects` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/specializing-constness-2.rs:1:30
+   |
+LL | #![feature(const_trait_impl, effects, min_specialization, rustc_attrs)]
+   |                              ^^^^^^^
+   |
+   = note: see issue #102090 <https://github.com/rust-lang/rust/issues/102090> for more information
+   = note: `#[warn(incomplete_features)]` on by default
+
 error[E0119]: conflicting implementations of trait `A`
   --> $DIR/specializing-constness-2.rs:20:1
    |
@@ -16,7 +25,7 @@ LL |     <T as A>::a();
    = note: expected constant `host`
               found constant `true`
 
-error: aborting due to 2 previous errors
+error: aborting due to 2 previous errors; 1 warning emitted
 
 Some errors have detailed explanations: E0119, E0308.
 For more information about an error, try `rustc --explain E0119`.
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/specializing-constness.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/specializing-constness.rs
index 7206a89e5c5..3aabaf137d5 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/specializing-constness.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/specializing-constness.rs
@@ -1,4 +1,4 @@
-#![feature(const_trait_impl, effects, min_specialization, rustc_attrs)]
+#![feature(const_trait_impl, effects, min_specialization, rustc_attrs)] //~ WARN the feature `effects` is incomplete
 
 #[rustc_specialization_trait]
 #[const_trait]
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/specializing-constness.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/specializing-constness.stderr
index 21e21c2cb71..226295bf949 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/specializing-constness.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/specializing-constness.stderr
@@ -1,8 +1,17 @@
+warning: the feature `effects` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/specializing-constness.rs:1:30
+   |
+LL | #![feature(const_trait_impl, effects, min_specialization, rustc_attrs)]
+   |                              ^^^^^^^
+   |
+   = note: see issue #102090 <https://github.com/rust-lang/rust/issues/102090> for more information
+   = note: `#[warn(incomplete_features)]` on by default
+
 error: cannot specialize on const impl with non-const impl
   --> $DIR/specializing-constness.rs:23:1
    |
 LL | impl<T: Spec + Sup> A for T {
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
-error: aborting due to 1 previous error
+error: aborting due to 1 previous error; 1 warning emitted
 
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/staged-api.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/staged-api.rs
index 31ca9419589..460c2ef6174 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/staged-api.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/staged-api.rs
@@ -1,7 +1,7 @@
 //@ revisions: stable unstable
 
 #![cfg_attr(unstable, feature(unstable))] // The feature from the ./auxiliary/staged-api.rs file.
-#![feature(const_trait_impl, effects)]
+#![feature(const_trait_impl, effects)] //~ WARN the feature `effects` is incomplete
 #![feature(staged_api)]
 #![stable(feature = "rust1", since = "1.0.0")]
 
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/staged-api.stable.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/staged-api.stable.stderr
index 95129539770..0604b22ecbb 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/staged-api.stable.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/staged-api.stable.stderr
@@ -1,3 +1,12 @@
+warning: the feature `effects` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/staged-api.rs:4:30
+   |
+LL | #![feature(const_trait_impl, effects)]
+   |                              ^^^^^^^
+   |
+   = note: see issue #102090 <https://github.com/rust-lang/rust/issues/102090> for more information
+   = note: `#[warn(incomplete_features)]` on by default
+
 error: trait implementations cannot be const stable yet
   --> $DIR/staged-api.rs:19:1
    |
@@ -45,5 +54,5 @@ LL |     Unstable::func();
    |
    = help: const-stable functions can only call other const-stable functions
 
-error: aborting due to 5 previous errors
+error: aborting due to 5 previous errors; 1 warning emitted
 
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/staged-api.unstable.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/staged-api.unstable.stderr
index c9ca15d5b56..b53e7b6f6ac 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/staged-api.unstable.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/staged-api.unstable.stderr
@@ -1,3 +1,12 @@
+warning: the feature `effects` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/staged-api.rs:4:30
+   |
+LL | #![feature(const_trait_impl, effects)]
+   |                              ^^^^^^^
+   |
+   = note: see issue #102090 <https://github.com/rust-lang/rust/issues/102090> for more information
+   = note: `#[warn(incomplete_features)]` on by default
+
 error: `<Foo as staged_api::MyTrait>::func` is not yet stable as a const fn
   --> $DIR/staged-api.rs:34:5
    |
@@ -38,5 +47,5 @@ LL |     const_context_not_const_stable()
    |
    = help: const-stable functions can only call other const-stable functions
 
-error: aborting due to 5 previous errors
+error: aborting due to 5 previous errors; 1 warning emitted
 
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-2.nn.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-2.nn.stderr
index ac25812c42d..3a36a5b7509 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-2.nn.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-2.nn.stderr
@@ -10,6 +10,15 @@ note: this trait is not a `#[const_trait]`, so it cannot have `~const` trait bou
 LL | trait Bar: ~const Foo {}
    | ^^^^^^^^^^^^^^^^^^^^^^^^
 
+warning: the feature `effects` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/super-traits-fail-2.rs:1:30
+   |
+LL | #![feature(const_trait_impl, effects)]
+   |                              ^^^^^^^
+   |
+   = note: see issue #102090 <https://github.com/rust-lang/rust/issues/102090> for more information
+   = note: `#[warn(incomplete_features)]` on by default
+
 error: `~const` can only be applied to `#[const_trait]` traits
   --> $DIR/super-traits-fail-2.rs:10:19
    |
@@ -32,5 +41,5 @@ LL | trait Bar: ~const Foo {}
    |
    = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
 
-error: aborting due to 4 previous errors
+error: aborting due to 4 previous errors; 1 warning emitted
 
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-2.ny.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-2.ny.stderr
index 5273f7e48eb..beb931570cb 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-2.ny.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-2.ny.stderr
@@ -1,3 +1,12 @@
+warning: the feature `effects` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/super-traits-fail-2.rs:1:30
+   |
+LL | #![feature(const_trait_impl, effects)]
+   |                              ^^^^^^^
+   |
+   = note: see issue #102090 <https://github.com/rust-lang/rust/issues/102090> for more information
+   = note: `#[warn(incomplete_features)]` on by default
+
 error: `~const` can only be applied to `#[const_trait]` traits
   --> $DIR/super-traits-fail-2.rs:10:19
    |
@@ -20,5 +29,5 @@ LL | trait Bar: ~const Foo {}
    |
    = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
 
-error: aborting due to 3 previous errors
+error: aborting due to 3 previous errors; 1 warning emitted
 
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-2.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-2.rs
index 6d57a4f5798..2f26eebbe32 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-2.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-2.rs
@@ -1,4 +1,4 @@
-#![feature(const_trait_impl, effects)]
+#![feature(const_trait_impl, effects)] //~ WARN the feature `effects` is incomplete
 //@ revisions: yy yn ny nn
 
 #[cfg_attr(any(yy, yn), const_trait)]
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-2.yn.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-2.yn.stderr
index 53445d25590..f96e6fb4ae4 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-2.yn.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-2.yn.stderr
@@ -10,6 +10,15 @@ note: this trait is not a `#[const_trait]`, so it cannot have `~const` trait bou
 LL | trait Bar: ~const Foo {}
    | ^^^^^^^^^^^^^^^^^^^^^^^^
 
+warning: the feature `effects` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/super-traits-fail-2.rs:1:30
+   |
+LL | #![feature(const_trait_impl, effects)]
+   |                              ^^^^^^^
+   |
+   = note: see issue #102090 <https://github.com/rust-lang/rust/issues/102090> for more information
+   = note: `#[warn(incomplete_features)]` on by default
+
 error[E0308]: mismatched types
   --> $DIR/super-traits-fail-2.rs:17:5
    |
@@ -19,6 +28,6 @@ LL |     x.a();
    = note: expected constant `host`
               found constant `true`
 
-error: aborting due to 2 previous errors
+error: aborting due to 2 previous errors; 1 warning emitted
 
 For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-2.yy.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-2.yy.stderr
index 681647945d0..ffc259e590e 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-2.yy.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-2.yy.stderr
@@ -1,3 +1,12 @@
+warning: the feature `effects` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/super-traits-fail-2.rs:1:30
+   |
+LL | #![feature(const_trait_impl, effects)]
+   |                              ^^^^^^^
+   |
+   = note: see issue #102090 <https://github.com/rust-lang/rust/issues/102090> for more information
+   = note: `#[warn(incomplete_features)]` on by default
+
 error[E0308]: mismatched types
   --> $DIR/super-traits-fail-2.rs:17:5
    |
@@ -7,6 +16,6 @@ LL |     x.a();
    = note: expected constant `host`
               found constant `true`
 
-error: aborting due to 1 previous error
+error: aborting due to 1 previous error; 1 warning emitted
 
 For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-3.nn.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-3.nn.stderr
index 77aee6a8bb8..cde4b1ff77f 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-3.nn.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-3.nn.stderr
@@ -10,6 +10,15 @@ note: this trait is not a `#[const_trait]`, so it cannot have `~const` trait bou
 LL | trait Bar: ~const Foo {}
    | ^^^^^^^^^^^^^^^^^^^^^^^^
 
+warning: the feature `effects` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/super-traits-fail-3.rs:1:30
+   |
+LL | #![feature(const_trait_impl, effects)]
+   |                              ^^^^^^^
+   |
+   = note: see issue #102090 <https://github.com/rust-lang/rust/issues/102090> for more information
+   = note: `#[warn(incomplete_features)]` on by default
+
 error: `~const` can only be applied to `#[const_trait]` traits
   --> $DIR/super-traits-fail-3.rs:12:19
    |
@@ -38,5 +47,5 @@ error: `~const` can only be applied to `#[const_trait]` traits
 LL | const fn foo<T: ~const Bar>(x: &T) {
    |                        ^^^
 
-error: aborting due to 5 previous errors
+error: aborting due to 5 previous errors; 1 warning emitted
 
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-3.ny.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-3.ny.stderr
index f737cb243df..6f184018148 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-3.ny.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-3.ny.stderr
@@ -1,3 +1,12 @@
+warning: the feature `effects` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/super-traits-fail-3.rs:1:30
+   |
+LL | #![feature(const_trait_impl, effects)]
+   |                              ^^^^^^^
+   |
+   = note: see issue #102090 <https://github.com/rust-lang/rust/issues/102090> for more information
+   = note: `#[warn(incomplete_features)]` on by default
+
 error: `~const` can only be applied to `#[const_trait]` traits
   --> $DIR/super-traits-fail-3.rs:12:19
    |
@@ -20,5 +29,5 @@ LL | trait Bar: ~const Foo {}
    |
    = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
 
-error: aborting due to 3 previous errors
+error: aborting due to 3 previous errors; 1 warning emitted
 
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-3.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-3.rs
index 1e02a135100..f7e85902a41 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-3.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-3.rs
@@ -1,4 +1,4 @@
-#![feature(const_trait_impl, effects)]
+#![feature(const_trait_impl, effects)] //~ WARN the feature `effects` is incomplete
 
 //@ revisions: yy yn ny nn
 //@[yy] check-pass
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-3.yn.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-3.yn.stderr
index de7a11cf155..b0a3b39631d 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-3.yn.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-3.yn.stderr
@@ -10,6 +10,15 @@ note: this trait is not a `#[const_trait]`, so it cannot have `~const` trait bou
 LL | trait Bar: ~const Foo {}
    | ^^^^^^^^^^^^^^^^^^^^^^^^
 
+warning: the feature `effects` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/super-traits-fail-3.rs:1:30
+   |
+LL | #![feature(const_trait_impl, effects)]
+   |                              ^^^^^^^
+   |
+   = note: see issue #102090 <https://github.com/rust-lang/rust/issues/102090> for more information
+   = note: `#[warn(incomplete_features)]` on by default
+
 error: `~const` can only be applied to `#[const_trait]` traits
   --> $DIR/super-traits-fail-3.rs:18:24
    |
@@ -25,6 +34,6 @@ LL |     x.a();
    = note: expected constant `host`
               found constant `true`
 
-error: aborting due to 3 previous errors
+error: aborting due to 3 previous errors; 1 warning emitted
 
 For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-3.yy.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-3.yy.stderr
new file mode 100644
index 00000000000..e354c66919e
--- /dev/null
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-3.yy.stderr
@@ -0,0 +1,11 @@
+warning: the feature `effects` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/super-traits-fail-3.rs:1:30
+   |
+LL | #![feature(const_trait_impl, effects)]
+   |                              ^^^^^^^
+   |
+   = note: see issue #102090 <https://github.com/rust-lang/rust/issues/102090> for more information
+   = note: `#[warn(incomplete_features)]` on by default
+
+warning: 1 warning emitted
+
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits.rs
index 0515380564d..cfbb8e9f6be 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits.rs
@@ -1,5 +1,5 @@
 //@ check-pass
-#![feature(const_trait_impl, effects)]
+#![feature(const_trait_impl, effects)] //~ WARN the feature `effects` is incomplete
 
 #[const_trait]
 trait Foo {
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits.stderr
new file mode 100644
index 00000000000..2ff1a880d84
--- /dev/null
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits.stderr
@@ -0,0 +1,11 @@
+warning: the feature `effects` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/super-traits.rs:2:30
+   |
+LL | #![feature(const_trait_impl, effects)]
+   |                              ^^^^^^^
+   |
+   = note: see issue #102090 <https://github.com/rust-lang/rust/issues/102090> for more information
+   = note: `#[warn(incomplete_features)]` on by default
+
+warning: 1 warning emitted
+
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/tilde-const-assoc-fn-in-trait-impl.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/tilde-const-assoc-fn-in-trait-impl.rs
index ad0f10f7ee8..86a2bbe35ed 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/tilde-const-assoc-fn-in-trait-impl.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/tilde-const-assoc-fn-in-trait-impl.rs
@@ -1,7 +1,7 @@
 // Regression test for issue #119700.
 //@ check-pass
 
-#![feature(const_trait_impl, effects)]
+#![feature(const_trait_impl, effects)] //~ WARN the feature `effects` is incomplete
 
 #[const_trait]
 trait Main {
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/tilde-const-assoc-fn-in-trait-impl.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/tilde-const-assoc-fn-in-trait-impl.stderr
new file mode 100644
index 00000000000..70019ce57f2
--- /dev/null
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/tilde-const-assoc-fn-in-trait-impl.stderr
@@ -0,0 +1,11 @@
+warning: the feature `effects` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/tilde-const-assoc-fn-in-trait-impl.rs:4:30
+   |
+LL | #![feature(const_trait_impl, effects)]
+   |                              ^^^^^^^
+   |
+   = note: see issue #102090 <https://github.com/rust-lang/rust/issues/102090> for more information
+   = note: `#[warn(incomplete_features)]` on by default
+
+warning: 1 warning emitted
+
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/tilde-const-inherent-assoc-const-fn.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/tilde-const-inherent-assoc-const-fn.rs
index 5c8f5f4db3b..0f5729e3daf 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/tilde-const-inherent-assoc-const-fn.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/tilde-const-inherent-assoc-const-fn.rs
@@ -1,5 +1,5 @@
 //@ check-pass
-#![feature(const_trait_impl, effects)]
+#![feature(const_trait_impl, effects)] //~ WARN the feature `effects` is incomplete
 
 #[const_trait]
 trait Foo {
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/tilde-const-inherent-assoc-const-fn.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/tilde-const-inherent-assoc-const-fn.stderr
new file mode 100644
index 00000000000..4ec8dac1f0d
--- /dev/null
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/tilde-const-inherent-assoc-const-fn.stderr
@@ -0,0 +1,11 @@
+warning: the feature `effects` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/tilde-const-inherent-assoc-const-fn.rs:2:30
+   |
+LL | #![feature(const_trait_impl, effects)]
+   |                              ^^^^^^^
+   |
+   = note: see issue #102090 <https://github.com/rust-lang/rust/issues/102090> for more information
+   = note: `#[warn(incomplete_features)]` on by default
+
+warning: 1 warning emitted
+
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/tilde-const-trait-assoc-tys.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/tilde-const-trait-assoc-tys.rs
index b4006783082..c2d3b2036c6 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/tilde-const-trait-assoc-tys.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/tilde-const-trait-assoc-tys.rs
@@ -1,5 +1,5 @@
 //@ check-pass
-#![feature(const_trait_impl, effects)]
+#![feature(const_trait_impl, effects)] //~ WARN the feature `effects` is incomplete
 
 #[const_trait]
 trait Trait {
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/tilde-const-trait-assoc-tys.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/tilde-const-trait-assoc-tys.stderr
new file mode 100644
index 00000000000..1ead23d5c2c
--- /dev/null
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/tilde-const-trait-assoc-tys.stderr
@@ -0,0 +1,11 @@
+warning: the feature `effects` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/tilde-const-trait-assoc-tys.rs:2:30
+   |
+LL | #![feature(const_trait_impl, effects)]
+   |                              ^^^^^^^
+   |
+   = note: see issue #102090 <https://github.com/rust-lang/rust/issues/102090> for more information
+   = note: `#[warn(incomplete_features)]` on by default
+
+warning: 1 warning emitted
+
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/trait-default-body-stability.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/trait-default-body-stability.stderr
index 62c4bc3b7ae..adb1b01f087 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/trait-default-body-stability.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/trait-default-body-stability.stderr
@@ -1,3 +1,12 @@
+warning: the feature `effects` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/trait-default-body-stability.rs:4:30
+   |
+LL | #![feature(const_trait_impl, effects)]
+   |                              ^^^^^^^
+   |
+   = note: see issue #102090 <https://github.com/rust-lang/rust/issues/102090> for more information
+   = note: `#[warn(incomplete_features)]` on by default
+
 error: const `impl` for trait `Try` which is not marked with `#[const_trait]`
   --> $DIR/trait-default-body-stability.rs:18:12
    |
@@ -34,6 +43,94 @@ LL | impl const FromResidual for T {
    = note: expressions using a const parameter must map each value to a distinct output value
    = note: proving the result of expressions other than the parameter are unique is not supported
 
-error: aborting due to 4 previous errors
+error[E0284]: type annotations needed
+  --> $DIR/trait-default-body-stability.rs:33:6
+   |
+LL | impl const FromResidual for T {
+   |      ^^^^^ cannot infer the value of the constant `_`
+   |
+note: required for `T` to implement `Try`
+  --> $DIR/trait-default-body-stability.rs:18:12
+   |
+LL | impl const Try for T {
+   |      ----- ^^^     ^
+   |      |
+   |      unsatisfied trait bound introduced here
+
+error[E0284]: type annotations needed
+  --> $DIR/trait-default-body-stability.rs:44:9
+   |
+LL |         T?
+   |         ^^ cannot infer the value of the constant `_`
+   |
+note: required for `T` to implement `Try`
+  --> $DIR/trait-default-body-stability.rs:18:12
+   |
+LL | impl const Try for T {
+   |      ----- ^^^     ^
+   |      |
+   |      unsatisfied trait bound introduced here
+
+error[E0284]: type annotations needed
+  --> $DIR/trait-default-body-stability.rs:44:9
+   |
+LL |         T?
+   |         ^^ cannot infer the value of the constant `_`
+   |
+note: required for `T` to implement `FromResidual<T>`
+  --> $DIR/trait-default-body-stability.rs:33:12
+   |
+LL | impl const FromResidual for T {
+   |      ----- ^^^^^^^^^^^^     ^
+   |      |
+   |      unsatisfied trait bound introduced here
+
+error[E0284]: type annotations needed
+  --> $DIR/trait-default-body-stability.rs:44:9
+   |
+LL |         T?
+   |         ^^ cannot infer the value of the constant `_`
+   |
+note: required for `T` to implement `Try`
+  --> $DIR/trait-default-body-stability.rs:18:12
+   |
+LL | impl const Try for T {
+   |      ----- ^^^     ^
+   |      |
+   |      unsatisfied trait bound introduced here
+   = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
+
+error[E0284]: type annotations needed
+  --> $DIR/trait-default-body-stability.rs:44:9
+   |
+LL |         T?
+   |         ^^ cannot infer the value of the constant `_`
+   |
+note: required for `T` to implement `FromResidual<T>`
+  --> $DIR/trait-default-body-stability.rs:33:12
+   |
+LL | impl const FromResidual for T {
+   |      ----- ^^^^^^^^^^^^     ^
+   |      |
+   |      unsatisfied trait bound introduced here
+   = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
+
+error[E0284]: type annotations needed
+  --> $DIR/trait-default-body-stability.rs:44:9
+   |
+LL |         T?
+   |         ^^ cannot infer the value of the constant `_`
+   |
+note: required for `T` to implement `Try`
+  --> $DIR/trait-default-body-stability.rs:18:12
+   |
+LL | impl const Try for T {
+   |      ----- ^^^     ^
+   |      |
+   |      unsatisfied trait bound introduced here
+   = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
+
+error: aborting due to 10 previous errors; 1 warning emitted
 
-For more information about this error, try `rustc --explain E0207`.
+Some errors have detailed explanations: E0207, E0284.
+For more information about an error, try `rustc --explain E0207`.
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/trait-where-clause-const.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/trait-where-clause-const.stderr
index 0141dcfb06f..95c32b12241 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/trait-where-clause-const.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/trait-where-clause-const.stderr
@@ -1,3 +1,12 @@
+warning: the feature `effects` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/trait-where-clause-const.rs:7:30
+   |
+LL | #![feature(const_trait_impl, effects)]
+   |                              ^^^^^^^
+   |
+   = note: see issue #102090 <https://github.com/rust-lang/rust/issues/102090> for more information
+   = note: `#[warn(incomplete_features)]` on by default
+
 error[E0277]: the trait bound `T: ~const Bar` is not satisfied
   --> $DIR/trait-where-clause-const.rs:21:5
    |
@@ -30,6 +39,6 @@ help: consider further restricting this bound
 LL | const fn test1<T: ~const Foo + Bar + ~const Bar>() {
    |                                    ++++++++++++
 
-error: aborting due to 2 previous errors
+error: aborting due to 2 previous errors; 1 warning emitted
 
 For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/trait-where-clause-run.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/trait-where-clause-run.rs
index 65e605a4a2f..afc5b1c8369 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/trait-where-clause-run.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/trait-where-clause-run.rs
@@ -1,6 +1,6 @@
 //@ run-pass
 
-#![feature(const_trait_impl, effects)]
+#![feature(const_trait_impl, effects)] //~ WARN the feature `effects` is incomplete
 
 #[const_trait]
 trait Bar {
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/trait-where-clause-run.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/trait-where-clause-run.stderr
new file mode 100644
index 00000000000..aef4f569d5e
--- /dev/null
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/trait-where-clause-run.stderr
@@ -0,0 +1,11 @@
+warning: the feature `effects` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/trait-where-clause-run.rs:3:30
+   |
+LL | #![feature(const_trait_impl, effects)]
+   |                              ^^^^^^^
+   |
+   = note: see issue #102090 <https://github.com/rust-lang/rust/issues/102090> for more information
+   = note: `#[warn(incomplete_features)]` on by default
+
+warning: 1 warning emitted
+
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/trait-where-clause-self-referential.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/trait-where-clause-self-referential.rs
index 18d0267fed3..59ddc2f748e 100644
--- a/tests/ui/rfcs/rfc-2632-const-trait-impl/trait-where-clause-self-referential.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/trait-where-clause-self-referential.rs
@@ -1,6 +1,6 @@
 //@ check-pass
 
-#![feature(const_trait_impl, effects)]
+#![feature(const_trait_impl, effects)] //~ WARN the feature `effects` is incomplete
 
 #[const_trait]
 trait Foo {
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/trait-where-clause-self-referential.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/trait-where-clause-self-referential.stderr
new file mode 100644
index 00000000000..6e9e948e45c
--- /dev/null
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/trait-where-clause-self-referential.stderr
@@ -0,0 +1,11 @@
+warning: the feature `effects` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/trait-where-clause-self-referential.rs:3:30
+   |
+LL | #![feature(const_trait_impl, effects)]
+   |                              ^^^^^^^
+   |
+   = note: see issue #102090 <https://github.com/rust-lang/rust/issues/102090> for more information
+   = note: `#[warn(incomplete_features)]` on by default
+
+warning: 1 warning emitted
+
diff --git a/tests/ui/rust-2024/safe-outside-extern.gated.stderr b/tests/ui/rust-2024/safe-outside-extern.gated.stderr
new file mode 100644
index 00000000000..ea7aa181445
--- /dev/null
+++ b/tests/ui/rust-2024/safe-outside-extern.gated.stderr
@@ -0,0 +1,32 @@
+error: items outside of `unsafe extern { }` cannot be declared with `safe` safety qualifier
+  --> $DIR/safe-outside-extern.rs:4:1
+   |
+LL | safe fn foo() {}
+   | ^^^^^^^^^^^^^^^^
+
+error: items outside of `unsafe extern { }` cannot be declared with `safe` safety qualifier
+  --> $DIR/safe-outside-extern.rs:8:1
+   |
+LL | safe static FOO: i32 = 1;
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error: items outside of `unsafe extern { }` cannot be declared with `safe` safety qualifier
+  --> $DIR/safe-outside-extern.rs:13:5
+   |
+LL |     safe fn foo();
+   |     ^^^^^^^^^^^^^^
+
+error: items outside of `unsafe extern { }` cannot be declared with `safe` safety qualifier
+  --> $DIR/safe-outside-extern.rs:19:5
+   |
+LL |     safe fn foo() {}
+   |     ^^^^^^^^^^^^^^^^
+
+error: function pointers cannot be declared with `safe` safety qualifier
+  --> $DIR/safe-outside-extern.rs:24:14
+   |
+LL | type FnPtr = safe fn(i32, i32) -> i32;
+   |              ^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error: aborting due to 5 previous errors
+
diff --git a/tests/ui/rust-2024/safe-outside-extern.rs b/tests/ui/rust-2024/safe-outside-extern.rs
new file mode 100644
index 00000000000..9ec0c5c70e1
--- /dev/null
+++ b/tests/ui/rust-2024/safe-outside-extern.rs
@@ -0,0 +1,28 @@
+//@ revisions: gated ungated
+#![cfg_attr(gated, feature(unsafe_extern_blocks))]
+
+safe fn foo() {}
+//~^ ERROR: items outside of `unsafe extern { }` cannot be declared with `safe` safety qualifier
+//[ungated]~| ERROR: unsafe extern {}` blocks and `safe` keyword are experimental [E0658]
+
+safe static FOO: i32 = 1;
+//~^ ERROR: items outside of `unsafe extern { }` cannot be declared with `safe` safety qualifier
+//[ungated]~| ERROR: unsafe extern {}` blocks and `safe` keyword are experimental [E0658]
+
+trait Foo {
+    safe fn foo();
+    //~^ ERROR: items outside of `unsafe extern { }` cannot be declared with `safe` safety qualifier
+    //[ungated]~| ERROR: unsafe extern {}` blocks and `safe` keyword are experimental [E0658]
+}
+
+impl Foo for () {
+    safe fn foo() {}
+    //~^ ERROR: items outside of `unsafe extern { }` cannot be declared with `safe` safety qualifier
+    //[ungated]~| ERROR: unsafe extern {}` blocks and `safe` keyword are experimental [E0658]
+}
+
+type FnPtr = safe fn(i32, i32) -> i32;
+//~^ ERROR: function pointers cannot be declared with `safe` safety qualifier
+//[ungated]~| ERROR: unsafe extern {}` blocks and `safe` keyword are experimental [E0658]
+
+fn main() {}
diff --git a/tests/ui/rust-2024/safe-outside-extern.ungated.stderr b/tests/ui/rust-2024/safe-outside-extern.ungated.stderr
new file mode 100644
index 00000000000..908f5b504eb
--- /dev/null
+++ b/tests/ui/rust-2024/safe-outside-extern.ungated.stderr
@@ -0,0 +1,83 @@
+error: items outside of `unsafe extern { }` cannot be declared with `safe` safety qualifier
+  --> $DIR/safe-outside-extern.rs:4:1
+   |
+LL | safe fn foo() {}
+   | ^^^^^^^^^^^^^^^^
+
+error: items outside of `unsafe extern { }` cannot be declared with `safe` safety qualifier
+  --> $DIR/safe-outside-extern.rs:8:1
+   |
+LL | safe static FOO: i32 = 1;
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error: items outside of `unsafe extern { }` cannot be declared with `safe` safety qualifier
+  --> $DIR/safe-outside-extern.rs:13:5
+   |
+LL |     safe fn foo();
+   |     ^^^^^^^^^^^^^^
+
+error: items outside of `unsafe extern { }` cannot be declared with `safe` safety qualifier
+  --> $DIR/safe-outside-extern.rs:19:5
+   |
+LL |     safe fn foo() {}
+   |     ^^^^^^^^^^^^^^^^
+
+error: function pointers cannot be declared with `safe` safety qualifier
+  --> $DIR/safe-outside-extern.rs:24:14
+   |
+LL | type FnPtr = safe fn(i32, i32) -> i32;
+   |              ^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error[E0658]: `unsafe extern {}` blocks and `safe` keyword are experimental
+  --> $DIR/safe-outside-extern.rs:4:1
+   |
+LL | safe fn foo() {}
+   | ^^^^
+   |
+   = note: see issue #123743 <https://github.com/rust-lang/rust/issues/123743> for more information
+   = help: add `#![feature(unsafe_extern_blocks)]` to the crate attributes to enable
+   = note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
+
+error[E0658]: `unsafe extern {}` blocks and `safe` keyword are experimental
+  --> $DIR/safe-outside-extern.rs:8:1
+   |
+LL | safe static FOO: i32 = 1;
+   | ^^^^
+   |
+   = note: see issue #123743 <https://github.com/rust-lang/rust/issues/123743> for more information
+   = help: add `#![feature(unsafe_extern_blocks)]` to the crate attributes to enable
+   = note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
+
+error[E0658]: `unsafe extern {}` blocks and `safe` keyword are experimental
+  --> $DIR/safe-outside-extern.rs:13:5
+   |
+LL |     safe fn foo();
+   |     ^^^^
+   |
+   = note: see issue #123743 <https://github.com/rust-lang/rust/issues/123743> for more information
+   = help: add `#![feature(unsafe_extern_blocks)]` to the crate attributes to enable
+   = note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
+
+error[E0658]: `unsafe extern {}` blocks and `safe` keyword are experimental
+  --> $DIR/safe-outside-extern.rs:19:5
+   |
+LL |     safe fn foo() {}
+   |     ^^^^
+   |
+   = note: see issue #123743 <https://github.com/rust-lang/rust/issues/123743> for more information
+   = help: add `#![feature(unsafe_extern_blocks)]` to the crate attributes to enable
+   = note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
+
+error[E0658]: `unsafe extern {}` blocks and `safe` keyword are experimental
+  --> $DIR/safe-outside-extern.rs:24:14
+   |
+LL | type FnPtr = safe fn(i32, i32) -> i32;
+   |              ^^^^
+   |
+   = note: see issue #123743 <https://github.com/rust-lang/rust/issues/123743> for more information
+   = help: add `#![feature(unsafe_extern_blocks)]` to the crate attributes to enable
+   = note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
+
+error: aborting due to 10 previous errors
+
+For more information about this error, try `rustc --explain E0658`.
diff --git a/tests/ui/rust-2024/unsafe-attributes/in_2024_compatibility.rs b/tests/ui/rust-2024/unsafe-attributes/in_2024_compatibility.rs
new file mode 100644
index 00000000000..c6f9115cde7
--- /dev/null
+++ b/tests/ui/rust-2024/unsafe-attributes/in_2024_compatibility.rs
@@ -0,0 +1,9 @@
+#![deny(rust_2024_compatibility)]
+#![feature(unsafe_attributes)]
+
+#[no_mangle]
+//~^ ERROR: unsafe attribute used without unsafe
+//~| WARN this is accepted in the current edition
+extern "C" fn foo() {}
+
+fn main() {}
diff --git a/tests/ui/rust-2024/unsafe-attributes/in_2024_compatibility.stderr b/tests/ui/rust-2024/unsafe-attributes/in_2024_compatibility.stderr
new file mode 100644
index 00000000000..f0689d9883c
--- /dev/null
+++ b/tests/ui/rust-2024/unsafe-attributes/in_2024_compatibility.stderr
@@ -0,0 +1,21 @@
+error: unsafe attribute used without unsafe
+  --> $DIR/in_2024_compatibility.rs:4:3
+   |
+LL | #[no_mangle]
+   |   ^^^^^^^^^ usage of unsafe attribute
+   |
+   = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2024!
+   = note: for more information, see issue #123757 <https://github.com/rust-lang/rust/issues/123757>
+note: the lint level is defined here
+  --> $DIR/in_2024_compatibility.rs:1:9
+   |
+LL | #![deny(rust_2024_compatibility)]
+   |         ^^^^^^^^^^^^^^^^^^^^^^^
+   = note: `#[deny(unsafe_attr_outside_unsafe)]` implied by `#[deny(rust_2024_compatibility)]`
+help: wrap the attribute in `unsafe(...)`
+   |
+LL | #[unsafe(no_mangle)]
+   |   +++++++         +
+
+error: aborting due to 1 previous error
+
diff --git a/tests/ui/rust-2024/unsafe-attributes/unsafe-attribute-marked.rs b/tests/ui/rust-2024/unsafe-attributes/unsafe-attribute-marked.rs
new file mode 100644
index 00000000000..279ced2525a
--- /dev/null
+++ b/tests/ui/rust-2024/unsafe-attributes/unsafe-attribute-marked.rs
@@ -0,0 +1,12 @@
+//@ revisions: edition2021 edition2024
+//@[edition2021] edition:2021
+//@[edition2024] edition:2024
+//@[edition2024] compile-flags: -Zunstable-options
+//@ check-pass
+
+#![feature(unsafe_attributes)]
+
+#[unsafe(no_mangle)]
+extern "C" fn foo() {}
+
+fn main() {}
diff --git a/tests/ui/rust-2024/unsafe-attributes/unsafe-attributes-fix.fixed b/tests/ui/rust-2024/unsafe-attributes/unsafe-attributes-fix.fixed
new file mode 100644
index 00000000000..6ebdff0334c
--- /dev/null
+++ b/tests/ui/rust-2024/unsafe-attributes/unsafe-attributes-fix.fixed
@@ -0,0 +1,61 @@
+//@ run-rustfix
+#![feature(unsafe_attributes)]
+#![deny(unsafe_attr_outside_unsafe)]
+
+macro_rules! tt {
+    ($e:tt) => {
+        #$e
+        extern fn foo() {}
+    }
+}
+
+macro_rules! ident {
+    ($e:ident) => {
+        #[unsafe($e)]
+        //~^ ERROR: unsafe attribute used without unsafe
+        //~| WARN this is accepted in the current edition
+        extern fn bar() {}
+    }
+}
+
+macro_rules! ident2 {
+    ($e:ident, $l:literal) => {
+        #[unsafe($e = $l)]
+        //~^ ERROR: unsafe attribute used without unsafe
+        //~| WARN this is accepted in the current edition
+        extern fn bars() {}
+    }
+}
+
+macro_rules! meta {
+    ($m:meta) => {
+        #[$m]
+        extern fn baz() {}
+    }
+}
+
+macro_rules! meta2 {
+    ($m:meta) => {
+        #[$m]
+        extern fn baw() {}
+    }
+}
+
+tt!([unsafe(no_mangle)]);
+//~^ ERROR: unsafe attribute used without unsafe
+//~| WARN this is accepted in the current edition
+ident!(no_mangle);
+meta!(unsafe(no_mangle));
+//~^ ERROR: unsafe attribute used without unsafe
+//~| WARN this is accepted in the current edition
+meta2!(unsafe(export_name = "baw"));
+//~^ ERROR: unsafe attribute used without unsafe
+//~| WARN this is accepted in the current edition
+ident2!(export_name, "bars");
+
+#[unsafe(no_mangle)]
+//~^ ERROR: unsafe attribute used without unsafe
+//~| WARN this is accepted in the current edition
+extern "C" fn one() {}
+
+fn main() {}
diff --git a/tests/ui/rust-2024/unsafe-attributes/unsafe-attributes-fix.rs b/tests/ui/rust-2024/unsafe-attributes/unsafe-attributes-fix.rs
new file mode 100644
index 00000000000..c78ff45ea4c
--- /dev/null
+++ b/tests/ui/rust-2024/unsafe-attributes/unsafe-attributes-fix.rs
@@ -0,0 +1,61 @@
+//@ run-rustfix
+#![feature(unsafe_attributes)]
+#![deny(unsafe_attr_outside_unsafe)]
+
+macro_rules! tt {
+    ($e:tt) => {
+        #$e
+        extern fn foo() {}
+    }
+}
+
+macro_rules! ident {
+    ($e:ident) => {
+        #[$e]
+        //~^ ERROR: unsafe attribute used without unsafe
+        //~| WARN this is accepted in the current edition
+        extern fn bar() {}
+    }
+}
+
+macro_rules! ident2 {
+    ($e:ident, $l:literal) => {
+        #[$e = $l]
+        //~^ ERROR: unsafe attribute used without unsafe
+        //~| WARN this is accepted in the current edition
+        extern fn bars() {}
+    }
+}
+
+macro_rules! meta {
+    ($m:meta) => {
+        #[$m]
+        extern fn baz() {}
+    }
+}
+
+macro_rules! meta2 {
+    ($m:meta) => {
+        #[$m]
+        extern fn baw() {}
+    }
+}
+
+tt!([no_mangle]);
+//~^ ERROR: unsafe attribute used without unsafe
+//~| WARN this is accepted in the current edition
+ident!(no_mangle);
+meta!(no_mangle);
+//~^ ERROR: unsafe attribute used without unsafe
+//~| WARN this is accepted in the current edition
+meta2!(export_name = "baw");
+//~^ ERROR: unsafe attribute used without unsafe
+//~| WARN this is accepted in the current edition
+ident2!(export_name, "bars");
+
+#[no_mangle]
+//~^ ERROR: unsafe attribute used without unsafe
+//~| WARN this is accepted in the current edition
+extern "C" fn one() {}
+
+fn main() {}
diff --git a/tests/ui/rust-2024/unsafe-attributes/unsafe-attributes-fix.stderr b/tests/ui/rust-2024/unsafe-attributes/unsafe-attributes-fix.stderr
new file mode 100644
index 00000000000..c95984f58ec
--- /dev/null
+++ b/tests/ui/rust-2024/unsafe-attributes/unsafe-attributes-fix.stderr
@@ -0,0 +1,93 @@
+error: unsafe attribute used without unsafe
+  --> $DIR/unsafe-attributes-fix.rs:44:6
+   |
+LL | tt!([no_mangle]);
+   |      ^^^^^^^^^ usage of unsafe attribute
+   |
+   = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2024!
+   = note: for more information, see issue #123757 <https://github.com/rust-lang/rust/issues/123757>
+note: the lint level is defined here
+  --> $DIR/unsafe-attributes-fix.rs:3:9
+   |
+LL | #![deny(unsafe_attr_outside_unsafe)]
+   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^
+help: wrap the attribute in `unsafe(...)`
+   |
+LL | tt!([unsafe(no_mangle)]);
+   |      +++++++         +
+
+error: unsafe attribute used without unsafe
+  --> $DIR/unsafe-attributes-fix.rs:14:11
+   |
+LL |         #[$e]
+   |           ^^ usage of unsafe attribute
+...
+LL | ident!(no_mangle);
+   | ----------------- in this macro invocation
+   |
+   = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2024!
+   = note: for more information, see issue #123757 <https://github.com/rust-lang/rust/issues/123757>
+   = note: this error originates in the macro `ident` (in Nightly builds, run with -Z macro-backtrace for more info)
+help: wrap the attribute in `unsafe(...)`
+   |
+LL |         #[unsafe($e)]
+   |           +++++++  +
+
+error: unsafe attribute used without unsafe
+  --> $DIR/unsafe-attributes-fix.rs:48:7
+   |
+LL | meta!(no_mangle);
+   |       ^^^^^^^^^ usage of unsafe attribute
+   |
+   = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2024!
+   = note: for more information, see issue #123757 <https://github.com/rust-lang/rust/issues/123757>
+help: wrap the attribute in `unsafe(...)`
+   |
+LL | meta!(unsafe(no_mangle));
+   |       +++++++         +
+
+error: unsafe attribute used without unsafe
+  --> $DIR/unsafe-attributes-fix.rs:51:8
+   |
+LL | meta2!(export_name = "baw");
+   |        ^^^^^^^^^^^ usage of unsafe attribute
+   |
+   = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2024!
+   = note: for more information, see issue #123757 <https://github.com/rust-lang/rust/issues/123757>
+help: wrap the attribute in `unsafe(...)`
+   |
+LL | meta2!(unsafe(export_name = "baw"));
+   |        +++++++                   +
+
+error: unsafe attribute used without unsafe
+  --> $DIR/unsafe-attributes-fix.rs:23:11
+   |
+LL |         #[$e = $l]
+   |           ^^ usage of unsafe attribute
+...
+LL | ident2!(export_name, "bars");
+   | ---------------------------- in this macro invocation
+   |
+   = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2024!
+   = note: for more information, see issue #123757 <https://github.com/rust-lang/rust/issues/123757>
+   = note: this error originates in the macro `ident2` (in Nightly builds, run with -Z macro-backtrace for more info)
+help: wrap the attribute in `unsafe(...)`
+   |
+LL |         #[unsafe($e = $l)]
+   |           +++++++       +
+
+error: unsafe attribute used without unsafe
+  --> $DIR/unsafe-attributes-fix.rs:56:3
+   |
+LL | #[no_mangle]
+   |   ^^^^^^^^^ usage of unsafe attribute
+   |
+   = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2024!
+   = note: for more information, see issue #123757 <https://github.com/rust-lang/rust/issues/123757>
+help: wrap the attribute in `unsafe(...)`
+   |
+LL | #[unsafe(no_mangle)]
+   |   +++++++         +
+
+error: aborting due to 6 previous errors
+
diff --git a/tests/ui/rust-2024/unsafe-attributes/unsafe-attributes.edition2024.stderr b/tests/ui/rust-2024/unsafe-attributes/unsafe-attributes.edition2024.stderr
new file mode 100644
index 00000000000..35475d66716
--- /dev/null
+++ b/tests/ui/rust-2024/unsafe-attributes/unsafe-attributes.edition2024.stderr
@@ -0,0 +1,13 @@
+error: unsafe attribute used without unsafe
+  --> $DIR/unsafe-attributes.rs:9:3
+   |
+LL | #[no_mangle]
+   |   ^^^^^^^^^ usage of unsafe attribute
+   |
+help: wrap the attribute in `unsafe(...)`
+   |
+LL | #[unsafe(no_mangle)]
+   |   +++++++         +
+
+error: aborting due to 1 previous error
+
diff --git a/tests/ui/rust-2024/unsafe-attributes/unsafe-attributes.rs b/tests/ui/rust-2024/unsafe-attributes/unsafe-attributes.rs
new file mode 100644
index 00000000000..3a6af9dfb2b
--- /dev/null
+++ b/tests/ui/rust-2024/unsafe-attributes/unsafe-attributes.rs
@@ -0,0 +1,12 @@
+//@ revisions: edition2021 edition2024
+//@[edition2021] edition:2021
+//@[edition2021] check-pass
+//@[edition2024] edition:2024
+//@[edition2024] compile-flags: -Zunstable-options
+
+#![feature(unsafe_attributes)]
+
+#[no_mangle] //[edition2024]~ ERROR: unsafe attribute used without unsafe
+extern "C" fn foo() {}
+
+fn main() {}
diff --git a/tests/ui/sized/ensure-overriding-bindings-in-pattern-with-ty-err-doesnt-ice.rs b/tests/ui/sized/ensure-overriding-bindings-in-pattern-with-ty-err-doesnt-ice.rs
index 196da30b864..d0bf5078165 100644
--- a/tests/ui/sized/ensure-overriding-bindings-in-pattern-with-ty-err-doesnt-ice.rs
+++ b/tests/ui/sized/ensure-overriding-bindings-in-pattern-with-ty-err-doesnt-ice.rs
@@ -4,4 +4,5 @@ fn main() {
 //~| ERROR cannot find type `T` in this scope
 //~| ERROR const and type arguments are not allowed on builtin type `str`
 //~| ERROR expected unit struct, unit variant or constant, found associated function `str<
+//~| ERROR type annotations needed
 }
diff --git a/tests/ui/sized/ensure-overriding-bindings-in-pattern-with-ty-err-doesnt-ice.stderr b/tests/ui/sized/ensure-overriding-bindings-in-pattern-with-ty-err-doesnt-ice.stderr
index 99f8dbd9a6c..fc431eb1412 100644
--- a/tests/ui/sized/ensure-overriding-bindings-in-pattern-with-ty-err-doesnt-ice.stderr
+++ b/tests/ui/sized/ensure-overriding-bindings-in-pattern-with-ty-err-doesnt-ice.stderr
@@ -32,7 +32,18 @@ error[E0533]: expected unit struct, unit variant or constant, found associated f
 LL |     let str::<{fn str() { let str::T>>::as_bytes; }}, T>::as_bytes;
    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ not a unit struct, unit variant or constant
 
-error: aborting due to 4 previous errors
+error[E0282]: type annotations needed
+  --> $DIR/ensure-overriding-bindings-in-pattern-with-ty-err-doesnt-ice.rs:2:31
+   |
+LL |     let str::<{fn str() { let str::T>>::as_bytes; }}, T>::as_bytes;
+   |                               ^^^^^^^^^^^^^^^^^^
+   |
+help: consider giving this pattern a type
+   |
+LL |     let str::<{fn str() { let str::T>>::as_bytes: /* Type */; }}, T>::as_bytes;
+   |                                                 ++++++++++++
+
+error: aborting due to 5 previous errors
 
-Some errors have detailed explanations: E0109, E0412, E0533.
+Some errors have detailed explanations: E0109, E0282, E0412, E0533.
 For more information about an error, try `rustc --explain E0109`.
diff --git a/tests/ui/sized/stack-overflow-trait-infer-98842.32bit.stderr b/tests/ui/sized/stack-overflow-trait-infer-98842.32bit.stderr
index 3f8011d961a..6bbd81ae3e1 100644
--- a/tests/ui/sized/stack-overflow-trait-infer-98842.32bit.stderr
+++ b/tests/ui/sized/stack-overflow-trait-infer-98842.32bit.stderr
@@ -9,15 +9,11 @@ LL | const _: *const Foo = 0 as _;
    | ^^^^^^^^^^^^^^^^^^^
    = note: see https://rustc-dev-guide.rust-lang.org/overview.html#queries and https://rustc-dev-guide.rust-lang.org/query.html for more information
 
-error[E0080]: it is undefined behavior to use this value
+error[E0080]: evaluation of constant value failed
   --> $DIR/stack-overflow-trait-infer-98842.rs:15:1
    |
 LL | const _: *const Foo = 0 as _;
    | ^^^^^^^^^^^^^^^^^^^ a cycle occurred during layout computation
-   |
-   = note: the raw bytes of the constant (size: 4, align: 4) {
-               00 00 00 00                                     │ ....
-           }
 
 error: aborting due to 2 previous errors
 
diff --git a/tests/ui/sized/stack-overflow-trait-infer-98842.64bit.stderr b/tests/ui/sized/stack-overflow-trait-infer-98842.64bit.stderr
index 04e2c4483bf..6bbd81ae3e1 100644
--- a/tests/ui/sized/stack-overflow-trait-infer-98842.64bit.stderr
+++ b/tests/ui/sized/stack-overflow-trait-infer-98842.64bit.stderr
@@ -9,15 +9,11 @@ LL | const _: *const Foo = 0 as _;
    | ^^^^^^^^^^^^^^^^^^^
    = note: see https://rustc-dev-guide.rust-lang.org/overview.html#queries and https://rustc-dev-guide.rust-lang.org/query.html for more information
 
-error[E0080]: it is undefined behavior to use this value
+error[E0080]: evaluation of constant value failed
   --> $DIR/stack-overflow-trait-infer-98842.rs:15:1
    |
 LL | const _: *const Foo = 0 as _;
    | ^^^^^^^^^^^^^^^^^^^ a cycle occurred during layout computation
-   |
-   = note: the raw bytes of the constant (size: 8, align: 8) {
-               00 00 00 00 00 00 00 00                         │ ........
-           }
 
 error: aborting due to 2 previous errors
 
diff --git a/tests/ui/sized/stack-overflow-trait-infer-98842.rs b/tests/ui/sized/stack-overflow-trait-infer-98842.rs
index 54d50346cc8..be4807b2e4a 100644
--- a/tests/ui/sized/stack-overflow-trait-infer-98842.rs
+++ b/tests/ui/sized/stack-overflow-trait-infer-98842.rs
@@ -13,6 +13,6 @@ struct Foo(<&'static Foo as ::core::ops::Deref>::Target);
 // and it will infinitely recurse somewhere trying to figure out the
 // size of this pointer (is my guess):
 const _: *const Foo = 0 as _;
-//~^ ERROR it is undefined behavior to use this value
+//~^ ERROR evaluation of constant value failed
 
 pub fn main() {}
diff --git a/tests/ui/sized/stack-overflow-trait-infer-98842.stderr b/tests/ui/sized/stack-overflow-trait-infer-98842.stderr
deleted file mode 100644
index 8ddddeb5bf2..00000000000
--- a/tests/ui/sized/stack-overflow-trait-infer-98842.stderr
+++ /dev/null
@@ -1,25 +0,0 @@
-error[E0391]: cycle detected when computing layout of `Foo`
-   |
-   = note: ...which requires computing layout of `<&'static Foo as core::ops::deref::Deref>::Target`...
-   = note: ...which again requires computing layout of `Foo`, completing the cycle
-note: cycle used when const-evaluating + checking `_`
-  --> $DIR/stack-overflow-trait-infer-98842.rs:13:1
-   |
-LL | const _: *const Foo = 0 as _;
-   | ^^^^^^^^^^^^^^^^^^^
-   = note: see https://rustc-dev-guide.rust-lang.org/overview.html#queries and https://rustc-dev-guide.rust-lang.org/query.html for more information
-
-error[E0080]: it is undefined behavior to use this value
-  --> $DIR/stack-overflow-trait-infer-98842.rs:13:1
-   |
-LL | const _: *const Foo = 0 as _;
-   | ^^^^^^^^^^^^^^^^^^^ a cycle occurred during layout computation
-   |
-   = note: the raw bytes of the constant (size: 8, align: 8) {
-               00 00 00 00 00 00 00 00                         │ ........
-           }
-
-error: aborting due to 2 previous errors
-
-Some errors have detailed explanations: E0080, E0391.
-For more information about an error, try `rustc --explain E0080`.
diff --git a/tests/ui/span/recursive-type-field.stderr b/tests/ui/span/recursive-type-field.stderr
index 30ba8cde463..323bbd89457 100644
--- a/tests/ui/span/recursive-type-field.stderr
+++ b/tests/ui/span/recursive-type-field.stderr
@@ -17,7 +17,7 @@ help: insert some indirection (e.g., a `Box`, `Rc`, or `&`) to break the cycle
    |
 LL ~     bar: Box<Bar<'a>>,
 LL |     b: Rc<Bar<'a>>,
- ...
+...
 LL | struct Bar<'a> {
 LL ~     y: (Box<Foo<'a>>, Box<Foo<'a>>),
    |
diff --git a/tests/ui/specialization/default-proj-ty-as-type-of-const-issue-125757.stderr b/tests/ui/specialization/default-proj-ty-as-type-of-const-issue-125757.stderr
index b4c14c2294e..71d4277275f 100644
--- a/tests/ui/specialization/default-proj-ty-as-type-of-const-issue-125757.stderr
+++ b/tests/ui/specialization/default-proj-ty-as-type-of-const-issue-125757.stderr
@@ -14,11 +14,11 @@ LL | impl<const C: usize> Wrapper<C> {}
    |
    = help: consider constraining the associated type `<i32 as Trait>::Type` to `usize`
    = note: for more information, visit https://doc.rust-lang.org/book/ch19-03-advanced-traits.html
-note: required by a bound in `Wrapper`
+note: required by a const generic parameter in `Wrapper`
   --> $DIR/default-proj-ty-as-type-of-const-issue-125757.rs:12:16
    |
 LL | struct Wrapper<const C: <i32 as Trait>::Type> {}
-   |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ required by this bound in `Wrapper`
+   |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ required by this const generic parameter in `Wrapper`
 
 error[E0308]: mismatched types
   --> $DIR/default-proj-ty-as-type-of-const-issue-125757.rs:15:30
diff --git a/tests/ui/stability-attribute/missing-const-stability.rs b/tests/ui/stability-attribute/missing-const-stability.rs
index 621e8576249..62bb0239168 100644
--- a/tests/ui/stability-attribute/missing-const-stability.rs
+++ b/tests/ui/stability-attribute/missing-const-stability.rs
@@ -1,5 +1,5 @@
 #![feature(staged_api)]
-#![feature(const_trait_impl, effects)]
+#![feature(const_trait_impl, effects)] //~ WARN the feature `effects` is incomplete
 #![stable(feature = "stable", since = "1.0.0")]
 
 #[stable(feature = "stable", since = "1.0.0")]
diff --git a/tests/ui/stability-attribute/missing-const-stability.stderr b/tests/ui/stability-attribute/missing-const-stability.stderr
index 4cfbe152891..4e488124fe3 100644
--- a/tests/ui/stability-attribute/missing-const-stability.stderr
+++ b/tests/ui/stability-attribute/missing-const-stability.stderr
@@ -1,3 +1,12 @@
+warning: the feature `effects` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/missing-const-stability.rs:2:30
+   |
+LL | #![feature(const_trait_impl, effects)]
+   |                              ^^^^^^^
+   |
+   = note: see issue #102090 <https://github.com/rust-lang/rust/issues/102090> for more information
+   = note: `#[warn(incomplete_features)]` on by default
+
 error: function has missing const stability attribute
   --> $DIR/missing-const-stability.rs:6:1
    |
@@ -19,5 +28,5 @@ error: associated function has missing const stability attribute
 LL |     pub const fn foo() {}
    |     ^^^^^^^^^^^^^^^^^^^^^
 
-error: aborting due to 3 previous errors
+error: aborting due to 3 previous errors; 1 warning emitted
 
diff --git a/tests/ui/suggestions/abi-typo.stderr b/tests/ui/suggestions/abi-typo.stderr
index ea474e32125..5195c43220b 100644
--- a/tests/ui/suggestions/abi-typo.stderr
+++ b/tests/ui/suggestions/abi-typo.stderr
@@ -7,7 +7,7 @@ LL | extern "cdedl" fn cdedl() {}
    |        invalid ABI
    |        help: did you mean: `"cdecl"`
    |
-   = note: invoke `rustc --print=calling-conventions` for a full list of supported calling conventions.
+   = note: invoke `rustc --print=calling-conventions` for a full list of supported calling conventions
 
 error: aborting due to 1 previous error
 
diff --git a/tests/ui/suggestions/issue-68049-2.stderr b/tests/ui/suggestions/issue-68049-2.stderr
index 449ecabeb7f..91def27bfcd 100644
--- a/tests/ui/suggestions/issue-68049-2.stderr
+++ b/tests/ui/suggestions/issue-68049-2.stderr
@@ -19,7 +19,7 @@ help: consider changing this to be a mutable reference in the `impl` method and
    |
 LL ~   fn example(&mut self, input: &i32);
 LL | }
- ...
+...
 LL | impl Hello for Test2 {
 LL ~   fn example(&mut self, input: &i32) {
    |
diff --git a/tests/ui/tool-attributes/duplicate-diagnostic.stderr b/tests/ui/tool-attributes/duplicate-diagnostic.stderr
index 26bd6a82e34..3cd438004c8 100644
--- a/tests/ui/tool-attributes/duplicate-diagnostic.stderr
+++ b/tests/ui/tool-attributes/duplicate-diagnostic.stderr
@@ -1,14 +1,14 @@
-error: duplicate diagnostic item in crate `p2`: `Foo`.
+error: duplicate diagnostic item in crate `p2`: `Foo`
    |
-   = note: the diagnostic item is first defined in crate `p1`.
+   = note: the diagnostic item is first defined in crate `p1`
 
-error: duplicate diagnostic item in crate `duplicate_diagnostic`: `Foo`.
+error: duplicate diagnostic item in crate `duplicate_diagnostic`: `Foo`
   --> $DIR/duplicate-diagnostic.rs:12:1
    |
 LL | pub struct Foo {}
    | ^^^^^^^^^^^^^^
    |
-   = note: the diagnostic item is first defined in crate `p2`.
+   = note: the diagnostic item is first defined in crate `p2`
 
 error: aborting due to 2 previous errors
 
diff --git a/tests/ui/traits/item-privacy.stderr b/tests/ui/traits/item-privacy.stderr
index d313f5af806..fd474fac155 100644
--- a/tests/ui/traits/item-privacy.stderr
+++ b/tests/ui/traits/item-privacy.stderr
@@ -8,10 +8,7 @@ LL |     S.a();
    |       ^
    |
    = help: items from traits can only be used if the trait is implemented and in scope
-help: trait `A` which provides `a` is implemented but not in scope; perhaps you want to import it
-   |
-LL + use method::A;
-   |
+   = help: trait `method::A` which provides `a` is implemented but not reachable
 help: there is a method `b` with a similar name
    |
 LL |     S.b();
@@ -58,15 +55,12 @@ LL |     S::a(&S);
    |        ^ function or associated item not found in `S`
    |
    = help: items from traits can only be used if the trait is implemented and in scope
+   = help: trait `method::A` which provides `a` is implemented but not reachable
 help: there is an associated constant `B` with a similar name
   --> $DIR/item-privacy.rs:29:9
    |
 LL |         const B: u8 = 0;
    |         ^^^^^^^^^^^
-help: trait `A` which provides `a` is implemented but not in scope; perhaps you want to import it
-   |
-LL + use method::A;
-   |
 
 error[E0599]: no function or associated item named `b` found for struct `S` in the current scope
   --> $DIR/item-privacy.rs:80:8
@@ -107,10 +101,7 @@ LL |     S::A;
    |        ^ associated item not found in `S`
    |
    = help: items from traits can only be used if the trait is implemented and in scope
-help: trait `A` which provides `A` is implemented but not in scope; perhaps you want to import it
-   |
-LL + use assoc_const::A;
-   |
+   = help: trait `assoc_const::A` which provides `A` is implemented but not reachable
 help: there is an associated constant `B` with a similar name
    |
 LL |     S::B;
diff --git a/tests/ui/traits/next-solver/canonical/effect-var.rs b/tests/ui/traits/next-solver/canonical/effect-var.rs
index 6d0f09bb9be..d1e3e18cdc8 100644
--- a/tests/ui/traits/next-solver/canonical/effect-var.rs
+++ b/tests/ui/traits/next-solver/canonical/effect-var.rs
@@ -1,7 +1,7 @@
 //@ compile-flags: -Znext-solver
 //@ check-pass
 
-#![feature(effects)]
+#![feature(effects)] //~ WARN the feature `effects` is incomplete
 #![feature(const_trait_impl)]
 
 #[const_trait]
diff --git a/tests/ui/traits/next-solver/canonical/effect-var.stderr b/tests/ui/traits/next-solver/canonical/effect-var.stderr
new file mode 100644
index 00000000000..994228c51e5
--- /dev/null
+++ b/tests/ui/traits/next-solver/canonical/effect-var.stderr
@@ -0,0 +1,11 @@
+warning: the feature `effects` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/effect-var.rs:4:12
+   |
+LL | #![feature(effects)]
+   |            ^^^^^^^
+   |
+   = note: see issue #102090 <https://github.com/rust-lang/rust/issues/102090> for more information
+   = note: `#[warn(incomplete_features)]` on by default
+
+warning: 1 warning emitted
+
diff --git a/tests/ui/traits/next-solver/issue-118950-root-region.stderr b/tests/ui/traits/next-solver/issue-118950-root-region.stderr
index 04c44276195..17da1f52479 100644
--- a/tests/ui/traits/next-solver/issue-118950-root-region.stderr
+++ b/tests/ui/traits/next-solver/issue-118950-root-region.stderr
@@ -25,10 +25,10 @@ help: this trait has no implementations, consider adding one
 LL | trait ToUnit<'a> {
    | ^^^^^^^^^^^^^^^^
 
- WARN rustc_infer::infer::relate::generalize may incompletely handle alias type: AliasTy { args: ['^0.Named(DefId(0:15 ~ issue_118950_root_region[d54f]::{impl#1}::'a), "'a"), ?1t], def_id: DefId(0:8 ~ issue_118950_root_region[d54f]::Assoc), _use_alias_ty_new_instead: () }
- WARN rustc_infer::infer::relate::generalize may incompletely handle alias type: AliasTy { args: ['^0.Named(DefId(0:15 ~ issue_118950_root_region[d54f]::{impl#1}::'a), "'a"), ?1t], def_id: DefId(0:8 ~ issue_118950_root_region[d54f]::Assoc), _use_alias_ty_new_instead: () }
- WARN rustc_infer::infer::relate::generalize may incompletely handle alias type: AliasTy { args: ['^0.Named(DefId(0:15 ~ issue_118950_root_region[d54f]::{impl#1}::'a), "'a"), ?1t], def_id: DefId(0:8 ~ issue_118950_root_region[d54f]::Assoc), _use_alias_ty_new_instead: () }
- WARN rustc_infer::infer::relate::generalize may incompletely handle alias type: AliasTy { args: ['^0.Named(DefId(0:15 ~ issue_118950_root_region[d54f]::{impl#1}::'a), "'a"), ?1t], def_id: DefId(0:8 ~ issue_118950_root_region[d54f]::Assoc), _use_alias_ty_new_instead: () }
+ WARN rustc_infer::infer::relate::generalize may incompletely handle alias type: AliasTy { args: ['^0.Named(DefId(0:15 ~ issue_118950_root_region[d54f]::{impl#1}::'a), "'a"), ?1t], def_id: DefId(0:8 ~ issue_118950_root_region[d54f]::Assoc) }
+ WARN rustc_infer::infer::relate::generalize may incompletely handle alias type: AliasTy { args: ['^0.Named(DefId(0:15 ~ issue_118950_root_region[d54f]::{impl#1}::'a), "'a"), ?1t], def_id: DefId(0:8 ~ issue_118950_root_region[d54f]::Assoc) }
+ WARN rustc_infer::infer::relate::generalize may incompletely handle alias type: AliasTy { args: ['^0.Named(DefId(0:15 ~ issue_118950_root_region[d54f]::{impl#1}::'a), "'a"), ?1t], def_id: DefId(0:8 ~ issue_118950_root_region[d54f]::Assoc) }
+ WARN rustc_infer::infer::relate::generalize may incompletely handle alias type: AliasTy { args: ['^0.Named(DefId(0:15 ~ issue_118950_root_region[d54f]::{impl#1}::'a), "'a"), ?1t], def_id: DefId(0:8 ~ issue_118950_root_region[d54f]::Assoc) }
 error[E0119]: conflicting implementations of trait `Overlap<fn(_)>` for type `fn(_)`
   --> $DIR/issue-118950-root-region.rs:19:1
    |
diff --git a/tests/ui/traits/trait-or-new-type-instead.stderr b/tests/ui/traits/trait-or-new-type-instead.stderr
index 17ee9398878..5f5aa3ac569 100644
--- a/tests/ui/traits/trait-or-new-type-instead.stderr
+++ b/tests/ui/traits/trait-or-new-type-instead.stderr
@@ -2,7 +2,7 @@ error[E0116]: cannot define inherent `impl` for a type outside of the crate wher
   --> $DIR/trait-or-new-type-instead.rs:1:1
    |
 LL | impl<T> Option<T> {
-   | ^^^^^^^^^^^^^^^^^ impl for type defined outside of crate.
+   | ^^^^^^^^^^^^^^^^^ impl for type defined outside of crate
    |
    = note: define and implement a trait or new type instead
 
diff --git a/tests/ui/transmutability/issue-101739-1.stderr b/tests/ui/transmutability/issue-101739-1.stderr
index 1df7c3e2f97..6f79bf7b424 100644
--- a/tests/ui/transmutability/issue-101739-1.stderr
+++ b/tests/ui/transmutability/issue-101739-1.stderr
@@ -10,7 +10,7 @@ error: the constant `ASSUME_ALIGNMENT` is not of type `Assume`
 LL |         Dst: BikeshedIntrinsicFrom<Src, ASSUME_ALIGNMENT>,
    |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `Assume`, found `bool`
    |
-note: required by a bound in `BikeshedIntrinsicFrom`
+note: required by a const generic parameter in `BikeshedIntrinsicFrom`
   --> $SRC_DIR/core/src/mem/transmutability.rs:LL:COL
 
 error[E0308]: mismatched types
diff --git a/tests/ui/try-trait/try-operator-on-main.stderr b/tests/ui/try-trait/try-operator-on-main.stderr
index ba6eacde68f..d22117165c1 100644
--- a/tests/ui/try-trait/try-operator-on-main.stderr
+++ b/tests/ui/try-trait/try-operator-on-main.stderr
@@ -12,7 +12,7 @@ help: consider adding return type
    |
 LL ~ fn main() -> Result<(), Box<dyn std::error::Error>> {
 LL |     // error for a `Try` type on a non-`Try` fn
- ...
+...
 LL |     try_trait_generic::<()>();
 LL + 
 LL +     Ok(())
diff --git a/tests/ui/type-alias-impl-trait/different_args_considered_equal.rs b/tests/ui/type-alias-impl-trait/different_args_considered_equal.rs
new file mode 100644
index 00000000000..8ce471e3956
--- /dev/null
+++ b/tests/ui/type-alias-impl-trait/different_args_considered_equal.rs
@@ -0,0 +1,14 @@
+#![feature(type_alias_impl_trait)]
+
+pub type Opaque<'a> = impl Sized;
+
+fn get_one<'a>(a: *mut &'a str) -> Opaque<'a> {
+    a
+}
+
+fn get_iter<'a>() -> impl IntoIterator<Item = Opaque<'a>> {
+    //~^ ERROR:  item does not constrain
+    None::<Opaque<'static>>
+}
+
+fn main() {}
diff --git a/tests/ui/type-alias-impl-trait/different_args_considered_equal.stderr b/tests/ui/type-alias-impl-trait/different_args_considered_equal.stderr
new file mode 100644
index 00000000000..f27f2234525
--- /dev/null
+++ b/tests/ui/type-alias-impl-trait/different_args_considered_equal.stderr
@@ -0,0 +1,15 @@
+error: item does not constrain `Opaque::{opaque#0}`, but has it in its signature
+  --> $DIR/different_args_considered_equal.rs:9:4
+   |
+LL | fn get_iter<'a>() -> impl IntoIterator<Item = Opaque<'a>> {
+   |    ^^^^^^^^
+   |
+   = note: consider moving the opaque type's declaration and defining uses into a separate module
+note: this opaque type is in the signature
+  --> $DIR/different_args_considered_equal.rs:3:23
+   |
+LL | pub type Opaque<'a> = impl Sized;
+   |                       ^^^^^^^^^^
+
+error: aborting due to 1 previous error
+
diff --git a/tests/ui/type-alias-impl-trait/different_args_considered_equal2.rs b/tests/ui/type-alias-impl-trait/different_args_considered_equal2.rs
new file mode 100644
index 00000000000..43dfea97e6d
--- /dev/null
+++ b/tests/ui/type-alias-impl-trait/different_args_considered_equal2.rs
@@ -0,0 +1,14 @@
+#![feature(type_alias_impl_trait)]
+
+pub type Opaque<'a> = impl Sized;
+
+fn get_one<'a>(a: *mut &'a str) -> impl IntoIterator<Item = Opaque<'a>> {
+    if a.is_null() {
+        Some(a)
+    } else {
+        None::<Opaque<'static>>
+        //~^ ERROR hidden type for `Opaque<'static>` captures lifetime that does not appear in bounds
+    }
+}
+
+fn main() {}
diff --git a/tests/ui/type-alias-impl-trait/different_args_considered_equal2.stderr b/tests/ui/type-alias-impl-trait/different_args_considered_equal2.stderr
new file mode 100644
index 00000000000..1104c2c498a
--- /dev/null
+++ b/tests/ui/type-alias-impl-trait/different_args_considered_equal2.stderr
@@ -0,0 +1,20 @@
+error[E0700]: hidden type for `Opaque<'static>` captures lifetime that does not appear in bounds
+  --> $DIR/different_args_considered_equal2.rs:9:9
+   |
+LL | pub type Opaque<'a> = impl Sized;
+   |                       ---------- opaque type defined here
+LL |
+LL | fn get_one<'a>(a: *mut &'a str) -> impl IntoIterator<Item = Opaque<'a>> {
+   |            -- hidden type `*mut &'a str` captures the lifetime `'a` as defined here
+...
+LL |         None::<Opaque<'static>>
+   |         ^^^^^^^^^^^^^^^^^^^^^^^
+   |
+help: to declare that `impl IntoIterator<Item = Opaque<'a>>` captures `'a`, you can add an explicit `'a` lifetime bound
+   |
+LL | fn get_one<'a>(a: *mut &'a str) -> impl IntoIterator<Item = Opaque<'a>> + 'a {
+   |                                                                         ++++
+
+error: aborting due to 1 previous error
+
+For more information about this error, try `rustc --explain E0700`.
diff --git a/tests/ui/type-alias-impl-trait/different_args_considered_equal3.rs b/tests/ui/type-alias-impl-trait/different_args_considered_equal3.rs
new file mode 100644
index 00000000000..ea69175ba31
--- /dev/null
+++ b/tests/ui/type-alias-impl-trait/different_args_considered_equal3.rs
@@ -0,0 +1,22 @@
+//! Test that we don't allow coercing an opaque type with a non-static
+//! lifetime to one with a static lifetime. While `get_iter` looks like
+//! it would be doing the opposite, the way we're handling projections
+//! makes `Opaque<'a>` the hidden type of `Opaque<'static>`.
+
+#![feature(type_alias_impl_trait)]
+
+mod defining_scope {
+    pub type Opaque<'a> = impl Sized;
+
+    fn get_one<'a>(a: *mut &'a str) -> Opaque<'a> {
+        a
+    }
+}
+use defining_scope::Opaque;
+
+fn get_iter<'a>() -> impl IntoIterator<Item = Opaque<'a>> {
+    None::<Opaque<'static>>
+    //~^ ERROR lifetime may not live long enough
+}
+
+fn main() {}
diff --git a/tests/ui/type-alias-impl-trait/different_args_considered_equal3.stderr b/tests/ui/type-alias-impl-trait/different_args_considered_equal3.stderr
new file mode 100644
index 00000000000..d8f70e3d778
--- /dev/null
+++ b/tests/ui/type-alias-impl-trait/different_args_considered_equal3.stderr
@@ -0,0 +1,10 @@
+error: lifetime may not live long enough
+  --> $DIR/different_args_considered_equal3.rs:18:5
+   |
+LL | fn get_iter<'a>() -> impl IntoIterator<Item = Opaque<'a>> {
+   |             -- lifetime `'a` defined here
+LL |     None::<Opaque<'static>>
+   |     ^^^^^^^^^^^^^^^^^^^^^^^ returning this value requires that `'a` must outlive `'static`
+
+error: aborting due to 1 previous error
+
diff --git a/tests/ui/type-alias-impl-trait/lazy_subtyping_of_opaques.rs b/tests/ui/type-alias-impl-trait/lazy_subtyping_of_opaques.rs
index 72a90287e37..1bc352041a5 100644
--- a/tests/ui/type-alias-impl-trait/lazy_subtyping_of_opaques.rs
+++ b/tests/ui/type-alias-impl-trait/lazy_subtyping_of_opaques.rs
@@ -7,9 +7,10 @@
 type Tait = impl FnOnce() -> ();
 
 fn reify_as_tait() -> Thunk<Tait> {
+    //~^ ERROR: expected a `FnOnce()` closure, found `()`
     Thunk::new(|cont| cont)
     //~^ ERROR: mismatched types
-    //~| ERROR: mismatched types
+    //~| ERROR: expected a `FnOnce()` closure, found `()`
 }
 
 struct Thunk<F>(F);
diff --git a/tests/ui/type-alias-impl-trait/lazy_subtyping_of_opaques.stderr b/tests/ui/type-alias-impl-trait/lazy_subtyping_of_opaques.stderr
index 5a35dc27446..7bc2fa1b09e 100644
--- a/tests/ui/type-alias-impl-trait/lazy_subtyping_of_opaques.stderr
+++ b/tests/ui/type-alias-impl-trait/lazy_subtyping_of_opaques.stderr
@@ -1,26 +1,31 @@
-error[E0308]: mismatched types
-  --> $DIR/lazy_subtyping_of_opaques.rs:10:23
+error[E0277]: expected a `FnOnce()` closure, found `()`
+  --> $DIR/lazy_subtyping_of_opaques.rs:11:23
    |
-LL | type Tait = impl FnOnce() -> ();
-   |             ------------------- the found opaque type
-...
 LL |     Thunk::new(|cont| cont)
-   |                       ^^^^ expected `()`, found opaque type
+   |                       ^^^^ expected an `FnOnce()` closure, found `()`
    |
-   = note: expected unit type `()`
-            found opaque type `Tait`
+   = help: the trait `FnOnce()` is not implemented for `()`
+   = note: wrap the `()` in a closure with no arguments: `|| { /* code */ }`
 
-error[E0308]: mismatched types
-  --> $DIR/lazy_subtyping_of_opaques.rs:10:5
+error[E0277]: expected a `FnOnce()` closure, found `()`
+  --> $DIR/lazy_subtyping_of_opaques.rs:9:23
    |
 LL | fn reify_as_tait() -> Thunk<Tait> {
-   |                       ----------- expected `Thunk<_>` because of return type
+   |                       ^^^^^^^^^^^ expected an `FnOnce()` closure, found `()`
+   |
+   = help: the trait `FnOnce()` is not implemented for `()`
+   = note: wrap the `()` in a closure with no arguments: `|| { /* code */ }`
+
+error[E0308]: mismatched types
+  --> $DIR/lazy_subtyping_of_opaques.rs:11:5
+   |
 LL |     Thunk::new(|cont| cont)
    |     ^^^^^^^^^^^^^^^^^^^^^^^ expected `Thunk<_>`, found `()`
    |
    = note: expected struct `Thunk<_>`
            found unit type `()`
 
-error: aborting due to 2 previous errors
+error: aborting due to 3 previous errors
 
-For more information about this error, try `rustc --explain E0308`.
+Some errors have detailed explanations: E0277, E0308.
+For more information about an error, try `rustc --explain E0277`.
diff --git a/tests/ui/ufcs/ufcs-qpath-self-mismatch.stderr b/tests/ui/ufcs/ufcs-qpath-self-mismatch.stderr
index 5b8a49d22c7..a0430240dc4 100644
--- a/tests/ui/ufcs/ufcs-qpath-self-mismatch.stderr
+++ b/tests/ui/ufcs/ufcs-qpath-self-mismatch.stderr
@@ -11,19 +11,6 @@ LL |     <i32 as Add<u32>>::add(1, 2);
              `i32` implements `Add<&i32>`
              `i32` implements `Add`
 
-error[E0277]: cannot add `u32` to `i32`
-  --> $DIR/ufcs-qpath-self-mismatch.rs:4:5
-   |
-LL |     <i32 as Add<u32>>::add(1, 2);
-   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ no implementation for `i32 + u32`
-   |
-   = help: the trait `Add<u32>` is not implemented for `i32`
-   = help: the following other types implement trait `Add<Rhs>`:
-             `&'a i32` implements `Add<i32>`
-             `&i32` implements `Add<&i32>`
-             `i32` implements `Add<&i32>`
-             `i32` implements `Add`
-
 error[E0308]: mismatched types
   --> $DIR/ufcs-qpath-self-mismatch.rs:7:28
    |
@@ -68,6 +55,19 @@ help: change the type of the numeric literal from `u32` to `i32`
 LL |     <i32 as Add<i32>>::add(1, 2i32);
    |                                ~~~
 
+error[E0277]: cannot add `u32` to `i32`
+  --> $DIR/ufcs-qpath-self-mismatch.rs:4:5
+   |
+LL |     <i32 as Add<u32>>::add(1, 2);
+   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ no implementation for `i32 + u32`
+   |
+   = help: the trait `Add<u32>` is not implemented for `i32`
+   = help: the following other types implement trait `Add<Rhs>`:
+             `&'a i32` implements `Add<i32>`
+             `&i32` implements `Add<&i32>`
+             `i32` implements `Add<&i32>`
+             `i32` implements `Add`
+
 error: aborting due to 4 previous errors
 
 Some errors have detailed explanations: E0277, E0308.
diff --git a/tests/ui/unboxed-closures/unboxed-closure-sugar-lifetime-elision.stderr b/tests/ui/unboxed-closures/unboxed-closure-sugar-lifetime-elision.stderr
index c0fce5c2aaa..926e1c72f2f 100644
--- a/tests/ui/unboxed-closures/unboxed-closure-sugar-lifetime-elision.stderr
+++ b/tests/ui/unboxed-closures/unboxed-closure-sugar-lifetime-elision.stderr
@@ -14,7 +14,7 @@ help: consider introducing a named lifetime parameter
    |
 LL ~ fn main<'a>() {
 LL |     eq::< dyn for<'a> Foo<(&'a isize,), Output=&'a isize>,
- ...
+...
 LL |
 LL ~     let _: dyn Foo(&'a isize, &'a usize) -> &'a usize;
    |
diff --git a/tests/ui/unwind-abis/feature-gate-c_unwind.rs b/tests/ui/unwind-abis/feature-gate-c_unwind.rs
deleted file mode 100644
index 28ef7d57788..00000000000
--- a/tests/ui/unwind-abis/feature-gate-c_unwind.rs
+++ /dev/null
@@ -1,4 +0,0 @@
-//@ ignore-test
-
-// After partial stabilisation, `c_unwind` only contains codegen behaviour changes
-// and are tested in `src/test/codegen/unwind-abis`
diff --git a/tests/crashes/123276.rs b/tests/ui/where-clauses/normalization-of-unknown-type.rs
index d2246f59583..c3ff7ed125a 100644
--- a/tests/crashes/123276.rs
+++ b/tests/ui/where-clauses/normalization-of-unknown-type.rs
@@ -1,4 +1,6 @@
-//@ known-bug: rust-lang/rust#123276
+//! This test used to ICE: rust-lang/rust#123276 because we did
+//! not taint when failing to find the `Foo` type and then tried
+//! to normalize it.
 //@ edition:2021
 
 async fn create_task() {
@@ -19,7 +21,9 @@ struct AndThen;
 
 impl Filter for AndThen
 where
-    Foo: Filter,
+    Foo: Filter, //~ ERROR: cannot find type `Foo`
 {
     type Future = ();
 }
+
+fn main() {}
diff --git a/tests/ui/where-clauses/normalization-of-unknown-type.stderr b/tests/ui/where-clauses/normalization-of-unknown-type.stderr
new file mode 100644
index 00000000000..11b83224352
--- /dev/null
+++ b/tests/ui/where-clauses/normalization-of-unknown-type.stderr
@@ -0,0 +1,9 @@
+error[E0412]: cannot find type `Foo` in this scope
+  --> $DIR/normalization-of-unknown-type.rs:24:5
+   |
+LL |     Foo: Filter,
+   |     ^^^ not found in this scope
+
+error: aborting due to 1 previous error
+
+For more information about this error, try `rustc --explain E0412`.