From ce0a62f40fdf77c7199668354b25b3da6bd2ea7b Mon Sep 17 00:00:00 2001 From: Herbert Thielen Date: Wed, 30 Aug 2017 21:25:34 +0200 Subject: [PATCH 01/13] switch one build to Release mode This turns on optimization which allows the compiler to discover more problems and omit some more warnings. --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 417d2c51..81692dd9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -37,7 +37,7 @@ script: ./travis.sh env: matrix: - SHARED_LIB=OFF STATIC_LIB=ON CMAKE_PKG=OFF BUILD_TYPE=Debug VERBOSE=1 - - SHARED_LIB=OFF STATIC_LIB=ON CMAKE_PKG=OFF BUILD_TYPE=Debug VERBOSE=1 CXX_FLAGS=-std=c++11 + - SHARED_LIB=OFF STATIC_LIB=ON CMAKE_PKG=OFF BUILD_TYPE=Release VERBOSE=1 CXX_FLAGS=-std=c++11 notifications: email: false sudo: false From 49752a2d369dd76da1f7ff1d571dad555346a528 Mon Sep 17 00:00:00 2001 From: Herbert Thielen Date: Wed, 30 Aug 2017 21:42:33 +0200 Subject: [PATCH 02/13] treat all warnings as errors for GCC (-Werror) --- googletest/cmake/internal_utils.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/googletest/cmake/internal_utils.cmake b/googletest/cmake/internal_utils.cmake index ec5d08c0..0b41e3ab 100644 --- a/googletest/cmake/internal_utils.cmake +++ b/googletest/cmake/internal_utils.cmake @@ -94,7 +94,7 @@ macro(config_compiler_and_linker) set(cxx_no_exception_flags "-D_HAS_EXCEPTIONS=0") set(cxx_no_rtti_flags "-GR-") elseif (CMAKE_COMPILER_IS_GNUCXX) - set(cxx_base_flags "-Wall -Wshadow") + set(cxx_base_flags "-Wall -Wshadow -Werror") set(cxx_exception_flags "-fexceptions") set(cxx_no_exception_flags "-fno-exceptions") # Until version 4.3.2, GCC doesn't define a macro to indicate From be61455d8ef1b9abcddccad54b2132dd9e19184b Mon Sep 17 00:00:00 2001 From: Herbert Thielen Date: Mon, 4 Sep 2017 13:23:08 +0200 Subject: [PATCH 03/13] avoid -Wshadow warning on GCC When using INSTANTIATE_TEST_CASE_P with a lambda function which uses 'info' as parameter name, GCC complains that this would shadow parameter 'info' used in the macro's VA_ARGS call. --- googletest/test/gtest-param-test_test.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/googletest/test/gtest-param-test_test.cc b/googletest/test/gtest-param-test_test.cc index 857f6c5e..d1b0644f 100644 --- a/googletest/test/gtest-param-test_test.cc +++ b/googletest/test/gtest-param-test_test.cc @@ -857,8 +857,8 @@ TEST_P(CustomLambdaNamingTest, CustomTestNames) {} INSTANTIATE_TEST_CASE_P(CustomParamNameLambda, CustomLambdaNamingTest, Values(std::string("LambdaName")), - [](const ::testing::TestParamInfo& info) { - return info.param; + [](const ::testing::TestParamInfo& tpinfo) { + return tpinfo.param; }); #endif // GTEST_LANG_CXX11 From 78bace8938567e237e0c59dfdffcf0ae914e427b Mon Sep 17 00:00:00 2001 From: Herbert Thielen Date: Wed, 30 Aug 2017 21:43:37 +0200 Subject: [PATCH 04/13] avoid warning about unused variable --- googletest/test/gtest_unittest.cc | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/googletest/test/gtest_unittest.cc b/googletest/test/gtest_unittest.cc index f84def90..78f3ee2b 100644 --- a/googletest/test/gtest_unittest.cc +++ b/googletest/test/gtest_unittest.cc @@ -2096,7 +2096,7 @@ class UnitTestRecordPropertyTestEnvironment : public Environment { }; // This will test property recording outside of any test or test case. -static Environment* record_property_env = +Environment* record_property_env = AddGlobalTestEnvironment(new UnitTestRecordPropertyTestEnvironment); // This group of tests is for predicate assertions (ASSERT_PRED*, etc) @@ -4188,6 +4188,12 @@ TEST(AssertionSyntaxTest, WorksWithConst) { } // namespace +// we don't use the variable further, just avoid compiler warning +// by defining a function which uses it +void dummy_use_of_record_property_env() { + (void) record_property_env; +} + namespace testing { // Tests that Google Test tracks SUCCEED*. From aefdc2cb79b59a18d38e646ce091480d1dcf4acf Mon Sep 17 00:00:00 2001 From: Herbert Thielen Date: Sat, 2 Sep 2017 19:07:44 +0200 Subject: [PATCH 05/13] cache ccache --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 417d2c51..e5177829 100644 --- a/.travis.yml +++ b/.travis.yml @@ -30,6 +30,7 @@ os: - linux - osx language: cpp +cache: ccache compiler: - gcc - clang From 40ae7ae518dad9d774890c62cad4fbb79ab746c2 Mon Sep 17 00:00:00 2001 From: Herbert Thielen Date: Mon, 4 Sep 2017 18:19:06 +0200 Subject: [PATCH 06/13] set MAKEFLAGS to use multiple processors on Travis CI --- travis.sh | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/travis.sh b/travis.sh index bd226a8d..3a6c297a 100755 --- a/travis.sh +++ b/travis.sh @@ -1,5 +1,16 @@ #!/usr/bin/env sh set -evx + +# if possible, ask for the precise number of processors, +# otherwise take 2 processors as reasonable default; see +# https://docs.travis-ci.com/user/speeding-up-the-build/#Makefile-optimization +if [ -x /usr/bin/getconf ]; then + MAKEFLAGS=j$(/usr/bin/getconf _NPROCESSORS_ONLN) +else + MAKEFLAGS="j2" +fi +export MAKEFLAGS + env | sort mkdir build || true From 8118aa85602cc1ae2f9454143e5fa6470241959f Mon Sep 17 00:00:00 2001 From: Herbert Thielen Date: Mon, 4 Sep 2017 14:06:14 +0200 Subject: [PATCH 07/13] install ccache on travis osx build slave --- .travis.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.travis.yml b/.travis.yml index e5177829..b7ee780b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -8,6 +8,8 @@ install: - if [ "$CXX" = "g++" ]; then export CXX="g++-4.9" CC="gcc-4.9"; fi # /usr/bin/clang is 3.4, lets override with modern one. - if [ "$CXX" = "clang++" ] && [ "$TRAVIS_OS_NAME" = "linux" ]; then export CXX="clang++-3.7" CC="clang-3.7"; fi +# ccache on OS X needs installation first +- if [ "$TRAVIS_OS_NAME" = "osx" ]; then brew install ccache; export PATH="/usr/local/opt/ccache/libexec:$PATH"; fi - echo ${PATH} - echo ${CXX} - ${CXX} --version From 5fece522d24344c0294f6d35ceff9aab6bcd94dd Mon Sep 17 00:00:00 2001 From: Herbert Thielen Date: Mon, 4 Sep 2017 18:56:52 +0200 Subject: [PATCH 08/13] limit processors to use in Travis build to 4 --- travis.sh | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/travis.sh b/travis.sh index 3a6c297a..24a557e9 100755 --- a/travis.sh +++ b/travis.sh @@ -5,10 +5,19 @@ set -evx # otherwise take 2 processors as reasonable default; see # https://docs.travis-ci.com/user/speeding-up-the-build/#Makefile-optimization if [ -x /usr/bin/getconf ]; then - MAKEFLAGS=j$(/usr/bin/getconf _NPROCESSORS_ONLN) + NPROCESSORS=$(/usr/bin/getconf _NPROCESSORS_ONLN) else - MAKEFLAGS="j2" + NPROCESSORS=2 fi +# as of 2017-09-04 Travis CI reports 32 processors, but GCC build +# crashes if parallelized too much (maybe memory consumption problem), +# so limit to 4 processors for the time being. +if [ $NPROCESSORS -gt 4 ] ; then + echo "$0:Note: Limiting processors to use by make from $NPROCESSORS to 4." + NPROCESSORS=4 +fi +# Tell make to use the processors. No preceding '-' required. +MAKEFLAGS="j${NPROCESSORS}" export MAKEFLAGS env | sort From 28a92c63f3f77f3897c0cd6483ad8d9c96b47899 Mon Sep 17 00:00:00 2001 From: Herbert Thielen Date: Tue, 5 Sep 2017 15:23:55 +0200 Subject: [PATCH 09/13] call clang via ccache on Linux --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index b7ee780b..c63909d9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,7 +7,7 @@ install: # /usr/bin/gcc is 4.6 always, but gcc-X.Y is available. - if [ "$CXX" = "g++" ]; then export CXX="g++-4.9" CC="gcc-4.9"; fi # /usr/bin/clang is 3.4, lets override with modern one. -- if [ "$CXX" = "clang++" ] && [ "$TRAVIS_OS_NAME" = "linux" ]; then export CXX="clang++-3.7" CC="clang-3.7"; fi +- if [ "$CXX" = "clang++" ] && [ "$TRAVIS_OS_NAME" = "linux" ]; then export CXX="clang++-3.7" CC="clang-3.7"; ln -sf /usr/bin/ccache /$HOME/bin/$CXX; ln -sf /usr/bin/ccache /$HOME/bin/$CC; fi # ccache on OS X needs installation first - if [ "$TRAVIS_OS_NAME" = "osx" ]; then brew install ccache; export PATH="/usr/local/opt/ccache/libexec:$PATH"; fi - echo ${PATH} From 8d94cdedb5b8e7db9b2c5ec64fa2d99e5e0b11d6 Mon Sep 17 00:00:00 2001 From: Herbert Thielen Date: Tue, 5 Sep 2017 13:53:31 +0200 Subject: [PATCH 10/13] show ccache statistics in log --- .travis.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.travis.yml b/.travis.yml index c63909d9..31cea0a1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -33,6 +33,9 @@ os: - osx language: cpp cache: ccache +before_cache: + # print statistics before uploading new cache + - ccache --show-stats compiler: - gcc - clang From 2d1bdd7b090b761490e6e854db443be2e5350e5e Mon Sep 17 00:00:00 2001 From: Herbert Thielen Date: Tue, 5 Sep 2017 15:46:34 +0200 Subject: [PATCH 11/13] reset ccache statistics at install --- .travis.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.travis.yml b/.travis.yml index 31cea0a1..ad6dc19c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,6 +10,8 @@ install: - if [ "$CXX" = "clang++" ] && [ "$TRAVIS_OS_NAME" = "linux" ]; then export CXX="clang++-3.7" CC="clang-3.7"; ln -sf /usr/bin/ccache /$HOME/bin/$CXX; ln -sf /usr/bin/ccache /$HOME/bin/$CC; fi # ccache on OS X needs installation first - if [ "$TRAVIS_OS_NAME" = "osx" ]; then brew install ccache; export PATH="/usr/local/opt/ccache/libexec:$PATH"; fi +# reset ccache statistics +- ccache --zero-stats - echo ${PATH} - echo ${CXX} - ${CXX} --version From 2e0281378f68cc8082d80d05053b82fd1a381f91 Mon Sep 17 00:00:00 2001 From: Herbert Thielen Date: Tue, 5 Sep 2017 17:39:04 +0200 Subject: [PATCH 12/13] drop unused valgrind package from installation ... and remove explicit gcc installation (will be installed with g++ automatically) --- .travis.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 417d2c51..164bfae7 100644 --- a/.travis.yml +++ b/.travis.yml @@ -22,10 +22,8 @@ addons: - ubuntu-toolchain-r-test - llvm-toolchain-precise-3.7 packages: - - gcc-4.9 - g++-4.9 - clang-3.7 - - valgrind os: - linux - osx From c9ca8d74ddee9ea3f4d0f97642e4c8c606ae093f Mon Sep 17 00:00:00 2001 From: Herbert Thielen Date: Thu, 7 Sep 2017 17:33:19 +0200 Subject: [PATCH 13/13] use GTEST_ATTRIBUTE_UNUSED_ instead of dummy function --- googletest/test/gtest_unittest.cc | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/googletest/test/gtest_unittest.cc b/googletest/test/gtest_unittest.cc index 78f3ee2b..745c9506 100644 --- a/googletest/test/gtest_unittest.cc +++ b/googletest/test/gtest_unittest.cc @@ -2096,7 +2096,7 @@ class UnitTestRecordPropertyTestEnvironment : public Environment { }; // This will test property recording outside of any test or test case. -Environment* record_property_env = +Environment* record_property_env GTEST_ATTRIBUTE_UNUSED_ = AddGlobalTestEnvironment(new UnitTestRecordPropertyTestEnvironment); // This group of tests is for predicate assertions (ASSERT_PRED*, etc) @@ -4188,12 +4188,6 @@ TEST(AssertionSyntaxTest, WorksWithConst) { } // namespace -// we don't use the variable further, just avoid compiler warning -// by defining a function which uses it -void dummy_use_of_record_property_env() { - (void) record_property_env; -} - namespace testing { // Tests that Google Test tracks SUCCEED*.