diff --git a/.gitlab/ci/configure_windows_intelclassic_ninja.cmake b/.gitlab/ci/configure_windows_intelclassic_ninja.cmake index c2d708baf3..84b9a8815a 100644 --- a/.gitlab/ci/configure_windows_intelclassic_ninja.cmake +++ b/.gitlab/ci/configure_windows_intelclassic_ninja.cmake @@ -1 +1,4 @@ +set(CMake_TEST_C_STANDARDS "90;99;11" CACHE STRING "") +set(CMake_TEST_CXX_STANDARDS "98;11;14;17;20" CACHE STRING "") + include("${CMAKE_CURRENT_LIST_DIR}/configure_windows_intelcompiler_common.cmake") diff --git a/.gitlab/ci/configure_windows_inteloneapi_ninja.cmake b/.gitlab/ci/configure_windows_inteloneapi_ninja.cmake index c2d708baf3..cb252e04aa 100644 --- a/.gitlab/ci/configure_windows_inteloneapi_ninja.cmake +++ b/.gitlab/ci/configure_windows_inteloneapi_ninja.cmake @@ -1 +1,4 @@ +set(CMake_TEST_C_STANDARDS "90;99;11;17;23" CACHE STRING "") +set(CMake_TEST_CXX_STANDARDS "98;11;14;17;20;23;26" CACHE STRING "") + include("${CMAKE_CURRENT_LIST_DIR}/configure_windows_intelcompiler_common.cmake") diff --git a/Tests/CompileFeatures/CMakeLists.txt b/Tests/CompileFeatures/CMakeLists.txt index 1a65699d3c..e3f74fd2d8 100644 --- a/Tests/CompileFeatures/CMakeLists.txt +++ b/Tests/CompileFeatures/CMakeLists.txt @@ -25,8 +25,21 @@ foreach(lang C CXX CUDA HIP) string(TOLOWER "${lang}_std_${std}" feature) if("${std}" IN_LIST CMake_TEST_${lang}_STANDARDS OR CMAKE_${lang}${std}_STANDARD_COMPILE_OPTION) + # Test _std_ feature. add_library(test_${feature} OBJECT ${feature}.${ext_${lang}}) target_compile_features(test_${feature} PRIVATE ${feature}) + # Test _STANDARD property. + if(NOT "${lang}_STANDARD_${std}" MATCHES "^(CUDA_STANDARD_03|HIP_STANDARD_98)$") + add_library(test_${lang}_STANDARD_${std} OBJECT ${lang}_STANDARD_${std}.${ext_${lang}}) + set_property(TARGET test_${lang}_STANDARD_${std} PROPERTY ${lang}_STANDARD ${std}) + if(CMAKE_${lang}${std}_STANDARD_COMPILE_OPTION STREQUAL [[]] + OR "${CMAKE_${lang}_COMPILER_ID};${CMAKE_${lang}_SIMULATE_ID};${CMAKE_${lang}_COMPILER_FRONTEND_VARIANT};${lang};${std}" MATCHES "^(Clang;MSVC;GNU;CXX;(98|11)|Intel;MSVC;(MSVC)?;CXX;11)$") + target_compile_definitions(test_${lang}_STANDARD_${std} PRIVATE ${lang}_STD_MISSING) + elseif(CMAKE_${lang}_COMPILER_FRONTEND_VARIANT STREQUAL "MSVC" + AND CMAKE_${lang}${std}_STANDARD_COMPILE_OPTION MATCHES [[^-std:c\+*latest$]]) + target_compile_definitions(test_${lang}_STANDARD_${std} PRIVATE ${lang}_STD_LATEST) + endif() + endif() endif() endforeach() endforeach() diff --git a/Tests/CompileFeatures/CUDA_STANDARD_11.cu b/Tests/CompileFeatures/CUDA_STANDARD_11.cu new file mode 100644 index 0000000000..5418e00b96 --- /dev/null +++ b/Tests/CompileFeatures/CUDA_STANDARD_11.cu @@ -0,0 +1,7 @@ +#include "cxx_std.h" +#if defined(CXX_STD) && CXX_STD > CXX_STD_11 +# error "CUDA_STANDARD 11 honored as higher standard" +#endif +#if defined(CXX_STD) && CXX_STD < CXX_STD_11 +# error "CUDA_STANDARD 11 not honored" +#endif diff --git a/Tests/CompileFeatures/CUDA_STANDARD_14.cu b/Tests/CompileFeatures/CUDA_STANDARD_14.cu new file mode 100644 index 0000000000..415ff81e67 --- /dev/null +++ b/Tests/CompileFeatures/CUDA_STANDARD_14.cu @@ -0,0 +1,7 @@ +#include "cxx_std.h" +#if defined(CXX_STD) && CXX_STD > CXX_STD_14 +# error "CUDA_STANDARD 14 honored as higher standard" +#endif +#if defined(CXX_STD) && CXX_STD <= CXX_STD_11 +# error "CUDA_STANDARD 14 not honored" +#endif diff --git a/Tests/CompileFeatures/CUDA_STANDARD_17.cu b/Tests/CompileFeatures/CUDA_STANDARD_17.cu new file mode 100644 index 0000000000..d31b45e747 --- /dev/null +++ b/Tests/CompileFeatures/CUDA_STANDARD_17.cu @@ -0,0 +1,7 @@ +#include "cxx_std.h" +#if defined(CXX_STD) && CXX_STD > CXX_STD_17 +# error "CUDA_STANDARD 17 honored as higher standard" +#endif +#if defined(CXX_STD) && CXX_STD <= CXX_STD_14 +# error "CUDA_STANDARD 17 not honored" +#endif diff --git a/Tests/CompileFeatures/CUDA_STANDARD_20.cu b/Tests/CompileFeatures/CUDA_STANDARD_20.cu new file mode 100644 index 0000000000..330681abe0 --- /dev/null +++ b/Tests/CompileFeatures/CUDA_STANDARD_20.cu @@ -0,0 +1,7 @@ +#include "cxx_std.h" +#if defined(CXX_STD) && CXX_STD > CXX_STD_20 +# error "CUDA_STANDARD 20 honored as higher standard" +#endif +#if defined(CXX_STD) && CXX_STD <= CXX_STD_17 +# error "CUDA_STANDARD 20 not honored" +#endif diff --git a/Tests/CompileFeatures/CUDA_STANDARD_23.cu b/Tests/CompileFeatures/CUDA_STANDARD_23.cu new file mode 100644 index 0000000000..3e0eb5db06 --- /dev/null +++ b/Tests/CompileFeatures/CUDA_STANDARD_23.cu @@ -0,0 +1,7 @@ +#include "cxx_std.h" +#if defined(CXX_STD) && CXX_STD > CXX_STD_23 +# error "CUDA_STANDARD 23 honored as higher standard" +#endif +#if defined(CXX_STD) && CXX_STD <= CXX_STD_20 +# error "CUDA_STANDARD 23 not honored" +#endif diff --git a/Tests/CompileFeatures/CUDA_STANDARD_26.cu b/Tests/CompileFeatures/CUDA_STANDARD_26.cu new file mode 100644 index 0000000000..b18a1a3ead --- /dev/null +++ b/Tests/CompileFeatures/CUDA_STANDARD_26.cu @@ -0,0 +1,4 @@ +#include "cxx_std.h" +#if defined(CXX_STD) && CXX_STD <= CXX_STD_23 +# error "CUDA_STANDARD 26 not honored" +#endif diff --git a/Tests/CompileFeatures/CXX_STANDARD_11.cpp b/Tests/CompileFeatures/CXX_STANDARD_11.cpp new file mode 100644 index 0000000000..a1d0cd3996 --- /dev/null +++ b/Tests/CompileFeatures/CXX_STANDARD_11.cpp @@ -0,0 +1,9 @@ +#include "cxx_std.h" +#if defined(CXX_STD) && CXX_STD > CXX_STD_11 && !defined(CXX_STD_MISSING) +# error "CXX_STANDARD 11 honored as higher standard" +#endif +#if defined(CXX_STD) && CXX_STD < CXX_STD_11 && \ + !(CXX_STD == CXX_STD_98 && \ + (defined(__IBMCPP__) && defined(_AIX) && __IBMCPP__ == 1610)) +# error "CXX_STANDARD 11 not honored" +#endif diff --git a/Tests/CompileFeatures/CXX_STANDARD_14.cpp b/Tests/CompileFeatures/CXX_STANDARD_14.cpp new file mode 100644 index 0000000000..bc3ae3fe5b --- /dev/null +++ b/Tests/CompileFeatures/CXX_STANDARD_14.cpp @@ -0,0 +1,12 @@ +#include "cxx_std.h" +#if defined(CXX_STD) && CXX_STD > CXX_STD_14 +# error "CXX_STANDARD 14 honored as higher standard" +#endif +#if defined(CXX_STD) && CXX_STD <= CXX_STD_11 && \ + !(CXX_STD == CXX_STD_11 && \ + ((defined(__GNUC__) && defined(__GNUC_MINOR__) && __GNUC__ == 4 && \ + __GNUC_MINOR__ <= 8 && !defined(__clang__) && \ + !defined(__INTEL_COMPILER) && !defined(__PGI)) || \ + (defined(__SUNPRO_CC) && __SUNPRO_CC < 0x5150))) +# error "CXX_STANDARD 14 not honored" +#endif diff --git a/Tests/CompileFeatures/CXX_STANDARD_17.cpp b/Tests/CompileFeatures/CXX_STANDARD_17.cpp new file mode 100644 index 0000000000..fec9e040d4 --- /dev/null +++ b/Tests/CompileFeatures/CXX_STANDARD_17.cpp @@ -0,0 +1,7 @@ +#include "cxx_std.h" +#if defined(CXX_STD) && CXX_STD > CXX_STD_17 +# error "CXX_STANDARD 17 honored as higher standard" +#endif +#if defined(CXX_STD) && CXX_STD <= CXX_STD_14 +# error "CXX_STANDARD 17 not honored" +#endif diff --git a/Tests/CompileFeatures/CXX_STANDARD_20.cpp b/Tests/CompileFeatures/CXX_STANDARD_20.cpp new file mode 100644 index 0000000000..5afaec6073 --- /dev/null +++ b/Tests/CompileFeatures/CXX_STANDARD_20.cpp @@ -0,0 +1,7 @@ +#include "cxx_std.h" +#if defined(CXX_STD) && CXX_STD > CXX_STD_20 +# error "CXX_STANDARD 20 honored as higher standard" +#endif +#if defined(CXX_STD) && CXX_STD <= CXX_STD_17 +# error "CXX_STANDARD 20 not honored" +#endif diff --git a/Tests/CompileFeatures/CXX_STANDARD_23.cpp b/Tests/CompileFeatures/CXX_STANDARD_23.cpp new file mode 100644 index 0000000000..0f2489319c --- /dev/null +++ b/Tests/CompileFeatures/CXX_STANDARD_23.cpp @@ -0,0 +1,7 @@ +#include "cxx_std.h" +#if defined(CXX_STD) && CXX_STD > CXX_STD_23 && !defined(CXX_STD_LATEST) +# error "CXX_STANDARD 23 honored as higher standard" +#endif +#if defined(CXX_STD) && CXX_STD <= CXX_STD_20 +# error "CXX_STANDARD 23 not honored" +#endif diff --git a/Tests/CompileFeatures/CXX_STANDARD_26.cpp b/Tests/CompileFeatures/CXX_STANDARD_26.cpp new file mode 100644 index 0000000000..1091c92b88 --- /dev/null +++ b/Tests/CompileFeatures/CXX_STANDARD_26.cpp @@ -0,0 +1,4 @@ +#include "cxx_std.h" +#if defined(CXX_STD) && CXX_STD <= CXX_STD_23 +# error "CXX_STANDARD 26 not honored" +#endif diff --git a/Tests/CompileFeatures/CXX_STANDARD_98.cpp b/Tests/CompileFeatures/CXX_STANDARD_98.cpp new file mode 100644 index 0000000000..14441da117 --- /dev/null +++ b/Tests/CompileFeatures/CXX_STANDARD_98.cpp @@ -0,0 +1,4 @@ +#include "cxx_std.h" +#if defined(CXX_STD) && CXX_STD >= CXX_STD_11 && !defined(CXX_STD_MISSING) +# error "CXX_STANDARD 98 honored as higher standard" +#endif diff --git a/Tests/CompileFeatures/C_STANDARD_11.c b/Tests/CompileFeatures/C_STANDARD_11.c new file mode 100644 index 0000000000..5259ff6294 --- /dev/null +++ b/Tests/CompileFeatures/C_STANDARD_11.c @@ -0,0 +1,8 @@ +#include "c_std.h" +#if defined(C_STD) && C_STD > C_STD_11 +# error "C_STANDARD 11 honored as higher standard" +#endif +#if defined(C_STD) && C_STD <= C_STD_99 && \ + !(defined(__SUNPRO_C) && __SUNPRO_C < 0x5140 && C_STD == C_STD_99) +# error "C_STANDARD 11 not honored" +#endif diff --git a/Tests/CompileFeatures/C_STANDARD_17.c b/Tests/CompileFeatures/C_STANDARD_17.c new file mode 100644 index 0000000000..7cd6e5bc6e --- /dev/null +++ b/Tests/CompileFeatures/C_STANDARD_17.c @@ -0,0 +1,7 @@ +#include "c_std.h" +#if defined(C_STD) && C_STD > C_STD_17 +# error "C_STANDARD 17 honored as higher standard" +#endif +#if defined(C_STD) && C_STD <= C_STD_11 +# error "C_STANDARD 17 not honored" +#endif diff --git a/Tests/CompileFeatures/C_STANDARD_23.c b/Tests/CompileFeatures/C_STANDARD_23.c new file mode 100644 index 0000000000..daf596cec3 --- /dev/null +++ b/Tests/CompileFeatures/C_STANDARD_23.c @@ -0,0 +1,8 @@ +#include "c_std.h" +#if defined(C_STD) && C_STD > C_STD_23 && !defined(C_STD_LATEST) +# error "C_STANDARD 23 honored as higher standard" +#endif +#if defined(C_STD) && C_STD <= C_STD_17 && \ + !(C_STD == C_STD_17 && defined(__clang_major__) && __clang_major__ < 14) +# error "C_STANDARD 23 not honored" +#endif diff --git a/Tests/CompileFeatures/C_STANDARD_90.c b/Tests/CompileFeatures/C_STANDARD_90.c new file mode 100644 index 0000000000..60669e79c9 --- /dev/null +++ b/Tests/CompileFeatures/C_STANDARD_90.c @@ -0,0 +1,4 @@ +#include "c_std.h" +#if defined(C_STD) && C_STD >= C_STD_99 && !defined(C_STD_MISSING) +# error "C_STANDARD 90 honored as higher standard" +#endif diff --git a/Tests/CompileFeatures/C_STANDARD_99.c b/Tests/CompileFeatures/C_STANDARD_99.c new file mode 100644 index 0000000000..0383bc8323 --- /dev/null +++ b/Tests/CompileFeatures/C_STANDARD_99.c @@ -0,0 +1,7 @@ +#include "c_std.h" +#if defined(C_STD) && C_STD > C_STD_99 && !defined(C_STD_MISSING) +# error "C_STANDARD 99 honored as higher standard" +#endif +#if defined(C_STD) && C_STD < C_STD_99 +# error "C_STANDARD 99 not honored" +#endif diff --git a/Tests/CompileFeatures/HIP_STANDARD_11.hip b/Tests/CompileFeatures/HIP_STANDARD_11.hip new file mode 100644 index 0000000000..32fd87b6af --- /dev/null +++ b/Tests/CompileFeatures/HIP_STANDARD_11.hip @@ -0,0 +1,7 @@ +#include "cxx_std.h" +#if defined(CXX_STD) && CXX_STD > CXX_STD_11 +# error "HIP_STANDARD 11 honored as higher standard" +#endif +#if defined(CXX_STD) && CXX_STD < CXX_STD_11 +# error "HIP_STANDARD 11 not honored" +#endif diff --git a/Tests/CompileFeatures/HIP_STANDARD_14.hip b/Tests/CompileFeatures/HIP_STANDARD_14.hip new file mode 100644 index 0000000000..2f0d7dfe4c --- /dev/null +++ b/Tests/CompileFeatures/HIP_STANDARD_14.hip @@ -0,0 +1,7 @@ +#include "cxx_std.h" +#if defined(CXX_STD) && CXX_STD > CXX_STD_14 +# error "HIP_STANDARD 14 honored as higher standard" +#endif +#if defined(CXX_STD) && CXX_STD <= CXX_STD_11 +# error "HIP_STANDARD 14 not honored" +#endif diff --git a/Tests/CompileFeatures/HIP_STANDARD_17.hip b/Tests/CompileFeatures/HIP_STANDARD_17.hip new file mode 100644 index 0000000000..831f537da1 --- /dev/null +++ b/Tests/CompileFeatures/HIP_STANDARD_17.hip @@ -0,0 +1,7 @@ +#include "cxx_std.h" +#if defined(CXX_STD) && CXX_STD > CXX_STD_17 +# error "HIP_STANDARD 17 honored as higher standard" +#endif +#if defined(CXX_STD) && CXX_STD <= CXX_STD_14 +# error "HIP_STANDARD 17 not honored" +#endif diff --git a/Tests/CompileFeatures/HIP_STANDARD_20.hip b/Tests/CompileFeatures/HIP_STANDARD_20.hip new file mode 100644 index 0000000000..404b763033 --- /dev/null +++ b/Tests/CompileFeatures/HIP_STANDARD_20.hip @@ -0,0 +1,7 @@ +#include "cxx_std.h" +#if defined(CXX_STD) && CXX_STD > CXX_STD_20 +# error "HIP_STANDARD 20 honored as higher standard" +#endif +#if defined(CXX_STD) && CXX_STD <= CXX_STD_17 +# error "HIP_STANDARD 20 not honored" +#endif diff --git a/Tests/CompileFeatures/HIP_STANDARD_23.hip b/Tests/CompileFeatures/HIP_STANDARD_23.hip new file mode 100644 index 0000000000..556b3e9ca0 --- /dev/null +++ b/Tests/CompileFeatures/HIP_STANDARD_23.hip @@ -0,0 +1,7 @@ +#include "cxx_std.h" +#if defined(CXX_STD) && CXX_STD > CXX_STD_23 +# error "HIP_STANDARD 23 honored as higher standard" +#endif +#if defined(CXX_STD) && CXX_STD <= CXX_STD_20 +# error "HIP_STANDARD 23 not honored" +#endif diff --git a/Tests/CompileFeatures/HIP_STANDARD_26.hip b/Tests/CompileFeatures/HIP_STANDARD_26.hip new file mode 100644 index 0000000000..7c774a88fe --- /dev/null +++ b/Tests/CompileFeatures/HIP_STANDARD_26.hip @@ -0,0 +1,4 @@ +#include "cxx_std.h" +#if defined(CXX_STD) && CXX_STD <= CXX_STD_23 +# error "HIP_STANDARD 26 not honored" +#endif