1
Fork 0

Support -Z unpretty=thir-tree again

This commit is contained in:
Smitty 2021-07-24 17:18:15 -04:00
parent bddb59cf07
commit e8165e7f1b
6 changed files with 29 additions and 3 deletions

View file

@ -3726,6 +3726,7 @@ dependencies = [
"rustc_session", "rustc_session",
"rustc_span", "rustc_span",
"rustc_target", "rustc_target",
"rustc_typeck",
"tracing", "tracing",
"tracing-subscriber", "tracing-subscriber",
"tracing-tree", "tracing-tree",

View file

@ -34,6 +34,7 @@ rustc_interface = { path = "../rustc_interface" }
rustc_serialize = { path = "../rustc_serialize" } rustc_serialize = { path = "../rustc_serialize" }
rustc_ast = { path = "../rustc_ast" } rustc_ast = { path = "../rustc_ast" }
rustc_span = { path = "../rustc_span" } rustc_span = { path = "../rustc_span" }
rustc_typeck = { path = "../rustc_typeck" }
[target.'cfg(windows)'.dependencies] [target.'cfg(windows)'.dependencies]
winapi = { version = "0.3", features = ["consoleapi", "debugapi", "processenv"] } winapi = { version = "0.3", features = ["consoleapi", "debugapi", "processenv"] }

View file

@ -14,6 +14,7 @@ use rustc_span::symbol::Ident;
use rustc_span::FileName; use rustc_span::FileName;
use std::cell::Cell; use std::cell::Cell;
use std::fmt::Write;
use std::path::Path; use std::path::Path;
pub use self::PpMode::*; pub use self::PpMode::*;
@ -471,7 +472,6 @@ fn print_with_analysis(
ofile: Option<&Path>, ofile: Option<&Path>,
) -> Result<(), ErrorReported> { ) -> Result<(), ErrorReported> {
tcx.analysis(())?; tcx.analysis(())?;
let out = match ppm { let out = match ppm {
Mir => { Mir => {
let mut out = Vec::new(); let mut out = Vec::new();
@ -486,8 +486,18 @@ fn print_with_analysis(
} }
ThirTree => { ThirTree => {
// FIXME(rust-lang/project-thir-unsafeck#8) let mut out = String::new();
todo!() abort_on_err(rustc_typeck::check_crate(tcx), tcx.sess);
debug!("pretty printing THIR tree");
for did in tcx.body_owners() {
let _ = writeln!(
out,
"{:?}:\n{}\n",
did,
tcx.thir_tree(ty::WithOptConstParam::unknown(did))
);
}
out
} }
_ => unreachable!(), _ => unreachable!(),

View file

@ -230,6 +230,12 @@ rustc_queries! {
desc { |tcx| "building THIR for `{}`", tcx.def_path_str(key.did.to_def_id()) } desc { |tcx| "building THIR for `{}`", tcx.def_path_str(key.did.to_def_id()) }
} }
/// Create a THIR tree for debugging.
query thir_tree(key: ty::WithOptConstParam<LocalDefId>) -> String {
no_hash
desc { |tcx| "constructing THIR tree for `{}`", tcx.def_path_str(key.did.to_def_id()) }
}
/// Set of all the `DefId`s in this crate that have MIR associated with /// Set of all the `DefId`s in this crate that have MIR associated with
/// them. This includes all the body owners, but also things like struct /// them. This includes all the body owners, but also things like struct
/// constructors. /// constructors.

View file

@ -30,4 +30,5 @@ pub fn provide(providers: &mut Providers) {
providers.thir_check_unsafety = check_unsafety::thir_check_unsafety; providers.thir_check_unsafety = check_unsafety::thir_check_unsafety;
providers.thir_check_unsafety_for_const_arg = check_unsafety::thir_check_unsafety_for_const_arg; providers.thir_check_unsafety_for_const_arg = check_unsafety::thir_check_unsafety_for_const_arg;
providers.thir_body = thir::cx::thir_body; providers.thir_body = thir::cx::thir_body;
providers.thir_tree = thir::cx::thir_tree;
} }

View file

@ -30,6 +30,13 @@ crate fn thir_body<'tcx>(
(tcx.alloc_steal_thir(cx.thir), expr) (tcx.alloc_steal_thir(cx.thir), expr)
} }
crate fn thir_tree<'tcx>(
tcx: TyCtxt<'tcx>,
owner_def: ty::WithOptConstParam<LocalDefId>,
) -> String {
format!("{:#?}", thir_body(tcx, owner_def).0.steal())
}
struct Cx<'tcx> { struct Cx<'tcx> {
tcx: TyCtxt<'tcx>, tcx: TyCtxt<'tcx>,
thir: Thir<'tcx>, thir: Thir<'tcx>,