You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pulsar.apache.org by pe...@apache.org on 2022/02/25 07:58:26 UTC

[pulsar] 07/13: [C++] Fix GCC compilation failure caused by warning macro (#14402)

This is an automated email from the ASF dual-hosted git repository.

penghui pushed a commit to branch branch-2.10
in repository https://gitbox.apache.org/repos/asf/pulsar.git

commit 177b797bffe52b82b46179528983a0e95032ec79
Author: Yunze Xu <xy...@163.com>
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 3c43aa5..24db7da 100644
--- a/pulsar-client-cpp/CMakeLists.txt
+++ b/pulsar-client-cpp/CMakeLists.txt
@@ -102,7 +102,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()