Skip to content

Commit 1d104f7

Browse files
committed
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
1 parent f5ad93d commit 1d104f7

File tree

1 file changed

+16
-1
lines changed

1 file changed

+16
-1
lines changed

llvm/cmake/modules/HandleLLVMOptions.cmake

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,22 @@ endif()
7777

7878
if(LLVM_ENABLE_EXPENSIVE_CHECKS)
7979
add_definitions(-DEXPENSIVE_CHECKS)
80-
add_definitions(-D_GLIBCXX_DEBUG)
80+
81+
# In some libstdc++ versions, std::min_element is not constexpr when
82+
# _GLIBCXX_DEBUG is enabled.
83+
CHECK_CXX_SOURCE_COMPILES("
84+
#define _GLIBCXX_DEBUG
85+
#include <algorithm>
86+
int main(int argc, char** argv) {
87+
static constexpr int data[] = {0, 1};
88+
constexpr const int* min_elt = std::min_element(&data[0], &data[2]);
89+
return 0;
90+
}" CXX_SUPPORTS_GLIBCXX_DEBUG)
91+
if(CXX_SUPPORTS_GLIBCXX_DEBUG)
92+
add_definitions(-D_GLIBCXX_DEBUG)
93+
else()
94+
add_definitions(-D_GLIBCXX_ASSERTIONS)
95+
endif()
8196
endif()
8297

8398
string(TOUPPER "${LLVM_ABI_BREAKING_CHECKS}" uppercase_LLVM_ABI_BREAKING_CHECKS)

0 commit comments

Comments
 (0)