diff options
-rw-r--r-- | clang/include/clang/Driver/CLCompatOptions.td | 31 | ||||
-rw-r--r-- | clang/lib/Driver/Driver.cpp | 7 | ||||
-rw-r--r-- | clang/lib/Driver/Tools.cpp | 3 | ||||
-rw-r--r-- | clang/test/Driver/cl-options.c | 10 |
4 files changed, 39 insertions, 12 deletions
diff --git a/clang/include/clang/Driver/CLCompatOptions.td b/clang/include/clang/Driver/CLCompatOptions.td index 1941c608c99..4dbb1ca5d0d 100644 --- a/clang/include/clang/Driver/CLCompatOptions.td +++ b/clang/include/clang/Driver/CLCompatOptions.td @@ -14,28 +14,43 @@ def cl_Group : OptionGroup<"<clang-cl options>">, HelpText<"CL.EXE COMPATIBILITY OPTIONS">; +def cl_compile_Group : OptionGroup<"<clang-cl compile-only options>">, + Group<cl_Group>; + def cl_ignored_Group : OptionGroup<"<clang-cl ignored options>">, Group<cl_Group>; class CLFlag<string name> : Option<["/", "-"], name, KIND_FLAG>, Group<cl_Group>, Flags<[CLOption, DriverOption]>; +class CLCompileFlag<string name> : Option<["/", "-"], name, KIND_FLAG>, + Group<cl_compile_Group>, Flags<[CLOption, DriverOption]>; + class CLIgnoredFlag<string name> : Option<["/", "-"], name, KIND_FLAG>, Group<cl_ignored_Group>, Flags<[CLOption, DriverOption]>; class CLJoined<string name> : Option<["/", "-"], name, KIND_JOINED>, Group<cl_Group>, Flags<[CLOption, DriverOption]>; +class CLCompileJoined<string name> : Option<["/", "-"], name, KIND_JOINED>, + Group<cl_compile_Group>, Flags<[CLOption, DriverOption]>; + class CLIgnoredJoined<string name> : Option<["/", "-"], name, KIND_JOINED>, Group<cl_ignored_Group>, Flags<[CLOption, DriverOption]>; class CLJoinedOrSeparate<string name> : Option<["/", "-"], name, KIND_JOINED_OR_SEPARATE>, Group<cl_Group>, Flags<[CLOption, DriverOption]>; +class CLCompileJoinedOrSeparate<string name> : Option<["/", "-"], name, + KIND_JOINED_OR_SEPARATE>, Group<cl_compile_Group>, + Flags<[CLOption, DriverOption]>; + class CLRemainingArgs<string name> : Option<["/", "-"], name, KIND_REMAINING_ARGS>, Group<cl_Group>, Flags<[CLOption, DriverOption]>; // Aliases: +// (We don't put any of these in cl_compile_Group as the options they alias are +// already in the right group.) def _SLASH_c : CLFlag<"c">, HelpText<"Compile only">, Alias<c>; def _SLASH_D : CLJoinedOrSeparate<"D">, HelpText<"Define macro">, @@ -93,12 +108,12 @@ def _SLASH_Zs : CLFlag<"Zs">, HelpText<"Syntax-check only">, // Non-aliases: -def _SLASH_M_Group : OptionGroup<"</M group>">, Group<cl_Group>; +def _SLASH_M_Group : OptionGroup<"</M group>">, Group<cl_compile_Group>; def _SLASH_Fe : CLJoined<"Fe">, HelpText<"Set output executable file or directory (ends in / or \\)">, MetaVarName<"<file or directory>">; -def _SLASH_Fo : CLJoined<"Fo">, +def _SLASH_Fo : CLCompileJoined<"Fo">, HelpText<"Set output object file, or directory (ends in / or \\)">, MetaVarName<"<file or directory>">; def _SLASH_LD : CLFlag<"LD">, HelpText<"Create DLL">; @@ -113,12 +128,12 @@ def _SLASH_MT : Option<["/", "-"], "MT", KIND_FLAG>, Group<_SLASH_M_Group>, Flags<[CLOption, DriverOption]>, HelpText<"Use static run-time">; def _SLASH_MTd : Option<["/", "-"], "MTd", KIND_FLAG>, Group<_SLASH_M_Group>, Flags<[CLOption, DriverOption]>, HelpText<"Use static debug run-time">; -def _SLASH_Tc : CLJoinedOrSeparate<"Tc">, HelpText<"Specify a C source file">, - MetaVarName<"<filename>">; -def _SLASH_TC : CLFlag<"TC">, HelpText<"Treat all source files as C">; -def _SLASH_Tp : CLJoinedOrSeparate<"Tp">, HelpText<"Specify a C++ source file">, - MetaVarName<"<filename>">; -def _SLASH_TP : CLFlag<"TP">, HelpText<"Treat all source files as C++">; +def _SLASH_Tc : CLCompileJoinedOrSeparate<"Tc">, + HelpText<"Specify a C source file">, MetaVarName<"<filename>">; +def _SLASH_TC : CLCompileFlag<"TC">, HelpText<"Treat all source files as C">; +def _SLASH_Tp : CLCompileJoinedOrSeparate<"Tp">, + HelpText<"Specify a C++ source file">, MetaVarName<"<filename>">; +def _SLASH_TP : CLCompileFlag<"TP">, HelpText<"Treat all source files as C++">; // Ignored: diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index b1d5e619637..7ad09accd8c 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -1268,8 +1268,13 @@ void Driver::BuildActions(const ToolChain &TC, DerivedArgList &Args, // If we are linking, claim any options which are obviously only used for // compilation. - if (FinalPhase == phases::Link && PL.size() == 1) + if (FinalPhase == phases::Link && PL.size() == 1) { Args.ClaimAllArgs(options::OPT_CompileOnly_Group); + Args.ClaimAllArgs(options::OPT_cl_compile_Group); + } + + // Claim ignored clang-cl options. + Args.ClaimAllArgs(options::OPT_cl_ignored_Group); } Action *Driver::ConstructPhaseAction(const ArgList &Args, phases::ID Phase, diff --git a/clang/lib/Driver/Tools.cpp b/clang/lib/Driver/Tools.cpp index 305cfb48d23..c1bac556cd9 100644 --- a/clang/lib/Driver/Tools.cpp +++ b/clang/lib/Driver/Tools.cpp @@ -3587,9 +3587,6 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, Args.ClaimAllArgs(options::OPT_clang_ignored_f_Group); Args.ClaimAllArgs(options::OPT_clang_ignored_m_Group); - // Claim ignored clang-cl options. - Args.ClaimAllArgs(options::OPT_cl_ignored_Group); - // Disable warnings for clang -E -emit-llvm foo.c Args.ClaimAllArgs(options::OPT_emit_llvm); } diff --git a/clang/test/Driver/cl-options.c b/clang/test/Driver/cl-options.c index f74a16c433f..f44c4169d0d 100644 --- a/clang/test/Driver/cl-options.c +++ b/clang/test/Driver/cl-options.c @@ -93,11 +93,19 @@ // WJoined: "-cc1" // WJoined: "-Wunused-pragmas" + // Ignored options. Check that we don't get "unused during compilation" errors. // (/Zs is for syntax-only, /WX is for -Werror) // RUN: %clang_cl /Zs /WX /analyze- /errorReport:foo /nologo /Ob1 /Ob2 -- %s // RUN: %clang_cl /Zs /WX /Zc:forScope /Zc:wchar_t /w12345 /wd1234 /RTC1 -- %s +// Ignored options and compile-only options are ignored for link jobs. +// RUN: %clang_cl /c /Fo%t.obj /Tc%s +// RUN: %clang_cl /nologo -### -- %t.obj 2>&1 | FileCheck -check-prefix=LINKUNUSED %s +// RUN: %clang_cl /Dfoo -### -- %t.obj 2>&1 | FileCheck -check-prefix=LINKUNUSED %s +// RUN: %clang_cl /MD -### -- %t.obj 2>&1 | FileCheck -check-prefix=LINKUNUSED %s +// LINKUNUSED-NOT: argument unused during compilation + // Support ignoring warnings about unused arguments. // RUN: %clang_cl /Abracadabra -Qunused-arguments -### -- %s 2>&1 | FileCheck -check-prefix=UNUSED %s // UNUSED-NOT: warning @@ -116,3 +124,5 @@ // RUN: %clang_cl -Xclang hellocc1 -### -- %s 2>&1 | FileCheck -check-prefix=Xclang %s // Xclang: "-cc1" // Xclang: "hellocc1" + +void f() { } |