This is an automated email from the ASF dual-hosted git repository. rgao pushed a commit to branch branch-2.9 in repository https://gitbox.apache.org/repos/asf/pulsar.git
commit 3101b662f04d113946c73a11940a3211ea809c65 Author: Yunze Xu <[email protected]> AuthorDate: Wed Feb 23 05:41:28 2022 +0800 [C++] Fix GCC compilation failure caused by warning macro (#14402) ### Motivation When I tried to build the C++ client with GCC 7.3 and when warnings are printed (because `BOOST_ARCH_X86_64` is not defined), the compilation failed with: ``` #warning “BOOST_ARCH_X86_64 is not defined, CRC32C SSE4.2 will be disabled” ^~~~~~~ cc1plus: error: unrecognized command line option '-Wno-stringop-truncation' [-Werror] cc1plus: all warnings being treated as errors ``` It seems to be a bug before GCC 8.1. I added `-DCMAKE_VERBOSE_MAKEFILE=ON` to CMake command and see the full compile command: ``` -Wno-error -Wall -Wformat-security -Wvla -Werror -Wno-sign-compare -Wno-deprecated-declarations -Wno-error=cpp -Wno-stringop-truncation ``` See https://github.com/apache/pulsar/blob/b829a4ce121268f55748bbdd6f19ac36129e7dab/pulsar-client-cpp/CMakeLists.txt#L105-L106 For GCC > 4.9, `-Wno-stringop-truncation` option was added. However, when a message was printed by `#warning` macro, it would fail with the strange error message. The simplest way to reproduce the bug is compiling following code: ```c++ #warnings "hello" int main() {} ``` You can paste the code above to https://godbolt.org/, select any GCC compiler whose version is lower than 8.0, then add the following options: ``` -Werror -Wno-error=cpp -Wno-stringop-truncation ``` The compilation failed for x86-64 gcc 7.5 while it succeeded for 8.1. ### Modifications Only add the `-Wno-stringop-truncation` option for GCC >= 8.1. (cherry picked from commit 958fc7820106c9b4da33f1b720d1dcce8ff772b1) --- pulsar-client-cpp/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pulsar-client-cpp/CMakeLists.txt b/pulsar-client-cpp/CMakeLists.txt index 3fadb05..2d98281 100644 --- a/pulsar-client-cpp/CMakeLists.txt +++ b/pulsar-client-cpp/CMakeLists.txt @@ -99,7 +99,7 @@ else() # GCC or Clang are mostly compatible: # Options unique to Clang or GCC: if (CMAKE_CXX_COMPILER_ID MATCHES "Clang") add_compile_options(-Qunused-arguments) - elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND NOT (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.9)) + elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND NOT (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 8.1)) add_compile_options(-Wno-stringop-truncation) endif() endif()
