diff --git a/cranelift/src/clif-util.rs b/cranelift/src/clif-util.rs old mode 100644 new mode 100755 index c54c5b2d2c..925f42f3fd --- a/cranelift/src/clif-util.rs +++ b/cranelift/src/clif-util.rs @@ -47,17 +47,17 @@ pub type CommandResult = Result<(), String>; fn add_input_file_arg<'a>() -> clap::Arg<'a, 'a> { Arg::with_name("file") - .required(true) + .default_value("-") .multiple(true) .value_name("file") - .help("Specify file(s) to be used for test") + .help("Specify file(s) to be used for test. Defaults to reading from stdin.") } fn add_single_input_file_arg<'a>() -> clap::Arg<'a, 'a> { Arg::with_name("single-file") - .required(true) + .default_value("-") .value_name("single-file") - .help("Specify a file to be used") + .help("Specify a file to be used. Defaults to reading from stdin.") } fn add_pass_arg<'a>() -> clap::Arg<'a, 'a> { diff --git a/cranelift/src/utils.rs b/cranelift/src/utils.rs index 871483c891..9315ff33d3 100644 --- a/cranelift/src/utils.rs +++ b/cranelift/src/utils.rs @@ -12,17 +12,29 @@ use target_lexicon::Triple; /// Read an entire file into a string. pub fn read_to_string>(path: P) -> io::Result { - let mut file = File::open(path)?; let mut buffer = String::new(); - file.read_to_string(&mut buffer)?; + if path.as_ref() == Path::new("-") { + let stdin = io::stdin(); + let mut stdin = stdin.lock(); + stdin.read_to_string(&mut buffer)?; + } else { + let mut file = File::open(path)?; + file.read_to_string(&mut buffer)?; + } Ok(buffer) } /// Read an entire file into a vector of bytes. pub fn read_to_end>(path: P) -> io::Result> { - let mut file = File::open(path)?; let mut buffer = Vec::new(); - file.read_to_end(&mut buffer)?; + if path.as_ref() == Path::new("-") { + let stdin = io::stdin(); + let mut stdin = stdin.lock(); + stdin.read_to_end(&mut buffer)?; + } else { + let mut file = File::open(path)?; + file.read_to_end(&mut buffer)?; + } Ok(buffer) } diff --git a/lib/filetests/src/lib.rs b/lib/filetests/src/lib.rs index d7238bb561..f8e796182e 100644 --- a/lib/filetests/src/lib.rs +++ b/lib/filetests/src/lib.rs @@ -88,7 +88,7 @@ pub fn run_passes(verbose: bool, passes: &[String], target: &str, file: &String) let mut runner = TestRunner::new(verbose); let path = Path::new(file); - if path.is_file() { + if path == Path::new("-") || path.is_file() { runner.push_test(path); } else { runner.push_dir(path);