3afb7d687c
Co-authored-by: Oneirical <manchot@videotron.ca> Co-authored-by: Chris Denton <chris@chrisdenton.dev>
74 lines
2.8 KiB
Rust
74 lines
2.8 KiB
Rust
//! If `-o -` or `--emit KIND=-` is provided, output should be written to stdout
|
|
//! instead. Binary output (`obj`, `llvm-bc`, `link` and `metadata`)
|
|
//! being written this way will result in an error if stdout is a tty.
|
|
//! Multiple output types going to stdout will trigger an error too,
|
|
//! as they would all be mixed together.
|
|
//!
|
|
//! See <https://github.com/rust-lang/rust/pull/111626>.
|
|
|
|
use std::fs::File;
|
|
|
|
use run_make_support::{diff, run_in_tmpdir, rustc};
|
|
|
|
// Test emitting text outputs to stdout works correctly
|
|
fn run_diff(name: &str, file_args: &[&str]) {
|
|
rustc().emit(format!("{name}={name}")).input("test.rs").args(file_args).run();
|
|
let out = rustc().emit(format!("{name}=-")).input("test.rs").run().stdout_utf8();
|
|
diff().expected_file(name).actual_text("stdout", &out).run();
|
|
}
|
|
|
|
// Test that emitting binary formats to a terminal gives the correct error
|
|
fn run_terminal_err_diff(name: &str) {
|
|
#[cfg(not(windows))]
|
|
let terminal = File::create("/dev/ptmx").unwrap();
|
|
// FIXME: If this test fails and the compiler does print to the console,
|
|
// then this will produce a lot of output.
|
|
// We should spawn a new console instead to print stdout.
|
|
#[cfg(windows)]
|
|
let terminal = File::options().read(true).write(true).open(r"\\.\CONOUT$").unwrap();
|
|
|
|
let err = File::create(name).unwrap();
|
|
rustc().emit(format!("{name}=-")).input("test.rs").stdout(terminal).stderr(err).run_fail();
|
|
diff().expected_file(format!("emit-{name}.stderr")).actual_file(name).run();
|
|
}
|
|
|
|
fn main() {
|
|
run_in_tmpdir(|| {
|
|
run_diff("asm", &[]);
|
|
run_diff("llvm-ir", &[]);
|
|
run_diff("dep-info", &["-Zdep-info-omit-d-target=yes"]);
|
|
run_diff("mir", &[]);
|
|
|
|
run_terminal_err_diff("llvm-bc");
|
|
run_terminal_err_diff("obj");
|
|
run_terminal_err_diff("metadata");
|
|
run_terminal_err_diff("link");
|
|
|
|
// Test error for emitting multiple types to stdout
|
|
rustc()
|
|
.input("test.rs")
|
|
.emit("asm=-")
|
|
.emit("llvm-ir=-")
|
|
.emit("dep-info=-")
|
|
.emit("mir=-")
|
|
.stderr(File::create("multiple-types").unwrap())
|
|
.run_fail();
|
|
diff().expected_file("emit-multiple-types.stderr").actual_file("multiple-types").run();
|
|
|
|
// Same as above, but using `-o`
|
|
rustc()
|
|
.input("test.rs")
|
|
.output("-")
|
|
.emit("asm,llvm-ir,dep-info,mir")
|
|
.stderr(File::create("multiple-types-option-o").unwrap())
|
|
.run_fail();
|
|
diff()
|
|
.expected_file("emit-multiple-types.stderr")
|
|
.actual_file("multiple-types-option-o")
|
|
.run();
|
|
|
|
// Test that `-o -` redirected to a file works correctly (#26719)
|
|
rustc().input("test.rs").output("-").stdout(File::create("out-stdout").unwrap()).run();
|
|
});
|
|
}
|