Rollup merge of #121194 - beetrees:rustc-raw-args, r=petrochenkov
Refactor pre-getopts command line argument handling Rebased version of #111658. I've also fixed the Windows CI failure (although I don't have access to Windows to test it myself).
This commit is contained in:
commit
a8e3543b19
@ -1,9 +1,7 @@
|
|||||||
use std::error;
|
use std::{env, error, fmt, fs, io};
|
||||||
use std::fmt;
|
|
||||||
use std::fs;
|
|
||||||
use std::io;
|
|
||||||
|
|
||||||
use rustc_session::EarlyDiagCtxt;
|
use rustc_session::EarlyDiagCtxt;
|
||||||
|
use rustc_span::ErrorGuaranteed;
|
||||||
|
|
||||||
/// Expands argfiles in command line arguments.
|
/// Expands argfiles in command line arguments.
|
||||||
#[derive(Default)]
|
#[derive(Default)]
|
||||||
@ -86,7 +84,7 @@ impl Expander {
|
|||||||
fn read_file(path: &str) -> Result<String, Error> {
|
fn read_file(path: &str) -> Result<String, Error> {
|
||||||
fs::read_to_string(path).map_err(|e| {
|
fs::read_to_string(path).map_err(|e| {
|
||||||
if e.kind() == io::ErrorKind::InvalidData {
|
if e.kind() == io::ErrorKind::InvalidData {
|
||||||
Error::Utf8Error(Some(path.to_string()))
|
Error::Utf8Error(path.to_string())
|
||||||
} else {
|
} else {
|
||||||
Error::IOError(path.to_string(), e)
|
Error::IOError(path.to_string(), e)
|
||||||
}
|
}
|
||||||
@ -94,23 +92,53 @@ impl Expander {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Replaces any `@file` arguments with the contents of `file`, with each line of `file` as a
|
||||||
|
/// separate argument.
|
||||||
|
///
|
||||||
/// **Note:** This function doesn't interpret argument 0 in any special way.
|
/// **Note:** This function doesn't interpret argument 0 in any special way.
|
||||||
/// If this function is intended to be used with command line arguments,
|
/// If this function is intended to be used with command line arguments,
|
||||||
/// `argv[0]` must be removed prior to calling it manually.
|
/// `argv[0]` must be removed prior to calling it manually.
|
||||||
#[allow(rustc::untranslatable_diagnostic)] // FIXME: make this translatable
|
#[allow(rustc::untranslatable_diagnostic)] // FIXME: make this translatable
|
||||||
pub fn arg_expand_all(early_dcx: &EarlyDiagCtxt, at_args: &[String]) -> Vec<String> {
|
pub fn arg_expand_all(
|
||||||
|
early_dcx: &EarlyDiagCtxt,
|
||||||
|
at_args: &[String],
|
||||||
|
) -> Result<Vec<String>, ErrorGuaranteed> {
|
||||||
let mut expander = Expander::default();
|
let mut expander = Expander::default();
|
||||||
|
let mut result = Ok(());
|
||||||
for arg in at_args {
|
for arg in at_args {
|
||||||
if let Err(err) = expander.arg(arg) {
|
if let Err(err) = expander.arg(arg) {
|
||||||
early_dcx.early_fatal(format!("Failed to load argument file: {err}"));
|
result = Err(early_dcx.early_err(format!("failed to load argument file: {err}")));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
expander.finish()
|
result.map(|()| expander.finish())
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Gets the raw unprocessed command-line arguments as Unicode strings, without doing any further
|
||||||
|
/// processing (e.g., without `@file` expansion).
|
||||||
|
///
|
||||||
|
/// This function is identical to [`env::args()`] except that it emits an error when it encounters
|
||||||
|
/// non-Unicode arguments instead of panicking.
|
||||||
|
pub fn raw_args(early_dcx: &EarlyDiagCtxt) -> Result<Vec<String>, ErrorGuaranteed> {
|
||||||
|
let mut res = Ok(Vec::new());
|
||||||
|
for (i, arg) in env::args_os().enumerate() {
|
||||||
|
match arg.into_string() {
|
||||||
|
Ok(arg) => {
|
||||||
|
if let Ok(args) = &mut res {
|
||||||
|
args.push(arg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Err(arg) => {
|
||||||
|
res =
|
||||||
|
Err(early_dcx.early_err(format!("argument {i} is not valid Unicode: {arg:?}")))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
res
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub enum Error {
|
enum Error {
|
||||||
Utf8Error(Option<String>),
|
Utf8Error(String),
|
||||||
IOError(String, io::Error),
|
IOError(String, io::Error),
|
||||||
ShellParseError(String),
|
ShellParseError(String),
|
||||||
}
|
}
|
||||||
@ -118,10 +146,9 @@ pub enum Error {
|
|||||||
impl fmt::Display for Error {
|
impl fmt::Display for Error {
|
||||||
fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
|
fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||||
match self {
|
match self {
|
||||||
Error::Utf8Error(None) => write!(fmt, "Utf8 error"),
|
Error::Utf8Error(path) => write!(fmt, "UTF-8 error in {path}"),
|
||||||
Error::Utf8Error(Some(path)) => write!(fmt, "Utf8 error in {path}"),
|
Error::IOError(path, err) => write!(fmt, "IO error: {path}: {err}"),
|
||||||
Error::IOError(path, err) => write!(fmt, "IO Error: {path}: {err}"),
|
Error::ShellParseError(path) => write!(fmt, "invalid shell-style arguments in {path}"),
|
||||||
Error::ShellParseError(path) => write!(fmt, "Invalid shell-style arguments in {path}"),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -292,7 +292,7 @@ fn run_compiler(
|
|||||||
// the compiler with @empty_file as argv[0] and no more arguments.
|
// the compiler with @empty_file as argv[0] and no more arguments.
|
||||||
let at_args = at_args.get(1..).unwrap_or_default();
|
let at_args = at_args.get(1..).unwrap_or_default();
|
||||||
|
|
||||||
let args = args::arg_expand_all(&default_early_dcx, at_args);
|
let args = args::arg_expand_all(&default_early_dcx, at_args)?;
|
||||||
|
|
||||||
let Some(matches) = handle_options(&default_early_dcx, &args) else { return Ok(()) };
|
let Some(matches) = handle_options(&default_early_dcx, &args) else { return Ok(()) };
|
||||||
|
|
||||||
@ -1515,15 +1515,7 @@ pub fn main() -> ! {
|
|||||||
let mut callbacks = TimePassesCallbacks::default();
|
let mut callbacks = TimePassesCallbacks::default();
|
||||||
let using_internal_features = install_ice_hook(DEFAULT_BUG_REPORT_URL, |_| ());
|
let using_internal_features = install_ice_hook(DEFAULT_BUG_REPORT_URL, |_| ());
|
||||||
let exit_code = catch_with_exit_code(|| {
|
let exit_code = catch_with_exit_code(|| {
|
||||||
let args = env::args_os()
|
RunCompiler::new(&args::raw_args(&early_dcx)?, &mut callbacks)
|
||||||
.enumerate()
|
|
||||||
.map(|(i, arg)| {
|
|
||||||
arg.into_string().unwrap_or_else(|arg| {
|
|
||||||
early_dcx.early_fatal(format!("argument {i} is not valid Unicode: {arg:?}"))
|
|
||||||
})
|
|
||||||
})
|
|
||||||
.collect::<Vec<_>>();
|
|
||||||
RunCompiler::new(&args, &mut callbacks)
|
|
||||||
.set_using_internal_features(using_internal_features)
|
.set_using_internal_features(using_internal_features)
|
||||||
.run()
|
.run()
|
||||||
});
|
});
|
||||||
|
@ -179,21 +179,14 @@ pub fn main() {
|
|||||||
rustc_driver::init_logger(&early_dcx, rustc_log::LoggerConfig::from_env("RUSTDOC_LOG"));
|
rustc_driver::init_logger(&early_dcx, rustc_log::LoggerConfig::from_env("RUSTDOC_LOG"));
|
||||||
|
|
||||||
let exit_code = rustc_driver::catch_with_exit_code(|| {
|
let exit_code = rustc_driver::catch_with_exit_code(|| {
|
||||||
let args = env::args_os()
|
let at_args = rustc_driver::args::raw_args(&early_dcx)?;
|
||||||
.enumerate()
|
main_args(&mut early_dcx, &at_args, using_internal_features)
|
||||||
.map(|(i, arg)| {
|
|
||||||
arg.into_string().unwrap_or_else(|arg| {
|
|
||||||
early_dcx.early_fatal(format!("argument {i} is not valid Unicode: {arg:?}"))
|
|
||||||
})
|
|
||||||
})
|
|
||||||
.collect::<Vec<_>>();
|
|
||||||
main_args(&mut early_dcx, &args, using_internal_features)
|
|
||||||
});
|
});
|
||||||
process::exit(exit_code);
|
process::exit(exit_code);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn init_logging(early_dcx: &EarlyDiagCtxt) {
|
fn init_logging(early_dcx: &EarlyDiagCtxt) {
|
||||||
let color_logs = match std::env::var("RUSTDOC_LOG_COLOR").as_deref() {
|
let color_logs = match env::var("RUSTDOC_LOG_COLOR").as_deref() {
|
||||||
Ok("always") => true,
|
Ok("always") => true,
|
||||||
Ok("never") => false,
|
Ok("never") => false,
|
||||||
Ok("auto") | Err(VarError::NotPresent) => io::stdout().is_terminal(),
|
Ok("auto") | Err(VarError::NotPresent) => io::stdout().is_terminal(),
|
||||||
@ -705,7 +698,7 @@ fn main_args(
|
|||||||
// the compiler with @empty_file as argv[0] and no more arguments.
|
// the compiler with @empty_file as argv[0] and no more arguments.
|
||||||
let at_args = at_args.get(1..).unwrap_or_default();
|
let at_args = at_args.get(1..).unwrap_or_default();
|
||||||
|
|
||||||
let args = rustc_driver::args::arg_expand_all(early_dcx, at_args);
|
let args = rustc_driver::args::arg_expand_all(early_dcx, at_args)?;
|
||||||
|
|
||||||
let mut options = getopts::Options::new();
|
let mut options = getopts::Options::new();
|
||||||
for option in opts() {
|
for option in opts() {
|
||||||
|
@ -190,7 +190,7 @@ pub fn main() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
exit(rustc_driver::catch_with_exit_code(move || {
|
exit(rustc_driver::catch_with_exit_code(move || {
|
||||||
let mut orig_args: Vec<String> = env::args().collect();
|
let mut orig_args = rustc_driver::args::raw_args(&early_dcx)?;
|
||||||
|
|
||||||
let has_sysroot_arg = |args: &mut [String]| -> bool {
|
let has_sysroot_arg = |args: &mut [String]| -> bool {
|
||||||
if arg_value(args, "--sysroot", |_| true).is_some() {
|
if arg_value(args, "--sysroot", |_| true).is_some() {
|
||||||
|
@ -342,6 +342,8 @@ fn main() {
|
|||||||
// (`install_ice_hook` might change `RUST_BACKTRACE`.)
|
// (`install_ice_hook` might change `RUST_BACKTRACE`.)
|
||||||
let env_snapshot = env::vars_os().collect::<Vec<_>>();
|
let env_snapshot = env::vars_os().collect::<Vec<_>>();
|
||||||
|
|
||||||
|
let args = rustc_driver::args::raw_args(&early_dcx).unwrap_or_else(|_| std::process::exit(rustc_driver::EXIT_FAILURE));
|
||||||
|
|
||||||
// If the environment asks us to actually be rustc, then do that.
|
// If the environment asks us to actually be rustc, then do that.
|
||||||
if let Some(crate_kind) = env::var_os("MIRI_BE_RUSTC") {
|
if let Some(crate_kind) = env::var_os("MIRI_BE_RUSTC") {
|
||||||
// Earliest rustc setup.
|
// Earliest rustc setup.
|
||||||
@ -359,7 +361,7 @@ fn main() {
|
|||||||
|
|
||||||
// We cannot use `rustc_driver::main` as we need to adjust the CLI arguments.
|
// We cannot use `rustc_driver::main` as we need to adjust the CLI arguments.
|
||||||
run_compiler(
|
run_compiler(
|
||||||
env::args().collect(),
|
args,
|
||||||
target_crate,
|
target_crate,
|
||||||
&mut MiriBeRustCompilerCalls { target_crate },
|
&mut MiriBeRustCompilerCalls { target_crate },
|
||||||
using_internal_features,
|
using_internal_features,
|
||||||
@ -382,7 +384,7 @@ fn main() {
|
|||||||
|
|
||||||
// If user has explicitly enabled/disabled isolation
|
// If user has explicitly enabled/disabled isolation
|
||||||
let mut isolation_enabled: Option<bool> = None;
|
let mut isolation_enabled: Option<bool> = None;
|
||||||
for arg in env::args() {
|
for arg in args {
|
||||||
if rustc_args.is_empty() {
|
if rustc_args.is_empty() {
|
||||||
// Very first arg: binary name.
|
// Very first arg: binary name.
|
||||||
rustc_args.push(arg);
|
rustc_args.push(arg);
|
||||||
|
@ -18,7 +18,7 @@ const ENTRY_LIMIT: usize = 900;
|
|||||||
// FIXME: The following limits should be reduced eventually.
|
// FIXME: The following limits should be reduced eventually.
|
||||||
|
|
||||||
const ISSUES_ENTRY_LIMIT: usize = 1750;
|
const ISSUES_ENTRY_LIMIT: usize = 1750;
|
||||||
const ROOT_ENTRY_LIMIT: usize = 872;
|
const ROOT_ENTRY_LIMIT: usize = 866;
|
||||||
|
|
||||||
const EXPECTED_TEST_FILE_EXTENSIONS: &[&str] = &[
|
const EXPECTED_TEST_FILE_EXTENSIONS: &[&str] = &[
|
||||||
"rs", // test source files
|
"rs", // test source files
|
||||||
@ -34,8 +34,8 @@ const EXTENSION_EXCEPTION_PATHS: &[&str] = &[
|
|||||||
"tests/ui/asm/named-asm-labels.s", // loading an external asm file to test named labels lint
|
"tests/ui/asm/named-asm-labels.s", // loading an external asm file to test named labels lint
|
||||||
"tests/ui/codegen/mismatched-data-layout.json", // testing mismatched data layout w/ custom targets
|
"tests/ui/codegen/mismatched-data-layout.json", // testing mismatched data layout w/ custom targets
|
||||||
"tests/ui/check-cfg/my-awesome-platform.json", // testing custom targets with cfgs
|
"tests/ui/check-cfg/my-awesome-platform.json", // testing custom targets with cfgs
|
||||||
"tests/ui/commandline-argfile-badutf8.args", // passing args via a file
|
"tests/ui/argfile/commandline-argfile-badutf8.args", // passing args via a file
|
||||||
"tests/ui/commandline-argfile.args", // passing args via a file
|
"tests/ui/argfile/commandline-argfile.args", // passing args via a file
|
||||||
"tests/ui/crate-loading/auxiliary/libfoo.rlib", // testing loading a manually created rlib
|
"tests/ui/crate-loading/auxiliary/libfoo.rlib", // testing loading a manually created rlib
|
||||||
"tests/ui/include-macros/data.bin", // testing including data with the include macros
|
"tests/ui/include-macros/data.bin", // testing including data with the include macros
|
||||||
"tests/ui/include-macros/file.txt", // testing including data with the include macros
|
"tests/ui/include-macros/file.txt", // testing including data with the include macros
|
||||||
|
@ -0,0 +1,17 @@
|
|||||||
|
// Check to see if we can get parameters from an @argsfile file
|
||||||
|
//
|
||||||
|
// Path replacement in .stderr files (i.e. `$DIR`) doesn't handle mixed path
|
||||||
|
// separators. This test uses backslash as the path separator for the command
|
||||||
|
// line arguments and is only run on windows.
|
||||||
|
//
|
||||||
|
//@ only-windows
|
||||||
|
//@ compile-flags: --cfg cmdline_set @{{src-base}}\argfile\commandline-argfile-badutf8.args
|
||||||
|
|
||||||
|
#[cfg(not(cmdline_set))]
|
||||||
|
compile_error!("cmdline_set not set");
|
||||||
|
|
||||||
|
#[cfg(not(unbroken))]
|
||||||
|
compile_error!("unbroken not set");
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
}
|
@ -0,0 +1,2 @@
|
|||||||
|
error: failed to load argument file: UTF-8 error in $DIR/commandline-argfile-badutf8.args
|
||||||
|
|
18
tests/rustdoc-ui/argfile/commandline-argfile-badutf8.rs
Normal file
18
tests/rustdoc-ui/argfile/commandline-argfile-badutf8.rs
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
// Check to see if we can get parameters from an @argsfile file
|
||||||
|
//
|
||||||
|
// Path replacement in .stderr files (i.e. `$DIR`) doesn't handle mixed path
|
||||||
|
// separators. We have a duplicated version of this test that uses backslash as
|
||||||
|
// the path separator for the command line arguments that is only run on
|
||||||
|
// windows.
|
||||||
|
//
|
||||||
|
//@ ignore-windows
|
||||||
|
//@ compile-flags: --cfg cmdline_set @{{src-base}}/argfile/commandline-argfile-badutf8.args
|
||||||
|
|
||||||
|
#[cfg(not(cmdline_set))]
|
||||||
|
compile_error!("cmdline_set not set");
|
||||||
|
|
||||||
|
#[cfg(not(unbroken))]
|
||||||
|
compile_error!("unbroken not set");
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
}
|
@ -0,0 +1,2 @@
|
|||||||
|
error: failed to load argument file: UTF-8 error in $DIR/commandline-argfile-badutf8.args
|
||||||
|
|
@ -1,8 +1,13 @@
|
|||||||
// Check to see if we can get parameters from an @argsfile file
|
// Check to see if we can get parameters from an @argsfile file
|
||||||
//
|
//
|
||||||
|
// Path replacement in .stderr files (i.e. `$DIR`) doesn't handle mixed path
|
||||||
|
// separators. This test uses backslash as the path separator for the command
|
||||||
|
// line arguments and is only run on windows.
|
||||||
|
//
|
||||||
|
//@ only-windows
|
||||||
//@ normalize-stderr-test: "os error \d+" -> "os error $$ERR"
|
//@ normalize-stderr-test: "os error \d+" -> "os error $$ERR"
|
||||||
//@ normalize-stderr-test: "commandline-argfile-missing.args:[^(]*" -> "commandline-argfile-missing.args: $$FILE_MISSING "
|
//@ normalize-stderr-test: "commandline-argfile-missing.args:[^(]*" -> "commandline-argfile-missing.args: $$FILE_MISSING "
|
||||||
//@ compile-flags: --cfg cmdline_set @{{src-base}}/commandline-argfile-missing.args
|
//@ compile-flags: --cfg cmdline_set @{{src-base}}\argfile\commandline-argfile-missing.args
|
||||||
|
|
||||||
#[cfg(not(cmdline_set))]
|
#[cfg(not(cmdline_set))]
|
||||||
compile_error!("cmdline_set not set");
|
compile_error!("cmdline_set not set");
|
@ -0,0 +1,2 @@
|
|||||||
|
error: failed to load argument file: IO error: $DIR/commandline-argfile-missing.args: $FILE_MISSING (os error $ERR)
|
||||||
|
|
20
tests/rustdoc-ui/argfile/commandline-argfile-missing.rs
Normal file
20
tests/rustdoc-ui/argfile/commandline-argfile-missing.rs
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
// Check to see if we can get parameters from an @argsfile file
|
||||||
|
//
|
||||||
|
// Path replacement in .stderr files (i.e. `$DIR`) doesn't handle mixed path
|
||||||
|
// separators. We have a duplicated version of this test that uses backslash as
|
||||||
|
// the path separator for the command line arguments that is only run on
|
||||||
|
// windows.
|
||||||
|
//
|
||||||
|
//@ ignore-windows
|
||||||
|
//@ normalize-stderr-test: "os error \d+" -> "os error $$ERR"
|
||||||
|
//@ normalize-stderr-test: "commandline-argfile-missing.args:[^(]*" -> "commandline-argfile-missing.args: $$FILE_MISSING "
|
||||||
|
//@ compile-flags: --cfg cmdline_set @{{src-base}}/argfile/commandline-argfile-missing.args
|
||||||
|
|
||||||
|
#[cfg(not(cmdline_set))]
|
||||||
|
compile_error!("cmdline_set not set");
|
||||||
|
|
||||||
|
#[cfg(not(unbroken))]
|
||||||
|
compile_error!("unbroken not set");
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
}
|
@ -0,0 +1,2 @@
|
|||||||
|
error: failed to load argument file: IO error: $DIR/commandline-argfile-missing.args: $FILE_MISSING (os error $ERR)
|
||||||
|
|
@ -0,0 +1,20 @@
|
|||||||
|
// Check to see if we can get parameters from an @argsfile file
|
||||||
|
//
|
||||||
|
// Path replacement in .stderr files (i.e. `$DIR`) doesn't handle mixed path
|
||||||
|
// separators. This test uses backslash as the path separator for the command
|
||||||
|
// line arguments and is only run on windows.
|
||||||
|
//
|
||||||
|
//@ only-windows
|
||||||
|
//@ normalize-stderr-test: "os error \d+" -> "os error $$ERR"
|
||||||
|
//@ normalize-stderr-test: "commandline-argfile-missing.args:[^(]*" -> "commandline-argfile-missing.args: $$FILE_MISSING "
|
||||||
|
//@ normalize-stderr-test: "commandline-argfile-missing2.args:[^(]*" -> "commandline-argfile-missing2.args: $$FILE_MISSING "
|
||||||
|
//@ compile-flags: --cfg cmdline_set @{{src-base}}\argfile\commandline-argfile-missing.args @{{src-base}}\argfile\commandline-argfile-badutf8.args @{{src-base}}\argfile\commandline-argfile-missing2.args
|
||||||
|
|
||||||
|
#[cfg(not(cmdline_set))]
|
||||||
|
compile_error!("cmdline_set not set");
|
||||||
|
|
||||||
|
#[cfg(not(unbroken))]
|
||||||
|
compile_error!("unbroken not set");
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
}
|
@ -0,0 +1,6 @@
|
|||||||
|
error: failed to load argument file: IO error: $DIR/commandline-argfile-missing.args: $FILE_MISSING (os error $ERR)
|
||||||
|
|
||||||
|
error: failed to load argument file: UTF-8 error in $DIR/commandline-argfile-badutf8.args
|
||||||
|
|
||||||
|
error: failed to load argument file: IO error: $DIR/commandline-argfile-missing2.args: $FILE_MISSING (os error $ERR)
|
||||||
|
|
21
tests/rustdoc-ui/argfile/commandline-argfile-multiple.rs
Normal file
21
tests/rustdoc-ui/argfile/commandline-argfile-multiple.rs
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
// Check to see if we can get parameters from an @argsfile file
|
||||||
|
//
|
||||||
|
// Path replacement in .stderr files (i.e. `$DIR`) doesn't handle mixed path
|
||||||
|
// separators. We have a duplicated version of this test that uses backslash as
|
||||||
|
// the path separator for the command line arguments that is only run on
|
||||||
|
// windows.
|
||||||
|
//
|
||||||
|
//@ ignore-windows
|
||||||
|
//@ normalize-stderr-test: "os error \d+" -> "os error $$ERR"
|
||||||
|
//@ normalize-stderr-test: "commandline-argfile-missing.args:[^(]*" -> "commandline-argfile-missing.args: $$FILE_MISSING "
|
||||||
|
//@ normalize-stderr-test: "commandline-argfile-missing2.args:[^(]*" -> "commandline-argfile-missing2.args: $$FILE_MISSING "
|
||||||
|
//@ compile-flags: --cfg cmdline_set @{{src-base}}/argfile/commandline-argfile-missing.args @{{src-base}}/argfile/commandline-argfile-badutf8.args @{{src-base}}/argfile/commandline-argfile-missing2.args
|
||||||
|
|
||||||
|
#[cfg(not(cmdline_set))]
|
||||||
|
compile_error!("cmdline_set not set");
|
||||||
|
|
||||||
|
#[cfg(not(unbroken))]
|
||||||
|
compile_error!("unbroken not set");
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
}
|
@ -0,0 +1,6 @@
|
|||||||
|
error: failed to load argument file: IO error: $DIR/commandline-argfile-missing.args: $FILE_MISSING (os error $ERR)
|
||||||
|
|
||||||
|
error: failed to load argument file: UTF-8 error in $DIR/commandline-argfile-badutf8.args
|
||||||
|
|
||||||
|
error: failed to load argument file: IO error: $DIR/commandline-argfile-missing2.args: $FILE_MISSING (os error $ERR)
|
||||||
|
|
@ -1,7 +1,7 @@
|
|||||||
// Check to see if we can get parameters from an @argsfile file
|
// Check to see if we can get parameters from an @argsfile file
|
||||||
//
|
//
|
||||||
//@ check-pass
|
//@ check-pass
|
||||||
//@ compile-flags: --cfg cmdline_set @{{src-base}}/commandline-argfile.args
|
//@ compile-flags: --cfg cmdline_set @{{src-base}}/argfile/commandline-argfile.args
|
||||||
|
|
||||||
#[cfg(not(cmdline_set))]
|
#[cfg(not(cmdline_set))]
|
||||||
compile_error!("cmdline_set not set");
|
compile_error!("cmdline_set not set");
|
@ -1,12 +0,0 @@
|
|||||||
// Check to see if we can get parameters from an @argsfile file
|
|
||||||
//
|
|
||||||
//@ compile-flags: --cfg cmdline_set @{{src-base}}/commandline-argfile-badutf8.args
|
|
||||||
|
|
||||||
#[cfg(not(cmdline_set))]
|
|
||||||
compile_error!("cmdline_set not set");
|
|
||||||
|
|
||||||
#[cfg(not(unbroken))]
|
|
||||||
compile_error!("unbroken not set");
|
|
||||||
|
|
||||||
fn main() {
|
|
||||||
}
|
|
@ -1,2 +0,0 @@
|
|||||||
error: Failed to load argument file: Utf8 error in $DIR/commandline-argfile-badutf8.args
|
|
||||||
|
|
@ -1,2 +0,0 @@
|
|||||||
error: Failed to load argument file: IO Error: $DIR/commandline-argfile-missing.args: $FILE_MISSING (os error $ERR)
|
|
||||||
|
|
17
tests/ui/argfile/commandline-argfile-badutf8-windows.rs
Normal file
17
tests/ui/argfile/commandline-argfile-badutf8-windows.rs
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
// Check to see if we can get parameters from an @argsfile file
|
||||||
|
//
|
||||||
|
// Path replacement in .stderr files (i.e. `$DIR`) doesn't handle mixed path
|
||||||
|
// separators. This test uses backslash as the path separator for the command
|
||||||
|
// line arguments and is only run on windows.
|
||||||
|
//
|
||||||
|
//@ only-windows
|
||||||
|
//@ compile-flags: --cfg cmdline_set @{{src-base}}\argfile\commandline-argfile-badutf8.args
|
||||||
|
|
||||||
|
#[cfg(not(cmdline_set))]
|
||||||
|
compile_error!("cmdline_set not set");
|
||||||
|
|
||||||
|
#[cfg(not(unbroken))]
|
||||||
|
compile_error!("unbroken not set");
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
}
|
@ -0,0 +1,2 @@
|
|||||||
|
error: failed to load argument file: UTF-8 error in $DIR/commandline-argfile-badutf8.args
|
||||||
|
|
18
tests/ui/argfile/commandline-argfile-badutf8.rs
Normal file
18
tests/ui/argfile/commandline-argfile-badutf8.rs
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
// Check to see if we can get parameters from an @argsfile file
|
||||||
|
//
|
||||||
|
// Path replacement in .stderr files (i.e. `$DIR`) doesn't handle mixed path
|
||||||
|
// separators. We have a duplicated version of this test that uses backslash as
|
||||||
|
// the path separator for the command line arguments that is only run on
|
||||||
|
// windows.
|
||||||
|
//
|
||||||
|
//@ ignore-windows
|
||||||
|
//@ compile-flags: --cfg cmdline_set @{{src-base}}/argfile/commandline-argfile-badutf8.args
|
||||||
|
|
||||||
|
#[cfg(not(cmdline_set))]
|
||||||
|
compile_error!("cmdline_set not set");
|
||||||
|
|
||||||
|
#[cfg(not(unbroken))]
|
||||||
|
compile_error!("unbroken not set");
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
}
|
2
tests/ui/argfile/commandline-argfile-badutf8.stderr
Normal file
2
tests/ui/argfile/commandline-argfile-badutf8.stderr
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
error: failed to load argument file: UTF-8 error in $DIR/commandline-argfile-badutf8.args
|
||||||
|
|
@ -1,8 +1,13 @@
|
|||||||
// Check to see if we can get parameters from an @argsfile file
|
// Check to see if we can get parameters from an @argsfile file
|
||||||
//
|
//
|
||||||
|
// Path replacement in .stderr files (i.e. `$DIR`) doesn't handle mixed path
|
||||||
|
// separators. This test uses backslash as the path separator for the command
|
||||||
|
// line arguments and is only run on windows.
|
||||||
|
//
|
||||||
|
//@ only-windows
|
||||||
//@ normalize-stderr-test: "os error \d+" -> "os error $$ERR"
|
//@ normalize-stderr-test: "os error \d+" -> "os error $$ERR"
|
||||||
//@ normalize-stderr-test: "commandline-argfile-missing.args:[^(]*" -> "commandline-argfile-missing.args: $$FILE_MISSING "
|
//@ normalize-stderr-test: "commandline-argfile-missing.args:[^(]*" -> "commandline-argfile-missing.args: $$FILE_MISSING "
|
||||||
//@ compile-flags: --cfg cmdline_set @{{src-base}}/commandline-argfile-missing.args
|
//@ compile-flags: --cfg cmdline_set @{{src-base}}\argfile\commandline-argfile-missing.args
|
||||||
|
|
||||||
#[cfg(not(cmdline_set))]
|
#[cfg(not(cmdline_set))]
|
||||||
compile_error!("cmdline_set not set");
|
compile_error!("cmdline_set not set");
|
@ -0,0 +1,2 @@
|
|||||||
|
error: failed to load argument file: IO error: $DIR/commandline-argfile-missing.args: $FILE_MISSING (os error $ERR)
|
||||||
|
|
20
tests/ui/argfile/commandline-argfile-missing.rs
Normal file
20
tests/ui/argfile/commandline-argfile-missing.rs
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
// Check to see if we can get parameters from an @argsfile file
|
||||||
|
//
|
||||||
|
// Path replacement in .stderr files (i.e. `$DIR`) doesn't handle mixed path
|
||||||
|
// separators. We have a duplicated version of this test that uses backslash as
|
||||||
|
// the path separator for the command line arguments that is only run on
|
||||||
|
// windows.
|
||||||
|
//
|
||||||
|
//@ ignore-windows
|
||||||
|
//@ normalize-stderr-test: "os error \d+" -> "os error $$ERR"
|
||||||
|
//@ normalize-stderr-test: "commandline-argfile-missing.args:[^(]*" -> "commandline-argfile-missing.args: $$FILE_MISSING "
|
||||||
|
//@ compile-flags: --cfg cmdline_set @{{src-base}}/argfile/commandline-argfile-missing.args
|
||||||
|
|
||||||
|
#[cfg(not(cmdline_set))]
|
||||||
|
compile_error!("cmdline_set not set");
|
||||||
|
|
||||||
|
#[cfg(not(unbroken))]
|
||||||
|
compile_error!("unbroken not set");
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
}
|
2
tests/ui/argfile/commandline-argfile-missing.stderr
Normal file
2
tests/ui/argfile/commandline-argfile-missing.stderr
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
error: failed to load argument file: IO error: $DIR/commandline-argfile-missing.args: $FILE_MISSING (os error $ERR)
|
||||||
|
|
20
tests/ui/argfile/commandline-argfile-multiple-windows.rs
Normal file
20
tests/ui/argfile/commandline-argfile-multiple-windows.rs
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
// Check to see if we can get parameters from an @argsfile file
|
||||||
|
//
|
||||||
|
// Path replacement in .stderr files (i.e. `$DIR`) doesn't handle mixed path
|
||||||
|
// separators. This test uses backslash as the path separator for the command
|
||||||
|
// line arguments and is only run on windows.
|
||||||
|
//
|
||||||
|
//@ only-windows
|
||||||
|
//@ normalize-stderr-test: "os error \d+" -> "os error $$ERR"
|
||||||
|
//@ normalize-stderr-test: "commandline-argfile-missing.args:[^(]*" -> "commandline-argfile-missing.args: $$FILE_MISSING "
|
||||||
|
//@ normalize-stderr-test: "commandline-argfile-missing2.args:[^(]*" -> "commandline-argfile-missing2.args: $$FILE_MISSING "
|
||||||
|
//@ compile-flags: --cfg cmdline_set @{{src-base}}\argfile\commandline-argfile-missing.args @{{src-base}}\argfile\commandline-argfile-badutf8.args @{{src-base}}\argfile\commandline-argfile-missing2.args
|
||||||
|
|
||||||
|
#[cfg(not(cmdline_set))]
|
||||||
|
compile_error!("cmdline_set not set");
|
||||||
|
|
||||||
|
#[cfg(not(unbroken))]
|
||||||
|
compile_error!("unbroken not set");
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
}
|
@ -0,0 +1,6 @@
|
|||||||
|
error: failed to load argument file: IO error: $DIR/commandline-argfile-missing.args: $FILE_MISSING (os error $ERR)
|
||||||
|
|
||||||
|
error: failed to load argument file: UTF-8 error in $DIR/commandline-argfile-badutf8.args
|
||||||
|
|
||||||
|
error: failed to load argument file: IO error: $DIR/commandline-argfile-missing2.args: $FILE_MISSING (os error $ERR)
|
||||||
|
|
21
tests/ui/argfile/commandline-argfile-multiple.rs
Normal file
21
tests/ui/argfile/commandline-argfile-multiple.rs
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
// Check to see if we can get parameters from an @argsfile file
|
||||||
|
//
|
||||||
|
// Path replacement in .stderr files (i.e. `$DIR`) doesn't handle mixed path
|
||||||
|
// separators. We have a duplicated version of this test that uses backslash as
|
||||||
|
// the path separator for the command line arguments that is only run on
|
||||||
|
// windows.
|
||||||
|
//
|
||||||
|
//@ ignore-windows
|
||||||
|
//@ normalize-stderr-test: "os error \d+" -> "os error $$ERR"
|
||||||
|
//@ normalize-stderr-test: "commandline-argfile-missing.args:[^(]*" -> "commandline-argfile-missing.args: $$FILE_MISSING "
|
||||||
|
//@ normalize-stderr-test: "commandline-argfile-missing2.args:[^(]*" -> "commandline-argfile-missing2.args: $$FILE_MISSING "
|
||||||
|
//@ compile-flags: --cfg cmdline_set @{{src-base}}/argfile/commandline-argfile-missing.args @{{src-base}}/argfile/commandline-argfile-badutf8.args @{{src-base}}/argfile/commandline-argfile-missing2.args
|
||||||
|
|
||||||
|
#[cfg(not(cmdline_set))]
|
||||||
|
compile_error!("cmdline_set not set");
|
||||||
|
|
||||||
|
#[cfg(not(unbroken))]
|
||||||
|
compile_error!("unbroken not set");
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
}
|
6
tests/ui/argfile/commandline-argfile-multiple.stderr
Normal file
6
tests/ui/argfile/commandline-argfile-multiple.stderr
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
error: failed to load argument file: IO error: $DIR/commandline-argfile-missing.args: $FILE_MISSING (os error $ERR)
|
||||||
|
|
||||||
|
error: failed to load argument file: UTF-8 error in $DIR/commandline-argfile-badutf8.args
|
||||||
|
|
||||||
|
error: failed to load argument file: IO error: $DIR/commandline-argfile-missing2.args: $FILE_MISSING (os error $ERR)
|
||||||
|
|
@ -1,7 +1,7 @@
|
|||||||
// Check to see if we can get parameters from an @argsfile file
|
// Check to see if we can get parameters from an @argsfile file
|
||||||
//
|
//
|
||||||
//@ build-pass
|
//@ build-pass
|
||||||
//@ compile-flags: --cfg cmdline_set @{{src-base}}/commandline-argfile.args
|
//@ compile-flags: --cfg cmdline_set @{{src-base}}/argfile/commandline-argfile.args
|
||||||
|
|
||||||
#[cfg(not(cmdline_set))]
|
#[cfg(not(cmdline_set))]
|
||||||
compile_error!("cmdline_set not set");
|
compile_error!("cmdline_set not set");
|
@ -1,12 +0,0 @@
|
|||||||
// Check to see if we can get parameters from an @argsfile file
|
|
||||||
//
|
|
||||||
//@ compile-flags: --cfg cmdline_set @{{src-base}}/commandline-argfile-badutf8.args
|
|
||||||
|
|
||||||
#[cfg(not(cmdline_set))]
|
|
||||||
compile_error!("cmdline_set not set");
|
|
||||||
|
|
||||||
#[cfg(not(unbroken))]
|
|
||||||
compile_error!("unbroken not set");
|
|
||||||
|
|
||||||
fn main() {
|
|
||||||
}
|
|
@ -1,2 +0,0 @@
|
|||||||
error: Failed to load argument file: Utf8 error in $DIR/commandline-argfile-badutf8.args
|
|
||||||
|
|
@ -1,2 +0,0 @@
|
|||||||
error: Failed to load argument file: IO Error: $DIR/commandline-argfile-missing.args: $FILE_MISSING (os error $ERR)
|
|
||||||
|
|
@ -1,2 +1,2 @@
|
|||||||
error: Failed to load argument file: Invalid shell-style arguments in $DIR/shell-argfiles-badquotes.args
|
error: failed to load argument file: invalid shell-style arguments in $DIR/shell-argfiles-badquotes.args
|
||||||
|
|
||||||
|
@ -1,2 +1,2 @@
|
|||||||
error: Failed to load argument file: Invalid shell-style arguments in $DIR/shell-argfiles-badquotes.args
|
error: failed to load argument file: invalid shell-style arguments in $DIR/shell-argfiles-badquotes.args
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user