| Index: third_party/protobuf/src/google/protobuf/generated_message_reflection_unittest.cc | 
| diff --git a/third_party/protobuf/src/google/protobuf/generated_message_reflection_unittest.cc b/third_party/protobuf/src/google/protobuf/generated_message_reflection_unittest.cc | 
| index 85ebdef1fc926aa08db91817c90f0981fd614ccc..6276b66793724de5cb0d0ffd3cbb9b792c212837 100644 | 
| --- a/third_party/protobuf/src/google/protobuf/generated_message_reflection_unittest.cc | 
| +++ b/third_party/protobuf/src/google/protobuf/generated_message_reflection_unittest.cc | 
| @@ -795,6 +795,73 @@ TEST(GeneratedMessageReflectionTest, ReleaseOneofMessageTest) { | 
| EXPECT_TRUE(released == NULL); | 
| } | 
|  | 
| +TEST(GeneratedMessageReflectionTest, ArenaReleaseMessageTest) { | 
| +  ::google::protobuf::Arena arena; | 
| +  unittest::TestAllTypes* message = | 
| +      ::google::protobuf::Arena::CreateMessage<unittest::TestAllTypes>(&arena); | 
| +  TestUtil::ReflectionTester reflection_tester( | 
| +      unittest::TestAllTypes::descriptor()); | 
| + | 
| +  // When nothing is set, we expect all released messages to be NULL. | 
| +  reflection_tester.ExpectMessagesReleasedViaReflection( | 
| +      message, TestUtil::ReflectionTester::IS_NULL); | 
| + | 
| +  // After fields are set we should get non-NULL releases. | 
| +  reflection_tester.SetAllFieldsViaReflection(message); | 
| +  reflection_tester.ExpectMessagesReleasedViaReflection( | 
| +      message, TestUtil::ReflectionTester::NOT_NULL); | 
| + | 
| +  // After Clear() we may or may not get a message from ReleaseMessage(). | 
| +  // This is implementation specific. | 
| +  reflection_tester.SetAllFieldsViaReflection(message); | 
| +  message->Clear(); | 
| +  reflection_tester.ExpectMessagesReleasedViaReflection( | 
| +      message, TestUtil::ReflectionTester::CAN_BE_NULL); | 
| +} | 
| + | 
| +TEST(GeneratedMessageReflectionTest, ArenaReleaseExtensionMessageTest) { | 
| +  ::google::protobuf::Arena arena; | 
| +  unittest::TestAllExtensions* message = | 
| +      ::google::protobuf::Arena::CreateMessage<unittest::TestAllExtensions>(&arena); | 
| +  TestUtil::ReflectionTester reflection_tester( | 
| +      unittest::TestAllExtensions::descriptor()); | 
| + | 
| +  // When nothing is set, we expect all released messages to be NULL. | 
| +  reflection_tester.ExpectMessagesReleasedViaReflection( | 
| +      message, TestUtil::ReflectionTester::IS_NULL); | 
| + | 
| +  // After fields are set we should get non-NULL releases. | 
| +  reflection_tester.SetAllFieldsViaReflection(message); | 
| +  reflection_tester.ExpectMessagesReleasedViaReflection( | 
| +      message, TestUtil::ReflectionTester::NOT_NULL); | 
| + | 
| +  // After Clear() we may or may not get a message from ReleaseMessage(). | 
| +  // This is implementation specific. | 
| +  reflection_tester.SetAllFieldsViaReflection(message); | 
| +  message->Clear(); | 
| +  reflection_tester.ExpectMessagesReleasedViaReflection( | 
| +      message, TestUtil::ReflectionTester::CAN_BE_NULL); | 
| +} | 
| + | 
| +TEST(GeneratedMessageReflectionTest, ArenaReleaseOneofMessageTest) { | 
| +  ::google::protobuf::Arena arena; | 
| +  unittest::TestOneof2* message = | 
| +      ::google::protobuf::Arena::CreateMessage<unittest::TestOneof2>(&arena); | 
| +  TestUtil::ReflectionTester::SetOneofViaReflection(message); | 
| + | 
| +  const Descriptor* descriptor = unittest::TestOneof2::descriptor(); | 
| +  const Reflection* reflection = message->GetReflection(); | 
| +  Message* released = reflection->ReleaseMessage( | 
| +      message, descriptor->FindFieldByName("foo_lazy_message")); | 
| + | 
| +  EXPECT_TRUE(released != NULL); | 
| +  delete released; | 
| + | 
| +  released = reflection->ReleaseMessage( | 
| +      message, descriptor->FindFieldByName("foo_lazy_message")); | 
| +  EXPECT_TRUE(released == NULL); | 
| +} | 
| + | 
| #ifdef PROTOBUF_HAS_DEATH_TEST | 
|  | 
| TEST(GeneratedMessageReflectionTest, UsageErrors) { | 
|  |