summaryrefslogtreecommitdiff
path: root/lib/Support
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2007-04-07 05:38:53 +0000
committerChris Lattner <sabre@nondot.org>2007-04-07 05:38:53 +0000
commitee2b32082eff7366621ed2ab119deb96b7c26cec (patch)
tree37f09168fcab5944910aaa59cd26ad512b690c7c /lib/Support
parentc6fcf29e81f54b68146fb8d375c347d2c689566d (diff)
downloadllvm-ee2b32082eff7366621ed2ab119deb96b7c26cec.tar.gz
llvm-ee2b32082eff7366621ed2ab119deb96b7c26cec.tar.bz2
llvm-ee2b32082eff7366621ed2ab119deb96b7c26cec.tar.xz
Fix a bug in my earlier commit which exposed positional options backwards.
This fixes llvm-ar. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@35727 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Support')
-rw-r--r--lib/Support/CommandLine.cpp12
1 files changed, 9 insertions, 3 deletions
diff --git a/lib/Support/CommandLine.cpp b/lib/Support/CommandLine.cpp
index e349eaa514..768bd6c05b 100644
--- a/lib/Support/CommandLine.cpp
+++ b/lib/Support/CommandLine.cpp
@@ -91,6 +91,7 @@ void Option::addArgument() {
static void GetOptionInfo(std::vector<Option*> &PositionalOpts,
std::map<std::string, Option*> &OptionsMap) {
std::vector<const char*> OptionNames;
+ Option *CAOpt = 0; // The ConsumeAfter option if it exists.
for (Option *O = RegisteredOptionList; O; O = O->getNextRegisteredOption()) {
// If this option wants to handle multiple option names, get the full set.
// This handles enum options like "-O1 -O2" etc.
@@ -114,12 +115,17 @@ static void GetOptionInfo(std::vector<Option*> &PositionalOpts,
if (O->getFormattingFlag() == cl::Positional)
PositionalOpts.push_back(O);
else if (O->getNumOccurrencesFlag() == cl::ConsumeAfter) {
- if (!PositionalOpts.empty() &&
- PositionalOpts.front()->getNumOccurrencesFlag() == cl::ConsumeAfter)
+ if (CAOpt)
O->error("Cannot specify more than one option with cl::ConsumeAfter!");
- PositionalOpts.insert(PositionalOpts.begin(), O);
+ CAOpt = O;
}
}
+
+ if (CAOpt)
+ PositionalOpts.push_back(CAOpt);
+
+ // Make sure that they are in order of registration not backwards.
+ std::reverse(PositionalOpts.begin(), PositionalOpts.end());
}