196a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer//===--- Option.cpp - Abstract Driver Options -----------------------------===// 296a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer// 396a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer// The LLVM Compiler Infrastructure 496a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer// 596a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer// This file is distributed under the University of Illinois Open Source 696a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer// License. See LICENSE.TXT for details. 796a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer// 896a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer//===----------------------------------------------------------------------===// 996a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 1096a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer#include "llvm/Option/Option.h" 1196a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer#include "llvm/ADT/Twine.h" 1296a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer#include "llvm/Option/Arg.h" 1396a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer#include "llvm/Option/ArgList.h" 1496a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer#include "llvm/Support/ErrorHandling.h" 1558a2cbef4aac9ee7d530dfb690c78d6fc11a2371Chandler Carruth#include "llvm/Support/raw_ostream.h" 1696a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer#include <algorithm> 1796a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer#include <cassert> 1896a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 1996a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencerusing namespace llvm; 2096a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencerusing namespace llvm::opt; 2196a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 2296a564f2beec8c1930f0640844eec433e03bbce8Michael J. SpencerOption::Option(const OptTable::Info *info, const OptTable *owner) 2396a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer : Info(info), Owner(owner) { 2496a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 256c7e78746e059916892f1df279b681d962a70954Hans Wennborg // Multi-level aliases are not supported. This just simplifies option 266c7e78746e059916892f1df279b681d962a70954Hans Wennborg // tracking, it is not an inherent limitation. 273f60fb86103f08b1d1da5f98d735fedb41f93f34Richard Trieu assert((!Info || !getAlias().isValid() || !getAlias().getAlias().isValid()) && 286c7e78746e059916892f1df279b681d962a70954Hans Wennborg "Multi-level aliases are not supported."); 299dd8c0cffe7de82900823c05159bba765120f1e3Hans Wennborg 309dd8c0cffe7de82900823c05159bba765120f1e3Hans Wennborg if (Info && getAliasArgs()) { 319dd8c0cffe7de82900823c05159bba765120f1e3Hans Wennborg assert(getAlias().isValid() && "Only alias options can have alias args."); 329dd8c0cffe7de82900823c05159bba765120f1e3Hans Wennborg assert(getKind() == FlagClass && "Only Flag aliases can have alias args."); 339dd8c0cffe7de82900823c05159bba765120f1e3Hans Wennborg assert(getAlias().getKind() != FlagClass && 349dd8c0cffe7de82900823c05159bba765120f1e3Hans Wennborg "Cannot provide alias args to a flag option."); 359dd8c0cffe7de82900823c05159bba765120f1e3Hans Wennborg } 3696a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer} 3796a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 3896a564f2beec8c1930f0640844eec433e03bbce8Michael J. SpencerOption::~Option() { 3996a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer} 4096a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 4196a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencervoid Option::dump() const { 4296a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer llvm::errs() << "<"; 4396a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer switch (getKind()) { 4496a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer#define P(N) case N: llvm::errs() << #N; break 4596a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer P(GroupClass); 4696a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer P(InputClass); 4796a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer P(UnknownClass); 4896a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer P(FlagClass); 4996a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer P(JoinedClass); 5096a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer P(SeparateClass); 5196a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer P(CommaJoinedClass); 5296a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer P(MultiArgClass); 5396a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer P(JoinedOrSeparateClass); 5496a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer P(JoinedAndSeparateClass); 55af9e3557552c341615052a05d4eeb36d7fd5c33fHans Wennborg P(RemainingArgsClass); 5696a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer#undef P 5796a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer } 5896a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 59b0a9ffaeb0cb3802da3611b95d3ea7f49f03f787Reid Kleckner if (Info->Prefixes) { 60b0a9ffaeb0cb3802da3611b95d3ea7f49f03f787Reid Kleckner llvm::errs() << " Prefixes:["; 61dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines for (const char * const *Pre = Info->Prefixes; *Pre != nullptr; ++Pre) { 62dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines llvm::errs() << '"' << *Pre << (*(Pre + 1) == nullptr ? "\"" : "\", "); 63b0a9ffaeb0cb3802da3611b95d3ea7f49f03f787Reid Kleckner } 64b0a9ffaeb0cb3802da3611b95d3ea7f49f03f787Reid Kleckner llvm::errs() << ']'; 6596a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer } 6696a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 6796a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer llvm::errs() << " Name:\"" << getName() << '"'; 6896a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 6996a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer const Option Group = getGroup(); 7096a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer if (Group.isValid()) { 7196a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer llvm::errs() << " Group:"; 7296a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer Group.dump(); 7396a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer } 7496a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 7596a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer const Option Alias = getAlias(); 7696a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer if (Alias.isValid()) { 7796a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer llvm::errs() << " Alias:"; 7896a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer Alias.dump(); 7996a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer } 8096a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 8196a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer if (getKind() == MultiArgClass) 8296a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer llvm::errs() << " NumArgs:" << getNumArgs(); 8396a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 8496a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer llvm::errs() << ">\n"; 8596a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer} 8696a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 8796a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencerbool Option::matches(OptSpecifier Opt) const { 8896a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer // Aliases are never considered in matching, look through them. 8996a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer const Option Alias = getAlias(); 9096a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer if (Alias.isValid()) 9196a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer return Alias.matches(Opt); 9296a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 9396a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer // Check exact match. 9496a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer if (getID() == Opt.getID()) 9596a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer return true; 9696a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 9796a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer const Option Group = getGroup(); 9896a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer if (Group.isValid()) 9996a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer return Group.matches(Opt); 10096a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer return false; 10196a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer} 10296a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 10396a564f2beec8c1930f0640844eec433e03bbce8Michael J. SpencerArg *Option::accept(const ArgList &Args, 10496a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer unsigned &Index, 10596a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer unsigned ArgSize) const { 10696a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer const Option &UnaliasedOption = getUnaliasedOption(); 10796a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer StringRef Spelling; 10896a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer // If the option was an alias, get the spelling from the unaliased one. 10996a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer if (getID() == UnaliasedOption.getID()) { 11096a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer Spelling = StringRef(Args.getArgString(Index), ArgSize); 11196a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer } else { 11296a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer Spelling = Args.MakeArgString(Twine(UnaliasedOption.getPrefix()) + 11396a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer Twine(UnaliasedOption.getName())); 11496a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer } 11596a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 11696a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer switch (getKind()) { 1179dd8c0cffe7de82900823c05159bba765120f1e3Hans Wennborg case FlagClass: { 11896a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer if (ArgSize != strlen(Args.getArgString(Index))) 119dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines return nullptr; 12096a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 1219dd8c0cffe7de82900823c05159bba765120f1e3Hans Wennborg Arg *A = new Arg(UnaliasedOption, Spelling, Index++); 1229dd8c0cffe7de82900823c05159bba765120f1e3Hans Wennborg if (getAliasArgs()) { 1239dd8c0cffe7de82900823c05159bba765120f1e3Hans Wennborg const char *Val = getAliasArgs(); 1249dd8c0cffe7de82900823c05159bba765120f1e3Hans Wennborg while (*Val != '\0') { 1259dd8c0cffe7de82900823c05159bba765120f1e3Hans Wennborg A->getValues().push_back(Val); 1269dd8c0cffe7de82900823c05159bba765120f1e3Hans Wennborg 1279dd8c0cffe7de82900823c05159bba765120f1e3Hans Wennborg // Move past the '\0' to the next argument. 1289dd8c0cffe7de82900823c05159bba765120f1e3Hans Wennborg Val += strlen(Val) + 1; 1299dd8c0cffe7de82900823c05159bba765120f1e3Hans Wennborg } 1309dd8c0cffe7de82900823c05159bba765120f1e3Hans Wennborg } 1319dd8c0cffe7de82900823c05159bba765120f1e3Hans Wennborg return A; 1329dd8c0cffe7de82900823c05159bba765120f1e3Hans Wennborg } 13396a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer case JoinedClass: { 13496a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer const char *Value = Args.getArgString(Index) + ArgSize; 13596a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer return new Arg(UnaliasedOption, Spelling, Index++, Value); 13696a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer } 13796a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer case CommaJoinedClass: { 13896a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer // Always matches. 13996a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer const char *Str = Args.getArgString(Index) + ArgSize; 14096a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer Arg *A = new Arg(UnaliasedOption, Spelling, Index++); 14196a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 14296a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer // Parse out the comma separated values. 14396a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer const char *Prev = Str; 14496a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer for (;; ++Str) { 14596a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer char c = *Str; 14696a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 14796a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer if (!c || c == ',') { 14896a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer if (Prev != Str) { 14996a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer char *Value = new char[Str - Prev + 1]; 15096a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer memcpy(Value, Prev, Str - Prev); 15196a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer Value[Str - Prev] = '\0'; 15296a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer A->getValues().push_back(Value); 15396a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer } 15496a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 15596a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer if (!c) 15696a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer break; 15796a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 15896a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer Prev = Str + 1; 15996a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer } 16096a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer } 16196a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer A->setOwnsValues(true); 16296a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 16396a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer return A; 16496a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer } 16596a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer case SeparateClass: 16696a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer // Matches iff this is an exact match. 16796a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer // FIXME: Avoid strlen. 16896a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer if (ArgSize != strlen(Args.getArgString(Index))) 169dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines return nullptr; 17096a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 17196a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer Index += 2; 17296a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer if (Index > Args.getNumInputArgStrings()) 173dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines return nullptr; 17496a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 17596a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer return new Arg(UnaliasedOption, Spelling, 17696a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer Index - 2, Args.getArgString(Index - 1)); 17796a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer case MultiArgClass: { 17896a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer // Matches iff this is an exact match. 17996a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer // FIXME: Avoid strlen. 18096a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer if (ArgSize != strlen(Args.getArgString(Index))) 181dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines return nullptr; 18296a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 18396a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer Index += 1 + getNumArgs(); 18496a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer if (Index > Args.getNumInputArgStrings()) 185dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines return nullptr; 18696a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 18796a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer Arg *A = new Arg(UnaliasedOption, Spelling, Index - 1 - getNumArgs(), 18896a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer Args.getArgString(Index - getNumArgs())); 18996a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer for (unsigned i = 1; i != getNumArgs(); ++i) 19096a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer A->getValues().push_back(Args.getArgString(Index - getNumArgs() + i)); 19196a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer return A; 19296a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer } 19396a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer case JoinedOrSeparateClass: { 19496a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer // If this is not an exact match, it is a joined arg. 19596a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer // FIXME: Avoid strlen. 19696a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer if (ArgSize != strlen(Args.getArgString(Index))) { 19796a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer const char *Value = Args.getArgString(Index) + ArgSize; 19896a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer return new Arg(*this, Spelling, Index++, Value); 19996a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer } 20096a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 20196a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer // Otherwise it must be separate. 20296a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer Index += 2; 20396a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer if (Index > Args.getNumInputArgStrings()) 204dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines return nullptr; 20596a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 20696a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer return new Arg(UnaliasedOption, Spelling, 20796a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer Index - 2, Args.getArgString(Index - 1)); 20896a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer } 20996a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer case JoinedAndSeparateClass: 21096a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer // Always matches. 21196a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer Index += 2; 21296a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer if (Index > Args.getNumInputArgStrings()) 213dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines return nullptr; 21496a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 21596a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer return new Arg(UnaliasedOption, Spelling, Index - 2, 21696a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer Args.getArgString(Index - 2) + ArgSize, 21796a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer Args.getArgString(Index - 1)); 218af9e3557552c341615052a05d4eeb36d7fd5c33fHans Wennborg case RemainingArgsClass: { 219af9e3557552c341615052a05d4eeb36d7fd5c33fHans Wennborg // Matches iff this is an exact match. 220af9e3557552c341615052a05d4eeb36d7fd5c33fHans Wennborg // FIXME: Avoid strlen. 221af9e3557552c341615052a05d4eeb36d7fd5c33fHans Wennborg if (ArgSize != strlen(Args.getArgString(Index))) 222dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines return nullptr; 223af9e3557552c341615052a05d4eeb36d7fd5c33fHans Wennborg Arg *A = new Arg(UnaliasedOption, Spelling, Index++); 224af9e3557552c341615052a05d4eeb36d7fd5c33fHans Wennborg while (Index < Args.getNumInputArgStrings()) 225af9e3557552c341615052a05d4eeb36d7fd5c33fHans Wennborg A->getValues().push_back(Args.getArgString(Index++)); 226af9e3557552c341615052a05d4eeb36d7fd5c33fHans Wennborg return A; 227af9e3557552c341615052a05d4eeb36d7fd5c33fHans Wennborg } 22896a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer default: 22996a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer llvm_unreachable("Invalid option kind!"); 23096a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer } 23196a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer} 232