Index: llvm/trunk/cmake/modules/CheckCompilerVersion.cmake =================================================================== --- llvm/trunk/cmake/modules/CheckCompilerVersion.cmake +++ llvm/trunk/cmake/modules/CheckCompilerVersion.cmake @@ -58,6 +58,8 @@ 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 #if defined(__GLIBCXX__) @@ -65,12 +67,20 @@ #error Unsupported libstdc++ version #endif #endif -int main() { return 0; } +#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; } " LLVM_LIBSTDCXX_MIN) if(NOT LLVM_LIBSTDCXX_MIN) message(FATAL_ERROR "libstdc++ version must be at least ${GCC_MIN}.") endif() + # Test for libstdc++ version of at least 5.1 by checking for std::iostream_category(). + # Note: We should check _GLIBCXX_RELEASE when possible (i.e., for GCC 7.1 and up). check_cxx_source_compiles(" #include #if defined(__GLIBCXX__) @@ -78,6 +88,10 @@ #error Unsupported libstdc++ version #endif #endif +#if defined(__GLIBCXX__) +#include +void foo(void) { (void) std::iostream_category(); } +#endif int main() { return 0; } " LLVM_LIBSTDCXX_SOFT_ERROR)