parent
90eb44a589
commit
c73925452c
@ -456,10 +456,13 @@ pub fn run_compiler<'a>(args: &[String],
|
|||||||
None);
|
None);
|
||||||
|
|
||||||
let (odir, ofile) = make_output(&matches);
|
let (odir, ofile) = make_output(&matches);
|
||||||
let (input, input_file_path) = match make_input(&matches.free) {
|
let (input, input_file_path, input_err) = match make_input(&matches.free) {
|
||||||
Some((input, input_file_path)) => callbacks.some_input(input, input_file_path),
|
Some((input, input_file_path, input_err)) => {
|
||||||
|
let (input, input_file_path) = callbacks.some_input(input, input_file_path);
|
||||||
|
(input, input_file_path, input_err)
|
||||||
|
},
|
||||||
None => match callbacks.no_input(&matches, &sopts, &cfg, &odir, &ofile, &descriptions) {
|
None => match callbacks.no_input(&matches, &sopts, &cfg, &odir, &ofile, &descriptions) {
|
||||||
Some((input, input_file_path)) => (input, input_file_path),
|
Some((input, input_file_path)) => (input, input_file_path, None),
|
||||||
None => return (Ok(()), None),
|
None => return (Ok(()), None),
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
@ -470,6 +473,13 @@ pub fn run_compiler<'a>(args: &[String],
|
|||||||
sopts, input_file_path.clone(), descriptions, codemap, emitter_dest,
|
sopts, input_file_path.clone(), descriptions, codemap, emitter_dest,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
if let Some(err) = input_err {
|
||||||
|
// Immediately stop compilation if there was an issue reading
|
||||||
|
// the input (for example if the input stream is not UTF-8).
|
||||||
|
sess.err(&format!("{}", err));
|
||||||
|
return (Err(CompileIncomplete::Stopped), Some(sess));
|
||||||
|
}
|
||||||
|
|
||||||
let trans = get_trans(&sess);
|
let trans = get_trans(&sess);
|
||||||
|
|
||||||
rustc_lint::register_builtins(&mut sess.lint_store.borrow_mut(), Some(&sess));
|
rustc_lint::register_builtins(&mut sess.lint_store.borrow_mut(), Some(&sess));
|
||||||
@ -512,17 +522,22 @@ fn make_output(matches: &getopts::Matches) -> (Option<PathBuf>, Option<PathBuf>)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Extract input (string or file and optional path) from matches.
|
// Extract input (string or file and optional path) from matches.
|
||||||
fn make_input(free_matches: &[String]) -> Option<(Input, Option<PathBuf>)> {
|
fn make_input(free_matches: &[String]) -> Option<(Input, Option<PathBuf>, Option<io::Error>)> {
|
||||||
if free_matches.len() == 1 {
|
if free_matches.len() == 1 {
|
||||||
let ifile = &free_matches[0];
|
let ifile = &free_matches[0];
|
||||||
if ifile == "-" {
|
if ifile == "-" {
|
||||||
let mut src = String::new();
|
let mut src = String::new();
|
||||||
io::stdin().read_to_string(&mut src).unwrap();
|
let err = if io::stdin().read_to_string(&mut src).is_err() {
|
||||||
|
Some(io::Error::new(io::ErrorKind::InvalidData,
|
||||||
|
"couldn't read from stdin, as it did not contain valid UTF-8"))
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
};
|
||||||
Some((Input::Str { name: FileName::Anon, input: src },
|
Some((Input::Str { name: FileName::Anon, input: src },
|
||||||
None))
|
None, err))
|
||||||
} else {
|
} else {
|
||||||
Some((Input::File(PathBuf::from(ifile)),
|
Some((Input::File(PathBuf::from(ifile)),
|
||||||
Some(PathBuf::from(ifile))))
|
Some(PathBuf::from(ifile)), None))
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
None
|
None
|
||||||
|
5
src/test/run-make/stdin-non-utf8/Makefile
Normal file
5
src/test/run-make/stdin-non-utf8/Makefile
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
-include ../tools.mk
|
||||||
|
|
||||||
|
all:
|
||||||
|
echo '\xD2' | $(RUSTC) - 2>&1 \
|
||||||
|
| $(CGREP) "error: couldn't read from stdin, as it did not contain valid UTF-8"
|
Loading…
Reference in New Issue
Block a user