X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=lib%2FOption%2FOption.cpp;h=221414d79e77925650ca8c891058f3b3cc27624c;hb=c46ea19bd32e04dbf3cd2fd5db1c60a7d3ec6814;hp=10662a33c270f69acb220a39d96ef6a87ac6f8f4;hpb=0b6cb7104b15504cd41f48cc2babcbcee70775f3;p=oota-llvm.git diff --git a/lib/Option/Option.cpp b/lib/Option/Option.cpp index 10662a33c27..221414d79e7 100644 --- a/lib/Option/Option.cpp +++ b/lib/Option/Option.cpp @@ -35,9 +35,6 @@ Option::Option(const OptTable::Info *info, const OptTable *owner) } } -Option::~Option() { -} - void Option::dump() const { llvm::errs() << "<"; switch (getKind()) { @@ -128,6 +125,11 @@ Arg *Option::accept(const ArgList &Args, Val += strlen(Val) + 1; } } + + if (UnaliasedOption.getKind() == JoinedClass && !getAliasArgs()) + // A Flag alias for a Joined option must provide an argument. + A->getValues().push_back(""); + return A; } case JoinedClass: { @@ -169,7 +171,8 @@ Arg *Option::accept(const ArgList &Args, return nullptr; Index += 2; - if (Index > Args.getNumInputArgStrings()) + if (Index > Args.getNumInputArgStrings() || + Args.getArgString(Index - 1) == nullptr) return nullptr; return new Arg(UnaliasedOption, Spelling, @@ -200,7 +203,8 @@ Arg *Option::accept(const ArgList &Args, // Otherwise it must be separate. Index += 2; - if (Index > Args.getNumInputArgStrings()) + if (Index > Args.getNumInputArgStrings() || + Args.getArgString(Index - 1) == nullptr) return nullptr; return new Arg(UnaliasedOption, Spelling, @@ -209,7 +213,8 @@ Arg *Option::accept(const ArgList &Args, case JoinedAndSeparateClass: // Always matches. Index += 2; - if (Index > Args.getNumInputArgStrings()) + if (Index > Args.getNumInputArgStrings() || + Args.getArgString(Index - 1) == nullptr) return nullptr; return new Arg(UnaliasedOption, Spelling, Index - 2, @@ -221,7 +226,8 @@ Arg *Option::accept(const ArgList &Args, if (ArgSize != strlen(Args.getArgString(Index))) return nullptr; Arg *A = new Arg(UnaliasedOption, Spelling, Index++); - while (Index < Args.getNumInputArgStrings()) + while (Index < Args.getNumInputArgStrings() && + Args.getArgString(Index) != nullptr) A->getValues().push_back(Args.getArgString(Index++)); return A; }