瀏覽代碼

Merge branch v3.0.0-alpha-1 into master.

Conflicts:
	configure.ac
Feng Xiao 10 年之前
父節點
當前提交
52909485d1
共有 45 個文件被更改,包括 972 次插入275 次删除
  1. 104 0
      CHANGES.txt
  2. 1 0
      Makefile.am
  3. 2 2
      configure.ac
  4. 2 2
      java/pom.xml
  5. 1 1
      java/src/main/java/com/google/protobuf/MapFieldLite.java
  6. 7 0
      java/src/test/java/com/google/protobuf/MapTest.java
  7. 2 3
      java/src/test/java/com/google/protobuf/UnknownFieldSetLiteTest.java
  8. 16 8
      post_process_dist.sh
  9. 1 1
      python/setup.py
  10. 4 4
      src/Makefile.am
  11. 14 7
      src/google/protobuf/arena.cc
  12. 8 3
      src/google/protobuf/arena.h
  13. 6 6
      src/google/protobuf/arena_unittest.cc
  14. 1 2
      src/google/protobuf/arenastring.h
  15. 1 1
      src/google/protobuf/compiler/cpp/cpp_message.cc
  16. 2 0
      src/google/protobuf/compiler/cpp/cpp_unittest.cc
  17. 2 2
      src/google/protobuf/compiler/plugin.pb.h
  18. 5 0
      src/google/protobuf/descriptor.cc
  19. 2 2
      src/google/protobuf/descriptor.pb.h
  20. 3 3
      src/google/protobuf/map.h
  21. 9 4
      src/google/protobuf/map_entry.h
  22. 27 0
      src/google/protobuf/map_field.cc
  23. 1 1
      src/google/protobuf/map_field.h
  24. 0 35
      src/google/protobuf/map_field_test.cc
  25. 2 0
      src/google/protobuf/map_test.cc
  26. 17 17
      src/google/protobuf/map_test_util.cc
  27. 1 0
      src/google/protobuf/message.h
  28. 2 0
      src/google/protobuf/preserve_unknown_enum_test.cc
  29. 9 4
      src/google/protobuf/repeated_field.h
  30. 3 1
      src/google/protobuf/repeated_field_reflection.h
  31. 3 2
      src/google/protobuf/repeated_field_reflection_unittest.cc
  32. 2 2
      src/google/protobuf/repeated_field_unittest.cc
  33. 11 5
      src/google/protobuf/stubs/common.h
  34. 0 1
      src/google/protobuf/stubs/fastmem.h
  35. 6 5
      src/google/protobuf/stubs/type_traits.h
  36. 1 1
      src/google/protobuf/stubs/type_traits_unittest.cc
  37. 1 1
      src/google/protobuf/unknown_field_set_unittest.cc
  38. 53 25
      vsprojects/extract_includes.bat
  39. 23 11
      vsprojects/libprotobuf-lite.vcproj
  40. 59 31
      vsprojects/libprotobuf.vcproj
  41. 70 18
      vsprojects/libprotoc.vcproj
  42. 2 2
      vsprojects/lite-test.vcproj
  43. 2 2
      vsprojects/protoc.vcproj
  44. 2 2
      vsprojects/test_plugin.vcproj
  45. 482 58
      vsprojects/tests.vcproj

+ 104 - 0
CHANGES.txt

@@ -1,3 +1,107 @@
+2014-12-01 version 3.0.0-alpha-1 (C++/Java):
+
+  General
+  * Introduced Protocol Buffers language version 3 (aka proto3).
+
+    When protobuf was initially opensourced it implemented Protocol Buffers
+    language version 2 (aka proto2), which is why the version number
+    started from v2.0.0. From v3.0.0, a new language version (proto3) is
+    introduced while the old version (proto2) will continue to be supported.
+
+    The main intent of introducing proto3 is to clean up protobuf before
+    pushing the language as the foundation of Google's new API platform.
+    In proto3, the language is simplified, both for ease of use and  to
+    make it available in a wider range of programming languages. At the
+    same time a few features are added to better support common idioms
+    found in APIs.
+
+    The following are the main new features in language version 3:
+
+      1. Removal of field presence logic for primitive value fields, removal
+         of required fields, and removal of default values. This makes proto3
+         significantly easier to implement with open struct representations,
+         as in languages like Android Java, Objective C, or Go.
+      2. Removal of unknown fields.
+      3. Removal of extensions, which are instead replaced by a new standard
+         type called Any.
+      4. Fix semantics for unknown enum values.
+      5. Addition of maps.
+      6. Addition of a small set of standard types for representation of time,
+         dynamic data, etc.
+      7. A well-defined encoding in JSON as an alternative to binary proto
+         encoding.
+
+    This release (v3.0.0-alpha-1) includes partial proto3 support for C++ and
+    Java. Items 6 (well-known types) and 7 (JSON format) in the above feature
+    list are not impelmented.
+
+    A new notion "syntax" is introduced to specify whether a .proto file
+    uses proto2 or proto3:
+
+      // foo.proto
+      syntax = "proto3";
+      message Bar {...}
+
+    If omitted, the protocol compiler will generate a warning and "proto2" will
+    be used as the default. This warning will be turned into an error in a
+    future release.
+
+    We recommend that new Protocol Buffers users use proto3. However, we do not
+    generally recommend that existing users migrate from proto2 from proto3 due
+    to API incompatibility, and we will continue to support proto2 for a long
+    time.
+
+  * Added support for map fields (implemented in C++/Java for both proto2 and
+    proto3).
+
+    Map fields can be declared using the following syntax:
+
+      message Foo {
+        map<string, string> values = 1;
+      }
+
+    Data of a map field will be stored in memory as an unordered map and it
+    can be accessed through generated accessors.
+
+  C++
+  * Added arena allocation support (for both proto2 and proto3).
+
+    Profiling shows memory allocation and deallocation constitutes a significant
+    fraction of CPU-time spent in protobuf code and arena allocation is a
+    technique introduced to reduce this cost. With arena allocation, new
+    objects will be allocated from a large piece of preallocated memory and
+    deallocation of these objects is almost free. Early adoption shows 20% to
+    50% improvement in some Google binaries.
+
+    To enable arena support, add the following option to your .proto file:
+
+      option cc_enable_arenas = true;
+
+    Protocol compiler will generate additional code to make the generated
+    message classes work with arenas. This does not change the existing API
+    of protobuf messages and does not affect wire format. Your existing code
+    should continue to work after adding this option. In the future we will
+    make this option enabled by default.
+
+    To actually take advantage of arena allocation, you need to use the arena
+    APIs when creating messages. A quick example of using the arena API:
+
+      {
+        google::protobuf::Arena arena;
+        // Allocate a protobuf message in the arena.
+        MyMessage* message = Arena::CreateMessage<MyMessage>(&arena);
+        // All submessages will be allocated in the same arena.
+        if (!message->ParseFromString(data)) {
+          // Deal with malformed input data.
+        }
+        // Must not delete the message here. It will be deleted automatically
+        // when the arena is destroyed.
+      }
+
+    Currently arena does not work with map fields. Enabling arena in a .proto
+    file containing map fields will result in compile errors in the generated
+    code. This will be addressed in a future release.
+
 2014-10-20 version 2.6.1:
 2014-10-20 version 2.6.1:
 
 
   C++
   C++

+ 1 - 0
Makefile.am

@@ -135,6 +135,7 @@ java_EXTRA_DIST=                                                             \
   java/src/test/java/com/google/protobuf/field_presence_test.proto           \
   java/src/test/java/com/google/protobuf/field_presence_test.proto           \
   java/src/test/java/com/google/protobuf/lazy_fields_lite.proto              \
   java/src/test/java/com/google/protobuf/lazy_fields_lite.proto              \
   java/src/test/java/com/google/protobuf/lite_equals_and_hash.proto          \
   java/src/test/java/com/google/protobuf/lite_equals_and_hash.proto          \
+  java/src/test/java/com/google/protobuf/map_for_proto2_lite_test.proto      \
   java/src/test/java/com/google/protobuf/map_for_proto2_test.proto           \
   java/src/test/java/com/google/protobuf/map_for_proto2_test.proto           \
   java/src/test/java/com/google/protobuf/map_test.proto                      \
   java/src/test/java/com/google/protobuf/map_test.proto                      \
   java/src/test/java/com/google/protobuf/multiple_files_test.proto           \
   java/src/test/java/com/google/protobuf/multiple_files_test.proto           \

+ 2 - 2
configure.ac

@@ -12,7 +12,7 @@ AC_PREREQ(2.59)
 # In the SVN trunk, the version should always be the next anticipated release
 # In the SVN trunk, the version should always be the next anticipated release
 # version with the "-pre" suffix.  (We used to use "-SNAPSHOT" but this pushed
 # version with the "-pre" suffix.  (We used to use "-SNAPSHOT" but this pushed
 # the size of one file name in the dist tarfile over the 99-char limit.)
 # the size of one file name in the dist tarfile over the 99-char limit.)
-AC_INIT([Protocol Buffers],[2.6.2-pre],[protobuf@googlegroups.com],[protobuf])
+AC_INIT([Protocol Buffers],[3.0.0-alpha-1],[protobuf@googlegroups.com],[protobuf])
 
 
 AM_MAINTAINER_MODE([enable])
 AM_MAINTAINER_MODE([enable])
 
 
@@ -22,7 +22,7 @@ AC_CONFIG_MACRO_DIR([m4])
 
 
 AC_ARG_VAR(DIST_LANG, [language to include in the distribution package (i.e., make dist)])
 AC_ARG_VAR(DIST_LANG, [language to include in the distribution package (i.e., make dist)])
 case "$DIST_LANG" in
 case "$DIST_LANG" in
-  "") DIST_LANG=cpp ;;
+  "") DIST_LANG=all ;;
   all | cpp | java | python | javanano | ruby) ;;
   all | cpp | java | python | javanano | ruby) ;;
   *) AC_MSG_FAILURE([unknown language: $DIST_LANG]) ;;
   *) AC_MSG_FAILURE([unknown language: $DIST_LANG]) ;;
 esac
 esac

+ 2 - 2
java/pom.xml

@@ -10,7 +10,7 @@
   </parent>
   </parent>
   <groupId>com.google.protobuf</groupId>
   <groupId>com.google.protobuf</groupId>
   <artifactId>protobuf-java</artifactId>
   <artifactId>protobuf-java</artifactId>
-  <version>2.6.2-pre</version>
+  <version>3.0.0-alpha-1</version>
   <packaging>bundle</packaging>
   <packaging>bundle</packaging>
   <name>Protocol Buffer Java API</name>
   <name>Protocol Buffer Java API</name>
   <description>
   <description>
@@ -152,7 +152,7 @@
           <instructions>
           <instructions>
             <Bundle-DocURL>https://developers.google.com/protocol-buffers/</Bundle-DocURL>
             <Bundle-DocURL>https://developers.google.com/protocol-buffers/</Bundle-DocURL>
             <Bundle-SymbolicName>com.google.protobuf</Bundle-SymbolicName>
             <Bundle-SymbolicName>com.google.protobuf</Bundle-SymbolicName>
-            <Export-Package>com.google.protobuf;version=2.6.2-pre</Export-Package>
+            <Export-Package>com.google.protobuf;version=3.0.0-alpha-1</Export-Package>
           </instructions>
           </instructions>
         </configuration>
         </configuration>
       </plugin>
       </plugin>

+ 1 - 1
java/src/main/java/com/google/protobuf/MapFieldLite.java

@@ -97,7 +97,7 @@ public class MapFieldLite<K, V> {
     if (a == b) {
     if (a == b) {
       return true;
       return true;
     }
     }
-    if (a.size() != a.size()) {
+    if (a.size() != b.size()) {
       return false;
       return false;
     }
     }
     for (Map.Entry<K, V> entry : a.entrySet()) {
     for (Map.Entry<K, V> entry : a.entrySet()) {

+ 7 - 0
java/src/test/java/com/google/protobuf/MapTest.java

@@ -260,6 +260,13 @@ public class MapTest extends TestCase {
     assertFalse(m1.equals(m2));
     assertFalse(m1.equals(m2));
     // Don't check m1.hashCode() != m2.hashCode() because it's not guaranteed
     // Don't check m1.hashCode() != m2.hashCode() because it's not guaranteed
     // to be different.
     // to be different.
+    
+    // Regression test for b/18549190: if a map is a subset of the other map,
+    // equals() should return false.
+    b2.getMutableInt32ToInt32Field().remove(1);
+    m2 = b2.build();
+    assertFalse(m1.equals(m2));
+    assertFalse(m2.equals(m1));
   }
   }
   
   
   
   

+ 2 - 3
java/src/test/java/com/google/protobuf/UnknownFieldSetLiteTest.java

@@ -38,7 +38,6 @@ import junit.framework.TestCase;
 
 
 import java.io.ByteArrayOutputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.IOException;
-import java.nio.charset.StandardCharsets;
 
 
 /**
 /**
  * Tests for {@link UnknownFieldSetLite}.
  * Tests for {@link UnknownFieldSetLite}.
@@ -228,9 +227,9 @@ public class UnknownFieldSetLiteTest extends TestCase {
     assertEquals(foo, copyOfCopy);
     assertEquals(foo, copyOfCopy);
   }
   }
 
 
-  public void testMalformedBytes() {
+  public void testMalformedBytes() throws Exception {
     try {
     try {
-      Foo.parseFrom("this is a malformed protocol buffer".getBytes(StandardCharsets.UTF_8));
+      Foo.parseFrom("this is a malformed protocol buffer".getBytes("UTF-8"));
       fail();
       fail();
     } catch (InvalidProtocolBufferException e) {
     } catch (InvalidProtocolBufferException e) {
       // Expected.
       // Expected.

+ 16 - 8
post_process_dist.sh

@@ -16,7 +16,7 @@
 # 5) Cleans up after itself.
 # 5) Cleans up after itself.
 
 
 if [ "$1" == "" ]; then
 if [ "$1" == "" ]; then
-  echo "USAGE:  $1 DISTFILE" >&2
+  echo "USAGE:  $0 DISTFILE" >&2
   exit 1
   exit 1
 fi
 fi
 
 
@@ -27,7 +27,9 @@ fi
 
 
 set -ex
 set -ex
 
 
+LANGUAGES="cpp java python"
 BASENAME=`basename $1 .tar.gz`
 BASENAME=`basename $1 .tar.gz`
+VERSION=${BASENAME:9}
 
 
 # Create a directory called "dist", copy the tarball there and unpack it.
 # Create a directory called "dist", copy the tarball there and unpack it.
 mkdir dist
 mkdir dist
@@ -44,17 +46,23 @@ cd $BASENAME/vsprojects
 ./convert2008to2005.sh
 ./convert2008to2005.sh
 cd ..
 cd ..
 
 
-# Build the dist again in .tar.gz and .tar.bz2 formats.
-./configure
-make dist-gzip
-make dist-bzip2
+for LANG in $LANGUAGES; do
+  # Build the dist again in .tar.gz
+  ./configure DIST_LANG=$LANG
+  make dist-gzip
+  mv $BASENAME.tar.gz ../protobuf-$LANG-$VERSION.tar.gz
+done
 
 
 # Convert all text files to use DOS-style line endings, then build a .zip
 # Convert all text files to use DOS-style line endings, then build a .zip
 # distribution.
 # distribution.
 todos *.txt */*.txt
 todos *.txt */*.txt
-make dist-zip
 
 
-# Clean up.
-mv $BASENAME.tar.gz $BASENAME.tar.bz2 $BASENAME.zip ..
+for LANG in $LANGUAGES; do
+  # Build the dist again in .zip
+  ./configure DIST_LANG=$LANG
+  make dist-zip
+  mv $BASENAME.zip ../protobuf-$LANG-$VERSION.zip
+done
+
 cd ..
 cd ..
 rm -rf $BASENAME
 rm -rf $BASENAME

+ 1 - 1
python/setup.py

@@ -163,7 +163,7 @@ if __name__ == '__main__':
         ))
         ))
 
 
   setup(name = 'protobuf',
   setup(name = 'protobuf',
-        version = '2.6.2-pre',
+        version = '3.0.0-alpha-1',
         packages = [ 'google' ],
         packages = [ 'google' ],
         namespace_packages = [ 'google' ],
         namespace_packages = [ 'google' ],
         test_suite = 'setup.MakeTestSuite',
         test_suite = 'setup.MakeTestSuite',

+ 4 - 4
src/Makefile.am

@@ -111,7 +111,7 @@ nobase_include_HEADERS =                                        \
 lib_LTLIBRARIES = libprotobuf-lite.la libprotobuf.la libprotoc.la
 lib_LTLIBRARIES = libprotobuf-lite.la libprotobuf.la libprotoc.la
 
 
 libprotobuf_lite_la_LIBADD = $(PTHREAD_LIBS)
 libprotobuf_lite_la_LIBADD = $(PTHREAD_LIBS)
-libprotobuf_lite_la_LDFLAGS = -version-info 9:2:0 -export-dynamic -no-undefined
+libprotobuf_lite_la_LDFLAGS = -version-info 10:0:0 -export-dynamic -no-undefined
 libprotobuf_lite_la_SOURCES =                                  \
 libprotobuf_lite_la_SOURCES =                                  \
   google/protobuf/stubs/atomicops_internals_x86_gcc.cc         \
   google/protobuf/stubs/atomicops_internals_x86_gcc.cc         \
   google/protobuf/stubs/atomicops_internals_x86_msvc.cc        \
   google/protobuf/stubs/atomicops_internals_x86_msvc.cc        \
@@ -126,7 +126,6 @@ libprotobuf_lite_la_SOURCES =                                  \
   google/protobuf/arenastring.cc                               \
   google/protobuf/arenastring.cc                               \
   google/protobuf/extension_set.cc                             \
   google/protobuf/extension_set.cc                             \
   google/protobuf/generated_message_util.cc                    \
   google/protobuf/generated_message_util.cc                    \
-  google/protobuf/map_field.cc                                 \
   google/protobuf/message_lite.cc                              \
   google/protobuf/message_lite.cc                              \
   google/protobuf/repeated_field.cc                            \
   google/protobuf/repeated_field.cc                            \
   google/protobuf/wire_format_lite.cc                          \
   google/protobuf/wire_format_lite.cc                          \
@@ -136,7 +135,7 @@ libprotobuf_lite_la_SOURCES =                                  \
   google/protobuf/io/zero_copy_stream_impl_lite.cc
   google/protobuf/io/zero_copy_stream_impl_lite.cc
 
 
 libprotobuf_la_LIBADD = $(PTHREAD_LIBS)
 libprotobuf_la_LIBADD = $(PTHREAD_LIBS)
-libprotobuf_la_LDFLAGS = -version-info 9:2:0 -export-dynamic -no-undefined
+libprotobuf_la_LDFLAGS = -version-info 10:0:0 -export-dynamic -no-undefined
 libprotobuf_la_SOURCES =                                       \
 libprotobuf_la_SOURCES =                                       \
   $(libprotobuf_lite_la_SOURCES)                               \
   $(libprotobuf_lite_la_SOURCES)                               \
   google/protobuf/stubs/strutil.cc                             \
   google/protobuf/stubs/strutil.cc                             \
@@ -150,6 +149,7 @@ libprotobuf_la_SOURCES =                                       \
   google/protobuf/dynamic_message.cc                           \
   google/protobuf/dynamic_message.cc                           \
   google/protobuf/extension_set_heavy.cc                       \
   google/protobuf/extension_set_heavy.cc                       \
   google/protobuf/generated_message_reflection.cc              \
   google/protobuf/generated_message_reflection.cc              \
+  google/protobuf/map_field.cc                                 \
   google/protobuf/message.cc                                   \
   google/protobuf/message.cc                                   \
   google/protobuf/reflection_internal.h                        \
   google/protobuf/reflection_internal.h                        \
   google/protobuf/reflection_ops.cc                            \
   google/protobuf/reflection_ops.cc                            \
@@ -166,7 +166,7 @@ libprotobuf_la_SOURCES =                                       \
   google/protobuf/compiler/parser.cc
   google/protobuf/compiler/parser.cc
 
 
 libprotoc_la_LIBADD = $(PTHREAD_LIBS) libprotobuf.la
 libprotoc_la_LIBADD = $(PTHREAD_LIBS) libprotobuf.la
-libprotoc_la_LDFLAGS = -version-info 9:2:0 -export-dynamic -no-undefined
+libprotoc_la_LDFLAGS = -version-info 10:0:0 -export-dynamic -no-undefined
 libprotoc_la_SOURCES =                                         \
 libprotoc_la_SOURCES =                                         \
   google/protobuf/compiler/code_generator.cc                   \
   google/protobuf/compiler/code_generator.cc                   \
   google/protobuf/compiler/command_line_interface.cc           \
   google/protobuf/compiler/command_line_interface.cc           \

+ 14 - 7
src/google/protobuf/arena.cc

@@ -38,7 +38,14 @@ namespace google {
 namespace protobuf {
 namespace protobuf {
 
 
 google::protobuf::internal::SequenceNumber Arena::lifecycle_id_generator_;
 google::protobuf::internal::SequenceNumber Arena::lifecycle_id_generator_;
-__thread Arena::ThreadCache Arena::thread_cache_ = { -1, NULL };
+#ifdef PROTOBUF_USE_DLLS
+Arena::ThreadCache& Arena::thread_cache() {
+  static GOOGLE_THREAD_LOCAL ThreadCache thread_cache_ = { -1, NULL };
+  return thread_cache_;
+}
+#else
+GOOGLE_THREAD_LOCAL Arena::ThreadCache Arena::thread_cache_ = { -1, NULL };
+#endif
 
 
 void Arena::Init(const ArenaOptions& options) {
 void Arena::Init(const ArenaOptions& options) {
   lifecycle_id_ = lifecycle_id_generator_.GetNext();
   lifecycle_id_ = lifecycle_id_generator_.GetNext();
@@ -130,18 +137,18 @@ void* Arena::AllocateAligned(size_t n) {
   // If this thread already owns a block in this arena then try to use that.
   // If this thread already owns a block in this arena then try to use that.
   // This fast path optimizes the case where multiple threads allocate from the
   // This fast path optimizes the case where multiple threads allocate from the
   // same arena.
   // same arena.
-  if (thread_cache_.last_lifecycle_id_seen == lifecycle_id_ &&
-      thread_cache_.last_block_used_ != NULL) {
-    if (thread_cache_.last_block_used_->avail() < n) {
+  if (thread_cache().last_lifecycle_id_seen == lifecycle_id_ &&
+      thread_cache().last_block_used_ != NULL) {
+    if (thread_cache().last_block_used_->avail() < n) {
       return SlowAlloc(n);
       return SlowAlloc(n);
     }
     }
-    return AllocFromBlock(thread_cache_.last_block_used_, n);
+    return AllocFromBlock(thread_cache().last_block_used_, n);
   }
   }
 
 
   // Check whether we own the last accessed block on this arena.
   // Check whether we own the last accessed block on this arena.
   // This fast path optimizes the case where a single thread uses multiple
   // This fast path optimizes the case where a single thread uses multiple
   // arenas.
   // arenas.
-  void* me = &thread_cache_;
+  void* me = &thread_cache();
   Block* b = reinterpret_cast<Block*>(google::protobuf::internal::Acquire_Load(&hint_));
   Block* b = reinterpret_cast<Block*>(google::protobuf::internal::Acquire_Load(&hint_));
   if (!b || b->owner != me || b->avail() < n) {
   if (!b || b->owner != me || b->avail() < n) {
     // If the next block to allocate from is the first block, try to claim it
     // If the next block to allocate from is the first block, try to claim it
@@ -169,7 +176,7 @@ void* Arena::AllocFromBlock(Block* b, size_t n) {
 }
 }
 
 
 void* Arena::SlowAlloc(size_t n) {
 void* Arena::SlowAlloc(size_t n) {
-  void* me = &thread_cache_;
+  void* me = &thread_cache();
   Block* b = FindBlock(me);  // Find block owned by me.
   Block* b = FindBlock(me);  // Find block owned by me.
   // See if allocation fits in my latest block.
   // See if allocation fits in my latest block.
   if (b != NULL && b->avail() >= n) {
   if (b != NULL && b->avail() >= n) {

+ 8 - 3
src/google/protobuf/arena.h

@@ -312,7 +312,12 @@ class LIBPROTOBUF_EXPORT Arena {
 
 
   static const size_t kHeaderSize = sizeof(Block);
   static const size_t kHeaderSize = sizeof(Block);
   static google::protobuf::internal::SequenceNumber lifecycle_id_generator_;
   static google::protobuf::internal::SequenceNumber lifecycle_id_generator_;
-  static __thread ThreadCache thread_cache_;
+#ifdef PROTOBUF_USE_DLLS
+  static ThreadCache& thread_cache();
+#else
+  static GOOGLE_THREAD_LOCAL ThreadCache thread_cache_;
+  static ThreadCache& thread_cache() { return thread_cache_; }
+#endif
 
 
   // SFINAE for skipping addition to delete list for a Type. This is mainly to
   // SFINAE for skipping addition to delete list for a Type. This is mainly to
   // skip proto2/proto1 message objects with cc_enable_arenas=true from being
   // skip proto2/proto1 message objects with cc_enable_arenas=true from being
@@ -434,8 +439,8 @@ class LIBPROTOBUF_EXPORT Arena {
   void CleanupList();
   void CleanupList();
 
 
   inline void SetThreadCacheBlock(Block* block) {
   inline void SetThreadCacheBlock(Block* block) {
-    thread_cache_.last_block_used_ = block;
-    thread_cache_.last_lifecycle_id_seen = lifecycle_id_;
+    thread_cache().last_block_used_ = block;
+    thread_cache().last_lifecycle_id_seen = lifecycle_id_;
   }
   }
 
 
   int64 lifecycle_id_;  // Unique for each arena. Changes on Reset().
   int64 lifecycle_id_;  // Unique for each arena. Changes on Reset().

+ 6 - 6
src/google/protobuf/arena_unittest.cc

@@ -128,7 +128,7 @@ TEST(ArenaTest, InitialBlockTooSmall) {
   // initial block.
   // initial block.
   std::vector<char> arena_block(64);
   std::vector<char> arena_block(64);
   ArenaOptions options;
   ArenaOptions options;
-  options.initial_block = arena_block.data();
+  options.initial_block = &arena_block[0];
   options.initial_block_size = arena_block.size();
   options.initial_block_size = arena_block.size();
   Arena arena(options);
   Arena arena(options);
 
 
@@ -137,7 +137,7 @@ TEST(ArenaTest, InitialBlockTooSmall) {
 
 
   // Ensure that the arena allocator did not return memory pointing into the
   // Ensure that the arena allocator did not return memory pointing into the
   // initial block of memory.
   // initial block of memory.
-  uintptr_t arena_start = reinterpret_cast<uintptr_t>(arena_block.data());
+  uintptr_t arena_start = reinterpret_cast<uintptr_t>(&arena_block[0]);
   uintptr_t arena_end = arena_start + arena_block.size();
   uintptr_t arena_end = arena_start + arena_block.size();
   EXPECT_FALSE(allocation >= arena_start && allocation < arena_end);
   EXPECT_FALSE(allocation >= arena_start && allocation < arena_end);
 
 
@@ -771,7 +771,7 @@ TEST(ArenaTest, RepeatedFieldOnArena) {
   // Preallocate an initial arena block to avoid mallocs during hooked region.
   // Preallocate an initial arena block to avoid mallocs during hooked region.
   std::vector<char> arena_block(1024 * 1024);
   std::vector<char> arena_block(1024 * 1024);
   ArenaOptions options;
   ArenaOptions options;
-  options.initial_block = arena_block.data();
+  options.initial_block = &arena_block[0];
   options.initial_block_size = arena_block.size();
   options.initial_block_size = arena_block.size();
   Arena arena(options);
   Arena arena(options);
 
 
@@ -898,7 +898,7 @@ TEST(ArenaTest, NoHeapAllocationsTest) {
   // Allocate a large initial block to avoid mallocs during hooked test.
   // Allocate a large initial block to avoid mallocs during hooked test.
   std::vector<char> arena_block(128 * 1024);
   std::vector<char> arena_block(128 * 1024);
   ArenaOptions options;
   ArenaOptions options;
-  options.initial_block = arena_block.data();
+  options.initial_block = &arena_block[0];
   options.initial_block_size = arena_block.size();
   options.initial_block_size = arena_block.size();
   Arena arena(options);
   Arena arena(options);
 
 
@@ -918,7 +918,7 @@ TEST(ArenaTest, NoHeapAllocationsTest) {
 TEST(ArenaTest, MessageLiteOnArena) {
 TEST(ArenaTest, MessageLiteOnArena) {
   std::vector<char> arena_block(128 * 1024);
   std::vector<char> arena_block(128 * 1024);
   ArenaOptions options;
   ArenaOptions options;
-  options.initial_block = arena_block.data();
+  options.initial_block = &arena_block[0];
   options.initial_block_size = arena_block.size();
   options.initial_block_size = arena_block.size();
   Arena arena(options);
   Arena arena(options);
   const google::protobuf::MessageLite* prototype = dynamic_cast<
   const google::protobuf::MessageLite* prototype = dynamic_cast<
@@ -977,7 +977,7 @@ TEST(ArenaTest, SpaceUsed) {
 
 
   // Test with initial block.
   // Test with initial block.
   std::vector<char> arena_block(1024);
   std::vector<char> arena_block(1024);
-  options.initial_block = arena_block.data();
+  options.initial_block = &arena_block[0];
   options.initial_block_size = arena_block.size();
   options.initial_block_size = arena_block.size();
   Arena arena_2(options);
   Arena arena_2(options);
   EXPECT_EQ(1024, arena_2.SpaceUsed());
   EXPECT_EQ(1024, arena_2.SpaceUsed());

+ 1 - 2
src/google/protobuf/arenastring.h

@@ -31,7 +31,6 @@
 #ifndef GOOGLE_PROTOBUF_ARENASTRING_H__
 #ifndef GOOGLE_PROTOBUF_ARENASTRING_H__
 #define GOOGLE_PROTOBUF_ARENASTRING_H__
 #define GOOGLE_PROTOBUF_ARENASTRING_H__
 
 
-#include <stdint.h>
 #include <string>
 #include <string>
 
 
 #include <google/protobuf/stubs/common.h>
 #include <google/protobuf/stubs/common.h>
@@ -54,7 +53,7 @@ namespace google {
 namespace protobuf {
 namespace protobuf {
 namespace internal {
 namespace internal {
 
 
-struct ArenaStringPtr {
+struct LIBPROTOBUF_EXPORT ArenaStringPtr {
   inline void Set(const ::std::string* default_value,
   inline void Set(const ::std::string* default_value,
                   const ::std::string& value, ::google::protobuf::Arena* arena) {
                   const ::std::string& value, ::google::protobuf::Arena* arena) {
     if (ptr_ == default_value) {
     if (ptr_ == default_value) {

+ 1 - 1
src/google/protobuf/compiler/cpp/cpp_message.cc

@@ -1226,7 +1226,7 @@ GenerateDescriptorDeclarations(io::Printer* printer) {
       for (int j = 0; j < descriptor_->oneof_decl(i)->field_count(); j++) {
       for (int j = 0; j < descriptor_->oneof_decl(i)->field_count(); j++) {
         const FieldDescriptor* field = descriptor_->oneof_decl(i)->field(j);
         const FieldDescriptor* field = descriptor_->oneof_decl(i)->field(j);
         printer->Print("  ");
         printer->Print("  ");
-        if (IsStringOrMessage(field)) {
+        if (field->cpp_type() == FieldDescriptor::CPPTYPE_MESSAGE) {
           printer->Print("const ");
           printer->Print("const ");
         }
         }
         field_generators_.get(field).GeneratePrivateMembers(printer);
         field_generators_.get(field).GeneratePrivateMembers(printer);

+ 2 - 0
src/google/protobuf/compiler/cpp/cpp_unittest.cc

@@ -153,6 +153,7 @@ TEST(GeneratedMessageTest, Defaults) {
             &message.optional_import_message());
             &message.optional_import_message());
 }
 }
 
 
+#ifndef PROTOBUF_USE_DLLS
 TEST(GeneratedMessageTest, Int32StringConversion) {
 TEST(GeneratedMessageTest, Int32StringConversion) {
   EXPECT_EQ("971", Int32ToString(971));
   EXPECT_EQ("971", Int32ToString(971));
   EXPECT_EQ("(~0x7fffffff)", Int32ToString(kint32min));
   EXPECT_EQ("(~0x7fffffff)", Int32ToString(kint32min));
@@ -165,6 +166,7 @@ TEST(GeneratedMessageTest, Int64StringConversion) {
   EXPECT_EQ("GOOGLE_LONGLONG(~0x7fffffffffffffff)", Int64ToString(kint64min));
   EXPECT_EQ("GOOGLE_LONGLONG(~0x7fffffffffffffff)", Int64ToString(kint64min));
   EXPECT_EQ("GOOGLE_LONGLONG(9223372036854775807)", Int64ToString(kint64max));
   EXPECT_EQ("GOOGLE_LONGLONG(9223372036854775807)", Int64ToString(kint64max));
 }
 }
+#endif  // !PROTOBUF_USE_DLLS
 
 
 TEST(GeneratedMessageTest, FloatingPointDefaults) {
 TEST(GeneratedMessageTest, FloatingPointDefaults) {
   const unittest::TestExtremeDefaultValues& extreme_default =
   const unittest::TestExtremeDefaultValues& extreme_default =

+ 2 - 2
src/google/protobuf/compiler/plugin.pb.h

@@ -8,12 +8,12 @@
 
 
 #include <google/protobuf/stubs/common.h>
 #include <google/protobuf/stubs/common.h>
 
 
-#if GOOGLE_PROTOBUF_VERSION < 2006000
+#if GOOGLE_PROTOBUF_VERSION < 3000000
 #error This file was generated by a newer version of protoc which is
 #error This file was generated by a newer version of protoc which is
 #error incompatible with your Protocol Buffer headers.  Please update
 #error incompatible with your Protocol Buffer headers.  Please update
 #error your headers.
 #error your headers.
 #endif
 #endif
-#if 2006002 < GOOGLE_PROTOBUF_MIN_PROTOC_VERSION
+#if 3000000 < GOOGLE_PROTOBUF_MIN_PROTOC_VERSION
 #error This file was generated by an older version of protoc which is
 #error This file was generated by an older version of protoc which is
 #error incompatible with your Protocol Buffer headers.  Please
 #error incompatible with your Protocol Buffer headers.  Please
 #error regenerate this file with a newer version of protoc.
 #error regenerate this file with a newer version of protoc.

+ 5 - 0
src/google/protobuf/descriptor.cc

@@ -345,6 +345,10 @@ typedef hash_map<string, const SourceCodeInfo_Location*> LocationsByPathMap;
 set<string>* allowed_proto3_extendees_ = NULL;
 set<string>* allowed_proto3_extendees_ = NULL;
 GOOGLE_PROTOBUF_DECLARE_ONCE(allowed_proto3_extendees_init_);
 GOOGLE_PROTOBUF_DECLARE_ONCE(allowed_proto3_extendees_init_);
 
 
+void DeleteAllowedProto3Extendee() {
+  delete allowed_proto3_extendees_;
+}
+
 void InitAllowedProto3Extendee() {
 void InitAllowedProto3Extendee() {
   allowed_proto3_extendees_ = new set<string>;
   allowed_proto3_extendees_ = new set<string>;
   allowed_proto3_extendees_->insert("google.protobuf.FileOptions");
   allowed_proto3_extendees_->insert("google.protobuf.FileOptions");
@@ -354,6 +358,7 @@ void InitAllowedProto3Extendee() {
   allowed_proto3_extendees_->insert("google.protobuf.EnumValueOptions");
   allowed_proto3_extendees_->insert("google.protobuf.EnumValueOptions");
   allowed_proto3_extendees_->insert("google.protobuf.ServiceOptions");
   allowed_proto3_extendees_->insert("google.protobuf.ServiceOptions");
   allowed_proto3_extendees_->insert("google.protobuf.MethodOptions");
   allowed_proto3_extendees_->insert("google.protobuf.MethodOptions");
+  google::protobuf::internal::OnShutdown(&DeleteAllowedProto3Extendee);
 }
 }
 
 
 // Checks whether the extendee type is allowed in proto3.
 // Checks whether the extendee type is allowed in proto3.

+ 2 - 2
src/google/protobuf/descriptor.pb.h

@@ -8,12 +8,12 @@
 
 
 #include <google/protobuf/stubs/common.h>
 #include <google/protobuf/stubs/common.h>
 
 
-#if GOOGLE_PROTOBUF_VERSION < 2006000
+#if GOOGLE_PROTOBUF_VERSION < 3000000
 #error This file was generated by a newer version of protoc which is
 #error This file was generated by a newer version of protoc which is
 #error incompatible with your Protocol Buffer headers.  Please update
 #error incompatible with your Protocol Buffer headers.  Please update
 #error your headers.
 #error your headers.
 #endif
 #endif
-#if 2006002 < GOOGLE_PROTOBUF_MIN_PROTOC_VERSION
+#if 3000000 < GOOGLE_PROTOBUF_MIN_PROTOC_VERSION
 #error This file was generated by an older version of protoc which is
 #error This file was generated by an older version of protoc which is
 #error incompatible with your Protocol Buffer headers.  Please
 #error incompatible with your Protocol Buffer headers.  Please
 #error regenerate this file with a newer version of protoc.
 #error regenerate this file with a newer version of protoc.

+ 3 - 3
src/google/protobuf/map.h

@@ -110,7 +110,7 @@ class Map {
   ~Map() { clear(); }
   ~Map() { clear(); }
 
 
   // Iterators
   // Iterators
-  class LIBPROTOBUF_EXPORT const_iterator
+  class const_iterator
       : public std::iterator<std::forward_iterator_tag, value_type, ptrdiff_t,
       : public std::iterator<std::forward_iterator_tag, value_type, ptrdiff_t,
                              const value_type*, const value_type&> {
                              const value_type*, const value_type&> {
     typedef typename hash_map<Key, value_type*>::const_iterator InnerIt;
     typedef typename hash_map<Key, value_type*>::const_iterator InnerIt;
@@ -139,7 +139,7 @@ class Map {
     InnerIt it_;
     InnerIt it_;
   };
   };
 
 
-  class LIBPROTOBUF_EXPORT iterator : public std::iterator<std::forward_iterator_tag, value_type> {
+  class iterator : public std::iterator<std::forward_iterator_tag, value_type> {
     typedef typename hash_map<Key, value_type*>::iterator InnerIt;
     typedef typename hash_map<Key, value_type*>::iterator InnerIt;
 
 
    public:
    public:
@@ -302,7 +302,7 @@ class Map {
 
 
   template <typename K, typename V, FieldDescriptor::Type KeyProto,
   template <typename K, typename V, FieldDescriptor::Type KeyProto,
             FieldDescriptor::Type ValueProto, int default_enum>
             FieldDescriptor::Type ValueProto, int default_enum>
-  friend class LIBPROTOBUF_EXPORT internal::MapField;
+  friend class internal::MapField;
 };
 };
 
 
 }  // namespace protobuf
 }  // namespace protobuf

+ 9 - 4
src/google/protobuf/map_entry.h

@@ -43,6 +43,10 @@ class Arena;
 namespace protobuf {
 namespace protobuf {
 namespace internal {
 namespace internal {
 
 
+// Register all MapEntry default instances so we can delete them in
+// ShutdownProtobufLibrary().
+void LIBPROTOBUF_EXPORT RegisterMapEntryDefaultInstance(MessageLite* default_instance);
+
 // This is the common base class for MapEntry. It is used by MapFieldBase in
 // This is the common base class for MapEntry. It is used by MapFieldBase in
 // reflection api, in which the static type of key and value is unknown.
 // reflection api, in which the static type of key and value is unknown.
 class LIBPROTOBUF_EXPORT MapEntryBase : public Message {
 class LIBPROTOBUF_EXPORT MapEntryBase : public Message {
@@ -80,7 +84,7 @@ class LIBPROTOBUF_EXPORT MapEntryBase : public Message {
 // Moreover, default_enum_value is used to initialize enum field in proto2.
 // Moreover, default_enum_value is used to initialize enum field in proto2.
 template <typename Key, typename Value, FieldDescriptor::Type KeyProtoType,
 template <typename Key, typename Value, FieldDescriptor::Type KeyProtoType,
           FieldDescriptor::Type ValueProtoType, int default_enum_value>
           FieldDescriptor::Type ValueProtoType, int default_enum_value>
-class LIBPROTOBUF_EXPORT MapEntry : public MapEntryBase {
+class MapEntry : public MapEntryBase {
   // Handlers for key/value's proto field type. Used to infer internal layout
   // Handlers for key/value's proto field type. Used to infer internal layout
   // and provide parsing/serialization support.
   // and provide parsing/serialization support.
   typedef MapProtoTypeHandler<KeyProtoType> KeyProtoHandler;
   typedef MapProtoTypeHandler<KeyProtoType> KeyProtoHandler;
@@ -317,6 +321,7 @@ class LIBPROTOBUF_EXPORT MapEntry : public MapEntryBase {
     entry->reflection_ = reflection;
     entry->reflection_ = reflection;
     entry->default_instance_ = entry;
     entry->default_instance_ = entry;
     entry->InitAsDefaultInstance();
     entry->InitAsDefaultInstance();
+    RegisterMapEntryDefaultInstance(entry);
     return entry;
     return entry;
   }
   }
 
 
@@ -358,7 +363,7 @@ class LIBPROTOBUF_EXPORT MapEntry : public MapEntryBase {
   template <typename KeyNested, typename ValueNested,
   template <typename KeyNested, typename ValueNested,
             FieldDescriptor::Type KeyProtoNested,
             FieldDescriptor::Type KeyProtoNested,
             FieldDescriptor::Type ValueProtoNested, int default_enum>
             FieldDescriptor::Type ValueProtoNested, int default_enum>
-  class LIBPROTOBUF_EXPORT MapEntryWrapper
+  class MapEntryWrapper
       : public MapEntry<KeyNested, ValueNested, KeyProtoNested,
       : public MapEntry<KeyNested, ValueNested, KeyProtoNested,
                         ValueProtoNested, default_enum> {
                         ValueProtoNested, default_enum> {
     typedef MapEntry<KeyNested, ValueNested, KeyProtoNested, ValueProtoNested,
     typedef MapEntry<KeyNested, ValueNested, KeyProtoNested, ValueProtoNested,
@@ -389,7 +394,7 @@ class LIBPROTOBUF_EXPORT MapEntry : public MapEntryBase {
   template <typename KeyNested, typename ValueNested,
   template <typename KeyNested, typename ValueNested,
             FieldDescriptor::Type KeyProtoNested,
             FieldDescriptor::Type KeyProtoNested,
             FieldDescriptor::Type ValueProtoNested, int default_enum>
             FieldDescriptor::Type ValueProtoNested, int default_enum>
-  class LIBPROTOBUF_EXPORT MapEnumEntryWrapper
+  class MapEnumEntryWrapper
       : public MapEntry<KeyNested, ValueNested, KeyProtoNested,
       : public MapEntry<KeyNested, ValueNested, KeyProtoNested,
                         ValueProtoNested, default_enum> {
                         ValueProtoNested, default_enum> {
     typedef MapEntry<KeyNested, ValueNested, KeyProtoNested, ValueProtoNested,
     typedef MapEntry<KeyNested, ValueNested, KeyProtoNested, ValueProtoNested,
@@ -428,7 +433,7 @@ class LIBPROTOBUF_EXPORT MapEntry : public MapEntryBase {
   template <typename K, typename V,
   template <typename K, typename V,
             FieldDescriptor::Type KType,
             FieldDescriptor::Type KType,
             FieldDescriptor::Type VType, int default_enum>
             FieldDescriptor::Type VType, int default_enum>
-  friend class LIBPROTOBUF_EXPORT internal::MapField;
+  friend class internal::MapField;
   friend class LIBPROTOBUF_EXPORT internal::GeneratedMessageReflection;
   friend class LIBPROTOBUF_EXPORT internal::GeneratedMessageReflection;
 
 
   GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(MapEntry);
   GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(MapEntry);

+ 27 - 0
src/google/protobuf/map_field.cc

@@ -30,10 +30,37 @@
 
 
 #include <google/protobuf/map_field.h>
 #include <google/protobuf/map_field.h>
 
 
+#include <vector>
+
 namespace google {
 namespace google {
 namespace protobuf {
 namespace protobuf {
 namespace internal {
 namespace internal {
 
 
+ProtobufOnceType map_entry_default_instances_once_;
+Mutex* map_entry_default_instances_mutex_;
+vector<MessageLite*>* map_entry_default_instances_;
+
+void DeleteMapEntryDefaultInstances() {
+  for (int i = 0; i < map_entry_default_instances_->size(); ++i) {
+    delete map_entry_default_instances_->at(i);
+  }
+  delete map_entry_default_instances_mutex_;
+  delete map_entry_default_instances_;
+}
+
+void InitMapEntryDefaultInstances() {
+  map_entry_default_instances_mutex_ = new Mutex();
+  map_entry_default_instances_ = new vector<MessageLite*>();
+  OnShutdown(&DeleteMapEntryDefaultInstances);
+}
+
+void RegisterMapEntryDefaultInstance(MessageLite* default_instance) {
+  GoogleOnceInit(&map_entry_default_instances_once_,
+                 &InitMapEntryDefaultInstances);
+  MutexLock lock(map_entry_default_instances_mutex_);
+  map_entry_default_instances_->push_back(default_instance);
+}
+
 MapFieldBase::~MapFieldBase() {
 MapFieldBase::~MapFieldBase() {
   if (repeated_field_ != NULL) delete repeated_field_;
   if (repeated_field_ != NULL) delete repeated_field_;
 }
 }

+ 1 - 1
src/google/protobuf/map_field.h

@@ -137,7 +137,7 @@ class LIBPROTOBUF_EXPORT MapFieldBase {
 template<typename Key, typename T,
 template<typename Key, typename T,
          FieldDescriptor::Type KeyProto,
          FieldDescriptor::Type KeyProto,
          FieldDescriptor::Type ValueProto, int default_enum_value = 0>
          FieldDescriptor::Type ValueProto, int default_enum_value = 0>
-class LIBPROTOBUF_EXPORT MapField : public MapFieldBase {
+class MapField : public MapFieldBase {
   // Handlers for key/value's proto field type.
   // Handlers for key/value's proto field type.
   typedef MapProtoTypeHandler<KeyProto> KeyProtoHandler;
   typedef MapProtoTypeHandler<KeyProto> KeyProtoHandler;
   typedef MapProtoTypeHandler<ValueProto> ValueProtoHandler;
   typedef MapProtoTypeHandler<ValueProto> ValueProtoHandler;

+ 0 - 35
src/google/protobuf/map_field_test.cc

@@ -430,41 +430,6 @@ TEST_P(MapFieldStateTest, MutableMapField) {
   }
   }
 }
 }
 
 
-class MapFieldBaseStateStub : public MapFieldBaseStub {
- public:
-  MapFieldBaseStateStub(Mutex* mutex, int* clean_counter,
-                        int* completed_counter)
-      : mutex_(mutex),
-        clean_counter_(clean_counter),
-        completed_counter_(completed_counter) {}
-  ~MapFieldBaseStateStub() {}
-
- protected:
-  void SyncRepeatedFieldWithMapNoLock() const { Clean(); }
-  void SyncMapWithRepeatedFieldNoLock() const { Clean(); }
-
- private:
-  void Clean() const {
-    {
-      MutexLock lock(mutex_);
-      ++(*clean_counter_);
-    }
-    struct timespec tm;
-    tm.tv_sec = 0;
-    tm.tv_nsec = 100000000;  // 100ms
-    nanosleep(&tm, NULL);
-    {
-      MutexLock lock(mutex_);
-      // No other thread should have completed while this one was initializing.
-      EXPECT_EQ(0, *completed_counter_);
-    }
-  }
-  Mutex* mutex_;
-  int* clean_counter_;
-  int* completed_counter_;
-};
-
-
 }  // namespace internal
 }  // namespace internal
 }  // namespace protobuf
 }  // namespace protobuf
 }  // namespace google
 }  // namespace google

+ 2 - 0
src/google/protobuf/map_test.cc

@@ -190,6 +190,7 @@ TEST_F(MapImplTest, MutableAt) {
   ExpectSingleElement(key, value2);
   ExpectSingleElement(key, value2);
 }
 }
 
 
+#ifdef PROTOBUF_HAS_DEATH_TEST
 TEST_F(MapImplTest, MutableAtNonExistDeathTest) {
 TEST_F(MapImplTest, MutableAtNonExistDeathTest) {
   EXPECT_DEATH(map_.at(0), "");
   EXPECT_DEATH(map_.at(0), "");
 }
 }
@@ -197,6 +198,7 @@ TEST_F(MapImplTest, MutableAtNonExistDeathTest) {
 TEST_F(MapImplTest, ImmutableAtNonExistDeathTest) {
 TEST_F(MapImplTest, ImmutableAtNonExistDeathTest) {
   EXPECT_DEATH(const_map_.at(0), "");
   EXPECT_DEATH(const_map_.at(0), "");
 }
 }
+#endif  // PROTOBUF_HAS_DEATH_TEST
 
 
 TEST_F(MapImplTest, CountNonExist) {
 TEST_F(MapImplTest, CountNonExist) {
   EXPECT_EQ(0, map_.count(0));
   EXPECT_EQ(0, map_.count(0));

+ 17 - 17
src/google/protobuf/map_test_util.cc

@@ -1020,7 +1020,7 @@ void MapTestUtil::MapReflectionTester::ExpectMapFieldsSetViaReflection(
           *sub_message, map_int32_int32_key_);
           *sub_message, map_int32_int32_key_);
       int32 val = sub_message->GetReflection()->GetInt32(
       int32 val = sub_message->GetReflection()->GetInt32(
           *sub_message, map_int32_int32_val_);
           *sub_message, map_int32_int32_val_);
-      EXPECT_EQ(map.at(key), val);
+      EXPECT_EQ(map[key], val);
     }
     }
   }
   }
   {
   {
@@ -1034,7 +1034,7 @@ void MapTestUtil::MapReflectionTester::ExpectMapFieldsSetViaReflection(
           *sub_message, map_int64_int64_key_);
           *sub_message, map_int64_int64_key_);
       int64 val = sub_message->GetReflection()->GetInt64(
       int64 val = sub_message->GetReflection()->GetInt64(
           *sub_message, map_int64_int64_val_);
           *sub_message, map_int64_int64_val_);
-      EXPECT_EQ(map.at(key), val);
+      EXPECT_EQ(map[key], val);
     }
     }
   }
   }
   {
   {
@@ -1048,7 +1048,7 @@ void MapTestUtil::MapReflectionTester::ExpectMapFieldsSetViaReflection(
           *sub_message, map_uint32_uint32_key_);
           *sub_message, map_uint32_uint32_key_);
       uint32 val = sub_message->GetReflection()->GetUInt32(
       uint32 val = sub_message->GetReflection()->GetUInt32(
           *sub_message, map_uint32_uint32_val_);
           *sub_message, map_uint32_uint32_val_);
-      EXPECT_EQ(map.at(key), val);
+      EXPECT_EQ(map[key], val);
     }
     }
   }
   }
   {
   {
@@ -1062,7 +1062,7 @@ void MapTestUtil::MapReflectionTester::ExpectMapFieldsSetViaReflection(
           *sub_message, map_uint64_uint64_key_);
           *sub_message, map_uint64_uint64_key_);
       uint64 val = sub_message->GetReflection()->GetUInt64(
       uint64 val = sub_message->GetReflection()->GetUInt64(
           *sub_message, map_uint64_uint64_val_);
           *sub_message, map_uint64_uint64_val_);
-      EXPECT_EQ(map.at(key), val);
+      EXPECT_EQ(map[key], val);
     }
     }
   }
   }
   {
   {
@@ -1076,7 +1076,7 @@ void MapTestUtil::MapReflectionTester::ExpectMapFieldsSetViaReflection(
           *sub_message, map_sint32_sint32_key_);
           *sub_message, map_sint32_sint32_key_);
       int32 val = sub_message->GetReflection()->GetInt32(
       int32 val = sub_message->GetReflection()->GetInt32(
           *sub_message, map_sint32_sint32_val_);
           *sub_message, map_sint32_sint32_val_);
-      EXPECT_EQ(map.at(key), val);
+      EXPECT_EQ(map[key], val);
     }
     }
   }
   }
   {
   {
@@ -1090,7 +1090,7 @@ void MapTestUtil::MapReflectionTester::ExpectMapFieldsSetViaReflection(
           *sub_message, map_sint64_sint64_key_);
           *sub_message, map_sint64_sint64_key_);
       int64 val = sub_message->GetReflection()->GetInt64(
       int64 val = sub_message->GetReflection()->GetInt64(
           *sub_message, map_sint64_sint64_val_);
           *sub_message, map_sint64_sint64_val_);
-      EXPECT_EQ(map.at(key), val);
+      EXPECT_EQ(map[key], val);
     }
     }
   }
   }
   {
   {
@@ -1104,7 +1104,7 @@ void MapTestUtil::MapReflectionTester::ExpectMapFieldsSetViaReflection(
           *sub_message, map_fixed32_fixed32_key_);
           *sub_message, map_fixed32_fixed32_key_);
       uint32 val = sub_message->GetReflection()->GetUInt32(
       uint32 val = sub_message->GetReflection()->GetUInt32(
           *sub_message, map_fixed32_fixed32_val_);
           *sub_message, map_fixed32_fixed32_val_);
-      EXPECT_EQ(map.at(key), val);
+      EXPECT_EQ(map[key], val);
     }
     }
   }
   }
   {
   {
@@ -1118,7 +1118,7 @@ void MapTestUtil::MapReflectionTester::ExpectMapFieldsSetViaReflection(
           *sub_message, map_fixed64_fixed64_key_);
           *sub_message, map_fixed64_fixed64_key_);
       uint64 val = sub_message->GetReflection()->GetUInt64(
       uint64 val = sub_message->GetReflection()->GetUInt64(
           *sub_message, map_fixed64_fixed64_val_);
           *sub_message, map_fixed64_fixed64_val_);
-      EXPECT_EQ(map.at(key), val);
+      EXPECT_EQ(map[key], val);
     }
     }
   }
   }
   {
   {
@@ -1132,7 +1132,7 @@ void MapTestUtil::MapReflectionTester::ExpectMapFieldsSetViaReflection(
           *sub_message, map_sfixed32_sfixed32_key_);
           *sub_message, map_sfixed32_sfixed32_key_);
       int32 val = sub_message->GetReflection()->GetInt32(
       int32 val = sub_message->GetReflection()->GetInt32(
           *sub_message, map_sfixed32_sfixed32_val_);
           *sub_message, map_sfixed32_sfixed32_val_);
-      EXPECT_EQ(map.at(key), val);
+      EXPECT_EQ(map[key], val);
     }
     }
   }
   }
   {
   {
@@ -1146,7 +1146,7 @@ void MapTestUtil::MapReflectionTester::ExpectMapFieldsSetViaReflection(
           *sub_message, map_sfixed64_sfixed64_key_);
           *sub_message, map_sfixed64_sfixed64_key_);
       int64 val = sub_message->GetReflection()->GetInt64(
       int64 val = sub_message->GetReflection()->GetInt64(
           *sub_message, map_sfixed64_sfixed64_val_);
           *sub_message, map_sfixed64_sfixed64_val_);
-      EXPECT_EQ(map.at(key), val);
+      EXPECT_EQ(map[key], val);
     }
     }
   }
   }
   {
   {
@@ -1160,7 +1160,7 @@ void MapTestUtil::MapReflectionTester::ExpectMapFieldsSetViaReflection(
           *sub_message, map_int32_float_key_);
           *sub_message, map_int32_float_key_);
       float val = sub_message->GetReflection()->GetFloat(
       float val = sub_message->GetReflection()->GetFloat(
           *sub_message, map_int32_float_val_);
           *sub_message, map_int32_float_val_);
-      EXPECT_EQ(map.at(key), val);
+      EXPECT_EQ(map[key], val);
     }
     }
   }
   }
   {
   {
@@ -1174,7 +1174,7 @@ void MapTestUtil::MapReflectionTester::ExpectMapFieldsSetViaReflection(
           *sub_message, map_int32_double_key_);
           *sub_message, map_int32_double_key_);
       double val = sub_message->GetReflection()->GetDouble(
       double val = sub_message->GetReflection()->GetDouble(
           *sub_message, map_int32_double_val_);
           *sub_message, map_int32_double_val_);
-      EXPECT_EQ(map.at(key), val);
+      EXPECT_EQ(map[key], val);
     }
     }
   }
   }
   {
   {
@@ -1188,7 +1188,7 @@ void MapTestUtil::MapReflectionTester::ExpectMapFieldsSetViaReflection(
           *sub_message, map_bool_bool_key_);
           *sub_message, map_bool_bool_key_);
       bool val = sub_message->GetReflection()->GetBool(
       bool val = sub_message->GetReflection()->GetBool(
           *sub_message, map_bool_bool_val_);
           *sub_message, map_bool_bool_val_);
-      EXPECT_EQ(map.at(key), val);
+      EXPECT_EQ(map[key], val);
     }
     }
   }
   }
   {
   {
@@ -1202,7 +1202,7 @@ void MapTestUtil::MapReflectionTester::ExpectMapFieldsSetViaReflection(
           *sub_message, map_string_string_key_);
           *sub_message, map_string_string_key_);
       string val = sub_message->GetReflection()->GetString(
       string val = sub_message->GetReflection()->GetString(
           *sub_message, map_string_string_val_);
           *sub_message, map_string_string_val_);
-      EXPECT_EQ(map.at(key), val);
+      EXPECT_EQ(map[key], val);
     }
     }
   }
   }
   {
   {
@@ -1216,7 +1216,7 @@ void MapTestUtil::MapReflectionTester::ExpectMapFieldsSetViaReflection(
           *sub_message, map_int32_bytes_key_);
           *sub_message, map_int32_bytes_key_);
       string val = sub_message->GetReflection()->GetString(
       string val = sub_message->GetReflection()->GetString(
           *sub_message, map_int32_bytes_val_);
           *sub_message, map_int32_bytes_val_);
-      EXPECT_EQ(map.at(key), val);
+      EXPECT_EQ(map[key], val);
     }
     }
   }
   }
   {
   {
@@ -1230,7 +1230,7 @@ void MapTestUtil::MapReflectionTester::ExpectMapFieldsSetViaReflection(
           *sub_message, map_int32_enum_key_);
           *sub_message, map_int32_enum_key_);
       const EnumValueDescriptor* val = sub_message->GetReflection()->GetEnum(
       const EnumValueDescriptor* val = sub_message->GetReflection()->GetEnum(
           *sub_message, map_int32_enum_val_);
           *sub_message, map_int32_enum_val_);
-      EXPECT_EQ(map.at(key), val);
+      EXPECT_EQ(map[key], val);
     }
     }
   }
   }
   {
   {
@@ -1246,7 +1246,7 @@ void MapTestUtil::MapReflectionTester::ExpectMapFieldsSetViaReflection(
           *sub_message, map_int32_foreign_message_val_);
           *sub_message, map_int32_foreign_message_val_);
       int32 val = foreign_message.GetReflection()->GetInt32(
       int32 val = foreign_message.GetReflection()->GetInt32(
           foreign_message, foreign_c_);
           foreign_message, foreign_c_);
-      EXPECT_EQ(map.at(key), val);
+      EXPECT_EQ(map[key], val);
     }
     }
   }
   }
 }
 }

+ 1 - 0
src/google/protobuf/message.h

@@ -967,6 +967,7 @@ const RepeatedField<TYPE>& Reflection::GetRepeatedField<TYPE>(   \
     const Message& message, const FieldDescriptor* field) const; \
     const Message& message, const FieldDescriptor* field) const; \
                                                                  \
                                                                  \
 template<>                                                       \
 template<>                                                       \
+LIBPROTOBUF_EXPORT                                               \
 RepeatedField<TYPE>* Reflection::MutableRepeatedField<TYPE>(     \
 RepeatedField<TYPE>* Reflection::MutableRepeatedField<TYPE>(     \
     Message* message, const FieldDescriptor* field) const;
     Message* message, const FieldDescriptor* field) const;
 
 

+ 2 - 0
src/google/protobuf/preserve_unknown_enum_test.cc

@@ -200,6 +200,7 @@ TEST(PreserveUnknownEnumTest, Proto2CatchesUnknownValues) {
   EXPECT_TRUE(enum_value != NULL);
   EXPECT_TRUE(enum_value != NULL);
   r->AddEnum(&message, repeated_field, enum_value);
   r->AddEnum(&message, repeated_field, enum_value);
 
 
+#ifdef PROTOBUF_HAS_DEATH_TEST
   // Enum-field integer-based setters GOOGLE_DCHECK-fail on invalid values, in order to
   // Enum-field integer-based setters GOOGLE_DCHECK-fail on invalid values, in order to
   // remain consistent with proto2 generated code.
   // remain consistent with proto2 generated code.
   EXPECT_DEBUG_DEATH({
   EXPECT_DEBUG_DEATH({
@@ -214,6 +215,7 @@ TEST(PreserveUnknownEnumTest, Proto2CatchesUnknownValues) {
     r->AddEnumValue(&message, repeated_field, 4242);
     r->AddEnumValue(&message, repeated_field, 4242);
     r->GetRepeatedEnum(message, repeated_field, 1);
     r->GetRepeatedEnum(message, repeated_field, 1);
   }, "AddEnumValue accepts only valid integer values");
   }, "AddEnumValue accepts only valid integer values");
+#endif  // PROTOBUF_HAS_DEATH_TEST
 }
 }
 
 
 TEST(PreserveUnknownEnumTest, SupportsUnknownEnumValuesAPI) {
 TEST(PreserveUnknownEnumTest, SupportsUnknownEnumValuesAPI) {

+ 9 - 4
src/google/protobuf/repeated_field.h

@@ -236,10 +236,11 @@ class RepeatedField {
     Arena* arena;
     Arena* arena;
     Element  elements[1];
     Element  elements[1];
   };
   };
-  // Why not sizeof(Rep) - sizeof(Element)? Because this is not accurate w.r.t.
-  // trailing padding on the struct -- e.g. if Element is int, this would yield
-  // 12 on x86-64, not 8 as we want.
-  static const size_t kRepHeaderSize = sizeof(Arena*);
+  // We can not use sizeof(Rep) - sizeof(Element) due to the trailing padding on
+  // the struct. We can not use sizeof(Arena*) as well because there might be
+  // a "gap" after the field arena and before the field elements (e.g., when
+  // Element is double and pointer is 32bit).
+  static const size_t kRepHeaderSize;
   // Contains arena ptr and the elements array. We also keep the invariant that
   // Contains arena ptr and the elements array. We also keep the invariant that
   // if rep_ is NULL, then arena is NULL.
   // if rep_ is NULL, then arena is NULL.
   Rep* rep_;
   Rep* rep_;
@@ -263,6 +264,10 @@ class RepeatedField {
   }
   }
 };
 };
 
 
+template<typename Element>
+const size_t RepeatedField<Element>::kRepHeaderSize =
+    reinterpret_cast<size_t>(&reinterpret_cast<Rep*>(16)->elements[0]) - 16;
+
 namespace internal {
 namespace internal {
 template <typename It> class RepeatedPtrIterator;
 template <typename It> class RepeatedPtrIterator;
 template <typename It, typename VoidPtr> class RepeatedPtrOverPtrsIterator;
 template <typename It, typename VoidPtr> class RepeatedPtrOverPtrsIterator;

+ 3 - 1
src/google/protobuf/repeated_field_reflection.h

@@ -38,6 +38,8 @@
 #include <google/protobuf/stubs/shared_ptr.h>
 #include <google/protobuf/stubs/shared_ptr.h>
 #endif
 #endif
 
 
+#include <google/protobuf/generated_enum_reflection.h>
+
 namespace google {
 namespace google {
 namespace protobuf {
 namespace protobuf {
 namespace internal {
 namespace internal {
@@ -273,7 +275,7 @@ struct RefTypeTraits<
 
 
 template<typename T>
 template<typename T>
 struct RefTypeTraits<
 struct RefTypeTraits<
-    T, typename internal::enable_if<internal::is_enum<T>::value>::type> {
+    T, typename internal::enable_if<is_proto_enum<T>::value>::type> {
   typedef RepeatedFieldRefIterator<T> iterator;
   typedef RepeatedFieldRefIterator<T> iterator;
   typedef RepeatedFieldAccessor AccessorType;
   typedef RepeatedFieldAccessor AccessorType;
   // We use int32 for repeated enums in RepeatedFieldAccessor.
   // We use int32 for repeated enums in RepeatedFieldAccessor.

+ 3 - 2
src/google/protobuf/repeated_field_reflection_unittest.cc

@@ -196,8 +196,7 @@ void TestRepeatedFieldRefIterator(
   int index = 0;
   int index = 0;
   for (typename Ref::const_iterator it = handle.begin();
   for (typename Ref::const_iterator it = handle.begin();
        it != handle.end(); ++it) {
        it != handle.end(); ++it) {
-    ValueType value = static_cast<ValueType>(*it);
-    EXPECT_EQ((message.*GetFunc)(index), value);
+    EXPECT_EQ((message.*GetFunc)(index), *it);
     ++index;
     ++index;
   }
   }
   EXPECT_EQ(handle.size(), index);
   EXPECT_EQ(handle.size(), index);
@@ -410,6 +409,7 @@ TEST(RepeatedFieldReflectionTest, RepeatedFieldRefForRegularFields) {
   EXPECT_TRUE(rf_message.empty());
   EXPECT_TRUE(rf_message.empty());
   EXPECT_TRUE(mrf_message.empty());
   EXPECT_TRUE(mrf_message.empty());
 
 
+#ifdef PROTOBUF_HAS_DEATH_TEST
   // Make sure types are checked correctly at runtime.
   // Make sure types are checked correctly at runtime.
   const FieldDescriptor* fd_optional_int32 =
   const FieldDescriptor* fd_optional_int32 =
       desc->FindFieldByName("optional_int32");
       desc->FindFieldByName("optional_int32");
@@ -419,6 +419,7 @@ TEST(RepeatedFieldReflectionTest, RepeatedFieldRefForRegularFields) {
       message, fd_repeated_int32), "");
       message, fd_repeated_int32), "");
   EXPECT_DEATH(refl->GetRepeatedFieldRef<TestAllTypes>(
   EXPECT_DEATH(refl->GetRepeatedFieldRef<TestAllTypes>(
       message, fd_repeated_foreign_message), "");
       message, fd_repeated_foreign_message), "");
+#endif  // PROTOBUF_HAS_DEATH_TEST
 }
 }
 
 
 TEST(RepeatedFieldReflectionTest, RepeatedFieldRefForEnums) {
 TEST(RepeatedFieldReflectionTest, RepeatedFieldRefForEnums) {

+ 2 - 2
src/google/protobuf/repeated_field_unittest.cc

@@ -92,8 +92,8 @@ TEST(RepeatedField, Small) {
 
 
   EXPECT_TRUE(field.empty());
   EXPECT_TRUE(field.empty());
   EXPECT_EQ(field.size(), 0);
   EXPECT_EQ(field.size(), 0);
-  // Additional 8 bytes are for 'struct Rep' header.
-  int expected_usage = 4 * sizeof(int) + 8;
+  // Additional bytes are for 'struct Rep' header.
+  int expected_usage = 4 * sizeof(int) + sizeof(Arena*);
   EXPECT_EQ(field.SpaceUsedExcludingSelf(), expected_usage);
   EXPECT_EQ(field.SpaceUsedExcludingSelf(), expected_usage);
 }
 }
 
 

+ 11 - 5
src/google/protobuf/stubs/common.h

@@ -113,24 +113,24 @@ namespace internal {
 
 
 // The current version, represented as a single integer to make comparison
 // The current version, represented as a single integer to make comparison
 // easier:  major * 10^6 + minor * 10^3 + micro
 // easier:  major * 10^6 + minor * 10^3 + micro
-#define GOOGLE_PROTOBUF_VERSION 2006002
+#define GOOGLE_PROTOBUF_VERSION 3000000
 
 
 // The minimum library version which works with the current version of the
 // The minimum library version which works with the current version of the
 // headers.
 // headers.
-#define GOOGLE_PROTOBUF_MIN_LIBRARY_VERSION 2006000
+#define GOOGLE_PROTOBUF_MIN_LIBRARY_VERSION 3000000
 
 
 // The minimum header version which works with the current version of
 // The minimum header version which works with the current version of
 // the library.  This constant should only be used by protoc's C++ code
 // the library.  This constant should only be used by protoc's C++ code
 // generator.
 // generator.
-static const int kMinHeaderVersionForLibrary = 2006000;
+static const int kMinHeaderVersionForLibrary = 3000000;
 
 
 // The minimum protoc version which works with the current version of the
 // The minimum protoc version which works with the current version of the
 // headers.
 // headers.
-#define GOOGLE_PROTOBUF_MIN_PROTOC_VERSION 2006000
+#define GOOGLE_PROTOBUF_MIN_PROTOC_VERSION 3000000
 
 
 // The minimum header version which works with the current version of
 // The minimum header version which works with the current version of
 // protoc.  This constant should only be used in VerifyVersion().
 // protoc.  This constant should only be used in VerifyVersion().
-static const int kMinHeaderVersionForProtoc = 2006000;
+static const int kMinHeaderVersionForProtoc = 3000000;
 
 
 // Verifies that the headers and libraries are compatible.  Use the macro
 // Verifies that the headers and libraries are compatible.  Use the macro
 // below to call this.
 // below to call this.
@@ -314,6 +314,12 @@ inline void GOOGLE_UNALIGNED_STORE64(void *p, uint64 v) {
 }
 }
 #endif
 #endif
 
 
+#if defined(_MSC_VER)
+#define GOOGLE_THREAD_LOCAL __declspec(thread)
+#else
+#define GOOGLE_THREAD_LOCAL __thread
+#endif
+
 // ===================================================================
 // ===================================================================
 // from google3/base/basictypes.h
 // from google3/base/basictypes.h
 
 

+ 0 - 1
src/google/protobuf/stubs/fastmem.h

@@ -46,7 +46,6 @@
 #define GOOGLE_PROTOBUF_STUBS_FASTMEM_H_
 #define GOOGLE_PROTOBUF_STUBS_FASTMEM_H_
 
 
 #include <stddef.h>
 #include <stddef.h>
-#include <stdint.h>
 #include <stdio.h>
 #include <stdio.h>
 #include <string.h>
 #include <string.h>
 
 

+ 6 - 5
src/google/protobuf/stubs/type_traits.h

@@ -103,7 +103,7 @@ template <class T> struct remove_reference;
 template <class T> struct add_reference;
 template <class T> struct add_reference;
 template <class T> struct remove_pointer;
 template <class T> struct remove_pointer;
 template <class T, class U> struct is_same;
 template <class T, class U> struct is_same;
-#if !defined(_MSC_VER) && !(defined(__GNUC__) && __GNUC__ <= 3)
+#if !(defined(__GNUC__) && __GNUC__ <= 3)
 template <class From, class To> struct is_convertible;
 template <class From, class To> struct is_convertible;
 #endif
 #endif
 
 
@@ -322,7 +322,7 @@ template<typename T, typename U> struct is_same : public false_type { };
 template<typename T> struct is_same<T, T> : public true_type { };
 template<typename T> struct is_same<T, T> : public true_type { };
 
 
 // Specified by TR1 [4.6] Relationships between types
 // Specified by TR1 [4.6] Relationships between types
-#if !defined(_MSC_VER) && !(defined(__GNUC__) && __GNUC__ <= 3)
+#if !(defined(__GNUC__) && __GNUC__ <= 3)
 namespace type_traits_internal {
 namespace type_traits_internal {
 
 
 // This class is an implementation detail for is_convertible, and you
 // This class is an implementation detail for is_convertible, and you
@@ -339,6 +339,9 @@ struct ConvertHelper {
   static small_ Test(To);
   static small_ Test(To);
   static big_ Test(...);
   static big_ Test(...);
   static From Create();
   static From Create();
+  enum {
+    value = sizeof(Test(Create())) == sizeof(small_)
+  };
 };
 };
 }  // namespace type_traits_internal
 }  // namespace type_traits_internal
 
 
@@ -346,9 +349,7 @@ struct ConvertHelper {
 template <typename From, typename To>
 template <typename From, typename To>
 struct is_convertible
 struct is_convertible
     : integral_constant<bool,
     : integral_constant<bool,
-                        sizeof(type_traits_internal::ConvertHelper<From, To>::Test(
-                                  type_traits_internal::ConvertHelper<From, To>::Create()))
-                        == sizeof(small_)> {
+                        type_traits_internal::ConvertHelper<From, To>::value> {
 };
 };
 #endif
 #endif
 
 

+ 1 - 1
src/google/protobuf/stubs/type_traits_unittest.cc

@@ -610,7 +610,7 @@ TEST(TypeTraitsTest, TestIsSame) {
 }
 }
 
 
 TEST(TypeTraitsTest, TestConvertible) {
 TEST(TypeTraitsTest, TestConvertible) {
-#if !defined(_MSC_VER) && !(defined(__GNUC__) && __GNUC__ <= 3)
+#if !(defined(__GNUC__) && __GNUC__ <= 3)
   EXPECT_TRUE((is_convertible<int, int>::value));
   EXPECT_TRUE((is_convertible<int, int>::value));
   EXPECT_TRUE((is_convertible<int, long>::value));
   EXPECT_TRUE((is_convertible<int, long>::value));
   EXPECT_TRUE((is_convertible<long, int>::value));
   EXPECT_TRUE((is_convertible<long, int>::value));

+ 1 - 1
src/google/protobuf/unknown_field_set_unittest.cc

@@ -485,7 +485,7 @@ TEST_F(UnknownFieldSetTest, UnknownEnumValue) {
 TEST_F(UnknownFieldSetTest, SpaceUsedExcludingSelf) {
 TEST_F(UnknownFieldSetTest, SpaceUsedExcludingSelf) {
   UnknownFieldSet empty;
   UnknownFieldSet empty;
   empty.AddVarint(1, 0);
   empty.AddVarint(1, 0);
-  EXPECT_EQ(/* vector<UnknownField> */ 24 + /* sizeof(UnknownField) */ 16,
+  EXPECT_EQ(sizeof(vector<UnknownField>) + sizeof(UnknownField),
             empty.SpaceUsedExcludingSelf());
             empty.SpaceUsedExcludingSelf());
 }
 }
 
 

+ 53 - 25
vsprojects/extract_includes.bat

@@ -7,44 +7,72 @@ md include\google\protobuf\compiler
 md include\google\protobuf\compiler\cpp
 md include\google\protobuf\compiler\cpp
 md include\google\protobuf\compiler\java
 md include\google\protobuf\compiler\java
 md include\google\protobuf\compiler\python
 md include\google\protobuf\compiler\python
-copy ..\src\google\protobuf\stubs\atomicops.h include\google\protobuf\stubs\atomicops.h
-copy ..\src\google\protobuf\stubs\atomicops_internals_x86_msvc.h include\google\protobuf\stubs\atomicops_internals_x86_msvc.h
-copy ..\src\google\protobuf\stubs\common.h include\google\protobuf\stubs\common.h
-copy ..\src\google\protobuf\stubs\once.h include\google\protobuf\stubs\once.h
-copy ..\src\google\protobuf\stubs\platform_macros.h include\google\protobuf\stubs\platform_macros.h
-copy ..\src\google\protobuf\stubs\template_util.h include\google\protobuf\stubs\template_util.h
-copy ..\src\google\protobuf\stubs\type_traits.h include\google\protobuf\stubs\type_traits.h
+copy ..\src\google\protobuf\arena.h include\google\protobuf\arena.h
+copy ..\src\google\protobuf\arenastring.h include\google\protobuf\arenastring.h
+copy ..\src\google\protobuf\compiler\code_generator.h include\google\protobuf\compiler\code_generator.h
+copy ..\src\google\protobuf\compiler\command_line_interface.h include\google\protobuf\compiler\command_line_interface.h
+copy ..\src\google\protobuf\compiler\cpp\cpp_generator.h include\google\protobuf\compiler\cpp\cpp_generator.h
+copy ..\src\google\protobuf\compiler\importer.h include\google\protobuf\compiler\importer.h
+copy ..\src\google\protobuf\compiler\java\java_generator.h include\google\protobuf\compiler\java\java_generator.h
+copy ..\src\google\protobuf\compiler\parser.h include\google\protobuf\compiler\parser.h
+copy ..\src\google\protobuf\compiler\plugin.h include\google\protobuf\compiler\plugin.h
+copy ..\src\google\protobuf\compiler\plugin.pb.h include\google\protobuf\compiler\plugin.pb.h
+copy ..\src\google\protobuf\compiler\python\python_generator.h include\google\protobuf\compiler\python\python_generator.h
+copy ..\src\google\protobuf\descriptor_database.h include\google\protobuf\descriptor_database.h
 copy ..\src\google\protobuf\descriptor.h include\google\protobuf\descriptor.h
 copy ..\src\google\protobuf\descriptor.h include\google\protobuf\descriptor.h
 copy ..\src\google\protobuf\descriptor.pb.h include\google\protobuf\descriptor.pb.h
 copy ..\src\google\protobuf\descriptor.pb.h include\google\protobuf\descriptor.pb.h
-copy ..\src\google\protobuf\descriptor_database.h include\google\protobuf\descriptor_database.h
 copy ..\src\google\protobuf\dynamic_message.h include\google\protobuf\dynamic_message.h
 copy ..\src\google\protobuf\dynamic_message.h include\google\protobuf\dynamic_message.h
 copy ..\src\google\protobuf\extension_set.h include\google\protobuf\extension_set.h
 copy ..\src\google\protobuf\extension_set.h include\google\protobuf\extension_set.h
 copy ..\src\google\protobuf\generated_enum_reflection.h include\google\protobuf\generated_enum_reflection.h
 copy ..\src\google\protobuf\generated_enum_reflection.h include\google\protobuf\generated_enum_reflection.h
-copy ..\src\google\protobuf\generated_message_util.h include\google\protobuf\generated_message_util.h
 copy ..\src\google\protobuf\generated_message_reflection.h include\google\protobuf\generated_message_reflection.h
 copy ..\src\google\protobuf\generated_message_reflection.h include\google\protobuf\generated_message_reflection.h
+copy ..\src\google\protobuf\generated_message_util.h include\google\protobuf\generated_message_util.h
+copy ..\src\google\protobuf\io\coded_stream.h include\google\protobuf\io\coded_stream.h
+copy ..\src\google\protobuf\io\gzip_stream.h include\google\protobuf\io\gzip_stream.h
+copy ..\src\google\protobuf\io\printer.h include\google\protobuf\io\printer.h
+copy ..\src\google\protobuf\io\strtod.h include\google\protobuf\io\strtod.h
+copy ..\src\google\protobuf\io\tokenizer.h include\google\protobuf\io\tokenizer.h
+copy ..\src\google\protobuf\io\zero_copy_stream.h include\google\protobuf\io\zero_copy_stream.h
+copy ..\src\google\protobuf\io\zero_copy_stream_impl.h include\google\protobuf\io\zero_copy_stream_impl.h
+copy ..\src\google\protobuf\io\zero_copy_stream_impl_lite.h include\google\protobuf\io\zero_copy_stream_impl_lite.h
+copy ..\src\google\protobuf\map_entry.h include\google\protobuf\map_entry.h
+copy ..\src\google\protobuf\map_field.h include\google\protobuf\map_field.h
+copy ..\src\google\protobuf\map_field_inl.h include\google\protobuf\map_field_inl.h
+copy ..\src\google\protobuf\map.h include\google\protobuf\map.h
+copy ..\src\google\protobuf\map_type_handler.h include\google\protobuf\map_type_handler.h
 copy ..\src\google\protobuf\message.h include\google\protobuf\message.h
 copy ..\src\google\protobuf\message.h include\google\protobuf\message.h
 copy ..\src\google\protobuf\message_lite.h include\google\protobuf\message_lite.h
 copy ..\src\google\protobuf\message_lite.h include\google\protobuf\message_lite.h
+copy ..\src\google\protobuf\metadata.h include\google\protobuf\metadata.h
+copy ..\src\google\protobuf\reflection.h include\google\protobuf\reflection.h
 copy ..\src\google\protobuf\reflection_ops.h include\google\protobuf\reflection_ops.h
 copy ..\src\google\protobuf\reflection_ops.h include\google\protobuf\reflection_ops.h
 copy ..\src\google\protobuf\repeated_field.h include\google\protobuf\repeated_field.h
 copy ..\src\google\protobuf\repeated_field.h include\google\protobuf\repeated_field.h
+copy ..\src\google\protobuf\repeated_field_reflection.h include\google\protobuf\repeated_field_reflection.h
 copy ..\src\google\protobuf\service.h include\google\protobuf\service.h
 copy ..\src\google\protobuf\service.h include\google\protobuf\service.h
+copy ..\src\google\protobuf\stubs\atomicops.h include\google\protobuf\stubs\atomicops.h
+copy ..\src\google\protobuf\stubs\atomicops_internals_aix.h include\google\protobuf\stubs\atomicops_internals_aix.h
+copy ..\src\google\protobuf\stubs\atomicops_internals_arm64_gcc.h include\google\protobuf\stubs\atomicops_internals_arm64_gcc.h
+copy ..\src\google\protobuf\stubs\atomicops_internals_arm_gcc.h include\google\protobuf\stubs\atomicops_internals_arm_gcc.h
+copy ..\src\google\protobuf\stubs\atomicops_internals_arm_qnx.h include\google\protobuf\stubs\atomicops_internals_arm_qnx.h
+copy ..\src\google\protobuf\stubs\atomicops_internals_atomicword_compat.h include\google\protobuf\stubs\atomicops_internals_atomicword_compat.h
+copy ..\src\google\protobuf\stubs\atomicops_internals_generic_gcc.h include\google\protobuf\stubs\atomicops_internals_generic_gcc.h
+copy ..\src\google\protobuf\stubs\atomicops_internals_macosx.h include\google\protobuf\stubs\atomicops_internals_macosx.h
+copy ..\src\google\protobuf\stubs\atomicops_internals_mips_gcc.h include\google\protobuf\stubs\atomicops_internals_mips_gcc.h
+copy ..\src\google\protobuf\stubs\atomicops_internals_pnacl.h include\google\protobuf\stubs\atomicops_internals_pnacl.h
+copy ..\src\google\protobuf\stubs\atomicops_internals_solaris.h include\google\protobuf\stubs\atomicops_internals_solaris.h
+copy ..\src\google\protobuf\stubs\atomicops_internals_tsan.h include\google\protobuf\stubs\atomicops_internals_tsan.h
+copy ..\src\google\protobuf\stubs\atomicops_internals_x86_gcc.h include\google\protobuf\stubs\atomicops_internals_x86_gcc.h
+copy ..\src\google\protobuf\stubs\atomicops_internals_x86_msvc.h include\google\protobuf\stubs\atomicops_internals_x86_msvc.h
+copy ..\src\google\protobuf\stubs\atomic_sequence_num.h include\google\protobuf\stubs\atomic_sequence_num.h
+copy ..\src\google\protobuf\stubs\casts.h include\google\protobuf\stubs\casts.h
+copy ..\src\google\protobuf\stubs\common.h include\google\protobuf\stubs\common.h
+copy ..\src\google\protobuf\stubs\fastmem.h include\google\protobuf\stubs\fastmem.h
+copy ..\src\google\protobuf\stubs\once.h include\google\protobuf\stubs\once.h
+copy ..\src\google\protobuf\stubs\platform_macros.h include\google\protobuf\stubs\platform_macros.h
+copy ..\src\google\protobuf\stubs\singleton.h include\google\protobuf\stubs\singleton.h
+copy ..\src\google\protobuf\stubs\stl_util.h include\google\protobuf\stubs\stl_util.h
+copy ..\src\google\protobuf\stubs\template_util.h include\google\protobuf\stubs\template_util.h
+copy ..\src\google\protobuf\stubs\type_traits.h include\google\protobuf\stubs\type_traits.h
 copy ..\src\google\protobuf\text_format.h include\google\protobuf\text_format.h
 copy ..\src\google\protobuf\text_format.h include\google\protobuf\text_format.h
 copy ..\src\google\protobuf\unknown_field_set.h include\google\protobuf\unknown_field_set.h
 copy ..\src\google\protobuf\unknown_field_set.h include\google\protobuf\unknown_field_set.h
 copy ..\src\google\protobuf\wire_format.h include\google\protobuf\wire_format.h
 copy ..\src\google\protobuf\wire_format.h include\google\protobuf\wire_format.h
 copy ..\src\google\protobuf\wire_format_lite.h include\google\protobuf\wire_format_lite.h
 copy ..\src\google\protobuf\wire_format_lite.h include\google\protobuf\wire_format_lite.h
 copy ..\src\google\protobuf\wire_format_lite_inl.h include\google\protobuf\wire_format_lite_inl.h
 copy ..\src\google\protobuf\wire_format_lite_inl.h include\google\protobuf\wire_format_lite_inl.h
-copy ..\src\google\protobuf\io\coded_stream.h include\google\protobuf\io\coded_stream.h
-copy ..\src\google\protobuf\io\gzip_stream.h include\google\protobuf\io\gzip_stream.h
-copy ..\src\google\protobuf\io\printer.h include\google\protobuf\io\printer.h
-copy ..\src\google\protobuf\io\strtod.h include\google\protobuf\io\strtod.h
-copy ..\src\google\protobuf\io\tokenizer.h include\google\protobuf\io\tokenizer.h
-copy ..\src\google\protobuf\io\zero_copy_stream.h include\google\protobuf\io\zero_copy_stream.h
-copy ..\src\google\protobuf\io\zero_copy_stream_impl.h include\google\protobuf\io\zero_copy_stream_impl.h
-copy ..\src\google\protobuf\io\zero_copy_stream_impl_lite.h include\google\protobuf\io\zero_copy_stream_impl_lite.h
-copy ..\src\google\protobuf\compiler\code_generator.h include\google\protobuf\compiler\code_generator.h
-copy ..\src\google\protobuf\compiler\command_line_interface.h include\google\protobuf\compiler\command_line_interface.h
-copy ..\src\google\protobuf\compiler\importer.h include\google\protobuf\compiler\importer.h
-copy ..\src\google\protobuf\compiler\parser.h include\google\protobuf\compiler\parser.h
-copy ..\src\google\protobuf\compiler\cpp\cpp_generator.h include\google\protobuf\compiler\cpp\cpp_generator.h
-copy ..\src\google\protobuf\compiler\java\java_generator.h include\google\protobuf\compiler\java\java_generator.h
-copy ..\src\google\protobuf\compiler\python\python_generator.h include\google\protobuf\compiler\python\python_generator.h
-copy ..\src\google\protobuf\compiler\plugin.h include\google\protobuf\compiler\plugin.h

+ 23 - 11
vsprojects/libprotobuf-lite.vcproj

@@ -18,7 +18,7 @@
 		<Configuration
 		<Configuration
 			Name="Debug|Win32"
 			Name="Debug|Win32"
 			OutputDirectory="Debug"
 			OutputDirectory="Debug"
-			IntermediateDirectory="Debug"
+			IntermediateDirectory="$(OutDir)\$(ProjectName)"
 			ConfigurationType="4"
 			ConfigurationType="4"
 			>
 			>
 			<Tool
 			<Tool
@@ -81,7 +81,7 @@
 		<Configuration
 		<Configuration
 			Name="Release|Win32"
 			Name="Release|Win32"
 			OutputDirectory="Release"
 			OutputDirectory="Release"
-			IntermediateDirectory="Release"
+			IntermediateDirectory="$(OutDir)\$(ProjectName)"
 			ConfigurationType="4"
 			ConfigurationType="4"
 			>
 			>
 			<Tool
 			<Tool
@@ -248,7 +248,11 @@
 			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
 			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
 			>
 			>
 			<File
 			<File
-				RelativePath="..\src\google\protobuf\io\coded_stream.cc"
+				RelativePath="..\src\google\protobuf\stubs\atomicops_internals_x86_gcc.cc"
+				>
+			</File>
+			<File
+				RelativePath="..\src\google\protobuf\stubs\atomicops_internals_x86_msvc.cc"
 				>
 				>
 			</File>
 			</File>
 			<File
 			<File
@@ -256,23 +260,31 @@
 				>
 				>
 			</File>
 			</File>
 			<File
 			<File
-				RelativePath="..\src\google\protobuf\extension_set.cc"
+				RelativePath="..\src\google\protobuf\stubs\once.cc"
 				>
 				>
 			</File>
 			</File>
 			<File
 			<File
-				RelativePath="..\src\google\protobuf\generated_message_util.cc"
+				RelativePath="..\src\google\protobuf\stubs\stringprintf.cc"
 				>
 				>
 			</File>
 			</File>
 			<File
 			<File
-				RelativePath="..\src\google\protobuf\message_lite.cc"
+				RelativePath="..\src\google\protobuf\arena.cc"
 				>
 				>
 			</File>
 			</File>
 			<File
 			<File
-				RelativePath="..\src\google\protobuf\stubs\once.cc"
+				RelativePath="..\src\google\protobuf\arenastring.cc"
 				>
 				>
 			</File>
 			</File>
 			<File
 			<File
-				RelativePath="..\src\google\protobuf\stubs\atomicops_internals_x86_msvc.cc"
+				RelativePath="..\src\google\protobuf\extension_set.cc"
+				>
+			</File>
+			<File
+				RelativePath="..\src\google\protobuf\generated_message_util.cc"
+				>
+			</File>
+			<File
+				RelativePath="..\src\google\protobuf\message_lite.cc"
 				>
 				>
 			</File>
 			</File>
 			<File
 			<File
@@ -284,15 +296,15 @@
 				>
 				>
 			</File>
 			</File>
 			<File
 			<File
-				RelativePath="..\src\google\protobuf\io\zero_copy_stream.cc"
+				RelativePath="..\src\google\protobuf\io\coded_stream.cc"
 				>
 				>
 			</File>
 			</File>
 			<File
 			<File
-				RelativePath="..\src\google\protobuf\io\zero_copy_stream_impl_lite.cc"
+				RelativePath="..\src\google\protobuf\io\zero_copy_stream.cc"
 				>
 				>
 			</File>
 			</File>
 			<File
 			<File
-				RelativePath="..\src\google\protobuf\stubs\stringprintf.cc"
+				RelativePath="..\src\google\protobuf\io\zero_copy_stream_impl_lite.cc"
 				>
 				>
 			</File>
 			</File>
 		</Filter>
 		</Filter>

+ 59 - 31
vsprojects/libprotobuf.vcproj

@@ -18,7 +18,7 @@
 		<Configuration
 		<Configuration
 			Name="Debug|Win32"
 			Name="Debug|Win32"
 			OutputDirectory="Debug"
 			OutputDirectory="Debug"
-			IntermediateDirectory="Debug"
+			IntermediateDirectory="$(OutDir)\$(ProjectName)"
 			ConfigurationType="4"
 			ConfigurationType="4"
 			>
 			>
 			<Tool
 			<Tool
@@ -81,7 +81,7 @@
 		<Configuration
 		<Configuration
 			Name="Release|Win32"
 			Name="Release|Win32"
 			OutputDirectory="Release"
 			OutputDirectory="Release"
-			IntermediateDirectory="Release"
+			IntermediateDirectory="$(OutDir)\$(ProjectName)"
 			ConfigurationType="4"
 			ConfigurationType="4"
 			>
 			>
 			<Tool
 			<Tool
@@ -328,7 +328,11 @@
 			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
 			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
 			>
 			>
 			<File
 			<File
-				RelativePath="..\src\google\protobuf\io\coded_stream.cc"
+				RelativePath="..\src\google\protobuf\stubs\atomicops_internals_x86_gcc.cc"
+				>
+			</File>
+			<File
+				RelativePath="..\src\google\protobuf\stubs\atomicops_internals_x86_msvc.cc"
 				>
 				>
 			</File>
 			</File>
 			<File
 			<File
@@ -336,19 +340,19 @@
 				>
 				>
 			</File>
 			</File>
 			<File
 			<File
-				RelativePath="..\src\google\protobuf\descriptor.cc"
+				RelativePath="..\src\google\protobuf\stubs\once.cc"
 				>
 				>
 			</File>
 			</File>
 			<File
 			<File
-				RelativePath="..\src\google\protobuf\descriptor.pb.cc"
+				RelativePath="..\src\google\protobuf\stubs\stringprintf.cc"
 				>
 				>
 			</File>
 			</File>
 			<File
 			<File
-				RelativePath="..\src\google\protobuf\descriptor_database.cc"
+				RelativePath="..\src\google\protobuf\arena.cc"
 				>
 				>
 			</File>
 			</File>
 			<File
 			<File
-				RelativePath="..\src\google\protobuf\dynamic_message.cc"
+				RelativePath="..\src\google\protobuf\arenastring.cc"
 				>
 				>
 			</File>
 			</File>
 			<File
 			<File
@@ -356,83 +360,99 @@
 				>
 				>
 			</File>
 			</File>
 			<File
 			<File
-				RelativePath="..\src\google\protobuf\extension_set_heavy.cc"
+				RelativePath="..\src\google\protobuf\generated_message_util.cc"
 				>
 				>
 			</File>
 			</File>
 			<File
 			<File
-				RelativePath="..\src\google\protobuf\generated_message_reflection.cc"
+				RelativePath="..\src\google\protobuf\map_field.cc"
 				>
 				>
 			</File>
 			</File>
 			<File
 			<File
-				RelativePath="..\src\google\protobuf\generated_message_util.cc"
+				RelativePath="..\src\google\protobuf\message_lite.cc"
 				>
 				>
 			</File>
 			</File>
 			<File
 			<File
-				RelativePath="..\src\google\protobuf\io\gzip_stream.cc"
+				RelativePath="..\src\google\protobuf\repeated_field.cc"
 				>
 				>
 			</File>
 			</File>
 			<File
 			<File
-			        RelativePath="..\src\google\protobuf\io\strtod.cc"
+				RelativePath="..\src\google\protobuf\wire_format_lite.cc"
 				>
 				>
 			</File>
 			</File>
 			<File
 			<File
-				RelativePath="..\src\google\protobuf\compiler\importer.cc"
+				RelativePath="..\src\google\protobuf\io\coded_stream.cc"
 				>
 				>
 			</File>
 			</File>
 			<File
 			<File
-				RelativePath="..\src\google\protobuf\message.cc"
+				RelativePath="..\src\google\protobuf\io\zero_copy_stream.cc"
 				>
 				>
 			</File>
 			</File>
 			<File
 			<File
-				RelativePath="..\src\google\protobuf\message_lite.cc"
+				RelativePath="..\src\google\protobuf\io\zero_copy_stream_impl_lite.cc"
 				>
 				>
 			</File>
 			</File>
 			<File
 			<File
-				RelativePath="..\src\google\protobuf\stubs\once.cc"
+				RelativePath="..\src\google\protobuf\stubs\strutil.cc"
 				>
 				>
 			</File>
 			</File>
 			<File
 			<File
-				RelativePath="..\src\google\protobuf\stubs\atomicops_internals_x86_msvc.cc"
+				RelativePath="..\src\google\protobuf\stubs\strutil.h"
 				>
 				>
 			</File>
 			</File>
 			<File
 			<File
-				RelativePath="..\src\google\protobuf\compiler\parser.cc"
+				RelativePath="..\src\google\protobuf\stubs\substitute.cc"
 				>
 				>
 			</File>
 			</File>
 			<File
 			<File
-				RelativePath="..\src\google\protobuf\io\printer.cc"
+				RelativePath="..\src\google\protobuf\stubs\substitute.h"
 				>
 				>
 			</File>
 			</File>
 			<File
 			<File
-				RelativePath="..\src\google\protobuf\reflection_ops.cc"
+				RelativePath="..\src\google\protobuf\stubs\structurally_valid.cc"
 				>
 				>
 			</File>
 			</File>
 			<File
 			<File
-				RelativePath="..\src\google\protobuf\repeated_field.cc"
+				RelativePath="..\src\google\protobuf\descriptor.cc"
 				>
 				>
 			</File>
 			</File>
 			<File
 			<File
-				RelativePath="..\src\google\protobuf\service.cc"
+				RelativePath="..\src\google\protobuf\descriptor_database.cc"
 				>
 				>
 			</File>
 			</File>
 			<File
 			<File
-				RelativePath="..\src\google\protobuf\stubs\structurally_valid.cc"
+				RelativePath="..\src\google\protobuf\descriptor.pb.cc"
 				>
 				>
 			</File>
 			</File>
 			<File
 			<File
-				RelativePath="..\src\google\protobuf\stubs\strutil.cc"
+				RelativePath="..\src\google\protobuf\dynamic_message.cc"
 				>
 				>
 			</File>
 			</File>
 			<File
 			<File
-				RelativePath="..\src\google\protobuf\stubs\substitute.cc"
+				RelativePath="..\src\google\protobuf\extension_set_heavy.cc"
 				>
 				>
 			</File>
 			</File>
 			<File
 			<File
-				RelativePath="..\src\google\protobuf\text_format.cc"
+				RelativePath="..\src\google\protobuf\generated_message_reflection.cc"
 				>
 				>
 			</File>
 			</File>
 			<File
 			<File
-				RelativePath="..\src\google\protobuf\io\tokenizer.cc"
+				RelativePath="..\src\google\protobuf\message.cc"
+				>
+			</File>
+			<File
+				RelativePath="..\src\google\protobuf\reflection_internal.h"
+				>
+			</File>
+			<File
+				RelativePath="..\src\google\protobuf\reflection_ops.cc"
+				>
+			</File>
+			<File
+				RelativePath="..\src\google\protobuf\service.cc"
+				>
+			</File>
+			<File
+				RelativePath="..\src\google\protobuf\text_format.cc"
 				>
 				>
 			</File>
 			</File>
 			<File
 			<File
@@ -444,11 +464,19 @@
 				>
 				>
 			</File>
 			</File>
 			<File
 			<File
-				RelativePath="..\src\google\protobuf\wire_format_lite.cc"
+				RelativePath="..\src\google\protobuf\io\gzip_stream.cc"
 				>
 				>
 			</File>
 			</File>
 			<File
 			<File
-				RelativePath="..\src\google\protobuf\io\zero_copy_stream.cc"
+				RelativePath="..\src\google\protobuf\io\printer.cc"
+				>
+			</File>
+			<File
+				RelativePath="..\src\google\protobuf\io\strtod.cc"
+				>
+			</File>
+			<File
+				RelativePath="..\src\google\protobuf\io\tokenizer.cc"
 				>
 				>
 			</File>
 			</File>
 			<File
 			<File
@@ -456,11 +484,11 @@
 				>
 				>
 			</File>
 			</File>
 			<File
 			<File
-				RelativePath="..\src\google\protobuf\io\zero_copy_stream_impl_lite.cc"
+				RelativePath="..\src\google\protobuf\compiler\importer.cc"
 				>
 				>
 			</File>
 			</File>
 			<File
 			<File
-				RelativePath="..\src\google\protobuf\stubs\stringprintf.cc"
+				RelativePath="..\src\google\protobuf\compiler\parser.cc"
 				>
 				>
 			</File>
 			</File>
 		</Filter>
 		</Filter>

+ 70 - 18
vsprojects/libprotoc.vcproj

@@ -18,7 +18,7 @@
 		<Configuration
 		<Configuration
 			Name="Debug|Win32"
 			Name="Debug|Win32"
 			OutputDirectory="Debug"
 			OutputDirectory="Debug"
-			IntermediateDirectory="Debug"
+			IntermediateDirectory="$(OutDir)\$(ProjectName)"
 			ConfigurationType="4"
 			ConfigurationType="4"
 			>
 			>
 			<Tool
 			<Tool
@@ -81,7 +81,7 @@
 		<Configuration
 		<Configuration
 			Name="Release|Win32"
 			Name="Release|Win32"
 			OutputDirectory="Release"
 			OutputDirectory="Release"
-			IntermediateDirectory="Release"
+			IntermediateDirectory="$(OutDir)\$(ProjectName)"
 			ConfigurationType="4"
 			ConfigurationType="4"
 			>
 			>
 			<Tool
 			<Tool
@@ -323,22 +323,6 @@
 				RelativePath="..\src\google\protobuf\compiler\command_line_interface.cc"
 				RelativePath="..\src\google\protobuf\compiler\command_line_interface.cc"
 				>
 				>
 			</File>
 			</File>
-			<File
-				RelativePath="..\src\google\protobuf\compiler\subprocess.cc"
-				>
-			</File>
-      <File
-        RelativePath="..\src\google\protobuf\compiler\zip_writer.cc"
-        >
-      </File>
-			<File
-				RelativePath="..\src\google\protobuf\compiler\plugin.cc"
-				>
-			</File>
-			<File
-				RelativePath="..\src\google\protobuf\compiler\plugin.pb.cc"
-				>
-			</File>
 			<File
 			<File
 				RelativePath="..\src\google\protobuf\compiler\cpp\cpp_enum.cc"
 				RelativePath="..\src\google\protobuf\compiler\cpp\cpp_enum.cc"
 				>
 				>
@@ -367,6 +351,10 @@
 				RelativePath="..\src\google\protobuf\compiler\cpp\cpp_helpers.cc"
 				RelativePath="..\src\google\protobuf\compiler\cpp\cpp_helpers.cc"
 				>
 				>
 			</File>
 			</File>
+			<File
+				RelativePath="..\src\google\protobuf\compiler\cpp\cpp_map_field.cc"
+				>
+			</File>
 			<File
 			<File
 				RelativePath="..\src\google\protobuf\compiler\cpp\cpp_message.cc"
 				RelativePath="..\src\google\protobuf\compiler\cpp\cpp_message.cc"
 				>
 				>
@@ -391,6 +379,10 @@
 				RelativePath="..\src\google\protobuf\compiler\java\java_context.cc"
 				RelativePath="..\src\google\protobuf\compiler\java\java_context.cc"
 				>
 				>
 			</File>
 			</File>
+			<File
+				RelativePath="..\src\google\protobuf\compiler\java\java_doc_comment.cc"
+				>
+			</File>
 			<File
 			<File
 				RelativePath="..\src\google\protobuf\compiler\java\java_enum.cc"
 				RelativePath="..\src\google\protobuf\compiler\java\java_enum.cc"
 				>
 				>
@@ -427,6 +419,10 @@
 				RelativePath="..\src\google\protobuf\compiler\java\java_lazy_message_field.cc"
 				RelativePath="..\src\google\protobuf\compiler\java\java_lazy_message_field.cc"
 				>
 				>
 			</File>
 			</File>
+			<File
+				RelativePath="..\src\google\protobuf\compiler\java\java_map_field.cc"
+				>
+			</File>
 			<File
 			<File
 				RelativePath="..\src\google\protobuf\compiler\java\java_message.cc"
 				RelativePath="..\src\google\protobuf\compiler\java\java_message.cc"
 				>
 				>
@@ -455,10 +451,66 @@
 				RelativePath="..\src\google\protobuf\compiler\java\java_string_field.cc"
 				RelativePath="..\src\google\protobuf\compiler\java\java_string_field.cc"
 				>
 				>
 			</File>
 			</File>
+			<File
+				RelativePath="..\src\google\protobuf\compiler\javanano\javanano_enum.cc"
+				>
+			</File>
+			<File
+				RelativePath="..\src\google\protobuf\compiler\javanano\javanano_enum_field.cc"
+				>
+			</File>
+			<File
+				RelativePath="..\src\google\protobuf\compiler\javanano\javanano_extension.cc"
+				>
+			</File>
+			<File
+				RelativePath="..\src\google\protobuf\compiler\javanano\javanano_field.cc"
+				>
+			</File>
+			<File
+				RelativePath="..\src\google\protobuf\compiler\javanano\javanano_file.cc"
+				>
+			</File>
+			<File
+				RelativePath="..\src\google\protobuf\compiler\javanano\javanano_generator.cc"
+				>
+			</File>
+			<File
+				RelativePath="..\src\google\protobuf\compiler\javanano\javanano_helpers.cc"
+				>
+			</File>
+			<File
+				RelativePath="..\src\google\protobuf\compiler\javanano\javanano_message.cc"
+				>
+			</File>
+			<File
+				RelativePath="..\src\google\protobuf\compiler\javanano\javanano_message_field.cc"
+				>
+			</File>
+			<File
+				RelativePath="..\src\google\protobuf\compiler\javanano\javanano_primitive_field.cc"
+				>
+			</File>
+			<File
+				RelativePath="..\src\google\protobuf\compiler\plugin.cc"
+				>
+			</File>
+			<File
+				RelativePath="..\src\google\protobuf\compiler\plugin.pb.cc"
+				>
+			</File>
 			<File
 			<File
 				RelativePath="..\src\google\protobuf\compiler\python\python_generator.cc"
 				RelativePath="..\src\google\protobuf\compiler\python\python_generator.cc"
 				>
 				>
 			</File>
 			</File>
+			<File
+				RelativePath="..\src\google\protobuf\compiler\subprocess.cc"
+				>
+			</File>
+			<File
+				RelativePath="..\src\google\protobuf\compiler\zip_writer.cc"
+				>
+			</File>
 		</Filter>
 		</Filter>
 	</Files>
 	</Files>
 	<Globals>
 	<Globals>

+ 2 - 2
vsprojects/lite-test.vcproj

@@ -19,7 +19,7 @@
 		<Configuration
 		<Configuration
 			Name="Debug|Win32"
 			Name="Debug|Win32"
 			OutputDirectory="Debug"
 			OutputDirectory="Debug"
-			IntermediateDirectory="Debug"
+			IntermediateDirectory="$(OutDir)\$(ProjectName)"
 			ConfigurationType="1"
 			ConfigurationType="1"
 			>
 			>
 			<Tool
 			<Tool
@@ -96,7 +96,7 @@
 		<Configuration
 		<Configuration
 			Name="Release|Win32"
 			Name="Release|Win32"
 			OutputDirectory="Release"
 			OutputDirectory="Release"
-			IntermediateDirectory="Release"
+			IntermediateDirectory="$(OutDir)\$(ProjectName)"
 			ConfigurationType="1"
 			ConfigurationType="1"
 			>
 			>
 			<Tool
 			<Tool

+ 2 - 2
vsprojects/protoc.vcproj

@@ -18,7 +18,7 @@
 		<Configuration
 		<Configuration
 			Name="Debug|Win32"
 			Name="Debug|Win32"
 			OutputDirectory="Debug"
 			OutputDirectory="Debug"
-			IntermediateDirectory="Debug"
+			IntermediateDirectory="$(OutDir)\$(ProjectName)"
 			ConfigurationType="1"
 			ConfigurationType="1"
 			>
 			>
 			<Tool
 			<Tool
@@ -91,7 +91,7 @@
 		<Configuration
 		<Configuration
 			Name="Release|Win32"
 			Name="Release|Win32"
 			OutputDirectory="Release"
 			OutputDirectory="Release"
-			IntermediateDirectory="Release"
+			IntermediateDirectory="$(OutDir)\$(ProjectName)"
 			ConfigurationType="1"
 			ConfigurationType="1"
 			>
 			>
 			<Tool
 			<Tool

+ 2 - 2
vsprojects/test_plugin.vcproj

@@ -19,7 +19,7 @@
 		<Configuration
 		<Configuration
 			Name="Debug|Win32"
 			Name="Debug|Win32"
 			OutputDirectory="Debug"
 			OutputDirectory="Debug"
-			IntermediateDirectory="Debug"
+			IntermediateDirectory="$(OutDir)\$(ProjectName)"
 			ConfigurationType="1"
 			ConfigurationType="1"
 			>
 			>
 			<Tool
 			<Tool
@@ -96,7 +96,7 @@
 		<Configuration
 		<Configuration
 			Name="Release|Win32"
 			Name="Release|Win32"
 			OutputDirectory="Release"
 			OutputDirectory="Release"
-			IntermediateDirectory="Release"
+			IntermediateDirectory="$(OutDir)\$(ProjectName)"
 			ConfigurationType="1"
 			ConfigurationType="1"
 			>
 			>
 			<Tool
 			<Tool

+ 482 - 58
vsprojects/tests.vcproj

@@ -19,7 +19,7 @@
 		<Configuration
 		<Configuration
 			Name="Debug|Win32"
 			Name="Debug|Win32"
 			OutputDirectory="Debug"
 			OutputDirectory="Debug"
-			IntermediateDirectory="Debug"
+			IntermediateDirectory="$(OutDir)\$(ProjectName)"
 			ConfigurationType="1"
 			ConfigurationType="1"
 			>
 			>
 			<Tool
 			<Tool
@@ -96,7 +96,7 @@
 		<Configuration
 		<Configuration
 			Name="Release|Win32"
 			Name="Release|Win32"
 			OutputDirectory="Release"
 			OutputDirectory="Release"
-			IntermediateDirectory="Release"
+			IntermediateDirectory="$(OutDir)\$(ProjectName)"
 			ConfigurationType="1"
 			ConfigurationType="1"
 			>
 			>
 			<Tool
 			<Tool
@@ -247,23 +247,23 @@
 			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
 			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
 			>
 			>
 			<File
 			<File
-				RelativePath="..\src\google\protobuf\io\coded_stream_unittest.cc"
+				RelativePath="..\src\google\protobuf\arenastring_unittest.cc"
 				>
 				>
 			</File>
 			</File>
 			<File
 			<File
-				RelativePath="..\src\google\protobuf\compiler\command_line_interface_unittest.cc"
+				RelativePath="..\src\google\protobuf\arena_unittest.cc"
 				>
 				>
 			</File>
 			</File>
 			<File
 			<File
-				RelativePath="..\src\google\protobuf\compiler\mock_code_generator.cc"
+				RelativePath="..\src\google\protobuf\compiler\command_line_interface_unittest.cc"
 				>
 				>
 			</File>
 			</File>
 			<File
 			<File
-				RelativePath="..\src\google\protobuf\stubs\common_unittest.cc"
+				RelativePath="..\src\google\protobuf\compiler\cpp\cpp_bootstrap_unittest.cc"
 				>
 				>
 			</File>
 			</File>
 			<File
 			<File
-				RelativePath="..\src\google\protobuf\compiler\cpp\cpp_bootstrap_unittest.cc"
+				RelativePath="..\src\google\protobuf\compiler\cpp\cpp_plugin_unittest.cc"
 				>
 				>
 			</File>
 			</File>
 			<File
 			<File
@@ -271,23 +271,23 @@
 				>
 				>
 			</File>
 			</File>
 			<File
 			<File
-				RelativePath=".\google\protobuf\compiler\cpp\cpp_test_bad_identifiers.pb.cc"
+				RelativePath="..\src\google\protobuf\compiler\importer_unittest.cc"
 				>
 				>
 			</File>
 			</File>
 			<File
 			<File
-				RelativePath="..\src\google\protobuf\compiler\cpp\cpp_unittest.cc"
+				RelativePath="..\src\google\protobuf\compiler\java\java_doc_comment_unittest.cc"
 				>
 				>
 			</File>
 			</File>
 			<File
 			<File
-				RelativePath="..\src\google\protobuf\compiler\cpp\cpp_plugin_unittest.cc"
+				RelativePath="..\src\google\protobuf\compiler\java\java_plugin_unittest.cc"
 				>
 				>
 			</File>
 			</File>
 			<File
 			<File
-				RelativePath="..\src\google\protobuf\compiler\java\java_plugin_unittest.cc"
+				RelativePath="..\src\google\protobuf\compiler\mock_code_generator.cc"
 				>
 				>
 			</File>
 			</File>
 			<File
 			<File
-				RelativePath="..\src\google\protobuf\compiler\java\java_doc_comment_unittest.cc"
+				RelativePath="..\src\google\protobuf\compiler\parser_unittest.cc"
 				>
 				>
 			</File>
 			</File>
 			<File
 			<File
@@ -302,6 +302,10 @@
 				RelativePath="..\src\google\protobuf\descriptor_unittest.cc"
 				RelativePath="..\src\google\protobuf\descriptor_unittest.cc"
 				>
 				>
 			</File>
 			</File>
+			<File
+				RelativePath="..\src\google\protobuf\drop_unknown_fields_test.cc"
+				>
+			</File>
 			<File
 			<File
 				RelativePath="..\src\google\protobuf\dynamic_message_unittest.cc"
 				RelativePath="..\src\google\protobuf\dynamic_message_unittest.cc"
 				>
 				>
@@ -311,19 +315,35 @@
 				>
 				>
 			</File>
 			</File>
 			<File
 			<File
-				RelativePath="..\src\google\protobuf\testing\file.cc"
+				RelativePath="..\src\google\protobuf\generated_message_reflection_unittest.cc"
 				>
 				>
 			</File>
 			</File>
 			<File
 			<File
-				RelativePath="..\src\google\protobuf\generated_message_reflection_unittest.cc"
+				RelativePath="..\src\google\protobuf\io\coded_stream_unittest.cc"
 				>
 				>
 			</File>
 			</File>
 			<File
 			<File
-				RelativePath="..\src\google\protobuf\testing\googletest.cc"
+				RelativePath="..\src\google\protobuf\io\printer_unittest.cc"
 				>
 				>
 			</File>
 			</File>
 			<File
 			<File
-				RelativePath="..\src\google\protobuf\compiler\importer_unittest.cc"
+				RelativePath="..\src\google\protobuf\io\tokenizer_unittest.cc"
+				>
+			</File>
+			<File
+				RelativePath="..\src\google\protobuf\io\zero_copy_stream_unittest.cc"
+				>
+			</File>
+			<File
+				RelativePath="..\src\google\protobuf\map_field_test.cc"
+				>
+			</File>
+			<File
+				RelativePath="..\src\google\protobuf\map_test.cc"
+				>
+			</File>
+			<File
+				RelativePath="..\src\google\protobuf\map_test_util.cc"
 				>
 				>
 			</File>
 			</File>
 			<File
 			<File
@@ -331,37 +351,49 @@
 				>
 				>
 			</File>
 			</File>
 			<File
 			<File
-				RelativePath="..\src\google\protobuf\stubs\once_unittest.cc"
+				RelativePath="..\src\google\protobuf\no_field_presence_test.cc"
 				>
 				>
 			</File>
 			</File>
 			<File
 			<File
-				RelativePath="..\src\google\protobuf\compiler\parser_unittest.cc"
+				RelativePath="..\src\google\protobuf\preserve_unknown_enum_test.cc"
 				>
 				>
 			</File>
 			</File>
 			<File
 			<File
-				RelativePath="..\src\google\protobuf\io\printer_unittest.cc"
+				RelativePath="..\src\google\protobuf\proto3_arena_unittest.cc"
 				>
 				>
 			</File>
 			</File>
 			<File
 			<File
 				RelativePath="..\src\google\protobuf\reflection_ops_unittest.cc"
 				RelativePath="..\src\google\protobuf\reflection_ops_unittest.cc"
 				>
 				>
 			</File>
 			</File>
+			<File
+				RelativePath="..\src\google\protobuf\repeated_field_reflection_unittest.cc"
+				>
+			</File>
 			<File
 			<File
 				RelativePath="..\src\google\protobuf\repeated_field_unittest.cc"
 				RelativePath="..\src\google\protobuf\repeated_field_unittest.cc"
 				>
 				>
 			</File>
 			</File>
 			<File
 			<File
-				RelativePath="..\src\google\protobuf\repeated_field_reflection_unittest.cc"
+				RelativePath="..\src\google\protobuf\stubs\common_unittest.cc"
 				>
 				>
 			</File>
 			</File>
 			<File
 			<File
-				RelativePath="..\src\google\protobuf\stubs\structurally_valid_unittest.cc"
+				RelativePath="..\src\google\protobuf\stubs\once_unittest.cc"
 				>
 				>
 			</File>
 			</File>
 			<File
 			<File
 				RelativePath="..\src\google\protobuf\stubs\stringprintf_unittest.cc"
 				RelativePath="..\src\google\protobuf\stubs\stringprintf_unittest.cc"
 				>
 				>
 			</File>
 			</File>
+			<File
+				RelativePath="..\src\google\protobuf\stubs\structurally_valid_unittest.cc"
+				>
+			</File>
+			<File
+				RelativePath="..\src\google\protobuf\stubs\strutil_unittest.cc"
+				>
+			</File>
 			<File
 			<File
 				RelativePath="..\src\google\protobuf\stubs\template_util_unittest.cc"
 				RelativePath="..\src\google\protobuf\stubs\template_util_unittest.cc"
 				>
 				>
@@ -371,7 +403,11 @@
 				>
 				>
 			</File>
 			</File>
 			<File
 			<File
-				RelativePath="..\src\google\protobuf\stubs\strutil_unittest.cc"
+				RelativePath="..\src\google\protobuf\testing\file.cc"
+				>
+			</File>
+			<File
+				RelativePath="..\src\google\protobuf\testing\googletest.cc"
 				>
 				>
 			</File>
 			</File>
 			<File
 			<File
@@ -383,25 +419,61 @@
 				>
 				>
 			</File>
 			</File>
 			<File
 			<File
-				RelativePath="..\src\google\protobuf\io\tokenizer_unittest.cc"
+				RelativePath="..\src\google\protobuf\unknown_field_set_unittest.cc"
 				>
 				>
 			</File>
 			</File>
 			<File
 			<File
-				RelativePath=".\google\protobuf\unittest.pb.cc"
+				RelativePath="..\src\google\protobuf\wire_format_unittest.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\google\protobuf\compiler\cpp\cpp_test_bad_identifiers.pb.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\google\protobuf\map_lite_unittest.pb.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\google\protobuf\map_proto2_unittest.pb.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\google\protobuf\map_unittest.pb.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\google\protobuf\unittest_arena.pb.cc"
 				>
 				>
 			</File>
 			</File>
 			<File
 			<File
 				RelativePath=".\google\protobuf\unittest_custom_options.pb.cc"
 				RelativePath=".\google\protobuf\unittest_custom_options.pb.cc"
 				>
 				>
 			</File>
 			</File>
+			<File
+				RelativePath=".\google\protobuf\unittest_drop_unknown_fields.pb.cc"
+				>
+			</File>
 			<File
 			<File
 				RelativePath=".\google\protobuf\unittest_embed_optimize_for.pb.cc"
 				RelativePath=".\google\protobuf\unittest_embed_optimize_for.pb.cc"
 				>
 				>
 			</File>
 			</File>
+			<File
+				RelativePath=".\google\protobuf\unittest_empty.pb.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\google\protobuf\unittest_import_lite.pb.cc"
+				>
+			</File>
 			<File
 			<File
 				RelativePath=".\google\protobuf\unittest_import.pb.cc"
 				RelativePath=".\google\protobuf\unittest_import.pb.cc"
 				>
 				>
 			</File>
 			</File>
+			<File
+				RelativePath=".\google\protobuf\unittest_import_public_lite.pb.cc"
+				>
+			</File>
 			<File
 			<File
 				RelativePath=".\google\protobuf\unittest_import_public.pb.cc"
 				RelativePath=".\google\protobuf\unittest_import_public.pb.cc"
 				>
 				>
@@ -410,12 +482,24 @@
 				RelativePath=".\google\protobuf\unittest_lite_imports_nonlite.pb.cc"
 				RelativePath=".\google\protobuf\unittest_lite_imports_nonlite.pb.cc"
 				>
 				>
 			</File>
 			</File>
+			<File
+				RelativePath=".\google\protobuf\unittest_lite.pb.cc"
+				>
+			</File>
 			<File
 			<File
 				RelativePath=".\google\protobuf\unittest_mset.pb.cc"
 				RelativePath=".\google\protobuf\unittest_mset.pb.cc"
 				>
 				>
 			</File>
 			</File>
 			<File
 			<File
-				RelativePath=".\google\protobuf\unittest_optimize_for.pb.cc"
+				RelativePath=".\google\protobuf\unittest_no_arena_import.pb.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\google\protobuf\unittest_no_arena.pb.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\google\protobuf\unittest_no_field_presence.pb.cc"
 				>
 				>
 			</File>
 			</File>
 			<File
 			<File
@@ -423,29 +507,33 @@
 				>
 				>
 			</File>
 			</File>
 			<File
 			<File
-				RelativePath="..\src\google\protobuf\unknown_field_set_unittest.cc"
+				RelativePath=".\google\protobuf\unittest_optimize_for.pb.cc"
 				>
 				>
 			</File>
 			</File>
 			<File
 			<File
-				RelativePath="..\src\google\protobuf\wire_format_unittest.cc"
+				RelativePath=".\google\protobuf\unittest.pb.cc"
 				>
 				>
 			</File>
 			</File>
 			<File
 			<File
-				RelativePath="..\src\google\protobuf\io\zero_copy_stream_unittest.cc"
+				RelativePath=".\google\protobuf\unittest_preserve_unknown_enum.pb.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\google\protobuf\unittest_proto3_arena.pb.cc"
 				>
 				>
 			</File>
 			</File>
 		</Filter>
 		</Filter>
 		<File
 		<File
-			RelativePath="..\src\google\protobuf\compiler\cpp\cpp_test_bad_identifiers.proto"
+			RelativePath="..\src\google\protobuf\map_lite_unittest.proto"
 			>
 			>
 			<FileConfiguration
 			<FileConfiguration
 				Name="Debug|Win32"
 				Name="Debug|Win32"
 				>
 				>
 				<Tool
 				<Tool
 					Name="VCCustomBuildTool"
 					Name="VCCustomBuildTool"
-					Description="Generating cpp_test_bad_identifiers.pb.{h,cc}..."
-					CommandLine="Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/compiler/cpp/cpp_test_bad_identifiers.proto&#x0D;&#x0A;"
-					Outputs="google\protobuf\compiler\cpp\cpp_test_bad_identifiers.pb.h;google\protobuf\compiler\cpp\cpp_test_bad_identifiers.pb.cc"
+					Description="Generating map_lite_unittest.pb.{h,cc}..."
+					CommandLine="Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/map_lite_unittest.proto"
+					Outputs="google\protobuf\map_lite_unittest.pb.h;google\protobuf\map_lite_unittest.pb.cc"
 				/>
 				/>
 			</FileConfiguration>
 			</FileConfiguration>
 			<FileConfiguration
 			<FileConfiguration
@@ -453,9 +541,57 @@
 				>
 				>
 				<Tool
 				<Tool
 					Name="VCCustomBuildTool"
 					Name="VCCustomBuildTool"
-					Description="Generating cpp_test_bad_identifiers.pb.{h,cc}..."
-					CommandLine="Release\protoc -I../src --cpp_out=. ../src/google/protobuf/compiler/cpp/cpp_test_bad_identifiers.proto&#x0D;&#x0A;"
-					Outputs="google\protobuf\compiler\cpp\cpp_test_bad_identifiers.pb.h;google\protobuf\compiler\cpp\cpp_test_bad_identifiers.pb.cc"
+					Description="Generating map_lite_unittest.pb.{h,cc}..."
+					CommandLine="Release\protoc -I../src --cpp_out=. ../src/google/protobuf/map_lite_unittest.proto"
+					Outputs="google\protobuf\map_lite_unittest.pb.h;google\protobuf\map_lite_unittest.pb.cc"
+				/>
+			</FileConfiguration>
+		</File>
+		<File
+			RelativePath="..\src\google\protobuf\map_proto2_unittest.proto"
+			>
+			<FileConfiguration
+				Name="Debug|Win32"
+				>
+				<Tool
+					Name="VCCustomBuildTool"
+					Description="Generating map_proto2_unittest.pb.{h,cc}..."
+					CommandLine="Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/map_proto2_unittest.proto"
+					Outputs="google\protobuf\map_proto2_unittest.pb.h;google\protobuf\map_proto2_unittest.pb.cc"
+				/>
+			</FileConfiguration>
+			<FileConfiguration
+				Name="Release|Win32"
+				>
+				<Tool
+					Name="VCCustomBuildTool"
+					Description="Generating map_proto2_unittest.pb.{h,cc}..."
+					CommandLine="Release\protoc -I../src --cpp_out=. ../src/google/protobuf/map_proto2_unittest.proto"
+					Outputs="google\protobuf\map_proto2_unittest.pb.h;google\protobuf\map_proto2_unittest.pb.cc"
+				/>
+			</FileConfiguration>
+		</File>
+		<File
+			RelativePath="..\src\google\protobuf\map_unittest.proto"
+			>
+			<FileConfiguration
+				Name="Debug|Win32"
+				>
+				<Tool
+					Name="VCCustomBuildTool"
+					Description="Generating map_unittest.pb.{h,cc}..."
+					CommandLine="Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/map_unittest.proto"
+					Outputs="google\protobuf\map_unittest.pb.h;google\protobuf\map_unittest.pb.cc"
+				/>
+			</FileConfiguration>
+			<FileConfiguration
+				Name="Release|Win32"
+				>
+				<Tool
+					Name="VCCustomBuildTool"
+					Description="Generating map_unittest.pb.{h,cc}..."
+					CommandLine="Release\protoc -I../src --cpp_out=. ../src/google/protobuf/map_unittest.proto"
+					Outputs="google\protobuf\map_unittest.pb.h;google\protobuf\map_unittest.pb.cc"
 				/>
 				/>
 			</FileConfiguration>
 			</FileConfiguration>
 		</File>
 		</File>
@@ -468,7 +604,7 @@
 				<Tool
 				<Tool
 					Name="VCCustomBuildTool"
 					Name="VCCustomBuildTool"
 					Description="Generating unittest.pb.{h,cc}..."
 					Description="Generating unittest.pb.{h,cc}..."
-					CommandLine="Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest.proto&#x0D;&#x0A;"
+					CommandLine="Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest.proto"
 					Outputs="google\protobuf\unittest.pb.h;google\protobuf\unittest.pb.cc"
 					Outputs="google\protobuf\unittest.pb.h;google\protobuf\unittest.pb.cc"
 				/>
 				/>
 			</FileConfiguration>
 			</FileConfiguration>
@@ -478,11 +614,35 @@
 				<Tool
 				<Tool
 					Name="VCCustomBuildTool"
 					Name="VCCustomBuildTool"
 					Description="Generating unittest.pb.{h,cc}..."
 					Description="Generating unittest.pb.{h,cc}..."
-					CommandLine="Release\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest.proto&#x0D;&#x0A;"
+					CommandLine="Release\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest.proto"
 					Outputs="google\protobuf\unittest.pb.h;google\protobuf\unittest.pb.cc"
 					Outputs="google\protobuf\unittest.pb.h;google\protobuf\unittest.pb.cc"
 				/>
 				/>
 			</FileConfiguration>
 			</FileConfiguration>
 		</File>
 		</File>
+		<File
+			RelativePath="..\src\google\protobuf\unittest_arena.proto"
+			>
+			<FileConfiguration
+				Name="Debug|Win32"
+				>
+				<Tool
+					Name="VCCustomBuildTool"
+					Description="Generating unittest_arena.pb.{h,cc}..."
+					CommandLine="Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_arena.proto"
+					Outputs="google\protobuf\unittest_arena.pb.h;google\protobuf\unittest_arena.pb.cc"
+				/>
+			</FileConfiguration>
+			<FileConfiguration
+				Name="Release|Win32"
+				>
+				<Tool
+					Name="VCCustomBuildTool"
+					Description="Generating unittest_arena.pb.{h,cc}..."
+					CommandLine="Release\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_arena.proto"
+					Outputs="google\protobuf\unittest_arena.pb.h;google\protobuf\unittest_arena.pb.cc"
+				/>
+			</FileConfiguration>
+		</File>
 		<File
 		<File
 			RelativePath="..\src\google\protobuf\unittest_custom_options.proto"
 			RelativePath="..\src\google\protobuf\unittest_custom_options.proto"
 			>
 			>
@@ -492,7 +652,7 @@
 				<Tool
 				<Tool
 					Name="VCCustomBuildTool"
 					Name="VCCustomBuildTool"
 					Description="Generating unittest_custom_options.pb.{h,cc}..."
 					Description="Generating unittest_custom_options.pb.{h,cc}..."
-					CommandLine="Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_custom_options.proto&#x0D;&#x0A;"
+					CommandLine="Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_custom_options.proto"
 					Outputs="google\protobuf\unittest_custom_options.pb.h;google\protobuf\unittest_custom_options.pb.cc"
 					Outputs="google\protobuf\unittest_custom_options.pb.h;google\protobuf\unittest_custom_options.pb.cc"
 				/>
 				/>
 			</FileConfiguration>
 			</FileConfiguration>
@@ -502,11 +662,35 @@
 				<Tool
 				<Tool
 					Name="VCCustomBuildTool"
 					Name="VCCustomBuildTool"
 					Description="Generating unittest_custom_options.pb.{h,cc}..."
 					Description="Generating unittest_custom_options.pb.{h,cc}..."
-					CommandLine="Release\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_custom_options.proto&#x0D;&#x0A;"
+					CommandLine="Release\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_custom_options.proto"
 					Outputs="google\protobuf\unittest_custom_options.pb.h;google\protobuf\unittest_custom_options.pb.cc"
 					Outputs="google\protobuf\unittest_custom_options.pb.h;google\protobuf\unittest_custom_options.pb.cc"
 				/>
 				/>
 			</FileConfiguration>
 			</FileConfiguration>
 		</File>
 		</File>
+		<File
+			RelativePath="..\src\google\protobuf\unittest_drop_unknown_fields.proto"
+			>
+			<FileConfiguration
+				Name="Debug|Win32"
+				>
+				<Tool
+					Name="VCCustomBuildTool"
+					Description="Generating unittest_drop_unknown_fields.pb.{h,cc}..."
+					CommandLine="Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_drop_unknown_fields.proto"
+					Outputs="google\protobuf\unittest_drop_unknown_fields.pb.h;google\protobuf\unittest_drop_unknown_fields.pb.cc"
+				/>
+			</FileConfiguration>
+			<FileConfiguration
+				Name="Release|Win32"
+				>
+				<Tool
+					Name="VCCustomBuildTool"
+					Description="Generating unittest_drop_unknown_fields.pb.{h,cc}..."
+					CommandLine="Release\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_drop_unknown_fields.proto"
+					Outputs="google\protobuf\unittest_drop_unknown_fields.pb.h;google\protobuf\unittest_drop_unknown_fields.pb.cc"
+				/>
+			</FileConfiguration>
+		</File>
 		<File
 		<File
 			RelativePath="..\src\google\protobuf\unittest_embed_optimize_for.proto"
 			RelativePath="..\src\google\protobuf\unittest_embed_optimize_for.proto"
 			>
 			>
@@ -516,7 +700,7 @@
 				<Tool
 				<Tool
 					Name="VCCustomBuildTool"
 					Name="VCCustomBuildTool"
 					Description="Generating unittest_embed_optimize_for.pb.{h,cc}..."
 					Description="Generating unittest_embed_optimize_for.pb.{h,cc}..."
-					CommandLine="Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_embed_optimize_for.proto&#x0D;&#x0A;"
+					CommandLine="Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_embed_optimize_for.proto"
 					Outputs="google\protobuf\unittest_embed_optimize_for.pb.h;google\protobuf\unittest_embed_optimize_for.pb.cc"
 					Outputs="google\protobuf\unittest_embed_optimize_for.pb.h;google\protobuf\unittest_embed_optimize_for.pb.cc"
 				/>
 				/>
 			</FileConfiguration>
 			</FileConfiguration>
@@ -526,11 +710,59 @@
 				<Tool
 				<Tool
 					Name="VCCustomBuildTool"
 					Name="VCCustomBuildTool"
 					Description="Generating unittest_embed_optimize_for.pb.{h,cc}..."
 					Description="Generating unittest_embed_optimize_for.pb.{h,cc}..."
-					CommandLine="Release\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_embed_optimize_for.proto&#x0D;&#x0A;"
+					CommandLine="Release\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_embed_optimize_for.proto"
 					Outputs="google\protobuf\unittest_embed_optimize_for.pb.h;google\protobuf\unittest_embed_optimize_for.pb.cc"
 					Outputs="google\protobuf\unittest_embed_optimize_for.pb.h;google\protobuf\unittest_embed_optimize_for.pb.cc"
 				/>
 				/>
 			</FileConfiguration>
 			</FileConfiguration>
 		</File>
 		</File>
+		<File
+			RelativePath="..\src\google\protobuf\unittest_empty.proto"
+			>
+			<FileConfiguration
+				Name="Debug|Win32"
+				>
+				<Tool
+					Name="VCCustomBuildTool"
+					Description="Generating unittest_empty.pb.{h,cc}..."
+					CommandLine="Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_empty.proto"
+					Outputs="google\protobuf\unittest_empty.pb.h;google\protobuf\unittest_empty.pb.cc"
+				/>
+			</FileConfiguration>
+			<FileConfiguration
+				Name="Release|Win32"
+				>
+				<Tool
+					Name="VCCustomBuildTool"
+					Description="Generating unittest_empty.pb.{h,cc}..."
+					CommandLine="Release\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_empty.proto"
+					Outputs="google\protobuf\unittest_empty.pb.h;google\protobuf\unittest_empty.pb.cc"
+				/>
+			</FileConfiguration>
+		</File>
+		<File
+			RelativePath="..\src\google\protobuf\unittest_import_lite.proto"
+			>
+			<FileConfiguration
+				Name="Debug|Win32"
+				>
+				<Tool
+					Name="VCCustomBuildTool"
+					Description="Generating unittest_import_lite.pb.{h,cc}..."
+					CommandLine="Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_import_lite.proto"
+					Outputs="google\protobuf\unittest_import_lite.pb.h;google\protobuf\unittest_import_lite.pb.cc"
+				/>
+			</FileConfiguration>
+			<FileConfiguration
+				Name="Release|Win32"
+				>
+				<Tool
+					Name="VCCustomBuildTool"
+					Description="Generating unittest_import_lite.pb.{h,cc}..."
+					CommandLine="Release\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_import_lite.proto"
+					Outputs="google\protobuf\unittest_import_lite.pb.h;google\protobuf\unittest_import_lite.pb.cc"
+				/>
+			</FileConfiguration>
+		</File>
 		<File
 		<File
 			RelativePath="..\src\google\protobuf\unittest_import.proto"
 			RelativePath="..\src\google\protobuf\unittest_import.proto"
 			>
 			>
@@ -540,7 +772,7 @@
 				<Tool
 				<Tool
 					Name="VCCustomBuildTool"
 					Name="VCCustomBuildTool"
 					Description="Generating unittest_import.pb.{h,cc}..."
 					Description="Generating unittest_import.pb.{h,cc}..."
-					CommandLine="Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_import.proto&#x0D;&#x0A;"
+					CommandLine="Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_import.proto"
 					Outputs="google\protobuf\unittest_import.pb.h;google\protobuf\unittest_import.pb.cc"
 					Outputs="google\protobuf\unittest_import.pb.h;google\protobuf\unittest_import.pb.cc"
 				/>
 				/>
 			</FileConfiguration>
 			</FileConfiguration>
@@ -550,11 +782,35 @@
 				<Tool
 				<Tool
 					Name="VCCustomBuildTool"
 					Name="VCCustomBuildTool"
 					Description="Generating unittest_import.pb.{h,cc}..."
 					Description="Generating unittest_import.pb.{h,cc}..."
-					CommandLine="Release\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_import.proto&#x0D;&#x0A;"
+					CommandLine="Release\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_import.proto"
 					Outputs="google\protobuf\unittest_import.pb.h;google\protobuf\unittest_import.pb.cc"
 					Outputs="google\protobuf\unittest_import.pb.h;google\protobuf\unittest_import.pb.cc"
 				/>
 				/>
 			</FileConfiguration>
 			</FileConfiguration>
 		</File>
 		</File>
+		<File
+			RelativePath="..\src\google\protobuf\unittest_import_public_lite.proto"
+			>
+			<FileConfiguration
+				Name="Debug|Win32"
+				>
+				<Tool
+					Name="VCCustomBuildTool"
+					Description="Generating unittest_import_public_lite.pb.{h,cc}..."
+					CommandLine="Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_import_public_lite.proto"
+					Outputs="google\protobuf\unittest_import_public_lite.pb.h;google\protobuf\unittest_import_public_lite.pb.cc"
+				/>
+			</FileConfiguration>
+			<FileConfiguration
+				Name="Release|Win32"
+				>
+				<Tool
+					Name="VCCustomBuildTool"
+					Description="Generating unittest_import_public_lite.pb.{h,cc}..."
+					CommandLine="Release\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_import_public_lite.proto"
+					Outputs="google\protobuf\unittest_import_public_lite.pb.h;google\protobuf\unittest_import_public_lite.pb.cc"
+				/>
+			</FileConfiguration>
+		</File>
 		<File
 		<File
 			RelativePath="..\src\google\protobuf\unittest_import_public.proto"
 			RelativePath="..\src\google\protobuf\unittest_import_public.proto"
 			>
 			>
@@ -564,7 +820,7 @@
 				<Tool
 				<Tool
 					Name="VCCustomBuildTool"
 					Name="VCCustomBuildTool"
 					Description="Generating unittest_import_public.pb.{h,cc}..."
 					Description="Generating unittest_import_public.pb.{h,cc}..."
-					CommandLine="Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_import_public.proto&#x0D;&#x0A;"
+					CommandLine="Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_import_public.proto"
 					Outputs="google\protobuf\unittest_import_public.pb.h;google\protobuf\unittest_import_public.pb.cc"
 					Outputs="google\protobuf\unittest_import_public.pb.h;google\protobuf\unittest_import_public.pb.cc"
 				/>
 				/>
 			</FileConfiguration>
 			</FileConfiguration>
@@ -574,7 +830,7 @@
 				<Tool
 				<Tool
 					Name="VCCustomBuildTool"
 					Name="VCCustomBuildTool"
 					Description="Generating unittest_import_public.pb.{h,cc}..."
 					Description="Generating unittest_import_public.pb.{h,cc}..."
-					CommandLine="Release\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_import_public.proto&#x0D;&#x0A;"
+					CommandLine="Release\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_import_public.proto"
 					Outputs="google\protobuf\unittest_import_public.pb.h;google\protobuf\unittest_import_public.pb.cc"
 					Outputs="google\protobuf\unittest_import_public.pb.h;google\protobuf\unittest_import_public.pb.cc"
 				/>
 				/>
 			</FileConfiguration>
 			</FileConfiguration>
@@ -588,7 +844,7 @@
 				<Tool
 				<Tool
 					Name="VCCustomBuildTool"
 					Name="VCCustomBuildTool"
 					Description="Generating unittest_lite_imports_nonlite.pb.{h,cc}..."
 					Description="Generating unittest_lite_imports_nonlite.pb.{h,cc}..."
-					CommandLine="Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_lite_imports_nonlite.proto&#x0D;&#x0A;"
+					CommandLine="Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_lite_imports_nonlite.proto"
 					Outputs="google\protobuf\unittest_lite_imports_nonlite.pb.h;google\protobuf\unittest_lite_imports_nonlite.pb.cc"
 					Outputs="google\protobuf\unittest_lite_imports_nonlite.pb.h;google\protobuf\unittest_lite_imports_nonlite.pb.cc"
 				/>
 				/>
 			</FileConfiguration>
 			</FileConfiguration>
@@ -598,11 +854,35 @@
 				<Tool
 				<Tool
 					Name="VCCustomBuildTool"
 					Name="VCCustomBuildTool"
 					Description="Generating unittest_lite_imports_nonlite.pb.{h,cc}..."
 					Description="Generating unittest_lite_imports_nonlite.pb.{h,cc}..."
-					CommandLine="Release\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_lite_imports_nonlite.proto&#x0D;&#x0A;"
+					CommandLine="Release\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_lite_imports_nonlite.proto"
 					Outputs="google\protobuf\unittest_lite_imports_nonlite.pb.h;google\protobuf\unittest_lite_imports_nonlite.pb.cc"
 					Outputs="google\protobuf\unittest_lite_imports_nonlite.pb.h;google\protobuf\unittest_lite_imports_nonlite.pb.cc"
 				/>
 				/>
 			</FileConfiguration>
 			</FileConfiguration>
 		</File>
 		</File>
+		<File
+			RelativePath="..\src\google\protobuf\unittest_lite.proto"
+			>
+			<FileConfiguration
+				Name="Debug|Win32"
+				>
+				<Tool
+					Name="VCCustomBuildTool"
+					Description="Generating unittest_lite.pb.{h,cc}..."
+					CommandLine="Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_lite.proto"
+					Outputs="google\protobuf\unittest_lite.pb.h;google\protobuf\unittest_lite.pb.cc"
+				/>
+			</FileConfiguration>
+			<FileConfiguration
+				Name="Release|Win32"
+				>
+				<Tool
+					Name="VCCustomBuildTool"
+					Description="Generating unittest_lite.pb.{h,cc}..."
+					CommandLine="Release\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_lite.proto"
+					Outputs="google\protobuf\unittest_lite.pb.h;google\protobuf\unittest_lite.pb.cc"
+				/>
+			</FileConfiguration>
+		</File>
 		<File
 		<File
 			RelativePath="..\src\google\protobuf\unittest_mset.proto"
 			RelativePath="..\src\google\protobuf\unittest_mset.proto"
 			>
 			>
@@ -612,7 +892,7 @@
 				<Tool
 				<Tool
 					Name="VCCustomBuildTool"
 					Name="VCCustomBuildTool"
 					Description="Generating unittest_mset.pb.{h,cc}..."
 					Description="Generating unittest_mset.pb.{h,cc}..."
-					CommandLine="Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_mset.proto&#x0D;&#x0A;"
+					CommandLine="Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_mset.proto"
 					Outputs="google\protobuf\unittest_mset.pb.h;google\protobuf\unittest_mset.pb.cc"
 					Outputs="google\protobuf\unittest_mset.pb.h;google\protobuf\unittest_mset.pb.cc"
 				/>
 				/>
 			</FileConfiguration>
 			</FileConfiguration>
@@ -622,22 +902,22 @@
 				<Tool
 				<Tool
 					Name="VCCustomBuildTool"
 					Name="VCCustomBuildTool"
 					Description="Generating unittest_mset.pb.{h,cc}..."
 					Description="Generating unittest_mset.pb.{h,cc}..."
-					CommandLine="Release\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_mset.proto&#x0D;&#x0A;"
+					CommandLine="Release\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_mset.proto"
 					Outputs="google\protobuf\unittest_mset.pb.h;google\protobuf\unittest_mset.pb.cc"
 					Outputs="google\protobuf\unittest_mset.pb.h;google\protobuf\unittest_mset.pb.cc"
 				/>
 				/>
 			</FileConfiguration>
 			</FileConfiguration>
 		</File>
 		</File>
 		<File
 		<File
-			RelativePath="..\src\google\protobuf\unittest_optimize_for.proto"
+			RelativePath="..\src\google\protobuf\unittest_no_arena_import.proto"
 			>
 			>
 			<FileConfiguration
 			<FileConfiguration
 				Name="Debug|Win32"
 				Name="Debug|Win32"
 				>
 				>
 				<Tool
 				<Tool
 					Name="VCCustomBuildTool"
 					Name="VCCustomBuildTool"
-					Description="Generating unittest_optimize_for.pb.{h,cc}..."
-					CommandLine="Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_optimize_for.proto&#x0D;&#x0A;"
-					Outputs="google\protobuf\unittest_optimize_for.pb.h;google\protobuf\unittest_optimize_for.pb.cc"
+					Description="Generating unittest_no_arena_import.pb.{h,cc}..."
+					CommandLine="Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_no_arena_import.proto"
+					Outputs="google\protobuf\unittest_no_arena_import.pb.h;google\protobuf\unittest_no_arena_import.pb.cc"
 				/>
 				/>
 			</FileConfiguration>
 			</FileConfiguration>
 			<FileConfiguration
 			<FileConfiguration
@@ -645,9 +925,57 @@
 				>
 				>
 				<Tool
 				<Tool
 					Name="VCCustomBuildTool"
 					Name="VCCustomBuildTool"
-					Description="Generating unittest_optimize_for.pb.{h,cc}..."
-					CommandLine="Release\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_optimize_for.proto&#x0D;&#x0A;"
-					Outputs="google\protobuf\unittest_optimize_for.pb.h;google\protobuf\unittest_optimize_for.pb.cc"
+					Description="Generating unittest_no_arena_import.pb.{h,cc}..."
+					CommandLine="Release\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_no_arena_import.proto"
+					Outputs="google\protobuf\unittest_no_arena_import.pb.h;google\protobuf\unittest_no_arena_import.pb.cc"
+				/>
+			</FileConfiguration>
+		</File>
+		<File
+			RelativePath="..\src\google\protobuf\unittest_no_arena.proto"
+			>
+			<FileConfiguration
+				Name="Debug|Win32"
+				>
+				<Tool
+					Name="VCCustomBuildTool"
+					Description="Generating unittest_no_arena.pb.{h,cc}..."
+					CommandLine="Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_no_arena.proto"
+					Outputs="google\protobuf\unittest_no_arena.pb.h;google\protobuf\unittest_no_arena.pb.cc"
+				/>
+			</FileConfiguration>
+			<FileConfiguration
+				Name="Release|Win32"
+				>
+				<Tool
+					Name="VCCustomBuildTool"
+					Description="Generating unittest_no_arena.pb.{h,cc}..."
+					CommandLine="Release\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_no_arena.proto"
+					Outputs="google\protobuf\unittest_no_arena.pb.h;google\protobuf\unittest_no_arena.pb.cc"
+				/>
+			</FileConfiguration>
+		</File>
+		<File
+			RelativePath="..\src\google\protobuf\unittest_no_field_presence.proto"
+			>
+			<FileConfiguration
+				Name="Debug|Win32"
+				>
+				<Tool
+					Name="VCCustomBuildTool"
+					Description="Generating unittest_no_field_presence.pb.{h,cc}..."
+					CommandLine="Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_no_field_presence.proto"
+					Outputs="google\protobuf\unittest_no_field_presence.pb.h;google\protobuf\unittest_no_field_presence.pb.cc"
+				/>
+			</FileConfiguration>
+			<FileConfiguration
+				Name="Release|Win32"
+				>
+				<Tool
+					Name="VCCustomBuildTool"
+					Description="Generating unittest_no_field_presence.pb.{h,cc}..."
+					CommandLine="Release\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_no_field_presence.proto"
+					Outputs="google\protobuf\unittest_no_field_presence.pb.h;google\protobuf\unittest_no_field_presence.pb.cc"
 				/>
 				/>
 			</FileConfiguration>
 			</FileConfiguration>
 		</File>
 		</File>
@@ -660,7 +988,7 @@
 				<Tool
 				<Tool
 					Name="VCCustomBuildTool"
 					Name="VCCustomBuildTool"
 					Description="Generating unittest_no_generic_services.pb.{h,cc}..."
 					Description="Generating unittest_no_generic_services.pb.{h,cc}..."
-					CommandLine="Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_no_generic_services.proto&#x0D;&#x0A;"
+					CommandLine="Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_no_generic_services.proto"
 					Outputs="google\protobuf\unittest_no_generic_services.pb.h;google\protobuf\unittest_no_generic_services.pb.cc"
 					Outputs="google\protobuf\unittest_no_generic_services.pb.h;google\protobuf\unittest_no_generic_services.pb.cc"
 				/>
 				/>
 			</FileConfiguration>
 			</FileConfiguration>
@@ -670,11 +998,107 @@
 				<Tool
 				<Tool
 					Name="VCCustomBuildTool"
 					Name="VCCustomBuildTool"
 					Description="Generating unittest_no_generic_services.pb.{h,cc}..."
 					Description="Generating unittest_no_generic_services.pb.{h,cc}..."
-					CommandLine="Release\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_no_generic_services.proto&#x0D;&#x0A;"
+					CommandLine="Release\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_no_generic_services.proto"
 					Outputs="google\protobuf\unittest_no_generic_services.pb.h;google\protobuf\unittest_no_generic_services.pb.cc"
 					Outputs="google\protobuf\unittest_no_generic_services.pb.h;google\protobuf\unittest_no_generic_services.pb.cc"
 				/>
 				/>
 			</FileConfiguration>
 			</FileConfiguration>
 		</File>
 		</File>
+		<File
+			RelativePath="..\src\google\protobuf\unittest_optimize_for.proto"
+			>
+			<FileConfiguration
+				Name="Debug|Win32"
+				>
+				<Tool
+					Name="VCCustomBuildTool"
+					Description="Generating unittest_optimize_for.pb.{h,cc}..."
+					CommandLine="Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_optimize_for.proto"
+					Outputs="google\protobuf\unittest_optimize_for.pb.h;google\protobuf\unittest_optimize_for.pb.cc"
+				/>
+			</FileConfiguration>
+			<FileConfiguration
+				Name="Release|Win32"
+				>
+				<Tool
+					Name="VCCustomBuildTool"
+					Description="Generating unittest_optimize_for.pb.{h,cc}..."
+					CommandLine="Release\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_optimize_for.proto"
+					Outputs="google\protobuf\unittest_optimize_for.pb.h;google\protobuf\unittest_optimize_for.pb.cc"
+				/>
+			</FileConfiguration>
+		</File>
+		<File
+			RelativePath="..\src\google\protobuf\unittest_preserve_unknown_enum.proto"
+			>
+			<FileConfiguration
+				Name="Debug|Win32"
+				>
+				<Tool
+					Name="VCCustomBuildTool"
+					Description="Generating unittest_preserve_unknown_enum.pb.{h,cc}..."
+					CommandLine="Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_preserve_unknown_enum.proto"
+					Outputs="google\protobuf\unittest_preserve_unknown_enum.pb.h;google\protobuf\unittest_preserve_unknown_enum.pb.cc"
+				/>
+			</FileConfiguration>
+			<FileConfiguration
+				Name="Release|Win32"
+				>
+				<Tool
+					Name="VCCustomBuildTool"
+					Description="Generating unittest_preserve_unknown_enum.pb.{h,cc}..."
+					CommandLine="Release\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_preserve_unknown_enum.proto"
+					Outputs="google\protobuf\unittest_preserve_unknown_enum.pb.h;google\protobuf\unittest_preserve_unknown_enum.pb.cc"
+				/>
+			</FileConfiguration>
+		</File>
+		<File
+			RelativePath="..\src\google\protobuf\unittest_proto3_arena.proto"
+			>
+			<FileConfiguration
+				Name="Debug|Win32"
+				>
+				<Tool
+					Name="VCCustomBuildTool"
+					Description="Generating unittest_proto3_arena.pb.{h,cc}..."
+					CommandLine="Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_proto3_arena.proto"
+					Outputs="google\protobuf\unittest_proto3_arena.pb.h;google\protobuf\unittest_proto3_arena.pb.cc"
+				/>
+			</FileConfiguration>
+			<FileConfiguration
+				Name="Release|Win32"
+				>
+				<Tool
+					Name="VCCustomBuildTool"
+					Description="Generating unittest_proto3_arena.pb.{h,cc}..."
+					CommandLine="Release\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_proto3_arena.proto"
+					Outputs="google\protobuf\unittest_proto3_arena.pb.h;google\protobuf\unittest_proto3_arena.pb.cc"
+				/>
+			</FileConfiguration>
+		</File>
+		<File
+			RelativePath="..\src\google\protobuf\compiler\cpp\cpp_test_bad_identifiers.proto"
+			>
+			<FileConfiguration
+				Name="Debug|Win32"
+				>
+				<Tool
+					Name="VCCustomBuildTool"
+					Description="Generating cpp_test_bad_identifiers.pb.{h,cc}..."
+					CommandLine="Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/compiler/cpp/cpp_test_bad_identifiers.proto"
+					Outputs="google\protobuf\compiler\cpp\cpp_test_bad_identifiers.pb.h;google\protobuf\compiler\cpp\cpp_test_bad_identifiers.pb.cc"
+				/>
+			</FileConfiguration>
+			<FileConfiguration
+				Name="Release|Win32"
+				>
+				<Tool
+					Name="VCCustomBuildTool"
+					Description="Generating cpp_test_bad_identifiers.pb.{h,cc}..."
+					CommandLine="Release\protoc -I../src --cpp_out=. ../src/google/protobuf/compiler/cpp/cpp_test_bad_identifiers.proto"
+					Outputs="google\protobuf\compiler\cpp\cpp_test_bad_identifiers.pb.h;google\protobuf\compiler\cpp\cpp_test_bad_identifiers.pb.cc"
+				/>
+			</FileConfiguration>
+		</File>
 	</Files>
 	</Files>
 	<Globals>
 	<Globals>
 	</Globals>
 	</Globals>