浏览代码

Add GOOGLE_ATTRIBUTE_NOINLINE to GetArena() and GetMaybeArenaPointer() methods. This is to avoid "unresolved link" errors in MSVC 2015 during Release build

0xAAE 10 年之前
父节点
当前提交
d41a3d630c
共有 1 个文件被更改,包括 8 次插入0 次删除
  1. 8 0
      src/google/protobuf/message.cc

+ 8 - 0
src/google/protobuf/message.cc

@@ -495,11 +495,19 @@ Message* GenericTypeHandler<Message>::NewFromPrototype(
   return prototype->New(arena);
   return prototype->New(arena);
 }
 }
 template<>
 template<>
+#if defined(_MSC_VER) && (_MSC_VER >= 1900)
+// Note: force noinline to workaround MSVC 2015 compiler bug, issue #240
+GOOGLE_ATTRIBUTE_NOINLINE
+#endif
 google::protobuf::Arena* GenericTypeHandler<Message>::GetArena(
 google::protobuf::Arena* GenericTypeHandler<Message>::GetArena(
     Message* value) {
     Message* value) {
   return value->GetArena();
   return value->GetArena();
 }
 }
 template<>
 template<>
+#if defined(_MSC_VER) && (_MSC_VER >= 1900)
+// Note: force noinline to workaround MSVC 2015 compiler bug, issue #240
+GOOGLE_ATTRIBUTE_NOINLINE
+#endif
 void* GenericTypeHandler<Message>::GetMaybeArenaPointer(
 void* GenericTypeHandler<Message>::GetMaybeArenaPointer(
     Message* value) {
     Message* value) {
   return value->GetMaybeArenaPointer();
   return value->GetMaybeArenaPointer();