[cfe-commits] r166348 - in /cfe/trunk: include/clang/Driver/Option.h lib/Driver/Driver.cpp lib/Driver/ToolChains.cpp lib/Driver/Tools.cpp lib/Frontend/CompilerInvocation.cpp

Michael J. Spencer bigcheesegs at gmail.com
Fri Oct 19 15:37:06 PDT 2012


Author: mspencer
Date: Fri Oct 19 17:37:06 2012
New Revision: 166348

URL: http://llvm.org/viewvc/llvm-project?rev=166348&view=rev
Log:
[Options] Make Option non clang specific.

Modified:
    cfe/trunk/include/clang/Driver/Option.h
    cfe/trunk/lib/Driver/Driver.cpp
    cfe/trunk/lib/Driver/ToolChains.cpp
    cfe/trunk/lib/Driver/Tools.cpp
    cfe/trunk/lib/Frontend/CompilerInvocation.cpp

Modified: cfe/trunk/include/clang/Driver/Option.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/Option.h?rev=166348&r1=166347&r2=166348&view=diff
==============================================================================
--- cfe/trunk/include/clang/Driver/Option.h (original)
+++ cfe/trunk/include/clang/Driver/Option.h Fri Oct 19 17:37:06 2012
@@ -21,15 +21,20 @@
   class ArgList;
 
 namespace options {
+  /// Base flags for all options. Custom flags may be added after.
   enum DriverFlag {
-    DriverOption     = (1 << 0),
-    HelpHidden       = (1 << 1),
-    LinkerInput      = (1 << 2),
-    NoArgumentUnused = (1 << 3),
-    NoForward        = (1 << 4),
-    RenderAsInput    = (1 << 5),
-    RenderJoined     = (1 << 6),
-    RenderSeparate   = (1 << 7),
+    HelpHidden       = (1 << 0),
+    RenderAsInput    = (1 << 1),
+    RenderJoined     = (1 << 2),
+    RenderSeparate   = (1 << 3)
+  };
+
+  /// Flags specifically for clang options.
+  enum ClangFlags {
+    DriverOption     = (1 << 4),
+    LinkerInput      = (1 << 5),
+    NoArgumentUnused = (1 << 6),
+    NoForward        = (1 << 7),
     Unsupported      = (1 << 8),
     CC1Option        = (1 << 9)
   };
@@ -68,7 +73,7 @@
       RenderValuesStyle
     };
 
-  private:
+  protected:
     const OptTable::Info *Info;
     const OptTable *Owner;
 
@@ -84,23 +89,23 @@
       assert(Info && "Must have a valid info!");
       return Info->ID;
     }
-    
+
     OptionClass getKind() const {
       assert(Info && "Must have a valid info!");
       return OptionClass(Info->Kind);
     }
-    
+
     StringRef getName() const {
       assert(Info && "Must have a valid info!");
       return Info->Name;
     }
-    
+
     const Option getGroup() const {
       assert(Info && "Must have a valid info!");
       assert(Owner && "Must have a valid owner!");
       return Owner->getOption(Info->GroupID);
     }
-    
+
     const Option getAlias() const {
       assert(Info && "Must have a valid info!");
       assert(Owner && "Must have a valid owner!");
@@ -109,10 +114,6 @@
 
     unsigned getNumArgs() const { return Info->Param; }
 
-    bool isUnsupported() const { return Info->Flags & options::Unsupported; }
-
-    bool isLinkerInput() const { return Info->Flags & options::LinkerInput; }
-
     bool hasNoOptAsInput() const { return Info->Flags & options::RenderAsInput;}
 
     RenderStyleKind getRenderStyle() const {
@@ -139,18 +140,9 @@
       llvm_unreachable("Unexpected kind!");
     }
 
-    bool isDriverOption() const { return Info->Flags & options::DriverOption; }
-
-    bool hasNoArgumentUnused() const {
-      return Info->Flags & options::NoArgumentUnused;
-    }
-
-    bool hasNoForward() const { return Info->Flags & options::NoForward; }
-
-    bool isCC1Option() const { return Info->Flags & options::CC1Option; }
-
-    bool hasForwardToGCC() const {
-      return !hasNoForward() && !isDriverOption() && !isLinkerInput();
+    /// Test if this option has the flag \a Val.
+    bool hasFlag(unsigned Val) const {
+      return Info->Flags & Val;
     }
 
     /// getUnaliasedOption - Return the final option this option

Modified: cfe/trunk/lib/Driver/Driver.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Driver.cpp?rev=166348&r1=166347&r2=166348&view=diff
==============================================================================
--- cfe/trunk/lib/Driver/Driver.cpp (original)
+++ cfe/trunk/lib/Driver/Driver.cpp Fri Oct 19 17:37:06 2012
@@ -98,7 +98,7 @@
   for (ArgList::const_iterator it = Args->begin(), ie = Args->end();
        it != ie; ++it) {
     Arg *A = *it;
-    if (A->getOption().isUnsupported()) {
+    if (A->getOption().hasFlag(options::Unsupported)) {
       Diag(clang::diag::err_drv_unsupported_opt) << A->getAsString(*Args);
       continue;
     }
@@ -1033,7 +1033,7 @@
       } else
         Inputs.push_back(std::make_pair(Ty, A));
 
-    } else if (A->getOption().isLinkerInput()) {
+    } else if (A->getOption().hasFlag(options::LinkerInput)) {
       // Just treat as object type, we could make a special type for this if
       // necessary.
       Inputs.push_back(std::make_pair(types::TY_Object, A));
@@ -1300,7 +1300,7 @@
     // DiagnosticsEngine, so that extra values, position, and so on could be
     // printed.
     if (!A->isClaimed()) {
-      if (A->getOption().hasNoArgumentUnused())
+      if (A->getOption().hasFlag(options::NoArgumentUnused))
         continue;
 
       // Suppress the warning automatically if this is just a flag, and it is an

Modified: cfe/trunk/lib/Driver/ToolChains.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains.cpp?rev=166348&r1=166347&r2=166348&view=diff
==============================================================================
--- cfe/trunk/lib/Driver/ToolChains.cpp (original)
+++ cfe/trunk/lib/Driver/ToolChains.cpp Fri Oct 19 17:37:06 2012
@@ -737,7 +737,7 @@
         getDriver().Diag(diag::err_drv_invalid_Xarch_argument_with_args)
           << A->getAsString(Args);
         continue;
-      } else if (XarchArg->getOption().isDriverOption()) {
+      } else if (XarchArg->getOption().hasFlag(options::DriverOption)) {
         getDriver().Diag(diag::err_drv_invalid_Xarch_argument_isdriver)
           << A->getAsString(Args);
         continue;
@@ -751,7 +751,7 @@
       // Linker input arguments require custom handling. The problem is that we
       // have already constructed the phase actions, so we can not treat them as
       // "input arguments".
-      if (A->getOption().isLinkerInput()) {
+      if (A->getOption().hasFlag(options::LinkerInput)) {
         // Convert the argument into individual Zlinker_input_args.
         for (unsigned i = 0, e = A->getNumValues(); i != e; ++i) {
           DAL->AddSeparateArg(OriginalArg,

Modified: cfe/trunk/lib/Driver/Tools.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=166348&r1=166347&r2=166348&view=diff
==============================================================================
--- cfe/trunk/lib/Driver/Tools.cpp (original)
+++ cfe/trunk/lib/Driver/Tools.cpp Fri Oct 19 17:37:06 2012
@@ -200,6 +200,12 @@
   CmdArgs.push_back(Args.MakeArgString(ProfileRT));
 }
 
+static bool forwardToGCC(const Option &O) {
+  return !O.hasFlag(options::NoForward) &&
+         !O.hasFlag(options::DriverOption) &&
+         !O.hasFlag(options::LinkerInput);
+}
+
 void Clang::AddPreprocessingOptions(Compilation &C,
                                     const Driver &D,
                                     const ArgList &Args,
@@ -3195,7 +3201,7 @@
   for (ArgList::const_iterator
          it = Args.begin(), ie = Args.end(); it != ie; ++it) {
     Arg *A = *it;
-    if (A->getOption().hasForwardToGCC()) {
+    if (forwardToGCC(A->getOption())) {
       // Don't forward any -g arguments to assembly steps.
       if (isa<AssembleJobAction>(JA) &&
           A->getOption().matches(options::OPT_g_Group))
@@ -3420,7 +3426,7 @@
   for (ArgList::const_iterator
          it = Args.begin(), ie = Args.end(); it != ie; ++it) {
     Arg *A = *it;
-    if (A->getOption().hasForwardToGCC()) {
+    if (forwardToGCC(A->getOption())) {
       // Don't forward any -g arguments to assembly steps.
       if (isa<AssembleJobAction>(JA) &&
           A->getOption().matches(options::OPT_g_Group))

Modified: cfe/trunk/lib/Frontend/CompilerInvocation.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInvocation.cpp?rev=166348&r1=166347&r2=166348&view=diff
==============================================================================
--- cfe/trunk/lib/Frontend/CompilerInvocation.cpp (original)
+++ cfe/trunk/lib/Frontend/CompilerInvocation.cpp Fri Oct 19 17:37:06 2012
@@ -2330,7 +2330,7 @@
   // Issue errors on arguments that are not valid for CC1.
   for (ArgList::iterator I = Args->begin(), E = Args->end();
        I != E; ++I) {
-    if (!(*I)->getOption().isCC1Option()) {
+    if (!(*I)->getOption().hasFlag(options::CC1Option)) {
       Diags.Report(diag::err_drv_unknown_argument) << (*I)->getAsString(*Args);
       Success = false;
     }





More information about the cfe-commits mailing list