Commits

Anonymous committed 49f39c0

Fix compile for GCC 3.4.4.

  • Participants
  • Parent commits fedd48b

Comments (0)

Files changed (2)

src/google/protobuf/extension_set.h

   }
   namespace internal {
     class FieldSkipper;                                  // wire_format_lite.h
+    class RepeatedPtrFieldBase;                          // repeated_field.h
   }
   template <typename Element> class RepeatedField;     // repeated_field.h
   template <typename Element> class RepeatedPtrField;  // repeated_field.h
                            const MessageLite* containing_type,
                            FieldSkipper* field_skipper);
 
+  // Hack:  RepeatedPtrFieldBase declares ExtensionSet as a friend.  This
+  //   friendship should automatically extend to ExtensionSet::Extension, but
+  //   unfortunately some older compilers (e.g. GCC 3.4.4) do not implement this
+  //   correctly.  So, we must provide helpers for calling methods of that
+  //   class.
+
+  // Defined in extension_set_heavy.cc.
+  static inline int RepeatedMessage_SpaceUsedExcludingSelf(
+      RepeatedPtrFieldBase* field);
 
   // The Extension struct is small enough to be passed by value, so we use it
   // directly as the value type in the map rather than use pointers.  We use

src/google/protobuf/extension_set_heavy.cc

   return total_size;
 }
 
+inline int ExtensionSet::RepeatedMessage_SpaceUsedExcludingSelf(
+    RepeatedPtrFieldBase* field) {
+  return field->SpaceUsedExcludingSelf<GenericTypeHandler<Message> >();
+}
+
 int ExtensionSet::Extension::SpaceUsedExcludingSelf() const {
   int total_size = 0;
   if (is_repeated) {
         // RepeatedPtrFieldBase::SpaceUsedExcludingSelf() with a different type
         // handler.
         total_size += sizeof(*repeated_message_value) +
-            repeated_message_value->
-              RepeatedPtrFieldBase::SpaceUsedExcludingSelf<
-                GenericTypeHandler<Message> >();
+            RepeatedMessage_SpaceUsedExcludingSelf(repeated_message_value);
         break;
     }
   } else {