From 4cbbf33b773fb95aa339ee50517fd375f5120ffe Mon Sep 17 00:00:00 2001 From: Jisi Liu Date: Thu, 3 Aug 2017 11:13:25 -0700 Subject: Fix invalid offsetof warning. Use composition instead of inheritance for oneof default. --- src/google/protobuf/compiler/cpp/cpp_file.cc | 9 +++++---- src/google/protobuf/compiler/cpp/cpp_message.cc | 12 ++++++------ 2 files changed, 11 insertions(+), 10 deletions(-) (limited to 'src/google/protobuf/compiler/cpp') diff --git a/src/google/protobuf/compiler/cpp/cpp_file.cc b/src/google/protobuf/compiler/cpp/cpp_file.cc index e54288de..a1c13cf5 100644 --- a/src/google/protobuf/compiler/cpp/cpp_file.cc +++ b/src/google/protobuf/compiler/cpp/cpp_file.cc @@ -351,9 +351,10 @@ void FileGenerator::GenerateSource(io::Printer* printer) { "::"; } printer->Print( - "class $classname$DefaultTypeInternal : " - "public ::google::protobuf::internal::ExplicitlyConstructed<$parent$$classname$> " - "{\n", + "class $classname$DefaultTypeInternal {\n" + "public:\n" + " ::google::protobuf::internal::ExplicitlyConstructed<$parent$$classname$>\n" + " _instance;\n", "parent", parent, "classname", message_generators_[i]->classname_); printer->Indent(); message_generators_[i]->GenerateExtraDefaultFields(printer); @@ -740,7 +741,7 @@ void FileGenerator::GenerateBuildDescriptors(io::Printer* printer) { printer->Print( "file_level_metadata[$index$].reflection = " "$parent$::$classname$::CreateReflection(file_level_metadata[$index$]" - ".descriptor, _$classname$_default_instance_.get_mutable());\n", + ".descriptor, _$classname$_default_instance_._instance.get_mutable());\n", "index", SimpleItoa(i), "parent", ClassName(message_generators_[i]->descriptor_->containing_type(), false), diff --git a/src/google/protobuf/compiler/cpp/cpp_message.cc b/src/google/protobuf/compiler/cpp/cpp_message.cc index abb2e95a..36cbf5d7 100644 --- a/src/google/protobuf/compiler/cpp/cpp_message.cc +++ b/src/google/protobuf/compiler/cpp/cpp_message.cc @@ -1604,7 +1604,6 @@ GenerateExtraDefaultFields(io::Printer* printer) { // Generate oneof default instance and weak field instances for reflection // usage. if (descriptor_->oneof_decl_count() > 0 || num_weak_fields_ > 0) { - printer->Print("public:\n"); for (int i = 0; i < descriptor_->oneof_decl_count(); i++) { for (int j = 0; j < descriptor_->oneof_decl(i)->field_count(); j++) { const FieldDescriptor* field = descriptor_->oneof_decl(i)->field(j); @@ -1977,7 +1976,7 @@ GenerateDefaultInstanceAllocator(io::Printer* printer) { // Construct the default instance. We can't call InitAsDefaultInstance() yet // because we need to make sure all default instances that this one might // depend on are constructed first. - printer->Print("_$classname$_default_instance_.DefaultConstruct();\n" + printer->Print("_$classname$_default_instance_._instance.DefaultConstruct();\n" "::google::protobuf::internal::OnShutdownDestroyMessage(\n" " &_$classname$_default_instance_);", "classname", classname_); @@ -1987,9 +1986,9 @@ void MessageGenerator:: GenerateDefaultInstanceInitializer(io::Printer* printer) { if (IsMapEntryMessage(descriptor_)) { printer->Print( - "_$classname$_default_instance_.get_mutable()->set_default_instance(_$" - "classname$_default_instance_.get_mutable());\n" - "_$classname$_default_instance_.get_mutable()->InitAsDefaultInstance();" + "_$classname$_default_instance_._instance.get_mutable()->set_default_instance(_$" + "classname$_default_instance_._instance.get_mutable());\n" + "_$classname$_default_instance_._instance.get_mutable()->InitAsDefaultInstance();" "\n", "classname", classname_); return; @@ -2012,7 +2011,8 @@ GenerateDefaultInstanceInitializer(io::Printer* printer) { if (field->containing_oneof() || field->options().weak()) { name = "_" + classname_ + "_default_instance_."; } else { - name = "_" + classname_ + "_default_instance_.get_mutable()->"; + name = + "_" + classname_ + "_default_instance_._instance.get_mutable()->"; } name += FieldName(field); printer->Print( -- cgit v1.2.3