1 //! This pass just dumps MIR at a specified point.
8 use rustc
::mir
::{Body, BodyAndCache}
;
9 use rustc
::session
::config
::{OutputFilenames, OutputType}
;
10 use rustc
::ty
::TyCtxt
;
11 use crate::transform
::{MirPass, MirSource}
;
12 use crate::util
as mir_util
;
14 pub struct Marker(pub &'
static str);
16 impl<'tcx
> MirPass
<'tcx
> for Marker
{
17 fn name(&self) -> Cow
<'_
, str> {
22 &self, _tcx
: TyCtxt
<'tcx
>, _source
: MirSource
<'tcx
>, _body
: &mut BodyAndCache
<'tcx
>
26 pub struct Disambiguator
{
30 impl fmt
::Display
for Disambiguator
{
31 fn fmt(&self, formatter
: &mut fmt
::Formatter
<'_
>) -> fmt
::Result
{
32 let title
= if self.is_after { "after" }
else { "before" }
;
33 write
!(formatter
, "{}", title
)
37 pub fn on_mir_pass
<'tcx
>(
39 pass_num
: &dyn fmt
::Display
,
41 source
: MirSource
<'tcx
>,
45 if mir_util
::dump_enabled(tcx
, pass_name
, source
) {
46 mir_util
::dump_mir(tcx
,
49 &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
= File
::create(&path
)?
;
59 mir_util
::write_mir_pretty(tcx
, None
, &mut f
)?
;