[ConfigFiles] Update argument strings when merging argrument lists
Implementation of `InputArgList` assumes its field `ArgStrings` contains strings for each argument exactly in the same order. This condition was broken when arguments from config file and from invocation were merged. This change fixes https://bugs.llvm.org/show_bug.cgi?id=37196 (Clang config files can crash argument handling). llvm-svn: 330926
This commit is contained in:
parent
faa3b8a554
commit
f015a56761
|
@ -876,11 +876,14 @@ Compilation *Driver::BuildCompilation(ArrayRef<const char *> ArgList) {
|
|||
: std::move(*CLOptions));
|
||||
if (HasConfigFile)
|
||||
for (auto *Opt : *CLOptions) {
|
||||
if (Opt->getOption().matches(options::OPT_config))
|
||||
continue;
|
||||
unsigned Index = Args.MakeIndex(Opt->getSpelling());
|
||||
const Arg *BaseArg = &Opt->getBaseArg();
|
||||
if (BaseArg == Opt)
|
||||
BaseArg = nullptr;
|
||||
Arg *Copy = new llvm::opt::Arg(Opt->getOption(), Opt->getSpelling(),
|
||||
Args.size(), BaseArg);
|
||||
Index, BaseArg);
|
||||
Copy->getValues() = Opt->getValues();
|
||||
if (Opt->isClaimed())
|
||||
Copy->claim();
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
// RUN: %clang --config %S/Inputs/empty.cfg -Wall -Wextra -Wformat -Wstrict-aliasing -Wshadow -Wpacked -Winline -Wimplicit-function-declaration -c %s -O2 -o /dev/null -v 2>&1 | FileCheck %s -check-prefix PR37196
|
||||
// PR37196: Configuration file: {{.*}}/empty.cfg
|
Loading…
Reference in New Issue