aboutsummaryrefslogtreecommitdiff
path: root/src/google/protobuf/metadata.h
diff options
context:
space:
mode:
authorDouglas Heriot <douglas@douglasheriot.com>2015-08-22 02:05:40 +1000
committerDouglas Heriot <douglas@douglasheriot.com>2015-08-22 02:05:40 +1000
commit5021c4d88506ac19be4302be02c3cd1702f97d03 (patch)
tree901d4932207a1a2988aff54bdc66f652dde6b07c /src/google/protobuf/metadata.h
parent0cb84ee31fc2ac6e6f07c76a5dc20a20272d7516 (diff)
downloadprotobuf-5021c4d88506ac19be4302be02c3cd1702f97d03.tar.gz
protobuf-5021c4d88506ac19be4302be02c3cd1702f97d03.tar.bz2
protobuf-5021c4d88506ac19be4302be02c3cd1702f97d03.zip
Define GOOGLE_ATTRIBUTE_NOINLINE for MSVC. Workaround for VS2015 Release build compiler bug.
See issue #240 - MSVC in VS2015 seems to inline a function it shouldn't. My original workaround was to disable inlining for the whole file, but I found a way to do it on just this specific function using __declspec(noinline). Unfortunately __declspec has to go at the start of the function declaration, while __attribute in GCC can go either before or after. I had to move lots of GOOGLE_ATTRIBUTE_NOLINE to make it compile. I have not yet tested this change with GCC. Will there be other side effects of defining this, given it wasn't previously? I also noticed a few functions marked with both the 'inline' keyword, and GOOGLE_ATTRIBUTE_NOINLINE - huh? Is there an explanation for this, or is it an oversight?
Diffstat (limited to 'src/google/protobuf/metadata.h')
-rw-r--r--src/google/protobuf/metadata.h2
1 files changed, 1 insertions, 1 deletions
diff --git a/src/google/protobuf/metadata.h b/src/google/protobuf/metadata.h
index 30b2a6ee..c5bab0a8 100644
--- a/src/google/protobuf/metadata.h
+++ b/src/google/protobuf/metadata.h
@@ -143,7 +143,7 @@ class LIBPROTOBUF_EXPORT InternalMetadataWithArena {
Arena* arena_;
};
- UnknownFieldSet* mutable_unknown_fields_slow() GOOGLE_ATTRIBUTE_NOINLINE {
+ GOOGLE_ATTRIBUTE_NOINLINE UnknownFieldSet* mutable_unknown_fields_slow() {
Arena* my_arena = arena();
Container* container = Arena::Create<Container>(my_arena);
ptr_ = reinterpret_cast<void*>(