From: Nico Weber Date: Tue, 23 Dec 2014 22:55:34 +0000 (+0000) Subject: clang-cl: Various changes to /Zc: handling. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=44095a1ae2a99af088f12fa7bfc259ff5abeb03b;p=clang clang-cl: Various changes to /Zc: handling. * /Zc:trigraphs and /Zc:trigraphs- are now honored * /Zc:strictStrings is now honored * /Zc:auto is now honored/ignored (clang does the Right Thing for this already) Also add a dedicated test for the various /Zc: flags. clang-cl doesn't always agree with cl.exe on the default values for /Zc flags. For example, I think clang always behaves as if /Zc:inline is passed, and warns if the user explicitly passes /Zc:inline- Fixes PR21974. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@224791 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Driver/CLCompatOptions.td b/include/clang/Driver/CLCompatOptions.td index 71c80d282e..363dd4933c 100644 --- a/include/clang/Driver/CLCompatOptions.td +++ b/include/clang/Driver/CLCompatOptions.td @@ -129,6 +129,13 @@ def _SLASH_wd4005 : CLFlag<"wd4005">, Alias, AliasArgs<["no-macro-redefined"]>; def _SLASH_vd : CLJoined<"vd">, HelpText<"Control vtordisp placement">, Alias; +def _SLASH_Zc_strictStrings : CLFlag<"Zc:strictStrings">, + HelpText<"Treat string literals as const">, Alias, + AliasArgs<["error=c++11-compat-deprecated-writable-strings"]>; +def _SLASH_Zc_trigraphs : CLFlag<"Zc:trigraphs">, + HelpText<"Enable trigraphs">, Alias; +def _SLASH_Zc_trigraphs_off : CLFlag<"Zc:trigraphs-">, + HelpText<"Disable trigraphs (default)">, Alias; def _SLASH_Z7 : CLFlag<"Z7">, Alias; def _SLASH_Zi : CLFlag<"Zi">, HelpText<"Enable debug information">, Alias; @@ -213,6 +220,7 @@ def _SLASH_sdl : CLIgnoredFlag<"sdl">; def _SLASH_sdl_ : CLIgnoredFlag<"sdl-">; def _SLASH_volatile_iso : CLIgnoredFlag<"volatile:iso">; def _SLASH_w : CLIgnoredJoined<"w">; +def _SLASH_Zc_auto : CLIgnoredFlag<"Zc:auto">; def _SLASH_Zc_forScope : CLIgnoredFlag<"Zc:forScope">; def _SLASH_Zc_inline : CLIgnoredFlag<"Zc:inline">; def _SLASH_Zc_rvalueCast : CLIgnoredFlag<"Zc:rvalueCast">; diff --git a/test/Driver/cl-options.c b/test/Driver/cl-options.c index fa3273e0b4..d9fcaf4669 100644 --- a/test/Driver/cl-options.c +++ b/test/Driver/cl-options.c @@ -191,10 +191,6 @@ // RUN: /volatile:iso \ // RUN: /w12345 \ // RUN: /wd1234 \ -// RUN: /Zc:forScope \ -// RUN: /Zc:wchar_t \ -// RUN: /Zc:inline \ -// RUN: /Zc:rvalueCast \ // RUN: /Zo \ // RUN: /Zo- \ // RUN: -### -- %s 2>&1 | FileCheck -check-prefix=IGNORED %s @@ -285,8 +281,6 @@ // RUN: /Yustdafx.h \ // RUN: /Z7 \ // RUN: /Za \ -// RUN: /Zc:auto \ -// RUN: /Zc:wchar_t- \ // RUN: /Ze \ // RUN: /Zg \ // RUN: /Zi \ diff --git a/test/Driver/cl-zc.cpp b/test/Driver/cl-zc.cpp new file mode 100644 index 0000000000..639095fded --- /dev/null +++ b/test/Driver/cl-zc.cpp @@ -0,0 +1,59 @@ +// Don't attempt slash switches on msys bash. +// REQUIRES: shell-preserves-root + +// Note: %s must be preceded by --, otherwise it may be interpreted as a +// command-line option, e.g. on Mac where %s is commonly under /Users. + +// RUN: %clang_cl /c -### -- %s 2>&1 | FileCheck -check-prefix=TRIGRAPHS-DEFAULT %s +// cc1 will disable trigraphs for -fms-compatibility as long as -ftrigraphs +// isn't explicitly passed. +// TRIGRAPHS-DEFAULT-NOT: "-ftrigraphs" + +// RUN: %clang_cl /c -### /Zc:trigraphs -- %s 2>&1 | FileCheck -check-prefix=TRIGRAPHS-ON %s +// TRIGRAPHS-ON: "-ftrigraphs" + +// RUN: %clang_cl /c -### /Zc:trigraphs- -- %s 2>&1 | FileCheck -check-prefix=TRIGRAPHS-OFF %s +// TRIGRAPHS-OFF: "-fno-trigraphs" + +// RUN: %clang_cl /c -### -- %s 2>&1 | FileCheck -check-prefix=STRICTSTRINGS-DEFAULT %s +// STRICTSTRINGS-DEFAULT-NOT: -Werror=c++11-compat-deprecated-writable-strings +// RUN: %clang_cl /c -### /Zc:strictStrings -- %s 2>&1 | FileCheck -check-prefix=STRICTSTRINGS-ON %s +// STRICTSTRINGS-ON: -Werror=c++11-compat-deprecated-writable-strings +// RUN: %clang_cl /c -### /Zc:strictStrings- -- %s 2>&1 | FileCheck -check-prefix=STRICTSTRINGS-OFF %s +// STRICTSTRINGS-OFF: argument unused during compilation + + +// RUN: %clang_cl /c -### /Zc:foobar -- %s 2>&1 | FileCheck -check-prefix=FOOBAR-ON %s +// FOOBAR-ON: argument unused during compilation +// RUN: %clang_cl /c -### /Zc:foobar- -- %s 2>&1 | FileCheck -check-prefix=FOOBAR-ON %s +// FOOBAR-OFF: argument unused during compilation + +// These are ignored if enabled, and warn if disabled. + +// RUN: %clang_cl /c -### /Zc:forScope -- %s 2>&1 | FileCheck -check-prefix=FORSCOPE-ON %s +// FORSCOPE-ON-NOT: argument unused during compilation +// RUN: %clang_cl /c -### /Zc:forScope- -- %s 2>&1 | FileCheck -check-prefix=FORSCOPE-OFF %s +// FORSCOPE-OFF: argument unused during compilation + +// RUN: %clang_cl /c -### /Zc:wchar_t -- %s 2>&1 | FileCheck -check-prefix=WCHAR_T-ON %s +// WCHAR_T-ON-NOT: argument unused during compilation +// RUN: %clang_cl /c -### /Zc:wchar_t- -- %s 2>&1 | FileCheck -check-prefix=WCHAR_T-OFF %s +// WCHAR_T-OFF: argument unused during compilation + +// RUN: %clang_cl /c -### /Zc:auto -- %s 2>&1 | FileCheck -check-prefix=AUTO-ON %s +// AUTO-ON-NOT: argument unused during compilation +// RUN: %clang_cl /c -### /Zc:auto- -- %s 2>&1 | FileCheck -check-prefix=AUTO-OFF %s +// AUTO-OFF: argument unused during compilation + +// RUN: %clang_cl /c -### /Zc:inline -- %s 2>&1 | FileCheck -check-prefix=INLINE-ON %s +// INLINE-ON-NOT: argument unused during compilation +// RUN: %clang_cl /c -### /Zc:inline- -- %s 2>&1 | FileCheck -check-prefix=INLINE-OFF %s +// INLINE-OFF: argument unused during compilation + + +// These never warn, but don't have an effect yet. + +// RUN: %clang_cl /c -### /Zc:rvalueCast -- %s 2>&1 | FileCheck -check-prefix=RVALUECAST-ON %s +// RVALUECAST-ON-NOT: argument unused during compilation +// RUN: %clang_cl /c -### /Zc:rvalueCast- -- %s 2>&1 | FileCheck -check-prefix=RVALUECAST-OFF %s +// RVALUECAST-OFF: argument unused during compilation