summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2024-04-17 13:15:23 (GMT)
committerKitware Robot <kwrobot@kitware.com>2024-04-17 13:15:34 (GMT)
commit9bf79a7964d18cc32678d10305f948bb72f978d6 (patch)
treeec937ab1cb10bbc0ddb5931f004eed3d4d26a0da
parent56f333ef2fc416772f08ce9fc77cd17be620755f (diff)
parent1ba4a0633833903a3429e87a4c72ffe738139dd4 (diff)
downloadCMake-9bf79a7964d18cc32678d10305f948bb72f978d6.zip
CMake-9bf79a7964d18cc32678d10305f948bb72f978d6.tar.gz
CMake-9bf79a7964d18cc32678d10305f948bb72f978d6.tar.bz2
Merge topic 'lang-std-c++26'
1ba4a06338 GNU: Add flags for C++26 modes 2038f2c2b1 C++26: Support detection as the default standard Acked-by: Kitware Robot <kwrobot@kitware.com> Acked-by: buildbot <buildbot@kitware.com> Merge-request: !9434
-rw-r--r--Modules/CMakeCUDACompilerId.cu.in4
-rw-r--r--Modules/CMakeCXXCompilerId.cpp.in4
-rw-r--r--Modules/CMakeHIPCompilerId.hip.in4
-rw-r--r--Modules/CMakeOBJCXXCompilerId.mm.in4
-rw-r--r--Modules/Compiler/GNU.cmake5
-rw-r--r--Tests/CompileFeatures/CMakeLists.txt1
-rw-r--r--Tests/CompileFeatures/default_dialect.cpp6
-rw-r--r--Tests/RunCMake/CompileFeatures/compiler_introspection.cmake4
8 files changed, 25 insertions, 7 deletions
diff --git a/Modules/CMakeCUDACompilerId.cu.in b/Modules/CMakeCUDACompilerId.cu.in
index 170b6b4..be8f1b3 100644
--- a/Modules/CMakeCUDACompilerId.cu.in
+++ b/Modules/CMakeCUDACompilerId.cu.in
@@ -25,7 +25,9 @@ char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]";
#define CXX_STD __cplusplus
const char* info_language_standard_default = "INFO" ":" "standard_default["
-#if CXX_STD > CXX_STD_20
+#if CXX_STD > CXX_STD_23
+ "26"
+#elif CXX_STD > CXX_STD_20
"23"
#elif CXX_STD > CXX_STD_17
"20"
diff --git a/Modules/CMakeCXXCompilerId.cpp.in b/Modules/CMakeCXXCompilerId.cpp.in
index 6df15ac..1cd8006 100644
--- a/Modules/CMakeCXXCompilerId.cpp.in
+++ b/Modules/CMakeCXXCompilerId.cpp.in
@@ -89,7 +89,9 @@ char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]";
#endif
const char* info_language_standard_default = "INFO" ":" "standard_default["
-#if CXX_STD > CXX_STD_20
+#if CXX_STD > CXX_STD_23
+ "26"
+#elif CXX_STD > CXX_STD_20
"23"
#elif CXX_STD > CXX_STD_17
"20"
diff --git a/Modules/CMakeHIPCompilerId.hip.in b/Modules/CMakeHIPCompilerId.hip.in
index f1bd120..fa97667 100644
--- a/Modules/CMakeHIPCompilerId.hip.in
+++ b/Modules/CMakeHIPCompilerId.hip.in
@@ -26,7 +26,9 @@ char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]";
#define CXX_STD __cplusplus
const char* info_language_standard_default = "INFO" ":" "standard_default["
-#if CXX_STD > CXX_STD_20
+#if CXX_STD > CXX_STD_23
+ "26"
+#elif CXX_STD > CXX_STD_20
"23"
#elif CXX_STD > CXX_STD_17
"20"
diff --git a/Modules/CMakeOBJCXXCompilerId.mm.in b/Modules/CMakeOBJCXXCompilerId.mm.in
index 265cc75..cadbaff 100644
--- a/Modules/CMakeOBJCXXCompilerId.mm.in
+++ b/Modules/CMakeOBJCXXCompilerId.mm.in
@@ -33,7 +33,9 @@ char const* qnxnto = "INFO" ":" "qnxnto[]";
#define CXX_STD __cplusplus
const char* info_language_standard_default = "INFO" ":" "standard_default["
-#if CXX_STD > CXX_STD_20
+#if CXX_STD > CXX_STD_23
+ "26"
+#elif CXX_STD > CXX_STD_20
"23"
#elif CXX_STD > CXX_STD_17
"20"
diff --git a/Modules/Compiler/GNU.cmake b/Modules/Compiler/GNU.cmake
index fa199b4..1113e9a 100644
--- a/Modules/Compiler/GNU.cmake
+++ b/Modules/Compiler/GNU.cmake
@@ -293,4 +293,9 @@ macro(__compiler_gnu_cxx_standards lang)
set(CMAKE_${lang}20_STANDARD_COMPILE_OPTION "-std=c++2a")
set(CMAKE_${lang}20_EXTENSION_COMPILE_OPTION "-std=gnu++2a")
endif()
+
+ if(CMAKE_${lang}_COMPILER_VERSION VERSION_GREATER_EQUAL 14.0)
+ set(CMAKE_${lang}26_STANDARD_COMPILE_OPTION "-std=c++26")
+ set(CMAKE_${lang}26_EXTENSION_COMPILE_OPTION "-std=gnu++26")
+ endif()
endmacro()
diff --git a/Tests/CompileFeatures/CMakeLists.txt b/Tests/CompileFeatures/CMakeLists.txt
index e206e70..d6acd7b 100644
--- a/Tests/CompileFeatures/CMakeLists.txt
+++ b/Tests/CompileFeatures/CMakeLists.txt
@@ -286,6 +286,7 @@ if (CMAKE_CXX_COMPILE_FEATURES)
if (std_flag_idx EQUAL -1)
add_executable(default_dialect default_dialect.cpp)
target_compile_definitions(default_dialect PRIVATE
+ DEFAULT_CXX26=$<EQUAL:${CMAKE_CXX_STANDARD_DEFAULT},26>
DEFAULT_CXX23=$<EQUAL:${CMAKE_CXX_STANDARD_DEFAULT},23>
DEFAULT_CXX20=$<EQUAL:${CMAKE_CXX_STANDARD_DEFAULT},20>
DEFAULT_CXX17=$<EQUAL:${CMAKE_CXX_STANDARD_DEFAULT},17>
diff --git a/Tests/CompileFeatures/default_dialect.cpp b/Tests/CompileFeatures/default_dialect.cpp
index c0cc1b6..b873b14 100644
--- a/Tests/CompileFeatures/default_dialect.cpp
+++ b/Tests/CompileFeatures/default_dialect.cpp
@@ -3,7 +3,11 @@
template <long l>
struct Outputter;
-#if DEFAULT_CXX23
+#if DEFAULT_CXX26
+# if CXX_STD <= CXX_STD_23
+Outputter<CXX_STD> o;
+# endif
+#elif DEFAULT_CXX23
# if CXX_STD <= CXX_STD_20
Outputter<CXX_STD> o;
# endif
diff --git a/Tests/RunCMake/CompileFeatures/compiler_introspection.cmake b/Tests/RunCMake/CompileFeatures/compiler_introspection.cmake
index f3360c7..1cfa27e 100644
--- a/Tests/RunCMake/CompileFeatures/compiler_introspection.cmake
+++ b/Tests/RunCMake/CompileFeatures/compiler_introspection.cmake
@@ -40,6 +40,6 @@ set(${lang}${standard}_EXT_FLAG ${CMAKE_${lang}${standard}_EXTENSION_COMPILE_OPT
endforeach()
endmacro()
-info(C 90 99 11 17 23)
-info(CXX 98 11 14 17 20 23)
+info(C 90 99 11 17 23 26)
+info(CXX 98 11 14 17 20 23 26)
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/info.cmake" "${info}")