diff --git a/include/llvm/ADT/DenseMap.h b/include/llvm/ADT/DenseMap.h
index fe912404cd9..43382492856 100644
--- a/include/llvm/ADT/DenseMap.h
+++ b/include/llvm/ADT/DenseMap.h
@@ -203,7 +203,9 @@ private:
     else
       for (size_t i = 0; i < other.NumBuckets; ++i) {
         new (Buckets[i].first) KeyT(other.Buckets[i].first);
-        new (Buckets[i].second) ValueT(other.Buckets[i].second);
+        if (Buckets[i].first != getEmptyKey() &&
+	    Buckets[i].first != getTombstoneKey())
+          new (Buckets[i].second) ValueT(other.Buckets[i].second);
       }
     NumBuckets = other.NumBuckets;
   }