[clang-cl] Define _MSVC_LANG for -std=c++2b
authorNico Weber <thakis@chromium.org>
Thu, 2 Dec 2021 14:12:50 +0000 (09:12 -0500)
committerNico Weber <thakis@chromium.org>
Thu, 2 Dec 2021 17:09:20 +0000 (12:09 -0500)
This matches the value that msvc v19.29 VS16.11 uses for
_MSVC_LANG with /std:c++latest.

Differential Revision: https://reviews.llvm.org/D114952

clang/lib/Basic/Targets/OSTargets.cpp
clang/test/Preprocessor/predefined-win-macros.c

index abf46fcb61a5d729691a970862e2565dc61916c9..53748bf067cd2eb0030dd7dd7a329d3fbf1ea7a4 100644 (file)
@@ -181,7 +181,9 @@ static void addVisualCDefines(const LangOptions &Opts, MacroBuilder &Builder) {
       Builder.defineMacro("_HAS_CHAR16_T_LANGUAGE_SUPPORT", Twine(1));
 
     if (Opts.isCompatibleWithMSVC(LangOptions::MSVC2015)) {
-      if (Opts.CPlusPlus20)
+      if (Opts.CPlusPlus2b)
+        Builder.defineMacro("_MSVC_LANG", "202004L");
+      else if (Opts.CPlusPlus20)
         Builder.defineMacro("_MSVC_LANG", "202002L");
       else if (Opts.CPlusPlus17)
         Builder.defineMacro("_MSVC_LANG", "201703L");
index 2ded133d271bc158e723238b955936622264b8fd..df43ae59cef42f8474a267ca3566ed4a12e56b5c 100644 (file)
 // CHECK-MS-NOT: GXX
 
 // RUN: %clang_cc1 %s -x c++ -E -dM -triple i686-pc-win32 -fms-extensions -fms-compatibility \
-// RUN:     -fms-compatibility-version=19.00 -std=c++20 -o - | FileCheck -match-full-lines %s --check-prefix=CHECK-MS-CPP2A
-// CHECK-MS-CPP2A: #define _MSC_VER 1900
-// CHECK-MS-CPP2A: #define _MSVC_LANG 202002L
+// RUN:     -fms-compatibility-version=19.00 -std=c++20 -o - | FileCheck -match-full-lines %s --check-prefix=CHECK-MS-CPP20
+// CHECK-MS-CPP20: #define _MSC_VER 1900
+// CHECK-MS-CPP20: #define _MSVC_LANG 202002L
+
+// RUN: %clang_cc1 %s -x c++ -E -dM -triple i686-pc-win32 -fms-extensions -fms-compatibility \
+// RUN:     -fms-compatibility-version=19.00 -std=c++2b -o - | FileCheck -match-full-lines %s --check-prefix=CHECK-MS-CPP2B
+// CHECK-MS-CPP2B: #define _MSC_VER 1900
+// CHECK-MS-CPP2B: #define _MSVC_LANG 202004L
 
 // RUN: %clang_cc1 -triple i386-windows %s -E -dM -o - \
 // RUN:   | FileCheck -match-full-lines %s --check-prefix=CHECK-X86-WIN