mirror of
https://github.com/pybind/pybind11.git
synced 2026-04-19 22:39:09 +00:00
Introduce a new style of warning suppression based on push/pop (#4285)
* Introduce a new warning suppression system * Switch to better name * Nits
This commit is contained in:
@@ -73,6 +73,9 @@ PYBIND11_NAMESPACE_END(detail)
|
||||
PYBIND11_NAMESPACE_END(pybind11)
|
||||
|
||||
TEST_SUBMODULE(builtin_casters, m) {
|
||||
PYBIND11_WARNING_PUSH
|
||||
PYBIND11_WARNING_DISABLE_MSVC(4127)
|
||||
|
||||
// test_simple_string
|
||||
m.def("string_roundtrip", [](const char *s) { return s; });
|
||||
|
||||
@@ -86,7 +89,7 @@ TEST_SUBMODULE(builtin_casters, m) {
|
||||
std::wstring wstr;
|
||||
wstr.push_back(0x61); // a
|
||||
wstr.push_back(0x2e18); // ⸘
|
||||
if (PYBIND11_SILENCE_MSVC_C4127(sizeof(wchar_t) == 2)) {
|
||||
if (sizeof(wchar_t) == 2) {
|
||||
wstr.push_back(mathbfA16_1);
|
||||
wstr.push_back(mathbfA16_2);
|
||||
} // 𝐀, utf16
|
||||
@@ -113,7 +116,7 @@ TEST_SUBMODULE(builtin_casters, m) {
|
||||
// Under Python 2.7, invalid unicode UTF-32 characters didn't appear to trigger
|
||||
// UnicodeDecodeError
|
||||
m.def("bad_utf32_string", [=]() { return std::u32string({a32, char32_t(0xd800), z32}); });
|
||||
if (PYBIND11_SILENCE_MSVC_C4127(sizeof(wchar_t) == 2)) {
|
||||
if (sizeof(wchar_t) == 2) {
|
||||
m.def("bad_wchar_string", [=]() {
|
||||
return std::wstring({wchar_t(0x61), wchar_t(0xd800)});
|
||||
});
|
||||
@@ -384,4 +387,6 @@ TEST_SUBMODULE(builtin_casters, m) {
|
||||
m.def("takes_const_ref", [](const ConstRefCasted &x) { return x.tag; });
|
||||
m.def("takes_const_ref_wrap",
|
||||
[](std::reference_wrapper<const ConstRefCasted> x) { return x.get().tag; });
|
||||
|
||||
PYBIND11_WARNING_POP
|
||||
}
|
||||
|
||||
@@ -22,10 +22,8 @@
|
||||
|
||||
#include <utility>
|
||||
|
||||
#if defined(_MSC_VER)
|
||||
# pragma warning(disable : 4324)
|
||||
PYBIND11_WARNING_DISABLE_MSVC(4324)
|
||||
// warning C4324: structure was padded due to alignment specifier
|
||||
#endif
|
||||
|
||||
// test_brace_initialization
|
||||
struct NoBraceInitialization {
|
||||
|
||||
@@ -52,15 +52,12 @@ int f1(int x) noexcept { return x + 1; }
|
||||
#endif
|
||||
int f2(int x) noexcept(true) { return x + 2; }
|
||||
int f3(int x) noexcept(false) { return x + 3; }
|
||||
#if defined(__GNUG__) && !defined(__INTEL_COMPILER)
|
||||
# pragma GCC diagnostic push
|
||||
# pragma GCC diagnostic ignored "-Wdeprecated"
|
||||
#endif
|
||||
PYBIND11_WARNING_PUSH
|
||||
PYBIND11_WARNING_DISABLE_GCC("-Wdeprecated")
|
||||
PYBIND11_WARNING_DISABLE_CLANG("-Wdeprecated")
|
||||
// NOLINTNEXTLINE(modernize-use-noexcept)
|
||||
int f4(int x) throw() { return x + 4; } // Deprecated equivalent to noexcept(true)
|
||||
#if defined(__GNUG__) && !defined(__INTEL_COMPILER)
|
||||
# pragma GCC diagnostic pop
|
||||
#endif
|
||||
PYBIND11_WARNING_POP
|
||||
struct C {
|
||||
int m1(int x) noexcept { return x - 1; }
|
||||
int m2(int x) const noexcept { return x - 2; }
|
||||
@@ -68,17 +65,14 @@ struct C {
|
||||
int m4(int x) const noexcept(true) { return x - 4; }
|
||||
int m5(int x) noexcept(false) { return x - 5; }
|
||||
int m6(int x) const noexcept(false) { return x - 6; }
|
||||
#if defined(__GNUG__) && !defined(__INTEL_COMPILER)
|
||||
# pragma GCC diagnostic push
|
||||
# pragma GCC diagnostic ignored "-Wdeprecated"
|
||||
#endif
|
||||
PYBIND11_WARNING_PUSH
|
||||
PYBIND11_WARNING_DISABLE_GCC("-Wdeprecated")
|
||||
PYBIND11_WARNING_DISABLE_CLANG("-Wdeprecated")
|
||||
// NOLINTNEXTLINE(modernize-use-noexcept)
|
||||
int m7(int x) throw() { return x - 7; }
|
||||
// NOLINTNEXTLINE(modernize-use-noexcept)
|
||||
int m8(int x) const throw() { return x - 8; }
|
||||
#if defined(__GNUG__) && !defined(__INTEL_COMPILER)
|
||||
# pragma GCC diagnostic pop
|
||||
#endif
|
||||
PYBIND11_WARNING_POP
|
||||
};
|
||||
} // namespace test_exc_sp
|
||||
|
||||
@@ -126,14 +120,12 @@ TEST_SUBMODULE(constants_and_functions, m) {
|
||||
.def("m8", &C::m8);
|
||||
m.def("f1", f1);
|
||||
m.def("f2", f2);
|
||||
#if defined(__INTEL_COMPILER)
|
||||
# pragma warning push
|
||||
# pragma warning disable 878 // incompatible exception specifications
|
||||
#endif
|
||||
|
||||
PYBIND11_WARNING_PUSH
|
||||
PYBIND11_WARNING_DISABLE_INTEL(878) // incompatible exception specifications
|
||||
m.def("f3", f3);
|
||||
#if defined(__INTEL_COMPILER)
|
||||
# pragma warning pop
|
||||
#endif
|
||||
PYBIND11_WARNING_POP
|
||||
|
||||
m.def("f4", f4);
|
||||
|
||||
// test_function_record_leaks
|
||||
|
||||
@@ -13,9 +13,7 @@
|
||||
#include "constructor_stats.h"
|
||||
#include "pybind11_tests.h"
|
||||
|
||||
#if defined(_MSC_VER)
|
||||
# pragma warning(disable : 4996) // C4996: std::unary_negation is deprecated
|
||||
#endif
|
||||
PYBIND11_WARNING_DISABLE_MSVC(4996)
|
||||
|
||||
#include <Eigen/Cholesky>
|
||||
|
||||
|
||||
@@ -9,7 +9,9 @@
|
||||
|
||||
#include "pybind11_tests.h"
|
||||
|
||||
namespace PYBIND11_TEST_EIGEN_TENSOR_NAMESPACE {
|
||||
PYBIND11_NAMESPACE_BEGIN(PYBIND11_TEST_EIGEN_TENSOR_NAMESPACE)
|
||||
|
||||
PYBIND11_WARNING_DISABLE_MSVC(4127)
|
||||
|
||||
template <typename M>
|
||||
void reset_tensor(M &x) {
|
||||
@@ -90,7 +92,7 @@ struct CustomExample {
|
||||
template <int Options>
|
||||
void init_tensor_module(pybind11::module &m) {
|
||||
const char *needed_options = "";
|
||||
if (PYBIND11_SILENCE_MSVC_C4127(Options == Eigen::ColMajor)) {
|
||||
if (Options == Eigen::ColMajor) {
|
||||
needed_options = "F";
|
||||
} else {
|
||||
needed_options = "C";
|
||||
@@ -330,4 +332,4 @@ void test_module(py::module_ &m) {
|
||||
init_tensor_module<Eigen::RowMajor>(c_style);
|
||||
}
|
||||
|
||||
} // namespace PYBIND11_TEST_EIGEN_TENSOR_NAMESPACE
|
||||
PYBIND11_NAMESPACE_END(PYBIND11_TEST_EIGEN_TENSOR_NAMESPACE)
|
||||
|
||||
@@ -3,11 +3,9 @@
|
||||
|
||||
#include <pybind11/embed.h>
|
||||
|
||||
#ifdef _MSC_VER
|
||||
// Silence MSVC C++17 deprecation warning from Catch regarding std::uncaught_exceptions (up to
|
||||
// catch 2.0.1; this should be fixed in the next catch release after 2.0.1).
|
||||
# pragma warning(disable : 4996)
|
||||
#endif
|
||||
PYBIND11_WARNING_DISABLE_MSVC(4996)
|
||||
|
||||
// Catch uses _ internally, which breaks gettext style defines
|
||||
#ifdef _
|
||||
|
||||
@@ -1,10 +1,8 @@
|
||||
#include <pybind11/embed.h>
|
||||
|
||||
#ifdef _MSC_VER
|
||||
// Silence MSVC C++17 deprecation warning from Catch regarding std::uncaught_exceptions (up to
|
||||
// catch 2.0.1; this should be fixed in the next catch release after 2.0.1).
|
||||
# pragma warning(disable : 4996)
|
||||
#endif
|
||||
PYBIND11_WARNING_DISABLE_MSVC(4996)
|
||||
|
||||
#include <catch.hpp>
|
||||
#include <cstdlib>
|
||||
|
||||
@@ -44,14 +44,13 @@ TEST_SUBMODULE(kwargs_and_defaults, m) {
|
||||
|
||||
// test_args_and_kwargs
|
||||
m.def("args_function", [](py::args args) -> py::tuple {
|
||||
PYBIND11_WARNING_PUSH
|
||||
|
||||
#ifdef PYBIND11_DETECTED_CLANG_WITH_MISLEADING_CALL_STD_MOVE_EXPLICITLY_WARNING
|
||||
# pragma clang diagnostic push
|
||||
# pragma clang diagnostic ignored "-Wreturn-std-move"
|
||||
PYBIND11_WARNING_DISABLE_CLANG("-Wreturn-std-move")
|
||||
#endif
|
||||
return args;
|
||||
#ifdef PYBIND11_DETECTED_CLANG_WITH_MISLEADING_CALL_STD_MOVE_EXPLICITLY_WARNING
|
||||
# pragma clang diagnostic pop
|
||||
#endif
|
||||
PYBIND11_WARNING_POP
|
||||
});
|
||||
m.def("args_kwargs_function", [](const py::args &args, const py::kwargs &kwargs) {
|
||||
return py::make_tuple(args, kwargs);
|
||||
|
||||
@@ -132,22 +132,18 @@ struct hash<HashMe> {
|
||||
// Not a good abs function, but easy to test.
|
||||
std::string abs(const Vector2 &) { return "abs(Vector2)"; }
|
||||
|
||||
// MSVC & Intel warns about unknown pragmas, and warnings are errors.
|
||||
#if !defined(_MSC_VER) && !defined(__INTEL_COMPILER)
|
||||
# pragma GCC diagnostic push
|
||||
// clang 7.0.0 and Apple LLVM 10.0.1 introduce `-Wself-assign-overloaded` to
|
||||
// `-Wall`, which is used here for overloading (e.g. `py::self += py::self `).
|
||||
// Here, we suppress the warning using `#pragma diagnostic`.
|
||||
// Here, we suppress the warning
|
||||
// Taken from: https://github.com/RobotLocomotion/drake/commit/aaf84b46
|
||||
// TODO(eric): This could be resolved using a function / functor (e.g. `py::self()`).
|
||||
# if defined(__APPLE__) && defined(__clang__)
|
||||
# if (__clang_major__ >= 10)
|
||||
# pragma GCC diagnostic ignored "-Wself-assign-overloaded"
|
||||
# endif
|
||||
# elif defined(__clang__)
|
||||
# if (__clang_major__ >= 7)
|
||||
# pragma GCC diagnostic ignored "-Wself-assign-overloaded"
|
||||
# endif
|
||||
#if defined(__APPLE__) && defined(__clang__)
|
||||
# if (__clang_major__ >= 10)
|
||||
PYBIND11_WARNING_DISABLE_CLANG("-Wself-assign-overloaded")
|
||||
# endif
|
||||
#elif defined(__clang__)
|
||||
# if (__clang_major__ >= 7)
|
||||
PYBIND11_WARNING_DISABLE_CLANG("-Wself-assign-overloaded")
|
||||
# endif
|
||||
#endif
|
||||
|
||||
@@ -283,6 +279,3 @@ TEST_SUBMODULE(operators, m) {
|
||||
|
||||
m.def("get_unhashable_HashMe_set", []() { return std::unordered_set<HashMe>{{"one"}}; });
|
||||
}
|
||||
#if !defined(_MSC_VER) && !defined(__INTEL_COMPILER)
|
||||
# pragma GCC diagnostic pop
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user