# Rustc Contributor Office Hours ## Question/Topic Queue ### How do I add an entry pnkfelix: Put a title, prefixed by `##`, and then on the next line, your name, colon, and a short prompt to start the conversation. ### Bug Minimization matt: are there any changes to compiler tooling since your blog post? pnkfelix: Yep, e.g. -Z everybody-loops was removed. Replaced every fn body with `loop { }`, has type `!`, and `!` is subtype of every other type (at least informally). matt: volunteering to write tool for loopifying and other minimization outside compiler pnkfelix: `rr -M`, flag includes process number running and event count `rr -a`, `rr -a -M <event-count>` matt: will write blog post for `rr` pnkfelix: use `debuginfo-level=2` in general when using using debugger `watch -location diag.level; reverse-continue`. jump to the point where diagnostic is written ## How to know which modules to turn on debug output for? Mix of responses First thing: debug! respect tree structure of modules. Can turn on RUSTC_LOG=rustc_mir_transform, that will emit debugging for *all* submodules that occur under that root module (e.g. rustc_mir_transform::abort_unwinding_calls) (pnkfelix doesn't know off hand if one can turn off subtrees once one has opted in from a parent module tree.) Second: Look at stack trace, see the chain of modules referenced by the stack trace. Third: guess compiler crates that might be relevant, grep for `debug!` in the source. Q: would it be useful to have cross-referencing of knowing other crates that one should turn on. e.g. `rustc_hir_typeck`, eventually realized that `rustc_infer` was another good crate to turn on debug logging for. A1: could the `[dependencies]` of Cargo.toml for the rustc_ crate in question be of use in guiding search A2: also look at the `use` statements of the `mod.rs` A3: (can the above be automated? Maybe, but it might not be what you want.) ## Internal stucture of compiler Mapping between long unfolded internal structure (including def-id's etc) to the source code THIR structure made by macro `thir_with_elements`. arms, blocks, expressions, statements, parameters Descriptive image of ScopeTree rustc_middle::middle::region::scope Block is made of a series of statements, optionally followed by a tail expression. We don't put the data inline from the block, we use a statement Id to point to a structure located elsewhere. Ids act as conceptual pointers, indices in an array. rustc_middle::thir