llvmorg-github-actions[bot] wrote:

<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-clang

Author: Corentin Jabot (cor3ntin)

<details>
<summary>Changes</summary>

As discussed here 
https://github.com/llvm/llvm-project/pull/203992#discussion_r3438454092

---
Full diff: https://github.com/llvm/llvm-project/pull/207693.diff


6 Files Affected:

- (modified) clang/docs/ReleaseNotes.md (+2) 
- (modified) clang/docs/UsersManual.rst (+1-1) 
- (modified) clang/include/clang/Options/Options.td (+1-1) 
- (modified) clang/lib/Driver/ToolChains/Clang.cpp (+4-3) 
- (modified) clang/lib/Tooling/InterpolatingCompilationDatabase.cpp (+4) 
- (modified) clang/test/Driver/cl-options.c (+4-1) 


``````````diff
diff --git a/clang/docs/ReleaseNotes.md b/clang/docs/ReleaseNotes.md
index b7142ecb072ff..8569ab448e8f5 100644
--- a/clang/docs/ReleaseNotes.md
+++ b/clang/docs/ReleaseNotes.md
@@ -963,6 +963,8 @@ latest release, please see the [Clang Web 
Site](https://clang.llvm.org) or the
   automatically enables V3 unwind info (`-fwinx64-eh-unwind=v3`) if no
   explicit unwind version was specified.
 
+- Clang now supports `-std:c++26preview` for compatibility with MSVC. This 
enables C++26 features.
+
 #### LoongArch Support
 
 - DWARF fission is now compatible with linker relaxations, allowing 
`-gsplit-dwarf` and `-mrelax`
diff --git a/clang/docs/UsersManual.rst b/clang/docs/UsersManual.rst
index 3bc8622b13d90..cabbd22b69f2e 100644
--- a/clang/docs/UsersManual.rst
+++ b/clang/docs/UsersManual.rst
@@ -5188,7 +5188,7 @@ Execute ``clang-cl /?`` to see a list of supported 
options:
       /showIncludes:user      Like /showIncludes but omit system headers
       /showIncludes           Print info about included files to stderr
       /source-charset:<value> Set source encoding, supports only UTF-8
-      /std:<value>            Set language version 
(c++14,c++17,c++20,c++23preview,c++latest,c11,c17)
+      /std:<value>            Set language version 
(c++14,c++17,c++20,c++23preview,c++26preview,c++latest,c11,c17)
       /TC                     Treat all source files as C
       /Tc <file>              Treat <file> as C source file
       /TP                     Treat all source files as C++
diff --git a/clang/include/clang/Options/Options.td 
b/clang/include/clang/Options/Options.td
index e6e8a46b846c8..b2e32c75e5745 100644
--- a/clang/include/clang/Options/Options.td
+++ b/clang/include/clang/Options/Options.td
@@ -9297,7 +9297,7 @@ def _SLASH_execution_charset : 
CLCompileJoined<"execution-charset:">,
   HelpText<"Set runtime encoding, supports only UTF-8">,
   Alias<fexec_charset_EQ>;
 def _SLASH_std : CLCompileJoined<"std:">,
-  HelpText<"Set language version 
(c++14,c++17,c++20,c++23preview,c++latest,c11,c17)">;
+  HelpText<"Set language version 
(c++14,c++17,c++20,c++23preview,c++26preview,c++latest,c11,c17)">;
 def _SLASH_U : CLJoinedOrSeparate<"U">, HelpText<"Undefine macro">,
   MetaVarName<"<macro>">, Alias<U>;
 def _SLASH_validate_charset : CLFlag<"validate-charset">,
diff --git a/clang/lib/Driver/ToolChains/Clang.cpp 
b/clang/lib/Driver/ToolChains/Clang.cpp
index 9598b2be538ae..a30b01a675b99 100644
--- a/clang/lib/Driver/ToolChains/Clang.cpp
+++ b/clang/lib/Driver/ToolChains/Clang.cpp
@@ -7693,6 +7693,7 @@ void Clang::ConstructJob(Compilation &C, const JobAction 
&JA,
                              // TODO add c++23, c++26, c++29 when MSVC supports
                              // it.
                              .Case("c++23preview", "-std=c++23")
+                             .Case("c++26preview", "-std=c++26")
                              .Case("c++latest", "-std=c++2d")
                              .Default("");
       if (IsSYCL) {
@@ -7783,9 +7784,9 @@ void Clang::ConstructJob(Compilation &C, const JobAction 
&JA,
        Std->containsValue("c++23") || Std->containsValue("gnu++23") ||
        Std->containsValue("c++23preview") || Std->containsValue("c++2c") ||
        Std->containsValue("gnu++2c") || Std->containsValue("c++26") ||
-       Std->containsValue("gnu++26") || Std->containsValue("c++2d") ||
-       Std->containsValue("gnu++2d") || Std->containsValue("c++latest") ||
-       Std->containsValue("gnu++latest"));
+       Std->containsValue("gnu++26") || Std->containsValue("c++26preview") ||
+       Std->containsValue("c++2d") || Std->containsValue("gnu++2d") ||
+       Std->containsValue("c++latest") || Std->containsValue("gnu++latest"));
   bool HaveModules =
       RenderModulesOptions(C, D, Args, Input, Output, HaveCxx20, CmdArgs);
 
diff --git a/clang/lib/Tooling/InterpolatingCompilationDatabase.cpp 
b/clang/lib/Tooling/InterpolatingCompilationDatabase.cpp
index e228ef6512611..f9ce3e3ae6cda 100644
--- a/clang/lib/Tooling/InterpolatingCompilationDatabase.cpp
+++ b/clang/lib/Tooling/InterpolatingCompilationDatabase.cpp
@@ -279,6 +279,8 @@ struct TransferableCommand {
       if (ClangCLMode) {
         if (Std == LangStandard::lang_cxx23)
           Spelling = "c++23preview";
+        else if (Std == LangStandard::lang_cxx26)
+          Spelling = "c++26preview";
         else if (Std == latestLangStandardC())
           Spelling = "clatest";
         else if (Std == latestLangStandardCXX())
@@ -350,6 +352,8 @@ struct TransferableCommand {
         // Keep in sync with OPT__SLASH_std handling in Clang::ConstructJob().
         if (StringRef(Arg.getValue()) == "c++23preview")
           return LangStandard::lang_cxx23;
+        if (StringRef(Arg.getValue()) == "c++26preview")
+          return LangStandard::lang_cxx26;
         if (StringRef(Arg.getValue()) == "clatest")
           return latestLangStandardC();
         if (StringRef(Arg.getValue()) == "c++latest")
diff --git a/clang/test/Driver/cl-options.c b/clang/test/Driver/cl-options.c
index 1f16af5c43a3d..57d82622ef4de 100644
--- a/clang/test/Driver/cl-options.c
+++ b/clang/test/Driver/cl-options.c
@@ -624,6 +624,9 @@
 // RUN: %clang_cl -fmsc-version=1900 -TP -std:c++23preview -### -- %s 2>&1 | 
FileCheck -check-prefix=STDCXX23PREVIEW %s
 // STDCXX23PREVIEW: -std=c++23
 
+// RUN: %clang_cl -fmsc-version=1900 -TP -std:c++26preview -### -- %s 2>&1 | 
FileCheck -check-prefix=STDCXX26PREVIEW %s
+// STDCXX26PREVIEW: -std=c++26
+
 // RUN: %clang_cl -fmsc-version=1900 -TP -std:c++latest -### -- %s 2>&1 | 
FileCheck -check-prefix=STDCXXLATEST %s
 // STDCXXLATEST: -std=c++2d
 
@@ -847,7 +850,7 @@
 // EXTERNAL_W0: "-Wno-system-headers"
 // EXTERNAL_Wn: "-Wsystem-headers"
 
-// RUN: %clang_cl -vctoolsdir "" /arm64EC /c -### -- %s 2>&1 | FileCheck 
--check-prefix=ARM64EC %s 
+// RUN: %clang_cl -vctoolsdir "" /arm64EC /c -### -- %s 2>&1 | FileCheck 
--check-prefix=ARM64EC %s
 // ARM64EC-NOT: /arm64EC has been overridden by specified target
 // ARM64EC: "-triple" "arm64ec-pc-windows-msvc19.33.0"
 // ARM64EC-SAME: "--dependent-lib=softintrin"

``````````

</details>


https://github.com/llvm/llvm-project/pull/207693
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to