Patch protobuf to fix the compilation error C4146 in wire_format_lite.h (#3353)

Fixes #3352
This commit is contained in:
Jozef Izso 2018-05-31 19:38:42 +02:00 committed by Robert Schumacher
parent 5a67a5fa29
commit 6c8c96aad1
3 changed files with 37 additions and 1 deletions

View File

@ -1,5 +1,5 @@
Source: protobuf
Version: 3.5.1-4
Version: 3.5.1-5
Description: Protocol Buffers - Google's data interchange format
Feature: zlib

View File

@ -20,6 +20,7 @@ vcpkg_apply_patches(
"${CMAKE_CURRENT_LIST_DIR}/export-ParseGeneratorParameter.patch"
"${CMAKE_CURRENT_LIST_DIR}/js-embed.patch"
"${CMAKE_CURRENT_LIST_DIR}/fix-uwp.patch"
"${CMAKE_CURRENT_LIST_DIR}/wire_format_lite_h_fix_error_C4146.patch"
)
if(CMAKE_HOST_WIN32)

View File

@ -0,0 +1,35 @@
From 24493eef9395e5b832360e12efabf9c363c9cb15 Mon Sep 17 00:00:00 2001
From: Rodrigo Hernandez <kwizatz@aeongames.com>
Date: Mon, 4 Dec 2017 19:04:42 -0600
Subject: [PATCH] Using binary one's complement to negate an unsigned int
This removes a Visual Studio warning:
warning C4146: unary minus operator applied to unsigned type, result
still unsigned.
---
src/google/protobuf/wire_format_lite.h | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/google/protobuf/wire_format_lite.h b/src/google/protobuf/wire_format_lite.h
index cf614c02a4..361920b8ec 100644
--- a/src/google/protobuf/wire_format_lite.h
+++ b/src/google/protobuf/wire_format_lite.h
@@ -860,7 +860,7 @@ inline uint32 WireFormatLite::ZigZagEncode32(int32 n) {
inline int32 WireFormatLite::ZigZagDecode32(uint32 n) {
// Note: Using unsigned types prevent undefined behavior
- return static_cast<int32>((n >> 1) ^ -(n & 1));
+ return static_cast<int32>((n >> 1) ^ (~(n & 1) + 1));
}
inline uint64 WireFormatLite::ZigZagEncode64(int64 n) {
@@ -871,7 +871,7 @@ inline uint64 WireFormatLite::ZigZagEncode64(int64 n) {
inline int64 WireFormatLite::ZigZagDecode64(uint64 n) {
// Note: Using unsigned types prevent undefined behavior
- return static_cast<int64>((n >> 1) ^ -(n & 1));
+ return static_cast<int64>((n >> 1) ^ (~(n & 1) + 1));
}
// String is for UTF-8 text only, but, even so, ReadString() can simply