Author: Corentin Jabot Date: 2026-07-06T14:42:44+02:00 New Revision: 592acb361000290a2a1502181b0b335a14d303fe
URL: https://github.com/llvm/llvm-project/commit/592acb361000290a2a1502181b0b335a14d303fe DIFF: https://github.com/llvm/llvm-project/commit/592acb361000290a2a1502181b0b335a14d303fe.diff LOG: [Clang] Add `std:c++26preview` for MSVC compat (#207693) As discussed here https://github.com/llvm/llvm-project/pull/203992#discussion_r3438454092 Added: Modified: clang/docs/ReleaseNotes.md clang/docs/UsersManual.rst clang/include/clang/Options/Options.td clang/lib/Driver/ToolChains/Clang.cpp clang/lib/Tooling/InterpolatingCompilationDatabase.cpp clang/test/Driver/cl-options.c Removed: ################################################################################ diff --git a/clang/docs/ReleaseNotes.md b/clang/docs/ReleaseNotes.md index ea79b3b1b3692..ba3817ac5f522 100644 --- a/clang/docs/ReleaseNotes.md +++ b/clang/docs/ReleaseNotes.md @@ -968,6 +968,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" _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
