From dabbc7fddc7217dcffcf8612510561ceecb59cea Mon Sep 17 00:00:00 2001 From: Camille Gillot Date: Sat, 16 Aug 2025 17:39:51 +0000 Subject: [PATCH] Reuse cached layout from PostAnalysis when possible. --- compiler/rustc_ty_utils/src/layout.rs | 18 ++++++++++++++++++ .../recursion/recursion_limit/zero-overflow.rs | 2 +- .../recursion_limit/zero-overflow.stderr | 4 ++-- 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/compiler/rustc_ty_utils/src/layout.rs b/compiler/rustc_ty_utils/src/layout.rs index 9cc15a374ff7..04fc732aa9d9 100644 --- a/compiler/rustc_ty_utils/src/layout.rs +++ b/compiler/rustc_ty_utils/src/layout.rs @@ -66,6 +66,24 @@ fn layout_of<'tcx>( return tcx.layout_of(typing_env.as_query_input(ty)); } + match typing_env.typing_mode() { + ty::TypingMode::Codegen => { + let with_postanalysis = + ty::TypingEnv::new(typing_env.param_env, ty::TypingMode::PostAnalysis); + let res = tcx.layout_of(with_postanalysis.as_query_input(ty)); + match res { + Err(LayoutError::TooGeneric(_)) => {} + _ => return res, + }; + } + ty::TypingMode::Coherence + | ty::TypingMode::Analysis { .. } + | ty::TypingMode::Borrowck { .. } + | ty::TypingMode::PostBorrowckAnalysis { .. } + | ty::TypingMode::ErasedNotCoherence(_) + | ty::TypingMode::PostAnalysis => {} + } + let cx = LayoutCx::new(tcx, typing_env); let layout = layout_of_uncached(&cx, ty)?; diff --git a/tests/ui/recursion/recursion_limit/zero-overflow.rs b/tests/ui/recursion/recursion_limit/zero-overflow.rs index 3887972a5162..718b8550c26c 100644 --- a/tests/ui/recursion/recursion_limit/zero-overflow.rs +++ b/tests/ui/recursion/recursion_limit/zero-overflow.rs @@ -1,4 +1,4 @@ -//~ ERROR overflow evaluating the requirement `&mut Self: DispatchFromDyn<&mut RustaceansAreAwesome> +//~ ERROR queries overflow the depth limit! //~| HELP consider increasing the recursion limit //@ build-fail diff --git a/tests/ui/recursion/recursion_limit/zero-overflow.stderr b/tests/ui/recursion/recursion_limit/zero-overflow.stderr index fc03cc5b604b..ca100c7c81a0 100644 --- a/tests/ui/recursion/recursion_limit/zero-overflow.stderr +++ b/tests/ui/recursion/recursion_limit/zero-overflow.stderr @@ -1,7 +1,7 @@ -error[E0275]: overflow evaluating the requirement `&mut Self: DispatchFromDyn<&mut RustaceansAreAwesome>` +error: queries overflow the depth limit! | = help: consider increasing the recursion limit by adding a `#![recursion_limit = "2"]` attribute to your crate (`zero_overflow`) + = note: query depth increased by 2 when computing layout of `isize` error: aborting due to 1 previous error -For more information about this error, try `rustc --explain E0275`.