forked from OSchip/llvm-project
Driver: Change Option parsing to always create arguments referring to unaliased
options. - This matches the intent of the .td files, and will simplify alias handling. - PR7321. llvm-svn: 105763
This commit is contained in:
parent
35cbfeba8f
commit
bfe71f2416
|
@ -713,4 +713,4 @@ def _warn__EQ : Joined<"--warn-=">, Alias<W_Joined>, Flags<[Unsupported]>;
|
||||||
def _warn_ : Joined<"--warn-">, Alias<W_Joined>, Flags<[Unsupported]>;
|
def _warn_ : Joined<"--warn-">, Alias<W_Joined>, Flags<[Unsupported]>;
|
||||||
def _write_dependencies : Flag<"--write-dependencies">, Alias<MD>;
|
def _write_dependencies : Flag<"--write-dependencies">, Alias<MD>;
|
||||||
def _write_user_dependencies : Flag<"--write-user-dependencies">, Alias<MMD>;
|
def _write_user_dependencies : Flag<"--write-user-dependencies">, Alias<MMD>;
|
||||||
def _ : Joined<"--">, Alias<f>, Flags<[Unsupported]>;
|
def _ : Joined<"--">, Flags<[Unsupported]>;
|
||||||
|
|
|
@ -147,7 +147,7 @@ Arg *FlagOption::accept(const InputArgList &Args, unsigned &Index) const {
|
||||||
if (strlen(getName()) != strlen(Args.getArgString(Index)))
|
if (strlen(getName()) != strlen(Args.getArgString(Index)))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
return new Arg(this, Index++);
|
return new Arg(getUnaliasedOption(), Index++);
|
||||||
}
|
}
|
||||||
|
|
||||||
JoinedOption::JoinedOption(OptSpecifier ID, const char *Name,
|
JoinedOption::JoinedOption(OptSpecifier ID, const char *Name,
|
||||||
|
@ -158,7 +158,7 @@ JoinedOption::JoinedOption(OptSpecifier ID, const char *Name,
|
||||||
Arg *JoinedOption::accept(const InputArgList &Args, unsigned &Index) const {
|
Arg *JoinedOption::accept(const InputArgList &Args, unsigned &Index) const {
|
||||||
// Always matches.
|
// Always matches.
|
||||||
const char *Value = Args.getArgString(Index) + strlen(getName());
|
const char *Value = Args.getArgString(Index) + strlen(getName());
|
||||||
return new Arg(this, Index++, Value);
|
return new Arg(getUnaliasedOption(), Index++, Value);
|
||||||
}
|
}
|
||||||
|
|
||||||
CommaJoinedOption::CommaJoinedOption(OptSpecifier ID, const char *Name,
|
CommaJoinedOption::CommaJoinedOption(OptSpecifier ID, const char *Name,
|
||||||
|
@ -171,7 +171,7 @@ Arg *CommaJoinedOption::accept(const InputArgList &Args,
|
||||||
unsigned &Index) const {
|
unsigned &Index) const {
|
||||||
// Always matches.
|
// Always matches.
|
||||||
const char *Str = Args.getArgString(Index) + strlen(getName());
|
const char *Str = Args.getArgString(Index) + strlen(getName());
|
||||||
Arg *A = new Arg(this, Index++);
|
Arg *A = new Arg(getUnaliasedOption(), Index++);
|
||||||
|
|
||||||
// Parse out the comma separated values.
|
// Parse out the comma separated values.
|
||||||
const char *Prev = Str;
|
const char *Prev = Str;
|
||||||
|
@ -212,7 +212,7 @@ Arg *SeparateOption::accept(const InputArgList &Args, unsigned &Index) const {
|
||||||
if (Index > Args.getNumInputArgStrings())
|
if (Index > Args.getNumInputArgStrings())
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
return new Arg(this, Index - 2, Args.getArgString(Index - 1));
|
return new Arg(getUnaliasedOption(), Index - 2, Args.getArgString(Index - 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
MultiArgOption::MultiArgOption(OptSpecifier ID, const char *Name,
|
MultiArgOption::MultiArgOption(OptSpecifier ID, const char *Name,
|
||||||
|
@ -232,8 +232,8 @@ Arg *MultiArgOption::accept(const InputArgList &Args, unsigned &Index) const {
|
||||||
if (Index > Args.getNumInputArgStrings())
|
if (Index > Args.getNumInputArgStrings())
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
Arg *A = new Arg(this, Index - 1 - NumArgs,
|
Arg *A = new Arg(getUnaliasedOption(), Index - 1 - NumArgs,
|
||||||
Args.getArgString(Index - NumArgs));
|
Args.getArgString(Index - NumArgs));
|
||||||
for (unsigned i = 1; i != NumArgs; ++i)
|
for (unsigned i = 1; i != NumArgs; ++i)
|
||||||
A->getValues().push_back(Args.getArgString(Index - NumArgs + i));
|
A->getValues().push_back(Args.getArgString(Index - NumArgs + i));
|
||||||
return A;
|
return A;
|
||||||
|
@ -260,7 +260,7 @@ Arg *JoinedOrSeparateOption::accept(const InputArgList &Args,
|
||||||
if (Index > Args.getNumInputArgStrings())
|
if (Index > Args.getNumInputArgStrings())
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
return new Arg(this, Index - 2, Args.getArgString(Index - 1));
|
return new Arg(getUnaliasedOption(), Index - 2, Args.getArgString(Index - 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
JoinedAndSeparateOption::JoinedAndSeparateOption(OptSpecifier ID,
|
JoinedAndSeparateOption::JoinedAndSeparateOption(OptSpecifier ID,
|
||||||
|
@ -278,6 +278,7 @@ Arg *JoinedAndSeparateOption::accept(const InputArgList &Args,
|
||||||
if (Index > Args.getNumInputArgStrings())
|
if (Index > Args.getNumInputArgStrings())
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
return new Arg(this, Index - 2, Args.getArgString(Index-2)+strlen(getName())
|
return new Arg(getUnaliasedOption(), Index - 2,
|
||||||
, Args.getArgString(Index-1));
|
Args.getArgString(Index-2)+strlen(getName()),
|
||||||
|
Args.getArgString(Index-1));
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
// RUN: %clang -ccc-print-options \
|
||||||
|
// RUN: --save-temps --undefine-macro=FOO --undefine-macro FOO \
|
||||||
|
// RUN: --param=FOO --output=FOO 2> %t
|
||||||
|
// RUN: FileCheck --check-prefix=CHECK-OPTIONS < %t %s
|
||||||
|
|
||||||
|
// CHECK-OPTIONS: Option 0 - Name: "-ccc-print-options", Values: {}
|
||||||
|
// CHECK-OPTIONS: Option 1 - Name: "-save-temps", Values: {}
|
||||||
|
// CHECK-OPTIONS: Option 2 - Name: "-U", Values: {"FOO"}
|
||||||
|
// CHECK-OPTIONS: Option 3 - Name: "-U", Values: {"FOO"}
|
||||||
|
// CHECK-OPTIONS: Option 4 - Name: "--param", Values: {"FOO"}
|
||||||
|
// CHECK-OPTIONS: Option 5 - Name: "-o", Values: {"FOO"}
|
Loading…
Reference in New Issue