Driver: Eliminate uses of Arg::getIndex.

Also, fix a memory leak.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@105963 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Daniel Dunbar 2010-06-14 21:23:08 +00:00
Родитель 57dc2fc543
Коммит 0e10031ba5
3 изменённых файлов: 13 добавлений и 5 удалений

Просмотреть файл

@ -338,6 +338,12 @@ namespace driver {
/// @name Arg Synthesis
/// @{
/// AddSynthesizedArg - Add a argument to the list of synthesized arguments
/// (to be freed).
void AddSynthesizedArg(Arg *A) {
SynthesizedArgs.push_back(A);
}
virtual const char *MakeArgString(llvm::StringRef Str) const;
/// AddFlagArg - Construct a new FlagArg for the given option \arg Id and

Просмотреть файл

@ -487,9 +487,8 @@ DerivedArgList *Darwin::TranslateArgs(const DerivedArgList &Args,
if (getArchName() != A->getValue(Args, 0))
continue;
// FIXME: The arg is leaked here, and we should have a nicer
// interface for this.
unsigned Prev, Index = Prev = A->getIndex() + 1;
unsigned Index = Args.getBaseArgs().MakeIndex(A->getValue(Args, 1));
unsigned Prev = Index;
Arg *XarchArg = Opts.ParseOneArg(Args, Index);
// If the argument parsing failed or more than one argument was
@ -509,6 +508,8 @@ DerivedArgList *Darwin::TranslateArgs(const DerivedArgList &Args,
XarchArg->setBaseArg(A);
A = XarchArg;
DAL->AddSynthesizedArg(A);
}
// Sob. These is strictly gcc compatible for the time being. Apple

Просмотреть файл

@ -1074,8 +1074,9 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
else
Std->render(Args, CmdArgs);
if (Arg *A = Args.getLastArg(options::OPT_trigraphs))
if (A->getIndex() > Std->getIndex())
if (Arg *A = Args.getLastArg(options::OPT_std_EQ, options::OPT_ansi,
options::OPT_trigraphs))
if (A != Std)
A->render(Args, CmdArgs);
} else {
// Honor -std-default.