about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--.github/workflows/ci.yml6
-rw-r--r--compiler/rustc_middle/messages.ftl4
-rw-r--r--compiler/rustc_middle/src/error.rs8
-rw-r--r--compiler/rustc_middle/src/ty/util.rs14
-rw-r--r--library/std/src/sys/hermit/net.rs31
-rw-r--r--src/bootstrap/bootstrap.py3
-rw-r--r--src/bootstrap/compile.rs44
-rw-r--r--src/bootstrap/dylib_util.rs2
-rw-r--r--src/bootstrap/metrics.rs13
-rw-r--r--src/ci/github-actions/ci.yml6
-rw-r--r--src/tools/compiletest/src/util.rs2
-rw-r--r--src/tools/tidy/src/ui_tests.rs2
-rw-r--r--tests/ui/autoref-autoderef/issue-38940.rs52
-rw-r--r--tests/ui/autoref-autoderef/issue-38940.stderr23
-rw-r--r--tests/ui/did_you_mean/recursion_limit_deref.stderr6
-rw-r--r--tests/ui/generics/slightly-nice-generic-literal-messages.rs (renamed from tests/ui/slightly-nice-generic-literal-messages.rs)0
-rw-r--r--tests/ui/generics/slightly-nice-generic-literal-messages.stderr (renamed from tests/ui/slightly-nice-generic-literal-messages.stderr)0
-rw-r--r--tests/ui/lexer/unterminated-comment.rs (renamed from tests/ui/unterminated-comment.rs)0
-rw-r--r--tests/ui/lexer/unterminated-comment.stderr (renamed from tests/ui/unterminated-comment.stderr)0
-rw-r--r--tests/ui/lexer/unterminated-nested-comment.rs (renamed from tests/ui/unterminated-nested-comment.rs)0
-rw-r--r--tests/ui/lexer/unterminated-nested-comment.stderr (renamed from tests/ui/unterminated-nested-comment.stderr)0
-rw-r--r--tests/ui/privacy/auxiliary/xc-private-method-lib.rs (renamed from tests/ui/auxiliary/xc-private-method-lib.rs)0
-rw-r--r--tests/ui/privacy/xc-private-method.rs (renamed from tests/ui/xc-private-method.rs)0
-rw-r--r--tests/ui/privacy/xc-private-method.stderr (renamed from tests/ui/xc-private-method.stderr)0
-rw-r--r--tests/ui/privacy/xc-private-method2.rs (renamed from tests/ui/xc-private-method2.rs)0
-rw-r--r--tests/ui/privacy/xc-private-method2.stderr (renamed from tests/ui/xc-private-method2.stderr)0
-rw-r--r--tests/ui/reachable/reachable-unnameable-type-alias.rs (renamed from tests/ui/reachable-unnameable-type-alias.rs)0
-rw-r--r--tests/ui/resolve/disambiguate-identical-names.rs (renamed from tests/ui/disambiguate-identical-names.rs)0
-rw-r--r--tests/ui/resolve/disambiguate-identical-names.stderr (renamed from tests/ui/disambiguate-identical-names.stderr)0
-rw-r--r--tests/ui/thread-local/thread-local-mutation.rs (renamed from tests/ui/thread-local-mutation.rs)0
-rw-r--r--tests/ui/thread-local/thread-local-mutation.stderr (renamed from tests/ui/thread-local-mutation.stderr)0
-rw-r--r--tests/ui/thread-local/thread-local-static.rs (renamed from tests/ui/thread-local-static.rs)0
-rw-r--r--tests/ui/thread-local/thread-local-static.stderr (renamed from tests/ui/thread-local-static.stderr)0
-rw-r--r--tests/ui/traits/wrong-mul-method-signature.rs (renamed from tests/ui/wrong-mul-method-signature.rs)0
-rw-r--r--tests/ui/traits/wrong-mul-method-signature.stderr (renamed from tests/ui/wrong-mul-method-signature.stderr)0
-rw-r--r--tests/ui/tuple/tuple-index.rs (renamed from tests/ui/tuple-index.rs)0
-rw-r--r--tests/ui/typeck/output-type-mismatch.rs (renamed from tests/ui/output-type-mismatch.rs)0
-rw-r--r--tests/ui/typeck/output-type-mismatch.stderr (renamed from tests/ui/output-type-mismatch.stderr)0
-rw-r--r--tests/ui/typeck/suppressed-error.rs (renamed from tests/ui/suppressed-error.rs)0
-rw-r--r--tests/ui/typeck/suppressed-error.stderr (renamed from tests/ui/suppressed-error.stderr)0
-rw-r--r--tests/ui/typeck/tag-that-dare-not-speak-its-name.rs (renamed from tests/ui/tag-that-dare-not-speak-its-name.rs)0
-rw-r--r--tests/ui/typeck/tag-that-dare-not-speak-its-name.stderr (renamed from tests/ui/tag-that-dare-not-speak-its-name.stderr)0
-rw-r--r--tests/ui/typeck/terr-in-field.rs (renamed from tests/ui/terr-in-field.rs)0
-rw-r--r--tests/ui/typeck/terr-in-field.stderr (renamed from tests/ui/terr-in-field.stderr)0
-rw-r--r--tests/ui/typeck/terr-sorts.rs (renamed from tests/ui/terr-sorts.rs)0
-rw-r--r--tests/ui/typeck/terr-sorts.stderr (renamed from tests/ui/terr-sorts.stderr)0
-rw-r--r--tests/ui/typeck/while-type-error.rs (renamed from tests/ui/while-type-error.rs)0
-rw-r--r--tests/ui/typeck/while-type-error.stderr (renamed from tests/ui/while-type-error.stderr)0
-rw-r--r--tests/ui/typeck/wrong-ret-type.rs (renamed from tests/ui/wrong-ret-type.rs)0
-rw-r--r--tests/ui/typeck/wrong-ret-type.stderr (renamed from tests/ui/wrong-ret-type.stderr)0
-rw-r--r--tests/ui/ufcs/ufcs-polymorphic-paths.rs (renamed from tests/ui/ufcs-polymorphic-paths.rs)0
-rw-r--r--tests/ui/unique/expr-block-generic-unique1.rs (renamed from tests/ui/expr-block-generic-unique1.rs)0
-rw-r--r--tests/ui/unique/expr-block-generic-unique2.rs (renamed from tests/ui/expr-block-generic-unique2.rs)0
-rw-r--r--tests/ui/unique/expr-if-unique.rs (renamed from tests/ui/expr-if-unique.rs)0
-rw-r--r--tests/ui/unique/unique-object-noncopyable.rs (renamed from tests/ui/unique-object-noncopyable.rs)0
-rw-r--r--tests/ui/unique/unique-object-noncopyable.stderr (renamed from tests/ui/unique-object-noncopyable.stderr)0
-rw-r--r--tests/ui/unique/unique-pinned-nocopy.rs (renamed from tests/ui/unique-pinned-nocopy.rs)0
-rw-r--r--tests/ui/unique/unique-pinned-nocopy.stderr (renamed from tests/ui/unique-pinned-nocopy.stderr)0
-rw-r--r--tests/ui/unique/unwind-unique.rs (renamed from tests/ui/unwind-unique.rs)0
-rw-r--r--tests/ui/unpretty/mir-unpretty.rs (renamed from tests/ui/mir-unpretty.rs)0
-rw-r--r--tests/ui/unpretty/mir-unpretty.stderr (renamed from tests/ui/mir-unpretty.stderr)0
-rw-r--r--tests/ui/unpretty/unpretty-expr-fn-arg.rs (renamed from tests/ui/unpretty-expr-fn-arg.rs)0
-rw-r--r--tests/ui/unpretty/unpretty-expr-fn-arg.stdout (renamed from tests/ui/unpretty-expr-fn-arg.stdout)0
-rw-r--r--tests/ui/unsafe/foreign-unsafe-fn-called.mir.stderr (renamed from tests/ui/foreign-unsafe-fn-called.mir.stderr)0
-rw-r--r--tests/ui/unsafe/foreign-unsafe-fn-called.rs (renamed from tests/ui/foreign-unsafe-fn-called.rs)0
-rw-r--r--tests/ui/unsafe/foreign-unsafe-fn-called.thir.stderr (renamed from tests/ui/foreign-unsafe-fn-called.thir.stderr)0
-rw-r--r--tests/ui/unsafe/new-unsafe-pointers.rs (renamed from tests/ui/new-unsafe-pointers.rs)0
-rw-r--r--tests/ui/unsafe/unsafe-fn-called-from-unsafe-blk.rs (renamed from tests/ui/unsafe-fn-called-from-unsafe-blk.rs)0
-rw-r--r--tests/ui/unsafe/unsafe-fn-called-from-unsafe-fn.rs (renamed from tests/ui/unsafe-fn-called-from-unsafe-fn.rs)0
-rw-r--r--tests/ui/unsafe/unsafe-pointer-assignability.rs (renamed from tests/ui/unsafe-pointer-assignability.rs)0
-rw-r--r--tests/ui/variance/variance-intersection-of-ref-and-opt-ref.rs (renamed from tests/ui/variance-intersection-of-ref-and-opt-ref.rs)0
-rw-r--r--tests/ui/variance/variance-iterators-in-libcore.rs (renamed from tests/ui/variance-iterators-in-libcore.rs)0
-rw-r--r--tests/ui/wasm/wasm-custom-section-relocations.rs (renamed from tests/ui/wasm-custom-section-relocations.rs)0
-rw-r--r--tests/ui/wasm/wasm-custom-section-relocations.stderr (renamed from tests/ui/wasm-custom-section-relocations.stderr)0
74 files changed, 119 insertions, 97 deletions
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index b45246eb4ea..a917d9a7d55 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -34,7 +34,7 @@ jobs:
   pr:
     permissions:
       actions: write
-    name: PR
+    name: "PR - ${{ matrix.name }}"
     env:
       CI_JOB_NAME: "${{ matrix.name }}"
       CARGO_REGISTRIES_CRATES_IO_PROTOCOL: sparse
@@ -159,7 +159,7 @@ jobs:
   auto:
     permissions:
       actions: write
-    name: auto
+    name: "auto - ${{ matrix.name }}"
     env:
       CI_JOB_NAME: "${{ matrix.name }}"
       CARGO_REGISTRIES_CRATES_IO_PROTOCOL: sparse
@@ -578,7 +578,7 @@ jobs:
   try:
     permissions:
       actions: write
-    name: try
+    name: "try - ${{ matrix.name }}"
     env:
       CI_JOB_NAME: "${{ matrix.name }}"
       CARGO_REGISTRIES_CRATES_IO_PROTOCOL: sparse
diff --git a/compiler/rustc_middle/messages.ftl b/compiler/rustc_middle/messages.ftl
index 4f4e5c6a2c9..bd9d89deee1 100644
--- a/compiler/rustc_middle/messages.ftl
+++ b/compiler/rustc_middle/messages.ftl
@@ -16,6 +16,10 @@ middle_limit_invalid =
     `limit` must be a non-negative integer
     .label = {$error_str}
 
+middle_recursion_limit_reached =
+    reached the recursion limit finding the struct tail for `{$ty}`
+    .help = consider increasing the recursion limit by adding a `#![recursion_limit = "{$suggested_limit}"]`
+
 middle_const_eval_non_int =
     constant evaluation of enum discriminant resulted in non-integer
 
diff --git a/compiler/rustc_middle/src/error.rs b/compiler/rustc_middle/src/error.rs
index 5e94da8cb4d..dc4aa18640f 100644
--- a/compiler/rustc_middle/src/error.rs
+++ b/compiler/rustc_middle/src/error.rs
@@ -50,6 +50,14 @@ pub struct LimitInvalid<'a> {
 }
 
 #[derive(Diagnostic)]
+#[diag(middle_recursion_limit_reached)]
+#[help]
+pub struct RecursionLimitReached<'tcx> {
+    pub ty: Ty<'tcx>,
+    pub suggested_limit: rustc_session::Limit,
+}
+
+#[derive(Diagnostic)]
 #[diag(middle_const_eval_non_int)]
 pub struct ConstEvalNonIntError {
     #[primary_span]
diff --git a/compiler/rustc_middle/src/ty/util.rs b/compiler/rustc_middle/src/ty/util.rs
index d3565b28ae5..4411bcd927d 100644
--- a/compiler/rustc_middle/src/ty/util.rs
+++ b/compiler/rustc_middle/src/ty/util.rs
@@ -19,7 +19,8 @@ use rustc_hir::def_id::{DefId, LocalDefId};
 use rustc_index::bit_set::GrowableBitSet;
 use rustc_index::vec::{Idx, IndexVec};
 use rustc_macros::HashStable;
-use rustc_span::{sym, DUMMY_SP};
+use rustc_session::Limit;
+use rustc_span::sym;
 use rustc_target::abi::{Integer, IntegerType, Size, TargetDataLayout};
 use rustc_target::spec::abi::Abi;
 use smallvec::SmallVec;
@@ -225,10 +226,13 @@ impl<'tcx> TyCtxt<'tcx> {
         let recursion_limit = self.recursion_limit();
         for iteration in 0.. {
             if !recursion_limit.value_within_limit(iteration) {
-                return self.ty_error_with_message(
-                    DUMMY_SP,
-                    &format!("reached the recursion limit finding the struct tail for {}", ty),
-                );
+                let suggested_limit = match recursion_limit {
+                    Limit(0) => Limit(2),
+                    limit => limit * 2,
+                };
+                let reported =
+                    self.sess.emit_err(crate::error::RecursionLimitReached { ty, suggested_limit });
+                return self.ty_error(reported);
             }
             match *ty.kind() {
                 ty::Adt(def, substs) => {
diff --git a/library/std/src/sys/hermit/net.rs b/library/std/src/sys/hermit/net.rs
index 5fb6281aa1e..d6f64a29719 100644
--- a/library/std/src/sys/hermit/net.rs
+++ b/library/std/src/sys/hermit/net.rs
@@ -1,7 +1,7 @@
 #![allow(dead_code)]
 
 use crate::cmp;
-use crate::io::{self, IoSlice, IoSliceMut};
+use crate::io::{self, BorrowedBuf, BorrowedCursor, IoSlice, IoSliceMut};
 use crate::mem;
 use crate::net::{Shutdown, SocketAddr};
 use crate::os::hermit::io::{AsFd, AsRawFd, BorrowedFd, FromRawFd, RawFd};
@@ -146,18 +146,35 @@ impl Socket {
         Ok(Socket(unsafe { FileDesc::from_raw_fd(fd) }))
     }
 
-    fn recv_with_flags(&self, buf: &mut [u8], flags: i32) -> io::Result<usize> {
-        let ret =
-            cvt(unsafe { netc::recv(self.0.as_raw_fd(), buf.as_mut_ptr(), buf.len(), flags) })?;
-        Ok(ret as usize)
+    fn recv_with_flags(&self, mut buf: BorrowedCursor<'_>, flags: i32) -> io::Result<()> {
+        let ret = cvt(unsafe {
+            netc::recv(
+                self.0.as_raw_fd(),
+                buf.as_mut().as_mut_ptr() as *mut u8,
+                buf.capacity(),
+                flags,
+            )
+        })?;
+        unsafe {
+            buf.advance(ret as usize);
+        }
+        Ok(())
     }
 
     pub fn read(&self, buf: &mut [u8]) -> io::Result<usize> {
-        self.recv_with_flags(buf, 0)
+        let mut buf = BorrowedBuf::from(buf);
+        self.recv_with_flags(buf.unfilled(), 0)?;
+        Ok(buf.len())
     }
 
     pub fn peek(&self, buf: &mut [u8]) -> io::Result<usize> {
-        self.recv_with_flags(buf, netc::MSG_PEEK)
+        let mut buf = BorrowedBuf::from(buf);
+        self.recv_with_flags(buf.unfilled(), netc::MSG_PEEK)?;
+        Ok(buf.len())
+    }
+
+    pub fn read_buf(&self, buf: BorrowedCursor<'_>) -> io::Result<()> {
+        self.recv_with_flags(buf, 0)
     }
 
     pub fn read_vectored(&self, bufs: &mut [IoSliceMut<'_>]) -> io::Result<usize> {
diff --git a/src/bootstrap/bootstrap.py b/src/bootstrap/bootstrap.py
index 013d1ab525b..d12781cc33a 100644
--- a/src/bootstrap/bootstrap.py
+++ b/src/bootstrap/bootstrap.py
@@ -741,6 +741,9 @@ class RustBuild(object):
         env["LIBRARY_PATH"] = os.path.join(self.bin_root(), "lib") + \
             (os.pathsep + env["LIBRARY_PATH"]) \
             if "LIBRARY_PATH" in env else ""
+        env["LIBPATH"] = os.path.join(self.bin_root(), "lib") + \
+            (os.pathsep + env["LIBPATH"]) \
+            if "LIBPATH" in env else ""
 
         # Export Stage0 snapshot compiler related env variables
         build_section = "target.{}".format(self.build)
diff --git a/src/bootstrap/compile.rs b/src/bootstrap/compile.rs
index 15708bb183e..e3581943f2c 100644
--- a/src/bootstrap/compile.rs
+++ b/src/bootstrap/compile.rs
@@ -20,7 +20,7 @@ use serde_derive::Deserialize;
 
 use crate::builder::crate_description;
 use crate::builder::Cargo;
-use crate::builder::{Builder, Kind, RunConfig, ShouldRun, Step};
+use crate::builder::{Builder, Kind, PathSet, RunConfig, ShouldRun, Step, TaskPath};
 use crate::cache::{Interned, INTERNER};
 use crate::config::{LlvmLibunwind, RustcLto, TargetSelection};
 use crate::dist;
@@ -995,6 +995,44 @@ pub struct CodegenBackend {
     pub backend: Interned<String>,
 }
 
+fn needs_codegen_config(run: &RunConfig<'_>) -> bool {
+    let mut needs_codegen_cfg = false;
+    for path_set in &run.paths {
+        needs_codegen_cfg = match path_set {
+            PathSet::Set(set) => set.iter().any(|p| is_codegen_cfg_needed(p, run)),
+            PathSet::Suite(suite) => is_codegen_cfg_needed(&suite, run),
+        }
+    }
+    needs_codegen_cfg
+}
+
+const CODEGEN_BACKEND_PREFIX: &str = "rustc_codegen_";
+
+fn is_codegen_cfg_needed(path: &TaskPath, run: &RunConfig<'_>) -> bool {
+    if path.path.to_str().unwrap().contains(&CODEGEN_BACKEND_PREFIX) {
+        let mut needs_codegen_backend_config = true;
+        for &backend in &run.builder.config.rust_codegen_backends {
+            if path
+                .path
+                .to_str()
+                .unwrap()
+                .ends_with(&(CODEGEN_BACKEND_PREFIX.to_owned() + &backend))
+            {
+                needs_codegen_backend_config = false;
+            }
+        }
+        if needs_codegen_backend_config {
+            run.builder.info(
+                "Warning: no codegen-backends config matched the requested path to build a codegen backend. \
+                Help: add backend to codegen-backends in config.toml.",
+            );
+            return true;
+        }
+    }
+
+    return false;
+}
+
 impl Step for CodegenBackend {
     type Output = ();
     const ONLY_HOSTS: bool = true;
@@ -1006,6 +1044,10 @@ impl Step for CodegenBackend {
     }
 
     fn make_run(run: RunConfig<'_>) {
+        if needs_codegen_config(&run) {
+            return;
+        }
+
         for &backend in &run.builder.config.rust_codegen_backends {
             if backend == "llvm" {
                 continue; // Already built as part of rustc
diff --git a/src/bootstrap/dylib_util.rs b/src/bootstrap/dylib_util.rs
index 6d75272c501..b14c0bed66c 100644
--- a/src/bootstrap/dylib_util.rs
+++ b/src/bootstrap/dylib_util.rs
@@ -12,6 +12,8 @@ pub fn dylib_path_var() -> &'static str {
         "DYLD_LIBRARY_PATH"
     } else if cfg!(target_os = "haiku") {
         "LIBRARY_PATH"
+    } else if cfg!(target_os = "aix") {
+        "LIBPATH"
     } else {
         "LD_LIBRARY_PATH"
     }
diff --git a/src/bootstrap/metrics.rs b/src/bootstrap/metrics.rs
index 5f254761aa1..82b123ec8a5 100644
--- a/src/bootstrap/metrics.rs
+++ b/src/bootstrap/metrics.rs
@@ -11,7 +11,7 @@ use serde_derive::{Deserialize, Serialize};
 use std::cell::RefCell;
 use std::fs::File;
 use std::io::BufWriter;
-use std::time::{Duration, Instant};
+use std::time::{Duration, Instant, SystemTime};
 use sysinfo::{CpuExt, System, SystemExt};
 
 pub(crate) struct BuildMetrics {
@@ -27,6 +27,7 @@ impl BuildMetrics {
             system_info: System::new(),
             timer_start: None,
             invocation_timer_start: Instant::now(),
+            invocation_start: SystemTime::now(),
         });
 
         BuildMetrics { state }
@@ -124,6 +125,11 @@ impl BuildMetrics {
             }
         };
         invocations.push(JsonInvocation {
+            start_time: state
+                .invocation_start
+                .duration_since(SystemTime::UNIX_EPOCH)
+                .unwrap()
+                .as_secs(),
             duration_including_children_sec: state.invocation_timer_start.elapsed().as_secs_f64(),
             children: steps.into_iter().map(|step| self.prepare_json_step(step)).collect(),
         });
@@ -166,6 +172,7 @@ struct MetricsState {
     system_info: System,
     timer_start: Option<Instant>,
     invocation_timer_start: Instant,
+    invocation_start: SystemTime,
 }
 
 struct StepMetrics {
@@ -194,6 +201,10 @@ struct JsonRoot {
 #[derive(Serialize, Deserialize)]
 #[serde(rename_all = "snake_case")]
 struct JsonInvocation {
+    // Unix timestamp in seconds
+    //
+    // This is necessary to easily correlate this invocation with logs or other data.
+    start_time: u64,
     duration_including_children_sec: f64,
     children: Vec<JsonNode>,
 }
diff --git a/src/ci/github-actions/ci.yml b/src/ci/github-actions/ci.yml
index c594288dcf8..403953b5047 100644
--- a/src/ci/github-actions/ci.yml
+++ b/src/ci/github-actions/ci.yml
@@ -284,7 +284,7 @@ jobs:
     permissions:
       actions: write # for rust-lang/simpleinfra/github-actions/cancel-outdated-builds
     <<: *base-ci-job
-    name: PR
+    name: PR - ${{ matrix.name }}
     env:
       <<: [*shared-ci-variables, *public-variables]
     if: github.event_name == 'pull_request'
@@ -312,7 +312,7 @@ jobs:
     permissions:
       actions: write # for rust-lang/simpleinfra/github-actions/cancel-outdated-builds
     <<: *base-ci-job
-    name: auto
+    name: auto - ${{ matrix.name }}
     env:
       <<: [*shared-ci-variables, *prod-variables]
     if: github.event_name == 'push' && github.ref == 'refs/heads/auto' && github.repository == 'rust-lang-ci/rust'
@@ -741,7 +741,7 @@ jobs:
     permissions:
       actions: write # for rust-lang/simpleinfra/github-actions/cancel-outdated-builds
     <<: *base-ci-job
-    name: try
+    name: try - ${{ matrix.name }}
     env:
       <<: [*shared-ci-variables, *prod-variables]
     if: github.event_name == 'push' && (github.ref == 'refs/heads/try' || github.ref == 'refs/heads/try-perf') && github.repository == 'rust-lang-ci/rust'
diff --git a/src/tools/compiletest/src/util.rs b/src/tools/compiletest/src/util.rs
index 5f6a27e5366..748240cc94b 100644
--- a/src/tools/compiletest/src/util.rs
+++ b/src/tools/compiletest/src/util.rs
@@ -156,6 +156,8 @@ pub fn dylib_env_var() -> &'static str {
         "DYLD_LIBRARY_PATH"
     } else if cfg!(target_os = "haiku") {
         "LIBRARY_PATH"
+    } else if cfg!(target_os = "aix") {
+        "LIBPATH"
     } else {
         "LD_LIBRARY_PATH"
     }
diff --git a/src/tools/tidy/src/ui_tests.rs b/src/tools/tidy/src/ui_tests.rs
index 20b8a2c3b24..f582666ab28 100644
--- a/src/tools/tidy/src/ui_tests.rs
+++ b/src/tools/tidy/src/ui_tests.rs
@@ -9,7 +9,7 @@ use std::path::{Path, PathBuf};
 
 const ENTRY_LIMIT: usize = 1000;
 // FIXME: The following limits should be reduced eventually.
-const ROOT_ENTRY_LIMIT: usize = 940;
+const ROOT_ENTRY_LIMIT: usize = 881;
 const ISSUES_ENTRY_LIMIT: usize = 1978;
 
 fn check_entries(tests_path: &Path, bad: &mut bool) {
diff --git a/tests/ui/autoref-autoderef/issue-38940.rs b/tests/ui/autoref-autoderef/issue-38940.rs
deleted file mode 100644
index d2f1c6e3271..00000000000
--- a/tests/ui/autoref-autoderef/issue-38940.rs
+++ /dev/null
@@ -1,52 +0,0 @@
-// issue-38940: error printed twice for deref recursion limit exceeded
-// Test that the recursion limit can be changed. In this case, we have
-// deeply nested types that will fail the `Send` check by overflow
-// when the recursion limit is set very low.
-// compile-flags: -Zdeduplicate-diagnostics=yes
-
-#![allow(dead_code)]
-#![recursion_limit = "10"]
-macro_rules! link {
-    ($outer:ident, $inner:ident) => {
-        struct $outer($inner);
-        impl $outer {
-            fn new() -> $outer {
-                $outer($inner::new())
-            }
-        }
-        impl std::ops::Deref for $outer {
-            type Target = $inner;
-            fn deref(&self) -> &$inner {
-                &self.0
-            }
-        }
-    };
-}
-
-struct Bottom;
-
-impl Bottom {
-    fn new() -> Bottom {
-        Bottom
-    }
-}
-
-link!(Top, A);
-link!(A, B);
-link!(B, C);
-link!(C, D);
-link!(D, E);
-link!(E, F);
-link!(F, G);
-link!(G, H);
-link!(H, I);
-link!(I, J);
-link!(J, K);
-link!(K, Bottom);
-
-fn main() {
-    let t = Top::new();
-    let x: &Bottom = &t;
-    //~^ ERROR mismatched types
-    //~| ERROR reached the recursion limit while auto-dereferencing `J`
-}
diff --git a/tests/ui/autoref-autoderef/issue-38940.stderr b/tests/ui/autoref-autoderef/issue-38940.stderr
deleted file mode 100644
index 8e98bfcd90f..00000000000
--- a/tests/ui/autoref-autoderef/issue-38940.stderr
+++ /dev/null
@@ -1,23 +0,0 @@
-error[E0055]: reached the recursion limit while auto-dereferencing `J`
-  --> $DIR/issue-38940.rs:49:22
-   |
-LL |     let x: &Bottom = &t;
-   |                      ^^ deref recursion limit reached
-   |
-   = help: consider increasing the recursion limit by adding a `#![recursion_limit = "20"]` attribute to your crate (`issue_38940`)
-
-error[E0308]: mismatched types
-  --> $DIR/issue-38940.rs:49:22
-   |
-LL |     let x: &Bottom = &t;
-   |            -------   ^^ expected `&Bottom`, found `&Top`
-   |            |
-   |            expected due to this
-   |
-   = note: expected reference `&Bottom`
-              found reference `&Top`
-
-error: aborting due to 2 previous errors
-
-Some errors have detailed explanations: E0055, E0308.
-For more information about an error, try `rustc --explain E0055`.
diff --git a/tests/ui/did_you_mean/recursion_limit_deref.stderr b/tests/ui/did_you_mean/recursion_limit_deref.stderr
index 32fb628c470..b0c493faf1e 100644
--- a/tests/ui/did_you_mean/recursion_limit_deref.stderr
+++ b/tests/ui/did_you_mean/recursion_limit_deref.stderr
@@ -1,3 +1,7 @@
+error: reached the recursion limit finding the struct tail for `Bottom`
+   |
+   = help: consider increasing the recursion limit by adding a `#![recursion_limit = "20"]`
+
 error[E0055]: reached the recursion limit while auto-dereferencing `J`
   --> $DIR/recursion_limit_deref.rs:51:22
    |
@@ -17,7 +21,7 @@ LL |     let x: &Bottom = &t;
    = note: expected reference `&Bottom`
               found reference `&Top`
 
-error: aborting due to 2 previous errors
+error: aborting due to 3 previous errors
 
 Some errors have detailed explanations: E0055, E0308.
 For more information about an error, try `rustc --explain E0055`.
diff --git a/tests/ui/slightly-nice-generic-literal-messages.rs b/tests/ui/generics/slightly-nice-generic-literal-messages.rs
index 268009f65a5..268009f65a5 100644
--- a/tests/ui/slightly-nice-generic-literal-messages.rs
+++ b/tests/ui/generics/slightly-nice-generic-literal-messages.rs
diff --git a/tests/ui/slightly-nice-generic-literal-messages.stderr b/tests/ui/generics/slightly-nice-generic-literal-messages.stderr
index 83ef522ab46..83ef522ab46 100644
--- a/tests/ui/slightly-nice-generic-literal-messages.stderr
+++ b/tests/ui/generics/slightly-nice-generic-literal-messages.stderr
diff --git a/tests/ui/unterminated-comment.rs b/tests/ui/lexer/unterminated-comment.rs
index 1cfdfb1fb45..1cfdfb1fb45 100644
--- a/tests/ui/unterminated-comment.rs
+++ b/tests/ui/lexer/unterminated-comment.rs
diff --git a/tests/ui/unterminated-comment.stderr b/tests/ui/lexer/unterminated-comment.stderr
index c513fafeeb3..c513fafeeb3 100644
--- a/tests/ui/unterminated-comment.stderr
+++ b/tests/ui/lexer/unterminated-comment.stderr
diff --git a/tests/ui/unterminated-nested-comment.rs b/tests/ui/lexer/unterminated-nested-comment.rs
index db5f2f3ba13..db5f2f3ba13 100644
--- a/tests/ui/unterminated-nested-comment.rs
+++ b/tests/ui/lexer/unterminated-nested-comment.rs
diff --git a/tests/ui/unterminated-nested-comment.stderr b/tests/ui/lexer/unterminated-nested-comment.stderr
index 3653e76c9cb..3653e76c9cb 100644
--- a/tests/ui/unterminated-nested-comment.stderr
+++ b/tests/ui/lexer/unterminated-nested-comment.stderr
diff --git a/tests/ui/auxiliary/xc-private-method-lib.rs b/tests/ui/privacy/auxiliary/xc-private-method-lib.rs
index 4d5ec6de392..4d5ec6de392 100644
--- a/tests/ui/auxiliary/xc-private-method-lib.rs
+++ b/tests/ui/privacy/auxiliary/xc-private-method-lib.rs
diff --git a/tests/ui/xc-private-method.rs b/tests/ui/privacy/xc-private-method.rs
index f05994646b3..f05994646b3 100644
--- a/tests/ui/xc-private-method.rs
+++ b/tests/ui/privacy/xc-private-method.rs
diff --git a/tests/ui/xc-private-method.stderr b/tests/ui/privacy/xc-private-method.stderr
index 0eabc592aa4..0eabc592aa4 100644
--- a/tests/ui/xc-private-method.stderr
+++ b/tests/ui/privacy/xc-private-method.stderr
diff --git a/tests/ui/xc-private-method2.rs b/tests/ui/privacy/xc-private-method2.rs
index f11b251082b..f11b251082b 100644
--- a/tests/ui/xc-private-method2.rs
+++ b/tests/ui/privacy/xc-private-method2.rs
diff --git a/tests/ui/xc-private-method2.stderr b/tests/ui/privacy/xc-private-method2.stderr
index af0c3cfcb2c..af0c3cfcb2c 100644
--- a/tests/ui/xc-private-method2.stderr
+++ b/tests/ui/privacy/xc-private-method2.stderr
diff --git a/tests/ui/reachable-unnameable-type-alias.rs b/tests/ui/reachable/reachable-unnameable-type-alias.rs
index 461355f87cf..461355f87cf 100644
--- a/tests/ui/reachable-unnameable-type-alias.rs
+++ b/tests/ui/reachable/reachable-unnameable-type-alias.rs
diff --git a/tests/ui/disambiguate-identical-names.rs b/tests/ui/resolve/disambiguate-identical-names.rs
index 708d2cd76a1..708d2cd76a1 100644
--- a/tests/ui/disambiguate-identical-names.rs
+++ b/tests/ui/resolve/disambiguate-identical-names.rs
diff --git a/tests/ui/disambiguate-identical-names.stderr b/tests/ui/resolve/disambiguate-identical-names.stderr
index 7d8293018d2..7d8293018d2 100644
--- a/tests/ui/disambiguate-identical-names.stderr
+++ b/tests/ui/resolve/disambiguate-identical-names.stderr
diff --git a/tests/ui/thread-local-mutation.rs b/tests/ui/thread-local/thread-local-mutation.rs
index e738225ce2a..e738225ce2a 100644
--- a/tests/ui/thread-local-mutation.rs
+++ b/tests/ui/thread-local/thread-local-mutation.rs
diff --git a/tests/ui/thread-local-mutation.stderr b/tests/ui/thread-local/thread-local-mutation.stderr
index e5dc0e72edf..e5dc0e72edf 100644
--- a/tests/ui/thread-local-mutation.stderr
+++ b/tests/ui/thread-local/thread-local-mutation.stderr
diff --git a/tests/ui/thread-local-static.rs b/tests/ui/thread-local/thread-local-static.rs
index c7fee9e6b4c..c7fee9e6b4c 100644
--- a/tests/ui/thread-local-static.rs
+++ b/tests/ui/thread-local/thread-local-static.rs
diff --git a/tests/ui/thread-local-static.stderr b/tests/ui/thread-local/thread-local-static.stderr
index 712050a25fc..712050a25fc 100644
--- a/tests/ui/thread-local-static.stderr
+++ b/tests/ui/thread-local/thread-local-static.stderr
diff --git a/tests/ui/wrong-mul-method-signature.rs b/tests/ui/traits/wrong-mul-method-signature.rs
index 1c2f865599e..1c2f865599e 100644
--- a/tests/ui/wrong-mul-method-signature.rs
+++ b/tests/ui/traits/wrong-mul-method-signature.rs
diff --git a/tests/ui/wrong-mul-method-signature.stderr b/tests/ui/traits/wrong-mul-method-signature.stderr
index 25a92f5ec12..25a92f5ec12 100644
--- a/tests/ui/wrong-mul-method-signature.stderr
+++ b/tests/ui/traits/wrong-mul-method-signature.stderr
diff --git a/tests/ui/tuple-index.rs b/tests/ui/tuple/tuple-index.rs
index 3e1d92b42aa..3e1d92b42aa 100644
--- a/tests/ui/tuple-index.rs
+++ b/tests/ui/tuple/tuple-index.rs
diff --git a/tests/ui/output-type-mismatch.rs b/tests/ui/typeck/output-type-mismatch.rs
index 35097aa9ec6..35097aa9ec6 100644
--- a/tests/ui/output-type-mismatch.rs
+++ b/tests/ui/typeck/output-type-mismatch.rs
diff --git a/tests/ui/output-type-mismatch.stderr b/tests/ui/typeck/output-type-mismatch.stderr
index 4507a4df621..4507a4df621 100644
--- a/tests/ui/output-type-mismatch.stderr
+++ b/tests/ui/typeck/output-type-mismatch.stderr
diff --git a/tests/ui/suppressed-error.rs b/tests/ui/typeck/suppressed-error.rs
index 1e39be46080..1e39be46080 100644
--- a/tests/ui/suppressed-error.rs
+++ b/tests/ui/typeck/suppressed-error.rs
diff --git a/tests/ui/suppressed-error.stderr b/tests/ui/typeck/suppressed-error.stderr
index 11d70f8a433..11d70f8a433 100644
--- a/tests/ui/suppressed-error.stderr
+++ b/tests/ui/typeck/suppressed-error.stderr
diff --git a/tests/ui/tag-that-dare-not-speak-its-name.rs b/tests/ui/typeck/tag-that-dare-not-speak-its-name.rs
index 0e76ec246d7..0e76ec246d7 100644
--- a/tests/ui/tag-that-dare-not-speak-its-name.rs
+++ b/tests/ui/typeck/tag-that-dare-not-speak-its-name.rs
diff --git a/tests/ui/tag-that-dare-not-speak-its-name.stderr b/tests/ui/typeck/tag-that-dare-not-speak-its-name.stderr
index f53abe53bf1..f53abe53bf1 100644
--- a/tests/ui/tag-that-dare-not-speak-its-name.stderr
+++ b/tests/ui/typeck/tag-that-dare-not-speak-its-name.stderr
diff --git a/tests/ui/terr-in-field.rs b/tests/ui/typeck/terr-in-field.rs
index cfe350ef86d..cfe350ef86d 100644
--- a/tests/ui/terr-in-field.rs
+++ b/tests/ui/typeck/terr-in-field.rs
diff --git a/tests/ui/terr-in-field.stderr b/tests/ui/typeck/terr-in-field.stderr
index 09df4b34bb5..09df4b34bb5 100644
--- a/tests/ui/terr-in-field.stderr
+++ b/tests/ui/typeck/terr-in-field.stderr
diff --git a/tests/ui/terr-sorts.rs b/tests/ui/typeck/terr-sorts.rs
index c1e2f7daee5..c1e2f7daee5 100644
--- a/tests/ui/terr-sorts.rs
+++ b/tests/ui/typeck/terr-sorts.rs
diff --git a/tests/ui/terr-sorts.stderr b/tests/ui/typeck/terr-sorts.stderr
index 8f1975374a5..8f1975374a5 100644
--- a/tests/ui/terr-sorts.stderr
+++ b/tests/ui/typeck/terr-sorts.stderr
diff --git a/tests/ui/while-type-error.rs b/tests/ui/typeck/while-type-error.rs
index 8098bfcd8d9..8098bfcd8d9 100644
--- a/tests/ui/while-type-error.rs
+++ b/tests/ui/typeck/while-type-error.rs
diff --git a/tests/ui/while-type-error.stderr b/tests/ui/typeck/while-type-error.stderr
index 529cbff0563..529cbff0563 100644
--- a/tests/ui/while-type-error.stderr
+++ b/tests/ui/typeck/while-type-error.stderr
diff --git a/tests/ui/wrong-ret-type.rs b/tests/ui/typeck/wrong-ret-type.rs
index cbff8dbae21..cbff8dbae21 100644
--- a/tests/ui/wrong-ret-type.rs
+++ b/tests/ui/typeck/wrong-ret-type.rs
diff --git a/tests/ui/wrong-ret-type.stderr b/tests/ui/typeck/wrong-ret-type.stderr
index c686a0b2f5a..c686a0b2f5a 100644
--- a/tests/ui/wrong-ret-type.stderr
+++ b/tests/ui/typeck/wrong-ret-type.stderr
diff --git a/tests/ui/ufcs-polymorphic-paths.rs b/tests/ui/ufcs/ufcs-polymorphic-paths.rs
index a14ebd6a41f..a14ebd6a41f 100644
--- a/tests/ui/ufcs-polymorphic-paths.rs
+++ b/tests/ui/ufcs/ufcs-polymorphic-paths.rs
diff --git a/tests/ui/expr-block-generic-unique1.rs b/tests/ui/unique/expr-block-generic-unique1.rs
index 14603a2c71f..14603a2c71f 100644
--- a/tests/ui/expr-block-generic-unique1.rs
+++ b/tests/ui/unique/expr-block-generic-unique1.rs
diff --git a/tests/ui/expr-block-generic-unique2.rs b/tests/ui/unique/expr-block-generic-unique2.rs
index 7879c144b10..7879c144b10 100644
--- a/tests/ui/expr-block-generic-unique2.rs
+++ b/tests/ui/unique/expr-block-generic-unique2.rs
diff --git a/tests/ui/expr-if-unique.rs b/tests/ui/unique/expr-if-unique.rs
index 86232683549..86232683549 100644
--- a/tests/ui/expr-if-unique.rs
+++ b/tests/ui/unique/expr-if-unique.rs
diff --git a/tests/ui/unique-object-noncopyable.rs b/tests/ui/unique/unique-object-noncopyable.rs
index 2c40dfc7a4b..2c40dfc7a4b 100644
--- a/tests/ui/unique-object-noncopyable.rs
+++ b/tests/ui/unique/unique-object-noncopyable.rs
diff --git a/tests/ui/unique-object-noncopyable.stderr b/tests/ui/unique/unique-object-noncopyable.stderr
index db42ed9baf1..db42ed9baf1 100644
--- a/tests/ui/unique-object-noncopyable.stderr
+++ b/tests/ui/unique/unique-object-noncopyable.stderr
diff --git a/tests/ui/unique-pinned-nocopy.rs b/tests/ui/unique/unique-pinned-nocopy.rs
index 8edaeef51e0..8edaeef51e0 100644
--- a/tests/ui/unique-pinned-nocopy.rs
+++ b/tests/ui/unique/unique-pinned-nocopy.rs
diff --git a/tests/ui/unique-pinned-nocopy.stderr b/tests/ui/unique/unique-pinned-nocopy.stderr
index de6611324ca..de6611324ca 100644
--- a/tests/ui/unique-pinned-nocopy.stderr
+++ b/tests/ui/unique/unique-pinned-nocopy.stderr
diff --git a/tests/ui/unwind-unique.rs b/tests/ui/unique/unwind-unique.rs
index 50ecf751a86..50ecf751a86 100644
--- a/tests/ui/unwind-unique.rs
+++ b/tests/ui/unique/unwind-unique.rs
diff --git a/tests/ui/mir-unpretty.rs b/tests/ui/unpretty/mir-unpretty.rs
index 30620c69fea..30620c69fea 100644
--- a/tests/ui/mir-unpretty.rs
+++ b/tests/ui/unpretty/mir-unpretty.rs
diff --git a/tests/ui/mir-unpretty.stderr b/tests/ui/unpretty/mir-unpretty.stderr
index 3808f8583b8..3808f8583b8 100644
--- a/tests/ui/mir-unpretty.stderr
+++ b/tests/ui/unpretty/mir-unpretty.stderr
diff --git a/tests/ui/unpretty-expr-fn-arg.rs b/tests/ui/unpretty/unpretty-expr-fn-arg.rs
index 6e1132a3372..6e1132a3372 100644
--- a/tests/ui/unpretty-expr-fn-arg.rs
+++ b/tests/ui/unpretty/unpretty-expr-fn-arg.rs
diff --git a/tests/ui/unpretty-expr-fn-arg.stdout b/tests/ui/unpretty/unpretty-expr-fn-arg.stdout
index b745b988631..b745b988631 100644
--- a/tests/ui/unpretty-expr-fn-arg.stdout
+++ b/tests/ui/unpretty/unpretty-expr-fn-arg.stdout
diff --git a/tests/ui/foreign-unsafe-fn-called.mir.stderr b/tests/ui/unsafe/foreign-unsafe-fn-called.mir.stderr
index d3cf5d84fdd..d3cf5d84fdd 100644
--- a/tests/ui/foreign-unsafe-fn-called.mir.stderr
+++ b/tests/ui/unsafe/foreign-unsafe-fn-called.mir.stderr
diff --git a/tests/ui/foreign-unsafe-fn-called.rs b/tests/ui/unsafe/foreign-unsafe-fn-called.rs
index 67302ea1bcd..67302ea1bcd 100644
--- a/tests/ui/foreign-unsafe-fn-called.rs
+++ b/tests/ui/unsafe/foreign-unsafe-fn-called.rs
diff --git a/tests/ui/foreign-unsafe-fn-called.thir.stderr b/tests/ui/unsafe/foreign-unsafe-fn-called.thir.stderr
index 00ba0f7a6a3..00ba0f7a6a3 100644
--- a/tests/ui/foreign-unsafe-fn-called.thir.stderr
+++ b/tests/ui/unsafe/foreign-unsafe-fn-called.thir.stderr
diff --git a/tests/ui/new-unsafe-pointers.rs b/tests/ui/unsafe/new-unsafe-pointers.rs
index d99eb4cbd1c..d99eb4cbd1c 100644
--- a/tests/ui/new-unsafe-pointers.rs
+++ b/tests/ui/unsafe/new-unsafe-pointers.rs
diff --git a/tests/ui/unsafe-fn-called-from-unsafe-blk.rs b/tests/ui/unsafe/unsafe-fn-called-from-unsafe-blk.rs
index 3713a7065f5..3713a7065f5 100644
--- a/tests/ui/unsafe-fn-called-from-unsafe-blk.rs
+++ b/tests/ui/unsafe/unsafe-fn-called-from-unsafe-blk.rs
diff --git a/tests/ui/unsafe-fn-called-from-unsafe-fn.rs b/tests/ui/unsafe/unsafe-fn-called-from-unsafe-fn.rs
index 5e953107686..5e953107686 100644
--- a/tests/ui/unsafe-fn-called-from-unsafe-fn.rs
+++ b/tests/ui/unsafe/unsafe-fn-called-from-unsafe-fn.rs
diff --git a/tests/ui/unsafe-pointer-assignability.rs b/tests/ui/unsafe/unsafe-pointer-assignability.rs
index db822bb6a02..db822bb6a02 100644
--- a/tests/ui/unsafe-pointer-assignability.rs
+++ b/tests/ui/unsafe/unsafe-pointer-assignability.rs
diff --git a/tests/ui/variance-intersection-of-ref-and-opt-ref.rs b/tests/ui/variance/variance-intersection-of-ref-and-opt-ref.rs
index 74707a98d32..74707a98d32 100644
--- a/tests/ui/variance-intersection-of-ref-and-opt-ref.rs
+++ b/tests/ui/variance/variance-intersection-of-ref-and-opt-ref.rs
diff --git a/tests/ui/variance-iterators-in-libcore.rs b/tests/ui/variance/variance-iterators-in-libcore.rs
index a542e44d517..a542e44d517 100644
--- a/tests/ui/variance-iterators-in-libcore.rs
+++ b/tests/ui/variance/variance-iterators-in-libcore.rs
diff --git a/tests/ui/wasm-custom-section-relocations.rs b/tests/ui/wasm/wasm-custom-section-relocations.rs
index c3cca3a35ac..c3cca3a35ac 100644
--- a/tests/ui/wasm-custom-section-relocations.rs
+++ b/tests/ui/wasm/wasm-custom-section-relocations.rs
diff --git a/tests/ui/wasm-custom-section-relocations.stderr b/tests/ui/wasm/wasm-custom-section-relocations.stderr
index a37edc51d19..a37edc51d19 100644
--- a/tests/ui/wasm-custom-section-relocations.stderr
+++ b/tests/ui/wasm/wasm-custom-section-relocations.stderr