Auto merge of #111626 - pjhades:output, r=b-naber
Write to stdout if `-` is given as output file With this PR, if `-o -` or `--emit KIND=-` is provided, output will be written to stdout instead. Binary output (those of type `obj`, `llvm-bc`, `link` and `metadata`) being written this way will result in an error unless stdout is not a tty. Multiple output types going to stdout will trigger an error too, as they will all be mixded together. This implements https://github.com/rust-lang/compiler-team/issues/431 The idea behind the changes is to introduce an `OutFileName` enum that represents the output - be it a real path or stdout - and to use this enum along the code paths that handle different output types.
This commit is contained in:
commit
343ad6f059
32 changed files with 439 additions and 101 deletions
|
@ -7,7 +7,7 @@ use crate::MirPass;
|
|||
use rustc_middle::mir::write_mir_pretty;
|
||||
use rustc_middle::mir::Body;
|
||||
use rustc_middle::ty::TyCtxt;
|
||||
use rustc_session::config::OutputType;
|
||||
use rustc_session::config::{OutFileName, OutputType};
|
||||
|
||||
pub struct Marker(pub &'static str);
|
||||
|
||||
|
@ -20,8 +20,15 @@ impl<'tcx> MirPass<'tcx> for Marker {
|
|||
}
|
||||
|
||||
pub fn emit_mir(tcx: TyCtxt<'_>) -> io::Result<()> {
|
||||
let path = tcx.output_filenames(()).path(OutputType::Mir);
|
||||
let mut f = io::BufWriter::new(File::create(&path)?);
|
||||
write_mir_pretty(tcx, None, &mut f)?;
|
||||
match tcx.output_filenames(()).path(OutputType::Mir) {
|
||||
OutFileName::Stdout => {
|
||||
let mut f = io::stdout();
|
||||
write_mir_pretty(tcx, None, &mut f)?;
|
||||
}
|
||||
OutFileName::Real(path) => {
|
||||
let mut f = io::BufWriter::new(File::create(&path)?);
|
||||
write_mir_pretty(tcx, None, &mut f)?;
|
||||
}
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue