1 //! This pass just dumps MIR at a specified point.
8 use crate::transform
::{MirPass, MirSource}
;
9 use crate::util
as mir_util
;
10 use rustc_middle
::mir
::Body
;
11 use rustc_middle
::ty
::TyCtxt
;
12 use rustc_session
::config
::{OutputFilenames, OutputType}
;
14 pub struct Marker(pub &'
static str);
16 impl<'tcx
> MirPass
<'tcx
> for Marker
{
17 fn name(&self) -> Cow
<'_
, str> {
21 fn run_pass(&self, _tcx
: TyCtxt
<'tcx
>, _source
: MirSource
<'tcx
>, _body
: &mut Body
<'tcx
>) {}
24 pub struct Disambiguator
{
28 impl fmt
::Display
for Disambiguator
{
29 fn fmt(&self, formatter
: &mut fmt
::Formatter
<'_
>) -> fmt
::Result
{
30 let title
= if self.is_after { "after" }
else { "before" }
;
31 write
!(formatter
, "{}", title
)
35 pub fn on_mir_pass
<'tcx
>(
37 pass_num
: &dyn fmt
::Display
,
39 source
: MirSource
<'tcx
>,
43 if mir_util
::dump_enabled(tcx
, pass_name
, source
.def_id()) {
48 &Disambiguator { is_after }
,
56 pub fn emit_mir(tcx
: TyCtxt
<'_
>, outputs
: &OutputFilenames
) -> io
::Result
<()> {
57 let path
= outputs
.path(OutputType
::Mir
);
58 let mut f
= io
::BufWriter
::new(File
::create(&path
)?
);
59 mir_util
::write_mir_pretty(tcx
, None
, &mut f
)?
;