summaryrefslogtreecommitdiffstats
path: root/clang/lib/Driver/ArgList.cpp
diff options
context:
space:
mode:
authorDaniel Dunbar <daniel@zuster.org>2010-07-13 23:31:40 +0000
committerDaniel Dunbar <daniel@zuster.org>2010-07-13 23:31:40 +0000
commitaf68a88e6862d26ebf4046a33308d531f85cd197 (patch)
treef5d70fd5db9b74f218263383e7a9d80967682407 /clang/lib/Driver/ArgList.cpp
parentc95a41b510824a8f24f9ba359ba78ff203dfabc0 (diff)
downloadbcm5719-llvm-af68a88e6862d26ebf4046a33308d531f85cd197.tar.gz
bcm5719-llvm-af68a88e6862d26ebf4046a33308d531f85cd197.zip
Driver/Darwin: Pass -pie/-no_pie to the linker when -fpie/-fno-pie and friends
are explicitly given. llvm-svn: 108297
Diffstat (limited to 'clang/lib/Driver/ArgList.cpp')
-rw-r--r--clang/lib/Driver/ArgList.cpp19
1 files changed, 19 insertions, 0 deletions
diff --git a/clang/lib/Driver/ArgList.cpp b/clang/lib/Driver/ArgList.cpp
index 95fef89b85d..91015237671 100644
--- a/clang/lib/Driver/ArgList.cpp
+++ b/clang/lib/Driver/ArgList.cpp
@@ -95,6 +95,25 @@ Arg *ArgList::getLastArg(OptSpecifier Id0, OptSpecifier Id1,
return Res;
}
+Arg *ArgList::getLastArg(OptSpecifier Id0, OptSpecifier Id1,
+ OptSpecifier Id2, OptSpecifier Id3) const {
+ Arg *Res = 0;
+ for (const_reverse_iterator it = rbegin(), ie = rend(); it != ie; ++it) {
+ if ((*it)->getOption().matches(Id0) ||
+ (*it)->getOption().matches(Id1) ||
+ (*it)->getOption().matches(Id2) ||
+ (*it)->getOption().matches(Id3)) {
+ Res = *it;
+ break;
+ }
+ }
+
+ if (Res)
+ 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);
OpenPOWER on IntegriCloud