diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index 2000d403abdb..d15be8ad4a5c 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -713,4 +713,4 @@ def _warn__EQ : Joined<"--warn-=">, Alias, Flags<[Unsupported]>; def _warn_ : Joined<"--warn-">, Alias, Flags<[Unsupported]>; def _write_dependencies : Flag<"--write-dependencies">, Alias; def _write_user_dependencies : Flag<"--write-user-dependencies">, Alias; -def _ : Joined<"--">, Alias, Flags<[Unsupported]>; +def _ : Joined<"--">, Flags<[Unsupported]>; diff --git a/clang/lib/Driver/Option.cpp b/clang/lib/Driver/Option.cpp index 6f3c24fff331..26b30de17d98 100644 --- a/clang/lib/Driver/Option.cpp +++ b/clang/lib/Driver/Option.cpp @@ -147,7 +147,7 @@ Arg *FlagOption::accept(const InputArgList &Args, unsigned &Index) const { if (strlen(getName()) != strlen(Args.getArgString(Index))) return 0; - return new Arg(this, Index++); + return new Arg(getUnaliasedOption(), Index++); } 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 { // Always matches. 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, @@ -171,7 +171,7 @@ Arg *CommaJoinedOption::accept(const InputArgList &Args, unsigned &Index) const { // Always matches. 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. const char *Prev = Str; @@ -212,7 +212,7 @@ Arg *SeparateOption::accept(const InputArgList &Args, unsigned &Index) const { if (Index > Args.getNumInputArgStrings()) 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, @@ -232,8 +232,8 @@ Arg *MultiArgOption::accept(const InputArgList &Args, unsigned &Index) const { if (Index > Args.getNumInputArgStrings()) return 0; - Arg *A = new Arg(this, Index - 1 - NumArgs, - Args.getArgString(Index - NumArgs)); + Arg *A = new Arg(getUnaliasedOption(), Index - 1 - NumArgs, + Args.getArgString(Index - NumArgs)); for (unsigned i = 1; i != NumArgs; ++i) A->getValues().push_back(Args.getArgString(Index - NumArgs + i)); return A; @@ -260,7 +260,7 @@ Arg *JoinedOrSeparateOption::accept(const InputArgList &Args, if (Index > Args.getNumInputArgStrings()) 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, @@ -278,6 +278,7 @@ Arg *JoinedAndSeparateOption::accept(const InputArgList &Args, if (Index > Args.getNumInputArgStrings()) return 0; - return new Arg(this, Index - 2, Args.getArgString(Index-2)+strlen(getName()) - , Args.getArgString(Index-1)); + return new Arg(getUnaliasedOption(), Index - 2, + Args.getArgString(Index-2)+strlen(getName()), + Args.getArgString(Index-1)); } diff --git a/clang/test/Driver/option-aliases.c b/clang/test/Driver/option-aliases.c new file mode 100644 index 000000000000..38bf4b1a5777 --- /dev/null +++ b/clang/test/Driver/option-aliases.c @@ -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"}