Fix bug in GeneratedBuilder.MergeFrom
diff --git a/src/ProtocolBuffers.Test/GeneratedMessageTest.cs b/src/ProtocolBuffers.Test/GeneratedMessageTest.cs
index feba6e3..f0be393 100644
--- a/src/ProtocolBuffers.Test/GeneratedMessageTest.cs
+++ b/src/ProtocolBuffers.Test/GeneratedMessageTest.cs
@@ -287,5 +287,29 @@
           ).BuildPartial();
       Assert.IsTrue(message.IsInitialized);
     }
+
+    [Test]
+    public void TestOptimizedForSizeMergeUsesAllFieldsFromTarget() {
+      TestOptimizedForSize withFieldSet = new TestOptimizedForSize.Builder { I = 10 }.Build();
+      TestOptimizedForSize.Builder builder = new TestOptimizedForSize.Builder();
+      builder.MergeFrom(withFieldSet);
+      TestOptimizedForSize built = builder.Build();
+      Assert.AreEqual(10, built.I);
+    }
+
+    [Test]
+    public void UninitializedExtensionInOptimizedForSizeMakesMessageUninitialized() {
+      TestOptimizedForSize.Builder builder = new TestOptimizedForSize.Builder();
+      builder.SetExtension(TestOptimizedForSize.TestExtension2,
+          new TestRequiredOptimizedForSize.Builder().BuildPartial());
+      Assert.IsFalse(builder.IsInitialized);
+      Assert.IsFalse(builder.BuildPartial().IsInitialized);
+
+      builder = new TestOptimizedForSize.Builder();
+      builder.SetExtension(TestOptimizedForSize.TestExtension2,
+          new TestRequiredOptimizedForSize.Builder { X = 10 }.BuildPartial());
+      Assert.IsTrue(builder.IsInitialized);
+      Assert.IsTrue(builder.BuildPartial().IsInitialized);
+    }
   }
 }