summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZachary Turner <zturner@google.com>2017-10-27 21:12:28 +0000
committerZachary Turner <zturner@google.com>2017-10-27 21:12:28 +0000
commit67384e3ffaafadfb3ffeed68d0d962f60277e11c (patch)
tree234b1b4c0b7e330bc8b5872c2a8c7e7f84ec9482
parent35ac462cb6085c112ead63d5262f08132a64aec2 (diff)
Force #define GTEST_LANG_CXX11.
gtest depends on this #define to determine whether it can use various classes like std::tuple, or whether it has to fall back to experimental classes in the std::tr1 namespace. The check in the current version of gtest relies on the value of the `__cplusplus` macro, but MSVC provides a non-conformant value of this macro, making it effectively impossible to detect C++11. In short, LLVM compiled with MSVC has been silently using the tr1 versions of several classes since the beginning of time. This would normally be pretty benign, except that in the latest preview of MSVC they have marked all of the tr1 classes deprecated, so it spews thousands of warnings. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@316798 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--cmake/modules/AddLLVM.cmake7
-rw-r--r--lib/Testing/Support/CMakeLists.txt3
-rw-r--r--utils/unittest/CMakeLists.txt5
3 files changed, 15 insertions, 0 deletions
diff --git a/cmake/modules/AddLLVM.cmake b/cmake/modules/AddLLVM.cmake
index 3952d041344..f52b1c44ab2 100644
--- a/cmake/modules/AddLLVM.cmake
+++ b/cmake/modules/AddLLVM.cmake
@@ -1037,6 +1037,13 @@ function(add_unittest test_suite test_name)
set(EXCLUDE_FROM_ALL ON)
endif()
+ # Our current version of gtest does not properly recognize C++11 support
+ # with MSVC, so it falls back to tr1 / experimental classes. Since LLVM
+ # itself requires C++11, we can safely force it on unconditionally so that
+ # we don't have to fight with the buggy gtest check.
+ add_definitions(-DGTEST_LANG_CXX11=1)
+ add_definitions(-DGTEST_HAS_TR1_TUPLE=0)
+
include_directories(${LLVM_MAIN_SRC_DIR}/utils/unittest/googletest/include)
include_directories(${LLVM_MAIN_SRC_DIR}/utils/unittest/googlemock/include)
if (NOT LLVM_ENABLE_THREADS)
diff --git a/lib/Testing/Support/CMakeLists.txt b/lib/Testing/Support/CMakeLists.txt
index fa8dfe59c8b..8ab6fd9a25a 100644
--- a/lib/Testing/Support/CMakeLists.txt
+++ b/lib/Testing/Support/CMakeLists.txt
@@ -1,3 +1,6 @@
+add_definitions(-DGTEST_LANG_CXX11=1)
+add_definitions(-DGTEST_HAS_TR1_TUPLE=0)
+
add_llvm_library(LLVMTestingSupport
Error.cpp
diff --git a/utils/unittest/CMakeLists.txt b/utils/unittest/CMakeLists.txt
index b42ac834e3a..5b5cbf5d745 100644
--- a/utils/unittest/CMakeLists.txt
+++ b/utils/unittest/CMakeLists.txt
@@ -19,6 +19,11 @@ include_directories(
googlemock
)
+# LLVM requires C++11 but gtest doesn't correctly detect the availability
+# of C++11 on MSVC, so we force it on.
+add_definitions(-DGTEST_LANG_CXX11=1)
+add_definitions(-DGTEST_HAS_TR1_TUPLE=0)
+
if(WIN32)
add_definitions(-DGTEST_OS_WINDOWS=1)
endif()