Two Windows-specific fixes for protobuf. Undefine Windows `FAR` macro in protobuf headers and specify explicit pointer return types in `ArenaPtrCmpBase::Unpack`. On Windows, `<windef.h>` defines `FAR` as an empty macro, which collides with generated C++ protobuf enum values and identifiers named `FAR`. Push and undefine `FAR` in os_macros_undef.inc and restore it in os_macros_restore.inc alongside `NEAR`. Additionally, specify `T*` instead of deduced `auto` on the `PROTOBUF_NULLABLE` / `PROTOBUF_NONNULL` `ArenaPtrCmpBase::Unpack` overloads in arena.h to avoid a Clang Microsoft C++ ABI name-mangler segfault when mangling dependent trailing-return-type `operator==` instantiations on Windows. PiperOrigin-RevId: 999805821
diff --git a/src/google/protobuf/arena.h b/src/google/protobuf/arena.h index 7e0833a..6ba0309 100644 --- a/src/google/protobuf/arena.h +++ b/src/google/protobuf/arena.h
@@ -866,13 +866,12 @@ } template <typename T> - static auto PROTOBUF_NULLABLE - Unpack(const typename Arena::UniquePtr<T>& ptr) { + static T* PROTOBUF_NULLABLE Unpack(const typename Arena::UniquePtr<T>& ptr) { return ptr.get(); } template <typename T> - static auto PROTOBUF_NONNULL + static T* PROTOBUF_NONNULL Unpack(const typename Arena::template Ptr<T>& ptr) { return ptr.get(); }
diff --git a/src/google/protobuf/os_macros_restore.inc b/src/google/protobuf/os_macros_restore.inc index 4d1e3e1..631174c 100644 --- a/src/google/protobuf/os_macros_restore.inc +++ b/src/google/protobuf/os_macros_restore.inc
@@ -47,6 +47,7 @@ #pragma pop_macro("ERROR_NOT_FOUND") #pragma pop_macro("ERROR_RETRY") #pragma pop_macro("ERROR_TIMEOUT") +#pragma pop_macro("FAR") #pragma pop_macro("GetClassName") #pragma pop_macro("GetCurrentTime") #pragma pop_macro("GetMessage")
diff --git a/src/google/protobuf/os_macros_undef.inc b/src/google/protobuf/os_macros_undef.inc index 985f62a..8d961ae 100644 --- a/src/google/protobuf/os_macros_undef.inc +++ b/src/google/protobuf/os_macros_undef.inc
@@ -73,6 +73,8 @@ #undef ERROR_RETRY #pragma push_macro("ERROR_TIMEOUT") #undef ERROR_TIMEOUT +#pragma push_macro("FAR") +#undef FAR #pragma push_macro("GetClassName") #undef GetClassName #pragma push_macro("GetCurrentTime")