Give a nicer error for non-Unicode arguments to rustc and rustdoc
Previously, any non-Unicode argument would panic rustc: ``` $ rustc $'foo\x80bar' error: internal compiler error: unexpected panic note: the compiler unexpectedly panicked. this is a bug. note: we would appreciate a bug report: https://github.com/rust-lang/rust/blob/master/CONTRIBUTING.md#bug-reports thread 'rustc' panicked at 'called `Result::unwrap()` on an `Err` value: "foo�bar"', /checkout/src/libcore/result.rs:859 note: Run with `RUST_BACKTRACE=1` for a backtrace. ``` Now it gives a clean error: ``` $ rustc $'foo\x80bar' error: Argument 1 is not valid Unicode: "foo�bar" ``` Maybe fixes #15890, although we still can't *compile* arbitrary file names.
This commit is contained in:
parent
0ed1ec9f9e
commit
e86588e228
@ -1148,9 +1148,18 @@ pub fn diagnostics_registry() -> errors::registry::Registry {
|
||||
Registry::new(&all_errors)
|
||||
}
|
||||
|
||||
fn get_args() -> Vec<String> {
|
||||
env::args_os().enumerate()
|
||||
.map(|(i, arg)| arg.into_string().unwrap_or_else(|arg| {
|
||||
early_error(ErrorOutputType::default(),
|
||||
&format!("Argument {} is not valid Unicode: {:?}", i, arg))
|
||||
}))
|
||||
.collect()
|
||||
}
|
||||
|
||||
pub fn main() {
|
||||
env_logger::init().unwrap();
|
||||
let result = run(|| run_compiler(&env::args().collect::<Vec<_>>(),
|
||||
let result = run(|| run_compiler(&get_args(),
|
||||
&mut RustcDefaultCalls,
|
||||
None,
|
||||
None));
|
||||
|
@ -107,12 +107,19 @@ pub fn main() {
|
||||
const STACK_SIZE: usize = 32_000_000; // 32MB
|
||||
env_logger::init().unwrap();
|
||||
let res = std::thread::Builder::new().stack_size(STACK_SIZE).spawn(move || {
|
||||
let s = env::args().collect::<Vec<_>>();
|
||||
main_args(&s)
|
||||
get_args().map(|args| main_args(&args)).unwrap_or(1)
|
||||
}).unwrap().join().unwrap_or(101);
|
||||
process::exit(res as i32);
|
||||
}
|
||||
|
||||
fn get_args() -> Option<Vec<String>> {
|
||||
env::args_os().enumerate()
|
||||
.map(|(i, arg)| arg.into_string().map_err(|arg| {
|
||||
print_error(format!("Argument {} is not valid Unicode: {:?}", i, arg));
|
||||
}).ok())
|
||||
.collect()
|
||||
}
|
||||
|
||||
fn stable(g: getopts::OptGroup) -> RustcOptGroup { RustcOptGroup::stable(g) }
|
||||
fn unstable(g: getopts::OptGroup) -> RustcOptGroup { RustcOptGroup::unstable(g) }
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user