[LLVM] Update C++ standard to 17

Also make the soft toolchain requirements hard. This allows
us to use C++17 features in LLVM now.

If we find patterns with C++17 that improve readability
it should be recommended in the coding standards.

Reviewed By: jhenderson, cor3ntin, MaskRay

Differential Revision: https://reviews.llvm.org/D130689
This commit is contained in:
Tobias Hieta
2022-08-05 21:45:55 +02:00
parent 786b503f66
commit b1356504e6
8 changed files with 32 additions and 24 deletions

View File

@@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.13.4)
include(CheckIncludeFiles)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD 17)
project(libbolt_rt_project)

View File

@@ -11,7 +11,7 @@ endif()
include(GNUInstallDirs)
if(CLANG_BUILT_STANDALONE)
set(CMAKE_CXX_STANDARD 14 CACHE STRING "C++ standard to conform to")
set(CMAKE_CXX_STANDARD 17 CACHE STRING "C++ standard to conform to")
set(CMAKE_CXX_STANDARD_REQUIRED YES)
set(CMAKE_CXX_EXTENSIONS NO)

View File

@@ -11,7 +11,7 @@ endif()
include(GNUInstallDirs)
if(LLD_BUILT_STANDALONE)
set(CMAKE_CXX_STANDARD 14 CACHE STRING "C++ standard to conform to")
set(CMAKE_CXX_STANDARD 17 CACHE STRING "C++ standard to conform to")
set(CMAKE_CXX_STANDARD_REQUIRED YES)
set(CMAKE_CXX_EXTENSIONS NO)

View File

@@ -20,7 +20,7 @@ include(GNUInstallDirs)
if(LLDB_BUILT_STANDALONE)
include(LLDBStandalone)
set(CMAKE_CXX_STANDARD 14 CACHE STRING "C++ standard to conform to")
set(CMAKE_CXX_STANDARD 17 CACHE STRING "C++ standard to conform to")
set(CMAKE_CXX_STANDARD_REQUIRED YES)
set(CMAKE_CXX_EXTENSIONS NO)
endif()

View File

@@ -58,7 +58,7 @@ project(LLVM
# Must go after project(..)
include(GNUInstallDirs)
set(CMAKE_CXX_STANDARD 14 CACHE STRING "C++ standard to conform to")
set(CMAKE_CXX_STANDARD 17 CACHE STRING "C++ standard to conform to")
set(CMAKE_CXX_STANDARD_REQUIRED YES)
if (CYGWIN)
# Cygwin is a bit stricter and lack things like 'strdup', 'stricmp', etc in

View File

@@ -4,21 +4,19 @@
include(CheckCXXSourceCompiles)
set(GCC_MIN 5.1)
set(GCC_MIN 7.1)
set(GCC_SOFT_ERROR 7.1)
set(CLANG_MIN 3.5)
set(CLANG_MIN 5.0)
set(CLANG_SOFT_ERROR 5.0)
set(APPLECLANG_MIN 6.0)
set(APPLECLANG_MIN 9.3)
set(APPLECLANG_SOFT_ERROR 9.3)
# https://en.wikipedia.org/wiki/Microsoft_Visual_C#Internal_version_numbering
# _MSC_VER == 1920 MSVC++ 14.20 Visual Studio 2019 Version 16.0
# _MSC_VER == 1927 MSVC++ 14.27 Visual Studio 2019 Version 16.7
set(MSVC_MIN 19.20)
set(MSVC_MIN 19.27)
set(MSVC_SOFT_ERROR 19.27)
# Map the above GCC versions to dates: https://gcc.gnu.org/develop.html#timeline
set(GCC_MIN_DATE 20150422)
set(LIBSTDCXX_MIN 7)
set(LIBSTDCXX_SOFT_ERROR 7)
@@ -76,22 +74,14 @@ if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
set(OLD_CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS})
set(OLD_CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES})
set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -std=c++0x")
# Test for libstdc++ version of at least 4.8 by checking for _ZNKSt17bad_function_call4whatEv.
# Note: We should check _GLIBCXX_RELEASE when possible (i.e., for GCC 7.1 and up).
check_cxx_source_compiles("
#include <iosfwd>
#if defined(__GLIBCXX__)
#if __GLIBCXX__ < ${GCC_MIN_DATE}
#if !defined(_GLIBCXX_RELEASE) || _GLIBCXX_RELEASE < ${LIBSTDCXX_MIN}
#error Unsupported libstdc++ version
#endif
#endif
#if defined(__GLIBCXX__)
extern const char _ZNKSt17bad_function_call4whatEv[];
const char *chk = _ZNKSt17bad_function_call4whatEv;
#else
const char *chk = \"\";
#endif
int main() { ++chk; return 0; }
int main() { return 0; }
"
LLVM_LIBSTDCXX_MIN)
if(NOT LLVM_LIBSTDCXX_MIN)

View File

@@ -53,7 +53,7 @@ choice.
C++ Standard Versions
---------------------
Unless otherwise documented, LLVM subprojects are written using standard C++14
Unless otherwise documented, LLVM subprojects are written using standard C++17
code and avoid unnecessary vendor-specific extensions.
Nevertheless, we restrict ourselves to features which are available in the
@@ -63,7 +63,13 @@ section `Software`).
Each toolchain provides a good reference for what it accepts:
* Clang: https://clang.llvm.org/cxx_status.html
* GCC: https://gcc.gnu.org/projects/cxx-status.html#cxx14
* libc++: https://libcxx.llvm.org/Status/Cxx17.html
* GCC: https://gcc.gnu.org/projects/cxx-status.html#cxx17
* libstdc++: https://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.2017
* MSVC: https://msdn.microsoft.com/en-us/library/hh567368.aspx

View File

@@ -47,6 +47,18 @@ Non-comprehensive list of changes in this release
Update on required toolchains to build LLVM
-------------------------------------------
LLVM is now built with C++17 by default. This means C++17 can be used in
the code base.
The previous "soft" toolchain requirements have now been changed to "hard".
This means that the the following versions are now required to build LLVM
and there is no way to suppress this error.
* GCC >= 7.1
* Clang >= 5.0
* Apple Clang >= 9.3
* Visual Studio 2019 >= 16.7
Changes to the LLVM IR
----------------------