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

Overwork warning flags #2936

Merged
merged 18 commits into from
Aug 17, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 26 additions & 5 deletions cmake/ci.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -88,21 +88,36 @@ file(GLOB_RECURSE SRC_FILES ${PROJECT_SOURCE_DIR}/include/nlohmann/*.hpp)
# Thorough check with recent compilers
###############################################################################

# Ignored Clang warnings:
# -Wno-c++98-compat The library targets C++11.
# -Wno-c++98-compat-pedantic The library targets C++11.
# -Wno-deprecated-declarations The library contains annotations for deprecated functions.
# -Wno-extra-semi-stmt The library uses std::assert which triggers this warning.
# -Wno-padded We do not care about padding warnings.
# -Wno-covered-switch-default All switches list all cases and a default case.
# -Wno-weak-vtables The library is header-only.

set(CLANG_CXXFLAGS "-std=c++11 \
-Werror \
-Weverything \
-Wno-c++98-compat \
-Wno-c++98-compat-pedantic \
-Wno-deprecated-declarations \
-Wno-documentation-unknown-command \
-Wno-exit-time-destructors \
-Wno-extra-semi-stmt \
-Wno-padded \
-Wno-range-loop-analysis \
-Wno-covered-switch-default \
-Wno-weak-vtables \
")

# Ignored GCC warnings:
# -Wno-abi-tag We do not care about ABI tags.
# -Wno-aggregate-return The library uses aggregate returns.
# -Wno-long-long The library uses the long long type to interface with system functions.
# -Wno-namespaces The library uses namespaces.
# -Wno-padded We do not care about padding warnings.
# -Wno-system-headers We do not care about warnings in system headers.
# -Wno-templates The library uses templates.

set(GCC_CXXFLAGS "-std=c++11 \
-pedantic \
-Werror \
Expand Down Expand Up @@ -203,10 +218,16 @@ set(GCC_CXXFLAGS "-std=c++11 \
-Wextra-semi \
-Wfloat-conversion \
-Wfloat-equal \
-Wformat-contains-nul \
-Wformat-diag \
-Wformat-extra-args \
-Wformat-nonliteral \
-Wformat-overflow=2 \
-Wformat-security \
-Wformat-signedness \
-Wformat-truncation=2 \
-Wformat-y2k \
-Wformat-zero-length \
-Wformat=2 \
-Wframe-address \
-Wfree-nonheap-object \
Expand Down Expand Up @@ -249,7 +270,7 @@ set(GCC_CXXFLAGS "-std=c++11 \
-Wmultistatement-macros \
-Wno-namespaces \
-Wnarrowing \
-Wno-noexcept \
-Wnoexcept \
-Wnoexcept-type \
-Wnon-template-friend \
-Wnon-virtual-dtor \
Expand Down Expand Up @@ -277,7 +298,7 @@ set(GCC_CXXFLAGS "-std=c++11 \
-Wpragmas \
-Wprio-ctor-dtor \
-Wpsabi \
-Wno-range-loop-construct \
-Wrange-loop-construct \
-Wredundant-decls \
-Wredundant-move \
-Wredundant-tags \
Expand Down
2 changes: 1 addition & 1 deletion doc/mkdocs/docs/api/basic_json/binary_t.md
Original file line number Diff line number Diff line change
Expand Up @@ -64,4 +64,4 @@ type `#!cpp binary_t*` must be dereferenced.

## Version history

- Added in version 3.8.0. Changed type of subtype to `std::uint64_t` in version 3.9.2.
- Added in version 3.8.0. Changed type of subtype to `std::uint64_t` in version 3.10.0.
2 changes: 1 addition & 1 deletion doc/mkdocs/docs/api/basic_json/cbor_tag_handler_t.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,4 @@ store

## Version history

- Added in version 3.9.0. Added value `store` in 3.9.2.
- Added in version 3.9.0. Added value `store` in 3.10.0.
4 changes: 2 additions & 2 deletions include/nlohmann/byte_container_with_subtype.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ order to override the binary type.
@tparam BinaryType container to store bytes (`std::vector<std::uint8_t>` by
default)

@since version 3.8.0; changed type of subtypes to std::uint64_t in 3.9.2.
@since version 3.8.0; changed type of subtypes to std::uint64_t in 3.10.0.
*/
template<typename BinaryType>
class byte_container_with_subtype : public BinaryType
Expand Down Expand Up @@ -108,7 +108,7 @@ class byte_container_with_subtype : public BinaryType
subtype

@since version 3.8.0; fixed return value to properly return
subtype_type(-1) as documented in version 3.9.2
subtype_type(-1) as documented in version 3.10.0
*/
constexpr subtype_type subtype() const noexcept
{
Expand Down
5 changes: 3 additions & 2 deletions include/nlohmann/detail/macro_scope.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,9 @@

// disable documentation warnings on clang
#if defined(__clang__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdocumentation"
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdocumentation"
#pragma clang diagnostic ignored "-Wdocumentation-unknown-command"
#endif

// allow to disable exceptions
Expand Down
4 changes: 2 additions & 2 deletions include/nlohmann/detail/macro_unscope.hpp
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
#pragma once

// restore GCC/clang diagnostic settings
// restore clang diagnostic settings
#if defined(__clang__)
#pragma GCC diagnostic pop
#pragma clang diagnostic pop
#endif

// clean up
Expand Down
13 changes: 7 additions & 6 deletions single_include/nlohmann/json.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -2250,8 +2250,9 @@ JSON_HEDLEY_DIAGNOSTIC_POP

// disable documentation warnings on clang
#if defined(__clang__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdocumentation"
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdocumentation"
#pragma clang diagnostic ignored "-Wdocumentation-unknown-command"
#endif

// allow to disable exceptions
Expand Down Expand Up @@ -5003,7 +5004,7 @@ order to override the binary type.
@tparam BinaryType container to store bytes (`std::vector<std::uint8_t>` by
default)

@since version 3.8.0; changed type of subtypes to std::uint64_t in 3.9.2.
@since version 3.8.0; changed type of subtypes to std::uint64_t in 3.10.0.
*/
template<typename BinaryType>
class byte_container_with_subtype : public BinaryType
Expand Down Expand Up @@ -5093,7 +5094,7 @@ class byte_container_with_subtype : public BinaryType
subtype

@since version 3.8.0; fixed return value to properly return
subtype_type(-1) as documented in version 3.9.2
subtype_type(-1) as documented in version 3.10.0
*/
constexpr subtype_type subtype() const noexcept
{
Expand Down Expand Up @@ -26423,9 +26424,9 @@ inline nlohmann::json::json_pointer operator "" _json_pointer(const char* s, std
// #include <nlohmann/detail/macro_unscope.hpp>


// restore GCC/clang diagnostic settings
// restore clang diagnostic settings
#if defined(__clang__)
#pragma GCC diagnostic pop
#pragma clang diagnostic pop
#endif

// clean up
Expand Down
14 changes: 9 additions & 5 deletions test/src/unit-assert_macro.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,13 +27,14 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/

// avoid warning when assert does not abort
#if defined(__GNUC__)
#pragma GCC diagnostic ignored "-Wstrict-overflow"
#endif

#include "doctest_compatibility.h"

// avoid warning when assert does not abort
DOCTEST_GCC_SUPPRESS_WARNING_PUSH
DOCTEST_GCC_SUPPRESS_WARNING("-Wstrict-overflow")
DOCTEST_CLANG_SUPPRESS_WARNING_PUSH
DOCTEST_CLANG_SUPPRESS_WARNING("-Wstrict-overflow")

/// global variable to record side effect of assert calls
static int assert_counter;

Expand Down Expand Up @@ -63,3 +64,6 @@ TEST_CASE("JSON_ASSERT(x)")
}
}
#endif

DOCTEST_GCC_SUPPRESS_WARNING_POP
DOCTEST_CLANG_SUPPRESS_WARNING_POP
6 changes: 6 additions & 0 deletions test/src/unit-conversions.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,10 @@ using nlohmann::json;
#define JSON_HAS_CPP_14
#endif

// NLOHMANN_JSON_SERIALIZE_ENUM uses a static std::pair
DOCTEST_CLANG_SUPPRESS_WARNING_PUSH
DOCTEST_CLANG_SUPPRESS_WARNING("-Wexit-time-destructors")

TEST_CASE("value conversion")
{
SECTION("get an object (explicit)")
Expand Down Expand Up @@ -1712,3 +1716,5 @@ TEST_CASE("JSON to enum mapping")
#ifdef JSON_HAS_CPP_14
#undef JSON_HAS_CPP_14
#endif

DOCTEST_CLANG_SUPPRESS_WARNING_POP
6 changes: 6 additions & 0 deletions test/src/unit-disabled_exceptions.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,10 @@ SOFTWARE.

#include "doctest_compatibility.h"

// disable -Wnoexcept as exceptions are switched off for this test suite
DOCTEST_GCC_SUPPRESS_WARNING_PUSH
DOCTEST_GCC_SUPPRESS_WARNING("-Wnoexcept")

#include <nlohmann/json.hpp>
using json = nlohmann::json;

Expand Down Expand Up @@ -64,3 +68,5 @@ TEST_CASE("Tests with disabled exceptions")
delete sax_no_exception::error_string; // NOLINT(cppcoreguidelines-owning-memory)
}
}

DOCTEST_GCC_SUPPRESS_WARNING_POP
9 changes: 9 additions & 0 deletions test/src/unit-items.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,12 @@ using nlohmann::json;
#define JSON_HAS_CPP_14
#endif

// This test suite uses range for loops where values are copied. This is inefficient in usual code, but required to achieve 100% coverage.
DOCTEST_GCC_SUPPRESS_WARNING_PUSH
DOCTEST_GCC_SUPPRESS_WARNING("-Wrange-loop-construct")
DOCTEST_CLANG_SUPPRESS_WARNING_PUSH
DOCTEST_CLANG_SUPPRESS_WARNING("-Wrange-loop-construct")

TEST_CASE("iterator_wrapper")
{
SECTION("object")
Expand Down Expand Up @@ -1456,3 +1462,6 @@ TEST_CASE("items()")
#ifdef JSON_HAS_CPP_14
#undef JSON_HAS_CPP_14
#endif

DOCTEST_GCC_SUPPRESS_WARNING_POP
DOCTEST_CLANG_SUPPRESS_WARNING_POP
12 changes: 5 additions & 7 deletions test/src/unit-json_pointer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -358,10 +358,10 @@ TEST_CASE("JSON pointers")
CHECK_THROWS_WITH(j_const[jp] == 1, throw_msg.c_str());
}

#if defined(_MSC_VER)
#pragma warning (push)
#pragma warning (disable : 4127) // on some machines, the check below is not constant
#endif
// on some machines, the check below is not constant
DOCTEST_MSVC_SUPPRESS_WARNING_PUSH
DOCTEST_MSVC_SUPPRESS_WARNING(4127)

if (sizeof(typename json::size_type) < sizeof(unsigned long long))
{
auto size_type_max_uul = static_cast<unsigned long long>((std::numeric_limits<json::size_type>::max)());
Expand All @@ -375,9 +375,7 @@ TEST_CASE("JSON pointers")
CHECK_THROWS_WITH(j_const[jp] == 1, throw_msg.c_str());
}

#if defined(_MSC_VER)
#pragma warning (pop)
#endif
DOCTEST_MSVC_SUPPRESS_WARNING_POP

CHECK_THROWS_AS(j.at("/one"_json_pointer) = 1, json::parse_error&);
CHECK_THROWS_WITH(j.at("/one"_json_pointer) = 1,
Expand Down
6 changes: 6 additions & 0 deletions test/src/unit-noexcept.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,10 @@ SOFTWARE.

#include "doctest_compatibility.h"

// disable -Wnoexcept due to struct pod_bis
DOCTEST_GCC_SUPPRESS_WARNING_PUSH
DOCTEST_GCC_SUPPRESS_WARNING("-Wnoexcept")

#include <nlohmann/json.hpp>

using nlohmann::json;
Expand Down Expand Up @@ -95,3 +99,5 @@ TEST_CASE("runtime checks")
from_json(j2, pod_bis());
}
}

DOCTEST_GCC_SUPPRESS_WARNING_POP
11 changes: 4 additions & 7 deletions test/src/unit-readme.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -42,10 +42,9 @@ using nlohmann::json;
#include <sstream>
#include <iomanip>

#if defined(_MSC_VER)
#pragma warning (push)
#pragma warning (disable : 4189) // local variable is initialized but not referenced
#endif
// local variable is initialized but not referenced
DOCTEST_MSVC_SUPPRESS_WARNING_PUSH
DOCTEST_MSVC_SUPPRESS_WARNING(4189)

TEST_CASE("README" * doctest::skip())
{
Expand Down Expand Up @@ -321,6 +320,4 @@ TEST_CASE("README" * doctest::skip())
}
}

#if defined(_MSC_VER)
#pragma warning (pop)
#endif
DOCTEST_MSVC_SUPPRESS_WARNING_POP
6 changes: 6 additions & 0 deletions test/src/unit-regression2.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,10 @@ using nlohmann::json;
#include <span>
#endif

// NLOHMANN_JSON_SERIALIZE_ENUM uses a static std::pair
DOCTEST_CLANG_SUPPRESS_WARNING_PUSH
DOCTEST_CLANG_SUPPRESS_WARNING("-Wexit-time-destructors")

/////////////////////////////////////////////////////////////////////
// for #1021
/////////////////////////////////////////////////////////////////////
Expand Down Expand Up @@ -656,3 +660,5 @@ TEST_CASE("regression tests 2")
static_assert(std::is_copy_assignable<nlohmann::ordered_json>::value, "");
}
}

DOCTEST_CLANG_SUPPRESS_WARNING_POP
6 changes: 6 additions & 0 deletions test/src/unit-udt.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,10 @@ SOFTWARE.

#include "doctest_compatibility.h"

// disable -Wnoexcept due to class Evil
DOCTEST_GCC_SUPPRESS_WARNING_PUSH
DOCTEST_GCC_SUPPRESS_WARNING("-Wnoexcept")

#include <nlohmann/json.hpp>
using nlohmann::json;

Expand Down Expand Up @@ -845,3 +849,5 @@ TEST_CASE("Issue #1237")
struct non_convertible_type {};
static_assert(!std::is_convertible<json, non_convertible_type>::value, "");
}

DOCTEST_GCC_SUPPRESS_WARNING_POP
6 changes: 6 additions & 0 deletions test/src/unit-unicode2.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,10 @@ using nlohmann::json;
#include <iomanip>
#include <test_data.hpp>

// this test suite uses static variables with non-trivial destructors
DOCTEST_CLANG_SUPPRESS_WARNING_PUSH
DOCTEST_CLANG_SUPPRESS_WARNING("-Wexit-time-destructors")

namespace
{
extern size_t calls;
Expand Down Expand Up @@ -623,3 +627,5 @@ TEST_CASE("Unicode (2/5)" * doctest::skip())
}
}
}

DOCTEST_CLANG_SUPPRESS_WARNING_POP
6 changes: 6 additions & 0 deletions test/src/unit-unicode3.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,10 @@ using nlohmann::json;
#include <iomanip>
#include <test_data.hpp>

// this test suite uses static variables with non-trivial destructors
DOCTEST_CLANG_SUPPRESS_WARNING_PUSH
DOCTEST_CLANG_SUPPRESS_WARNING("-Wexit-time-destructors")

namespace
{
extern size_t calls;
Expand Down Expand Up @@ -337,3 +341,5 @@ TEST_CASE("Unicode (3/5)" * doctest::skip())
}
}
}

DOCTEST_CLANG_SUPPRESS_WARNING_POP
Loading