From: Hans Wennborg Date: Wed, 31 Jul 2013 20:51:53 +0000 (+0000) Subject: clang-cl: add the /c, /W0 and /W1 options X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=78d0fbfe3aa0dcf158fed95a51460e5d769447ee;p=clang clang-cl: add the /c, /W0 and /W1 options 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 --- diff --git a/include/clang/Driver/CLCompatOptions.td b/include/clang/Driver/CLCompatOptions.td index 2c1554f685..aef92915f9 100644 --- a/include/clang/Driver/CLCompatOptions.td +++ b/include/clang/Driver/CLCompatOptions.td @@ -12,10 +12,14 @@ //===----------------------------------------------------------------------===// def cl_Group : OptionGroup<"">, - HelpText<"CL.EXE COMPATIBILITY OPTIONS">; + HelpText<"CL.EXE COMPATIBILITY OPTIONS">; class CLFlag : Option<["/", "-"], name, KIND_FLAG>, - Group, Flags<[CLOption]>; + Group, Flags<[CLOption, DriverOption]>; def _QUESTION : CLFlag<"?">, Alias, HelpText<"Display available options">; -def cl_help : CLFlag<"help">, Alias, HelpText<"Display available options">; +def _SLASH_c : CLFlag<"c">, HelpText<"Compile only">, Alias; +def _SLASH_help : CLFlag<"help">, Alias, + HelpText<"Display available options">; +def _SLASH_W0 : CLFlag<"W0">, HelpText<"Disable all warnings">, Alias; +def _SLASH_W1 : CLFlag<"W1">, HelpText<"Enable -Wall">, Alias; diff --git a/include/clang/Driver/Options.h b/include/clang/Driver/Options.h index 99ec12579f..0af8d3fe9e 100644 --- a/include/clang/Driver/Options.h +++ b/include/clang/Driver/Options.h @@ -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 { diff --git a/include/clang/Driver/Options.td b/include/clang/Driver/Options.td index 38ed61708c..d3b61a51ca 100644 --- a/include/clang/Driver/Options.td +++ b/include/clang/Driver/Options.td @@ -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<"">, // substitutions: // _ => __ // - => _ +// / => _SLASH // # => _HASH // ? => _QUESTION // , => _COMMA @@ -116,7 +121,8 @@ def internal_debug_Group : class InternalDriverOpt : Group, Flags<[DriverOption, HelpHidden]>; -def driver_mode : Joined<["--"], "driver-mode=">, InternalDriverOpt, +def driver_mode : Joined<["--"], "driver-mode=">, 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, 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. diff --git a/lib/Driver/Driver.cpp b/lib/Driver/Driver.cpp index 34594e643d..4f9cd3e38a 100644 --- a/lib/Driver/Driver.cpp +++ b/lib/Driver/Driver.cpp @@ -1883,9 +1883,9 @@ std::pair 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 index 0000000000..ece48c553d --- /dev/null +++ b/test/Driver/cl-options.c @@ -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