Skip to content

Commit 7858b85

Browse files
committed
Trace tcx.layout_of by overriding it in query providers
1 parent caab111 commit 7858b85

File tree

3 files changed

+13
-2
lines changed

3 files changed

+13
-2
lines changed

compiler/rustc_ty_utils/src/layout.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ pub(crate) fn provide(providers: &mut Providers) {
3131
}
3232

3333
#[instrument(skip(tcx, query), level = "debug")]
34-
fn layout_of<'tcx>(
34+
pub fn layout_of<'tcx>(
3535
tcx: TyCtxt<'tcx>,
3636
query: ty::PseudoCanonicalInput<'tcx, Ty<'tcx>>,
3737
) -> Result<TyAndLayout<'tcx>, &'tcx LayoutError<'tcx>> {

compiler/rustc_ty_utils/src/lib.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ pub mod sig_types;
3535
mod structural_match;
3636
mod ty;
3737

38+
pub use layout::layout_of;
39+
3840
rustc_fluent_macro::fluent_messages! { "../messages.ftl" }
3941

4042
pub fn provide(providers: &mut Providers) {

src/tools/miri/src/bin/miri.rs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ extern crate rustc_metadata;
2323
extern crate rustc_middle;
2424
extern crate rustc_session;
2525
extern crate rustc_span;
26+
extern crate rustc_ty_utils;
2627

2728
use std::env::{self, VarError};
2829
use std::num::NonZero;
@@ -50,7 +51,8 @@ use rustc_middle::middle::exported_symbols::{
5051
};
5152
use rustc_middle::query::LocalCrate;
5253
use rustc_middle::traits::{ObligationCause, ObligationCauseCode};
53-
use rustc_middle::ty::{self, Ty, TyCtxt};
54+
use rustc_middle::ty::layout::{LayoutError, TyAndLayout};
55+
use rustc_middle::ty::{self, PseudoCanonicalInput, Ty, TyCtxt};
5456
use rustc_middle::util::Providers;
5557
use rustc_session::config::{CrateType, ErrorOutputType, OptLevel};
5658
use rustc_session::search_paths::PathKind;
@@ -143,6 +145,13 @@ impl rustc_driver::Callbacks for MiriCompilerCalls {
143145
Arc::make_mut(&mut crate_source).rlib = Some((PathBuf::new(), PathKind::All));
144146
crate_source
145147
};
148+
149+
assert!(std::ptr::fn_addr_eq(providers.layout_of, rustc_ty_utils::layout_of as
150+
for<'tcx> fn(TyCtxt<'tcx>, PseudoCanonicalInput<'tcx, Ty<'tcx>>) -> Result<TyAndLayout<'tcx>, &'tcx LayoutError<'tcx>>));
151+
providers.layout_of = |tcx, query| {
152+
let _span = tracing::info_span!("tcx.layout_of", "query = {:?}", query.value.kind()).entered();
153+
rustc_ty_utils::layout_of(tcx, query)
154+
};
146155
});
147156
}
148157

0 commit comments

Comments
 (0)