]> granicus.if.org Git - clang/commitdiff
Driver: Change Option parsing to always create arguments referring to unaliased
authorDaniel Dunbar <daniel@zuster.org>
Wed, 9 Jun 2010 22:44:34 +0000 (22:44 +0000)
committerDaniel Dunbar <daniel@zuster.org>
Wed, 9 Jun 2010 22:44:34 +0000 (22:44 +0000)
options.
 - This matches the intent of the .td files, and will simplify alias handling.
 - PR7321.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@105763 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Driver/Options.td
lib/Driver/Option.cpp
test/Driver/option-aliases.c [new file with mode: 0644]

index 2000d403abdbebcacf850be41c28954d3e5212b9..d15be8ad4a5cd931d4a2420d0ab80bef45115d04 100644 (file)
@@ -713,4 +713,4 @@ def _warn__EQ : 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_user_dependencies : Flag<"--write-user-dependencies">, Alias<MMD>;
-def _ : Joined<"--">, Alias<f>, Flags<[Unsupported]>;
+def _ : Joined<"--">, Flags<[Unsupported]>;
index 6f3c24fff3314683e06fe512b0e9afc07645b190..26b30de17d98becb8b0c04d7307bec66e0bd55fc 100644 (file)
@@ -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/test/Driver/option-aliases.c b/test/Driver/option-aliases.c
new file mode 100644 (file)
index 0000000..38bf4b1
--- /dev/null
@@ -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"}