forked from OSchip/llvm-project
Don't forward all assembler arguments untouched to -cc1as
Use the same filtering for assembly arguments to -cc1as as we do for -cc1, this allows a consistent (& more useful) diagnostic experience for users (rather than getting an error from -cc1as (which a user shouldn't really be thinking about) about --foo, they get an error from clang about --foo in -Wa,) I'm sort of surprised by the separation of -cc1as & the separate argument handling, etc, but at least this removes a little bit of the duplication. llvm-svn: 187156
This commit is contained in:
parent
372c24d9f2
commit
9260ed6c06
|
@ -77,15 +77,12 @@ def show_inst : Flag<["-"], "show-inst">,
|
|||
// Assemble Options
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
def relax_all : Flag<["-"], "relax-all">,
|
||||
def mrelax_all : Flag<["-"], "mrelax-all">,
|
||||
HelpText<"Relax all fixups (for performance testing)">;
|
||||
|
||||
def no_exec_stack : Flag<["--"], "noexecstack">,
|
||||
def mno_exec_stack : Flag<["-"], "mnoexecstack">,
|
||||
HelpText<"Mark the file as not needing an executable stack">;
|
||||
|
||||
def fatal_warnings : Flag<["--"], "fatal-warnings">,
|
||||
HelpText<"Consider warnings as errors">;
|
||||
|
||||
def g : Flag<["-"], "g">, HelpText<"Generate source level debug information">;
|
||||
|
||||
def fdebug_compilation_dir : Separate<["-"], "fdebug-compilation-dir">,
|
||||
|
|
|
@ -1570,6 +1570,41 @@ static bool UseRelaxAll(Compilation &C, const ArgList &Args) {
|
|||
RelaxDefault);
|
||||
}
|
||||
|
||||
static void CollectArgsForIntegratedAssembler(Compilation &C,
|
||||
const ArgList &Args,
|
||||
ArgStringList &CmdArgs,
|
||||
const Driver &D) {
|
||||
if (UseRelaxAll(C, Args))
|
||||
CmdArgs.push_back("-mrelax-all");
|
||||
|
||||
// When using an integrated assembler, translate -Wa, and -Xassembler
|
||||
// options.
|
||||
for (arg_iterator it = Args.filtered_begin(options::OPT_Wa_COMMA,
|
||||
options::OPT_Xassembler),
|
||||
ie = Args.filtered_end(); it != ie; ++it) {
|
||||
const Arg *A = *it;
|
||||
A->claim();
|
||||
|
||||
for (unsigned i = 0, e = A->getNumValues(); i != e; ++i) {
|
||||
StringRef Value = A->getValue(i);
|
||||
|
||||
if (Value == "-force_cpusubtype_ALL") {
|
||||
// Do nothing, this is the default and we don't support anything else.
|
||||
} else if (Value == "-L") {
|
||||
CmdArgs.push_back("-msave-temp-labels");
|
||||
} else if (Value == "--fatal-warnings") {
|
||||
CmdArgs.push_back("-mllvm");
|
||||
CmdArgs.push_back("-fatal-assembler-warnings");
|
||||
} else if (Value == "--noexecstack") {
|
||||
CmdArgs.push_back("-mnoexecstack");
|
||||
} else {
|
||||
D.Diag(diag::err_drv_unsupported_option_argument)
|
||||
<< A->getOption().getName() << Value;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
SanitizerArgs::SanitizerArgs(const ToolChain &TC, const ArgList &Args)
|
||||
: Kind(0), BlacklistFile(""), MsanTrackOrigins(false),
|
||||
AsanZeroBaseShadow(false) {
|
||||
|
@ -1970,35 +2005,7 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
|
|||
} else if (isa<AssembleJobAction>(JA)) {
|
||||
CmdArgs.push_back("-emit-obj");
|
||||
|
||||
if (UseRelaxAll(C, Args))
|
||||
CmdArgs.push_back("-mrelax-all");
|
||||
|
||||
// When using an integrated assembler, translate -Wa, and -Xassembler
|
||||
// options.
|
||||
for (arg_iterator it = Args.filtered_begin(options::OPT_Wa_COMMA,
|
||||
options::OPT_Xassembler),
|
||||
ie = Args.filtered_end(); it != ie; ++it) {
|
||||
const Arg *A = *it;
|
||||
A->claim();
|
||||
|
||||
for (unsigned i = 0, e = A->getNumValues(); i != e; ++i) {
|
||||
StringRef Value = A->getValue(i);
|
||||
|
||||
if (Value == "-force_cpusubtype_ALL") {
|
||||
// Do nothing, this is the default and we don't support anything else.
|
||||
} else if (Value == "-L") {
|
||||
CmdArgs.push_back("-msave-temp-labels");
|
||||
} else if (Value == "--fatal-warnings") {
|
||||
CmdArgs.push_back("-mllvm");
|
||||
CmdArgs.push_back("-fatal-assembler-warnings");
|
||||
} else if (Value == "--noexecstack") {
|
||||
CmdArgs.push_back("-mnoexecstack");
|
||||
} else {
|
||||
D.Diag(diag::err_drv_unsupported_option_argument)
|
||||
<< A->getOption().getName() << Value;
|
||||
}
|
||||
}
|
||||
}
|
||||
CollectArgsForIntegratedAssembler(C, Args, CmdArgs, D);
|
||||
|
||||
// Also ignore explicit -force_cpusubtype_ALL option.
|
||||
(void) Args.hasArg(options::OPT_force__cpusubtype__ALL);
|
||||
|
@ -3816,9 +3823,6 @@ void ClangAs::ConstructJob(Compilation &C, const JobAction &JA,
|
|||
CmdArgs.push_back("-main-file-name");
|
||||
CmdArgs.push_back(Clang::getBaseInputName(Args, Inputs));
|
||||
|
||||
if (UseRelaxAll(C, Args))
|
||||
CmdArgs.push_back("-relax-all");
|
||||
|
||||
// Add target specific cpu and features flags.
|
||||
switch(getToolChain().getArch()) {
|
||||
default:
|
||||
|
@ -3884,8 +3888,9 @@ void ClangAs::ConstructJob(Compilation &C, const JobAction &JA,
|
|||
|
||||
// FIXME: Add -static support, once we have it.
|
||||
|
||||
Args.AddAllArgValues(CmdArgs, options::OPT_Wa_COMMA,
|
||||
options::OPT_Xassembler);
|
||||
CollectArgsForIntegratedAssembler(C, Args, CmdArgs,
|
||||
getToolChain().getDriver());
|
||||
|
||||
Args.AddAllArgs(CmdArgs, options::OPT_mllvm);
|
||||
|
||||
assert(Output.isFilename() && "Unexpected lipo output.");
|
||||
|
|
|
@ -4,4 +4,4 @@
|
|||
// REQUIRES: clang-driver
|
||||
|
||||
// CHECK: cc1as
|
||||
// CHECK: -relax-all
|
||||
// CHECK: -mrelax-all
|
||||
|
|
|
@ -4,3 +4,6 @@
|
|||
|
||||
// CHECK: cc1as
|
||||
// CHECK-NOT: -relax-all
|
||||
|
||||
// RUN: %clang -c -integrated-as -Wa,--compress-debug-sections %s 2>&1 | FileCheck --check-prefix=INVALID %s
|
||||
// INVALID: error: unsupported argument '--compress-debug-sections' to option 'Wa,'
|
||||
|
|
|
@ -206,8 +206,6 @@ bool AssemblerInvocation::CreateFromArgs(AssemblerInvocation &Opts,
|
|||
}
|
||||
}
|
||||
Opts.LLVMArgs = Args->getAllArgValues(OPT_mllvm);
|
||||
if (Args->hasArg(OPT_fatal_warnings))
|
||||
Opts.LLVMArgs.push_back("-fatal-assembler-warnings");
|
||||
Opts.OutputPath = Args->getLastArgValue(OPT_o);
|
||||
if (Arg *A = Args->getLastArg(OPT_filetype)) {
|
||||
StringRef Name = A->getValue();
|
||||
|
@ -233,8 +231,8 @@ bool AssemblerInvocation::CreateFromArgs(AssemblerInvocation &Opts,
|
|||
Opts.ShowInst = Args->hasArg(OPT_show_inst);
|
||||
|
||||
// Assemble Options
|
||||
Opts.RelaxAll = Args->hasArg(OPT_relax_all);
|
||||
Opts.NoExecStack = Args->hasArg(OPT_no_exec_stack);
|
||||
Opts.RelaxAll = Args->hasArg(OPT_mrelax_all);
|
||||
Opts.NoExecStack = Args->hasArg(OPT_mno_exec_stack);
|
||||
|
||||
return Success;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue