]> granicus.if.org Git - clang/commitdiff
clang-cl: add the /c, /W0 and /W1 options
authorHans Wennborg <hans@hanshq.net>
Wed, 31 Jul 2013 20:51:53 +0000 (20:51 +0000)
committerHans Wennborg <hans@hanshq.net>
Wed, 31 Jul 2013 20:51:53 +0000 (20:51 +0000)
This adds a few more clang-cl options. It also exposes two core clang
options to the clang-cl mode: we need to be able to claim --driver_mode
so it doesn't show up as unused in cl mode, and we need -### for tests.

Differential Revision: http://llvm-reviews.chandlerc.com/D1232

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

include/clang/Driver/CLCompatOptions.td
include/clang/Driver/Options.h
include/clang/Driver/Options.td
lib/Driver/Driver.cpp
test/Driver/cl-options.c [new file with mode: 0644]

index 2c1554f6857db79a3ef2a43e05f86121b2797991..aef92915f90f5ee3f72a4ff57f236c61b76b1b63 100644 (file)
 //===----------------------------------------------------------------------===//
 
 def cl_Group : OptionGroup<"<clang-cl options>">,
-    HelpText<"CL.EXE COMPATIBILITY OPTIONS">;
+  HelpText<"CL.EXE COMPATIBILITY OPTIONS">;
 
 class CLFlag<string name> : Option<["/", "-"], name, KIND_FLAG>,
-    Group<cl_Group>, Flags<[CLOption]>;
+  Group<cl_Group>, Flags<[CLOption, DriverOption]>;
 
 def _QUESTION : CLFlag<"?">, Alias<help>, HelpText<"Display available options">;
-def cl_help : CLFlag<"help">, Alias<help>, HelpText<"Display available options">;
+def _SLASH_c : CLFlag<"c">, HelpText<"Compile only">, Alias<c>;
+def _SLASH_help : CLFlag<"help">, Alias<help>,
+  HelpText<"Display available options">;
+def _SLASH_W0 : CLFlag<"W0">, HelpText<"Disable all warnings">, Alias<w>;
+def _SLASH_W1 : CLFlag<"W1">, HelpText<"Enable -Wall">, Alias<Wall>;
index 99ec12579f85419db0b51b1e633dbcb15c2f3b19..0af8d3fe9e5e7b00ea952c993c03765fc1dc7efe 100644 (file)
@@ -27,9 +27,10 @@ enum ClangFlags {
   LinkerInput = (1 << 5),
   NoArgumentUnused = (1 << 6),
   Unsupported = (1 << 7),
-  CLOption = (1 << 8),
-  CC1Option = (1 << 9),
-  NoDriverOption = (1 << 10)
+  CoreOption = (1 << 8),
+  CLOption = (1 << 9),
+  CC1Option = (1 << 10),
+  NoDriverOption = (1 << 11)
 };
 
 enum ID {
index 38ed61708c489ab9255546ff05529484e75be0a5..d3b61a51ca09d1c5a7c3a76b99a5fac0e802fa33 100644 (file)
@@ -33,6 +33,10 @@ def NoArgumentUnused : OptionFlag;
 // lines that use it.
 def Unsupported : OptionFlag;
 
+// CoreOption - This is considered a "core" Clang option, available in both
+// clang and clang-cl modes.
+def CoreOption : OptionFlag;
+
 // CLOption - This is a cl.exe compatibility option. Options with this flag
 // are made available when the driver is running in CL compatibility mode.
 def CLOption : OptionFlag;
@@ -98,6 +102,7 @@ def clang_ignored_m_Group : OptionGroup<"<clang ignored m group>">,
 // substitutions:
 //   _ => __
 //   - => _
+//   / => _SLASH
 //   # => _HASH
 //   ? => _QUESTION
 //   , => _COMMA
@@ -116,7 +121,8 @@ def internal_debug_Group :
 
 class InternalDriverOpt : Group<internal_driver_Group>,
   Flags<[DriverOption, HelpHidden]>;
-def driver_mode : Joined<["--"], "driver-mode=">, InternalDriverOpt,
+def driver_mode : Joined<["--"], "driver-mode=">, Group<internal_driver_Group>,
+  Flags<[CoreOption, DriverOption, HelpHidden]>,
   HelpText<"Set the driver mode to either 'gcc', 'g++', 'cpp', or 'cl'">;
 def ccc_gcc_name : Separate<["-"], "ccc-gcc-name">, InternalDriverOpt,
   HelpText<"Name for native GCC compiler">,
@@ -171,7 +177,7 @@ def ccc_ : Joined<["-"], "ccc-">, Group<internal_Group>, Flags<[Unsupported]>;
 
 // Standard Options
 
-def _HASH_HASH_HASH : Flag<["-"], "###">, Flags<[DriverOption]>,
+def _HASH_HASH_HASH : Flag<["-"], "###">, Flags<[DriverOption, CoreOption]>,
     HelpText<"Print the commands to run for this compilation">;
 // The '--' option is here for the sake of compatibility with gcc, but is 
 // being ignored by the driver.
index 34594e643d63354a643e394c17d6962972a01c7f..4f9cd3e38a0f920c08d6949033b6af57f7035166 100644 (file)
@@ -1883,9 +1883,9 @@ std::pair<unsigned, unsigned> Driver::getIncludeExcludeOptionFlagMasks() const {
   unsigned ExcludedFlagsBitmask = 0;
 
   if (Mode == CLMode) {
-    // Only allow CL options.
-    // FIXME: Also allow "core" Clang options.
-    IncludedFlagsBitmask = options::CLOption;
+    // Include CL and Core options.
+    IncludedFlagsBitmask |= options::CLOption;
+    IncludedFlagsBitmask |= options::CoreOption;
   } else {
     ExcludedFlagsBitmask |= options::CLOption;
   }
diff --git a/test/Driver/cl-options.c b/test/Driver/cl-options.c
new file mode 100644 (file)
index 0000000..ece48c5
--- /dev/null
@@ -0,0 +1,10 @@
+// Don't attempt slash switches on msys bash.
+// REQUIRES: shell-preserves-root
+
+// RUN: %clang_cl /c /W0 %s -### 2>&1 | FileCheck -check-prefix=W0 %s
+// W0-DAG: -c
+// W0-DAG: -w
+
+// RUN: %clang_cl /c /W1 %s -### 2>&1 | FileCheck -check-prefix=W1 %s
+// W1-DAG: -c
+// W1-DAG: -Wall