diff options
author | Chris Lattner <sabre@nondot.org> | 2007-04-07 05:38:53 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2007-04-07 05:38:53 +0000 |
commit | ee2b32082eff7366621ed2ab119deb96b7c26cec (patch) | |
tree | 37f09168fcab5944910aaa59cd26ad512b690c7c /lib/Support | |
parent | c6fcf29e81f54b68146fb8d375c347d2c689566d (diff) | |
download | llvm-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.cpp | 12 |
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()); } |