[llvm] 1d104f7 - Build fix: Turn off _GLIBCXX_DEBUG based on a compile check
Nicolai Hähnle via llvm-commits
llvm-commits at lists.llvm.org
Mon Mar 2 07:16:58 PST 2020
Author: Nicolai Hähnle
Date: 2020-03-02T16:16:26+01:00
New Revision: 1d104f75498c97cca8ed1fc068a5c359fb7276d8
URL: https://github.com/llvm/llvm-project/commit/1d104f75498c97cca8ed1fc068a5c359fb7276d8
DIFF: https://github.com/llvm/llvm-project/commit/1d104f75498c97cca8ed1fc068a5c359fb7276d8.diff
LOG: Build fix: Turn off _GLIBCXX_DEBUG based on a compile check
Summary:
Enabling _GLIBCXX_DEBUG (implied by LLVM_ENABLE_EXPENSIVE_CHECKS) causes
std::min_element (and presumably others) to no longer be constexpr, which
in turn causes the build to fail.
This seems like a bug in the GCC STL. This change works around it.
Change-Id: I5fc471caa9c4de3ef4e87aeeac8df1b960e8e72c
Reviewers: tstellar, hans, serge-sans-paille
Differential Revision: https://reviews.llvm.org/D75199
Added:
Modified:
llvm/cmake/modules/HandleLLVMOptions.cmake
Removed:
################################################################################
diff --git a/llvm/cmake/modules/HandleLLVMOptions.cmake b/llvm/cmake/modules/HandleLLVMOptions.cmake
index b19846c0852c..df231eb3308c 100644
--- a/llvm/cmake/modules/HandleLLVMOptions.cmake
+++ b/llvm/cmake/modules/HandleLLVMOptions.cmake
@@ -77,7 +77,22 @@ endif()
if(LLVM_ENABLE_EXPENSIVE_CHECKS)
add_definitions(-DEXPENSIVE_CHECKS)
- add_definitions(-D_GLIBCXX_DEBUG)
+
+ # In some libstdc++ versions, std::min_element is not constexpr when
+ # _GLIBCXX_DEBUG is enabled.
+ CHECK_CXX_SOURCE_COMPILES("
+ #define _GLIBCXX_DEBUG
+ #include <algorithm>
+ int main(int argc, char** argv) {
+ static constexpr int data[] = {0, 1};
+ constexpr const int* min_elt = std::min_element(&data[0], &data[2]);
+ return 0;
+ }" CXX_SUPPORTS_GLIBCXX_DEBUG)
+ if(CXX_SUPPORTS_GLIBCXX_DEBUG)
+ add_definitions(-D_GLIBCXX_DEBUG)
+ else()
+ add_definitions(-D_GLIBCXX_ASSERTIONS)
+ endif()
endif()
string(TOUPPER "${LLVM_ABI_BREAKING_CHECKS}" uppercase_LLVM_ABI_BREAKING_CHECKS)
More information about the llvm-commits
mailing list