Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Prevent -Weffc++ and -W-ctor-dtor-privacy warnings from leaking out #2927

Open
Adda0 opened this issue Oct 31, 2024 · 0 comments
Open

Prevent -Weffc++ and -W-ctor-dtor-privacy warnings from leaking out #2927

Adda0 opened this issue Oct 31, 2024 · 0 comments

Comments

@Adda0
Copy link

Adda0 commented Oct 31, 2024

Description
I updated Catch2 used in my project from some old Catch2v2 version to v3. When including Catch2 in my project tests through the CMake fetcher as a dependency, compiling the project with Clang (clang 17.0.6) does not issue any warnings, but compiling with GCC (g++ 13.3.0) issues a number of -Weffc++ and -W-ctod-dtor-privacy warnings.

I presume the code in Catch2 is supposed to behave as it does. Therefore, suppressing these warnings on a per-header file level should be the correct answer (or anything similar to this) to removing these warnings, while still allowing the users of Catch2 to include specific header files with the warnings set up for their tests source code.

Steps to reproduce
CMake snippet:

    if (BUILD_TESTING)
        # Catch2 library for writing tests
        FetchContent_Declare(
        Catch2
        GIT_REPOSITORY https://github.com/catchorg/Catch2.git
        GIT_TAG        v3.7.1
        )
        FetchContent_MakeAvailable(Catch2)
        list(APPEND CMAKE_MODULE_PATH ${Catch2_SOURCE_DIR}/contrib)
        include(Catch)
    endif()

target_link_libraries(tests PRIVATE <project files> Catch2::Catch2WithMain)

Tests source C++ file:

#include <catch2/catch_test_macros.hpp>
#include <catch2/matchers/catch_matchers_string.hpp>

// Tests.

Additional context
Generated warnings:

  • (binary) user-defined <some class>::operator ... always evaluates both arguments,
  • all member functions in class <some class> are private,
  • <some class> has pointer data members ... but does not declare ...,
  • ...
    Log of the build process: warnings.txt.

Suggested alternative
There are a number of options to suppress these warnings.

Manually, each user can disable the warnings for each test source file, for example by wrapping the includes of Catch2 headers in pragmas:

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Weffc++"
#include <catch2/catch_test_macros.hpp>
#include <catch2/matchers/catch_matchers_string.hpp>
#pragma GCC diagnostic pop

I also managed to suppress the warnings on a per-project basis by setting the Catch2 library as a system library in CMake: (include inside the above-mentioned CMake code after the line include(Catch)):

        get_target_property(catch2_includes Catch2 INTERFACE_INCLUDE_DIRECTORIES)
        target_include_directories(Catch2 SYSTEM INTERFACE ${catch2_includes})

Nevertheless, I think that the preferred approach would be to suppress these warnings on the Catch2 side once and for all (whichever approach is chosen), as opposed to forcing each user of Catch2 to suppress the warnings manually in their projects.

Related issues
#208
#407

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant