diff --git a/src/google/protobuf/port_def.inc b/src/google/protobuf/port_def.inc index 6c6aa1834b..37567f90bc 100644 --- a/src/google/protobuf/port_def.inc +++ b/src/google/protobuf/port_def.inc @@ -879,13 +879,45 @@ #undef DEBUG #endif // defined(__clang__) || PROTOBUF_GNUC_MIN(3, 0) || defined(_MSC_VER) -#if PROTOBUF_GNUC_MIN(3, 0) +// Protobuf does not support building with a number of warnings that are noisy +// (and of variable quality across compiler versions) or impossible to implement +// effectively but which people turn on anyways. +#ifdef __clang__ +#pragma clang diagnostic push +// -Wshorten-64-to-32 is a typical pain where we diff pointers. +// char* p = strchr(s, '\n'); +// return p ? p - s : -1; +#pragma clang diagnostic ignored "-Wshorten-64-to-32" +// Turn on -Wdeprecated-enum-enum-conversion. This deprecation comes in C++20 +// via http://wg21.link/p1120r0. +#pragma clang diagnostic error "-Wdeprecated-enum-enum-conversion" +// This error has been generally flaky, but we need to disable it specifically +// to fix https://github.com/protocolbuffers/protobuf/issues/12313 +#pragma clang diagnostic ignored "-Wunused-parameter" +#endif +#ifdef __GNUC__ +#pragma GCC diagnostic push +// Some of the warnings below only exist in some GCC versions; those version +// ranges are poorly documented. +#pragma GCC diagnostic ignored "-Wpragmas" // GCC does not allow disabling diagnostics within an expression: // https://gcc.gnu.org/bugzilla/show_bug.cgi?id=60875, so we disable this one // globally even though it's only used for PROTOBUF_FIELD_OFFSET. -#pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Winvalid-offsetof" -#endif +// Some versions of GCC seem to think that +// [this] { Foo(); } +// leaves `this` unused, even though `Foo();` is a member function of the +// captured `this`. +// https://bugzilla.mozilla.org/show_bug.cgi?id=1373625 +#pragma GCC diagnostic ignored "-Wunused-lambda-capture" +// -Wsign-conversion causes a lot of warnings on mostly code like: +// int index = ... +// int value = vec[index]; +#pragma GCC diagnostic ignored "-Wsign-conversion" +// This error has been generally flaky, but we need to disable it specifically +// to fix https://github.com/protocolbuffers/protobuf/issues/12313 +#pragma GCC diagnostic ignored "-Wunused-parameter" +#endif // __GNUC__ // Silence some MSVC warnings in all our code. #ifdef _MSC_VER diff --git a/src/google/protobuf/port_undef.inc b/src/google/protobuf/port_undef.inc index e880fa5c59..407b748e81 100644 --- a/src/google/protobuf/port_undef.inc +++ b/src/google/protobuf/port_undef.inc @@ -154,6 +154,10 @@ #pragma GCC diagnostic pop #endif +#ifdef __clang__ +#pragma clang diagnostic pop +#endif + // Pop the warning(push) from port_def.inc #ifdef _MSC_VER #pragma warning(pop)