зеркало из https://github.com/microsoft/clang-1.git
Factor out the code retrieves the last PIC related argument from
the Clang::ConstructJob() to the new ArgList::getLastArg() routine with eight argument. That simplifies reusing of this code. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@157633 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
4dfa5ad7b1
Коммит
003ab66823
|
@ -187,6 +187,14 @@ namespace driver {
|
|||
OptSpecifier Id3) const;
|
||||
Arg *getLastArg(OptSpecifier Id0, OptSpecifier Id1, OptSpecifier Id2,
|
||||
OptSpecifier Id3, OptSpecifier Id4) const;
|
||||
Arg *getLastArg(OptSpecifier Id0, OptSpecifier Id1, OptSpecifier Id2,
|
||||
OptSpecifier Id3, OptSpecifier Id4, OptSpecifier Id5) const;
|
||||
Arg *getLastArg(OptSpecifier Id0, OptSpecifier Id1, OptSpecifier Id2,
|
||||
OptSpecifier Id3, OptSpecifier Id4, OptSpecifier Id5,
|
||||
OptSpecifier Id6) const;
|
||||
Arg *getLastArg(OptSpecifier Id0, OptSpecifier Id1, OptSpecifier Id2,
|
||||
OptSpecifier Id3, OptSpecifier Id4, OptSpecifier Id5,
|
||||
OptSpecifier Id6, OptSpecifier Id7) const;
|
||||
|
||||
/// getArgString - Return the input argument string at \arg Index.
|
||||
virtual const char *getArgString(unsigned Index) const = 0;
|
||||
|
|
|
@ -140,6 +140,68 @@ Arg *ArgList::getLastArg(OptSpecifier Id0, OptSpecifier Id1,
|
|||
return Res;
|
||||
}
|
||||
|
||||
Arg *ArgList::getLastArg(OptSpecifier Id0, OptSpecifier Id1,
|
||||
OptSpecifier Id2, OptSpecifier Id3,
|
||||
OptSpecifier Id4, OptSpecifier Id5) const {
|
||||
Arg *Res = 0;
|
||||
for (const_iterator it = begin(), ie = end(); it != ie; ++it) {
|
||||
if ((*it)->getOption().matches(Id0) ||
|
||||
(*it)->getOption().matches(Id1) ||
|
||||
(*it)->getOption().matches(Id2) ||
|
||||
(*it)->getOption().matches(Id3) ||
|
||||
(*it)->getOption().matches(Id4) ||
|
||||
(*it)->getOption().matches(Id5)) {
|
||||
Res = *it;
|
||||
Res->claim();
|
||||
}
|
||||
}
|
||||
|
||||
return Res;
|
||||
}
|
||||
|
||||
Arg *ArgList::getLastArg(OptSpecifier Id0, OptSpecifier Id1,
|
||||
OptSpecifier Id2, OptSpecifier Id3,
|
||||
OptSpecifier Id4, OptSpecifier Id5,
|
||||
OptSpecifier Id6) const {
|
||||
Arg *Res = 0;
|
||||
for (const_iterator it = begin(), ie = end(); it != ie; ++it) {
|
||||
if ((*it)->getOption().matches(Id0) ||
|
||||
(*it)->getOption().matches(Id1) ||
|
||||
(*it)->getOption().matches(Id2) ||
|
||||
(*it)->getOption().matches(Id3) ||
|
||||
(*it)->getOption().matches(Id4) ||
|
||||
(*it)->getOption().matches(Id5) ||
|
||||
(*it)->getOption().matches(Id6)) {
|
||||
Res = *it;
|
||||
Res->claim();
|
||||
}
|
||||
}
|
||||
|
||||
return Res;
|
||||
}
|
||||
|
||||
Arg *ArgList::getLastArg(OptSpecifier Id0, OptSpecifier Id1,
|
||||
OptSpecifier Id2, OptSpecifier Id3,
|
||||
OptSpecifier Id4, OptSpecifier Id5,
|
||||
OptSpecifier Id6, OptSpecifier Id7) const {
|
||||
Arg *Res = 0;
|
||||
for (const_iterator it = begin(), ie = end(); it != ie; ++it) {
|
||||
if ((*it)->getOption().matches(Id0) ||
|
||||
(*it)->getOption().matches(Id1) ||
|
||||
(*it)->getOption().matches(Id2) ||
|
||||
(*it)->getOption().matches(Id3) ||
|
||||
(*it)->getOption().matches(Id4) ||
|
||||
(*it)->getOption().matches(Id5) ||
|
||||
(*it)->getOption().matches(Id6) ||
|
||||
(*it)->getOption().matches(Id7)) {
|
||||
Res = *it;
|
||||
Res->claim();
|
||||
}
|
||||
}
|
||||
|
||||
return Res;
|
||||
}
|
||||
|
||||
bool ArgList::hasFlag(OptSpecifier Pos, OptSpecifier Neg, bool Default) const {
|
||||
if (Arg *A = getLastArg(Pos, Neg))
|
||||
return A->getOption().matches(Pos);
|
||||
|
|
|
@ -1529,22 +1529,11 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
|
|||
|
||||
// This comes from the default translation the driver + cc1
|
||||
// would do to enable flag_pic.
|
||||
//
|
||||
// FIXME: Centralize this code.
|
||||
Arg *LastPICArg = 0;
|
||||
for (ArgList::const_iterator I = Args.begin(), E = Args.end(); I != E; ++I) {
|
||||
if ((*I)->getOption().matches(options::OPT_fPIC) ||
|
||||
(*I)->getOption().matches(options::OPT_fno_PIC) ||
|
||||
(*I)->getOption().matches(options::OPT_fpic) ||
|
||||
(*I)->getOption().matches(options::OPT_fno_pic) ||
|
||||
(*I)->getOption().matches(options::OPT_fPIE) ||
|
||||
(*I)->getOption().matches(options::OPT_fno_PIE) ||
|
||||
(*I)->getOption().matches(options::OPT_fpie) ||
|
||||
(*I)->getOption().matches(options::OPT_fno_pie)) {
|
||||
LastPICArg = *I;
|
||||
(*I)->claim();
|
||||
}
|
||||
}
|
||||
|
||||
Arg *LastPICArg = Args.getLastArg(options::OPT_fPIC, options::OPT_fno_PIC,
|
||||
options::OPT_fpic, options::OPT_fno_pic,
|
||||
options::OPT_fPIE, options::OPT_fno_PIE,
|
||||
options::OPT_fpie, options::OPT_fno_pie);
|
||||
bool PICDisabled = false;
|
||||
bool PICEnabled = false;
|
||||
bool PICForPIE = false;
|
||||
|
|
Загрузка…
Ссылка в новой задаче