Sync from Piper @310014675 PROTOBUF_SYNC_PIPER
diff --git a/csharp/src/Google.Protobuf.Test.TestProtos/UnittestProto3Optional.cs b/csharp/src/Google.Protobuf.Test.TestProtos/UnittestProto3Optional.cs index cbad589..d7aea6b 100644 --- a/csharp/src/Google.Protobuf.Test.TestProtos/UnittestProto3Optional.cs +++ b/csharp/src/Google.Protobuf.Test.TestProtos/UnittestProto3Optional.cs
@@ -66,7 +66,7 @@ } #region Messages - public sealed partial class TestProto3Optional : pb::IMessage<TestProto3Optional> { + public sealed partial class TestProto3Optional : pb::IMessage<TestProto3Optional>, pb::IBufferMessage { private static readonly pb::MessageParser<TestProto3Optional> _parser = new pb::MessageParser<TestProto3Optional>(() => new TestProto3Optional()); private pb::UnknownFieldSet _unknownFields; private int _hasBits0; @@ -806,11 +806,16 @@ [global::System.Diagnostics.DebuggerNonUserCodeAttribute] public void MergeFrom(pb::CodedInputStream input) { + input.ReadRawMessage(this); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) { uint tag; while ((tag = input.ReadTag()) != 0) { switch(tag) { default: - _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input); break; case 8: { OptionalInt32 = input.ReadInt32(); @@ -913,7 +918,7 @@ [pbr::OriginalName("NEG")] Neg = -1, } - public sealed partial class NestedMessage : pb::IMessage<NestedMessage> { + public sealed partial class NestedMessage : pb::IMessage<NestedMessage>, pb::IBufferMessage { private static readonly pb::MessageParser<NestedMessage> _parser = new pb::MessageParser<NestedMessage>(() => new NestedMessage()); private pb::UnknownFieldSet _unknownFields; private int _hasBits0; @@ -1044,11 +1049,16 @@ [global::System.Diagnostics.DebuggerNonUserCodeAttribute] public void MergeFrom(pb::CodedInputStream input) { + input.ReadRawMessage(this); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) { uint tag; while ((tag = input.ReadTag()) != 0) { switch(tag) { default: - _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input); break; case 8: { Bb = input.ReadInt32();
diff --git a/src/google/protobuf/compiler/cpp/cpp_unittest.inc b/src/google/protobuf/compiler/cpp/cpp_unittest.inc index ab70fd8..c36a0b8 100644 --- a/src/google/protobuf/compiler/cpp/cpp_unittest.inc +++ b/src/google/protobuf/compiler/cpp/cpp_unittest.inc
@@ -44,11 +44,10 @@ // correctly and produces the interfaces we expect, which is why this test // is written this way. -#include <google/protobuf/compiler/cpp/cpp_unittest.h> - #include <memory> #include <vector> +#include <google/protobuf/compiler/cpp/cpp_unittest.h> #include <google/protobuf/unittest_no_arena.pb.h> #include <google/protobuf/stubs/strutil.h> #if !defined(GOOGLE_PROTOBUF_CMAKE_BUILD) && !defined(_MSC_VER)
diff --git a/src/google/protobuf/map_test.cc b/src/google/protobuf/map_test.cc index 01512a0..6deb35f 100644 --- a/src/google/protobuf/map_test.cc +++ b/src/google/protobuf/map_test.cc
@@ -2139,7 +2139,7 @@ unittest::TestMap message1, message2; std::string data; MapTestUtil::SetMapFields(&message1); - int size = message1.ByteSize(); + size_t size = message1.ByteSizeLong(); data.resize(size); uint8* start = reinterpret_cast<uint8*>(::google::protobuf::string_as_array(&data)); uint8* end = message1.SerializeWithCachedSizesToArray(start); @@ -2152,7 +2152,7 @@ TEST(GeneratedMapFieldTest, SerializationToStream) { unittest::TestMap message1, message2; MapTestUtil::SetMapFields(&message1); - int size = message1.ByteSize(); + size_t size = message1.ByteSizeLong(); std::string data; data.resize(size); { @@ -2369,7 +2369,7 @@ EXPECT_TRUE(TextFormat::ParseFromString(text, &message)); EXPECT_EQ(1, message.map_int32_foreign_message().size()); - EXPECT_EQ(11, message.ByteSize()); + EXPECT_EQ(11, message.ByteSizeLong()); } TEST(GeneratedMapFieldTest, UnknownFieldWireFormat) { @@ -2481,7 +2481,7 @@ MapReflectionTester reflection_tester(unittest::TestMap::descriptor()); reflection_tester.SetMapFieldsViaReflection(&message); - EXPECT_LT(0, message.GetReflection()->SpaceUsed(message)); + EXPECT_LT(0, message.GetReflection()->SpaceUsedLong(message)); } TEST(GeneratedMapFieldReflectionTest, Accessors) { @@ -2767,7 +2767,7 @@ } TEST_F(MapFieldInDynamicMessageTest, MapSpaceUsed) { - // Test that SpaceUsed() works properly + // Test that SpaceUsedLong() works properly // Since we share the implementation with generated messages, we don't need // to test very much here. Just make sure it appears to be working. @@ -2775,10 +2775,10 @@ std::unique_ptr<Message> message(map_prototype_->New()); MapReflectionTester reflection_tester(map_descriptor_); - int initial_space_used = message->SpaceUsed(); + int initial_space_used = message->SpaceUsedLong(); reflection_tester.SetMapFieldsViaReflection(message.get()); - EXPECT_LT(initial_space_used, message->SpaceUsed()); + EXPECT_LT(initial_space_used, message->SpaceUsedLong()); } TEST_F(MapFieldInDynamicMessageTest, RecursiveMap) { @@ -2952,9 +2952,9 @@ unittest::TestMap message; MapTestUtil::SetMapFields(&message); - EXPECT_EQ(message.ByteSize(), WireFormat::ByteSize(message)); + EXPECT_EQ(message.ByteSizeLong(), WireFormat::ByteSize(message)); message.Clear(); - EXPECT_EQ(0, message.ByteSize()); + EXPECT_EQ(0, message.ByteSizeLong()); EXPECT_EQ(0, WireFormat::ByteSize(message)); } @@ -2967,7 +2967,7 @@ // Serialize using the generated code. { - message.ByteSize(); + message.ByteSizeLong(); io::StringOutputStream raw_output(&generated_data); io::CodedOutputStream output(&raw_output); message.SerializeWithCachedSizes(&output); @@ -2978,7 +2978,7 @@ { io::StringOutputStream raw_output(&dynamic_data); io::CodedOutputStream output(&raw_output); - int size = WireFormat::ByteSize(message); + size_t size = WireFormat::ByteSize(message); WireFormat::SerializeWithCachedSizes(message, size, &output); ASSERT_FALSE(output.HadError()); } @@ -3026,7 +3026,7 @@ std::string expected_serialized_data; dynamic_message->SerializeToString(&expected_serialized_data); int expected_size = expected_serialized_data.size(); - EXPECT_EQ(dynamic_message->ByteSize(), expected_size); + EXPECT_EQ(dynamic_message->ByteSizeLong(), expected_size); std::unique_ptr<Message> message2; message2.reset(factory.GetPrototype(unittest::TestMap::descriptor())->New()); @@ -3040,27 +3040,27 @@ reflection->RemoveLast(dynamic_message.get(), field); dynamic_message->MergeFrom(*message2); dynamic_message->MergeFrom(*message2); - // The map field is marked as STATE_MODIFIED_REPEATED, ByteSize() will use + // The map field is marked as STATE_MODIFIED_REPEATED, ByteSizeLong() will use // repeated field which have duplicate keys to calculate. - int duplicate_size = dynamic_message->ByteSize(); + size_t duplicate_size = dynamic_message->ByteSizeLong(); EXPECT_TRUE(duplicate_size > expected_size); std::string duplicate_serialized_data; dynamic_message->SerializeToString(&duplicate_serialized_data); - EXPECT_EQ(dynamic_message->ByteSize(), duplicate_serialized_data.size()); + EXPECT_EQ(dynamic_message->ByteSizeLong(), duplicate_serialized_data.size()); // Force the map field to mark with map CLEAN EXPECT_EQ(reflection_tester.MapSize(*dynamic_message, "map_int32_int32"), 2); - // The map field is marked as CLEAN, ByteSize() will use map which do not + // The map field is marked as CLEAN, ByteSizeLong() will use map which do not // have duplicate keys to calculate. - int size = dynamic_message->ByteSize(); + int size = dynamic_message->ByteSizeLong(); EXPECT_EQ(expected_size, size); // Protobuf used to have a bug for serialize when map it marked CLEAN. It used - // repeated field to calculate ByteSize but use map to serialize the real - // data, thus the ByteSize may bigger than real serialized size. A crash might - // be happen at SerializeToString(). Or an "unexpect end group" warning was - // raised at parse back if user use SerializeWithCachedSizes() which avoids - // size check at serialize. + // repeated field to calculate ByteSizeLong but use map to serialize the real + // data, thus the ByteSizeLong may bigger than real serialized size. A crash + // might be happen at SerializeToString(). Or an "unexpect end group" warning + // was raised at parse back if user use SerializeWithCachedSizes() which + // avoids size check at serialize. std::string serialized_data; dynamic_message->SerializeToString(&serialized_data); EXPECT_EQ(serialized_data, expected_serialized_data); @@ -3118,7 +3118,7 @@ template <typename T> static std::string DeterministicSerializationWithSerializePartialToCodedStream( const T& t) { - const int size = t.ByteSize(); + const size_t size = t.ByteSizeLong(); std::string result(size, '\0'); io::ArrayOutputStream array_stream(::google::protobuf::string_as_array(&result), size); io::CodedOutputStream output_stream(&array_stream); @@ -3132,7 +3132,7 @@ template <typename T> static std::string DeterministicSerializationWithSerializeToCodedStream( const T& t) { - const int size = t.ByteSize(); + const size_t size = t.ByteSizeLong(); std::string result(size, '\0'); io::ArrayOutputStream array_stream(::google::protobuf::string_as_array(&result), size); io::CodedOutputStream output_stream(&array_stream); @@ -3145,7 +3145,7 @@ template <typename T> static std::string DeterministicSerialization(const T& t) { - const int size = t.ByteSize(); + const size_t size = t.ByteSizeLong(); std::string result(size, '\0'); io::ArrayOutputStream array_stream(::google::protobuf::string_as_array(&result), size); {
diff --git a/src/google/protobuf/port_def.inc b/src/google/protobuf/port_def.inc index 5457d06..c951622 100644 --- a/src/google/protobuf/port_def.inc +++ b/src/google/protobuf/port_def.inc
@@ -547,14 +547,26 @@ // Windows declares several inconvenient macro names. We #undef them and then // restore them in port_undef.inc. #ifdef _MSC_VER +#pragma push_macro("CREATE_NEW") +#undef CREATE_NEW +#pragma push_macro("DOUBLE_CLICK") +#undef DOUBLE_CLICK #pragma push_macro("ERROR") #undef ERROR +#pragma push_macro("ERROR_BUSY") +#undef ERROR_BUSY +#pragma push_macro("ERROR_NOT_FOUND") +#undef ERROR_NOT_FOUND #pragma push_macro("GetMessage") #undef GetMessage #pragma push_macro("IGNORE") #undef IGNORE #pragma push_macro("IN") #undef IN +#pragma push_macro("INPUT_KEYBOARD") +#undef INPUT_KEYBOARD +#pragma push_macro("NO_ERROR") +#undef NO_ERROR #pragma push_macro("OUT") #undef OUT #pragma push_macro("OPTIONAL") @@ -563,6 +575,14 @@ #undef min #pragma push_macro("max") #undef max +#pragma push_macro("REASON_UNKNOWN") +#undef REASON_UNKNOWN +#pragma push_macro("SERVICE_DISABLED") +#undef SERVICE_DISABLED +#pragma push_macro("SEVERITY_ERROR") +#undef SEVERITY_ERROR +#pragma push_macro("STRICT") +#undef STRICT #endif // _MSC_VER #if defined(__clang__) || defined(__GNUC__) || defined(_MSC_VER)
diff --git a/src/google/protobuf/port_undef.inc b/src/google/protobuf/port_undef.inc index e579eb8..e93e669 100644 --- a/src/google/protobuf/port_undef.inc +++ b/src/google/protobuf/port_undef.inc
@@ -87,14 +87,24 @@ // Restore macro that may have been #undef'd in port_def.inc. #ifdef _MSC_VER +#pragma pop_macro("CREATE_NEW") +#pragma pop_macro("DOUBLE_CLICK") #pragma pop_macro("ERROR") +#pragma pop_macro("ERROR_BUSY") +#pragma pop_macro("ERROR_NOT_FOUND") #pragma pop_macro("GetMessage") #pragma pop_macro("IGNORE") #pragma pop_macro("IN") +#pragma pop_macro("INPUT_KEYBOARD") #pragma pop_macro("OUT") #pragma pop_macro("OPTIONAL") #pragma pop_macro("min") #pragma pop_macro("max") +#pragma pop_macro("NO_ERROR") +#pragma pop_macro("REASON_UNKNOWN") +#pragma pop_macro("SERVICE_DISABLED") +#pragma pop_macro("SEVERITY_ERROR") +#pragma pop_macro("STRICT") #endif #if defined(__clang__) || defined(__GNUC__) || defined(_MSC_VER)
diff --git a/src/google/protobuf/util/internal/default_value_objectwriter_test.cc b/src/google/protobuf/util/internal/default_value_objectwriter_test.cc index 032d112..7af3579 100644 --- a/src/google/protobuf/util/internal/default_value_objectwriter_test.cc +++ b/src/google/protobuf/util/internal/default_value_objectwriter_test.cc
@@ -29,6 +29,7 @@ // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include <google/protobuf/util/internal/default_value_objectwriter.h> + #include <google/protobuf/util/internal/expecting_objectwriter.h> #include <google/protobuf/util/internal/testdata/default_value_test.pb.h> #include <google/protobuf/util/internal/type_info_test_helper.h>
diff --git a/src/google/protobuf/util/internal/protostream_objectwriter_test.cc b/src/google/protobuf/util/internal/protostream_objectwriter_test.cc index b1d76a5..983043f 100644 --- a/src/google/protobuf/util/internal/protostream_objectwriter_test.cc +++ b/src/google/protobuf/util/internal/protostream_objectwriter_test.cc
@@ -172,7 +172,7 @@ MATCHER_P(HasObjectLocation, expected, "Verifies the expected object location") { std::string actual = get<0>(arg).ToString(); - if (actual.compare(expected) == 0) return true; + if (actual == expected) return true; *result_listener << "actual location is: " << actual; return false; }