From fe2e04a979205c1f395b699a24d74adb82bb4833 Mon Sep 17 00:00:00 2001 From: Daniel Dunbar Date: Tue, 24 Mar 2009 17:31:30 +0000 Subject: [PATCH] Driver: ArgList::getLastArg was in fact returning the first matching arg. - clang doesn't honor gcc semantic that last -O optimization option wins. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@67628 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang/Driver/ArgList.h | 8 ++++++++ lib/Driver/ArgList.cpp | 4 +--- test/Driver/clang-translation.c | 2 +- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/include/clang/Driver/ArgList.h b/include/clang/Driver/ArgList.h index cf67295241..e2b4cf47fd 100644 --- a/include/clang/Driver/ArgList.h +++ b/include/clang/Driver/ArgList.h @@ -32,6 +32,8 @@ namespace driver { typedef llvm::SmallVector arglist_type; typedef arglist_type::iterator iterator; typedef arglist_type::const_iterator const_iterator; + typedef arglist_type::reverse_iterator reverse_iterator; + typedef arglist_type::const_reverse_iterator const_reverse_iterator; private: /// List of argument strings used by the contained Args. @@ -64,9 +66,15 @@ namespace driver { iterator begin() { return Args.begin(); } iterator end() { return Args.end(); } + reverse_iterator rbegin() { return Args.rbegin(); } + reverse_iterator rend() { return Args.rend(); } + const_iterator begin() const { return Args.begin(); } const_iterator end() const { return Args.end(); } + const_reverse_iterator rbegin() const { return Args.rbegin(); } + const_reverse_iterator rend() const { return Args.rend(); } + /// append - Append \arg A to the arg list, taking ownership. void append(Arg *A); diff --git a/lib/Driver/ArgList.cpp b/lib/Driver/ArgList.cpp index 7653daf7ee..d74e3bd59d 100644 --- a/lib/Driver/ArgList.cpp +++ b/lib/Driver/ArgList.cpp @@ -34,9 +34,7 @@ void ArgList::append(Arg *A) { Arg *ArgList::getLastArg(options::ID Id, bool Claim) const { // FIXME: Make search efficient? - - // FIXME: This needs to not require loading of the option. - for (const_iterator it = begin(), ie = end(); it != ie; ++it) { + for (const_reverse_iterator it = rbegin(), ie = rend(); it != ie; ++it) { if ((*it)->getOption().matches(Id)) { if (Claim) (*it)->claim(); return *it; diff --git a/test/Driver/clang-translation.c b/test/Driver/clang-translation.c index e81dcb97ad..eac05943eb 100644 --- a/test/Driver/clang-translation.c +++ b/test/Driver/clang-translation.c @@ -1,4 +1,4 @@ -// RUN: clang -ccc-host-triple i386-unknown-unknown -### -S -Os %s -o %t.s 2> %t.log +// RUN: clang -ccc-host-triple i386-unknown-unknown -### -S -O0 -Os %s -o %t.s 2> %t.log // RUN: grep '"-S"' %t.log && // RUN: grep '"-disable-free"' %t.log && // RUN: grep '"--relocation-model" "static"' %t.log && -- 2.40.0