diff --git a/include/lldb/DataFormatters/FormatCache.h b/include/lldb/DataFormatters/FormatCache.h
index 941b96c..884200b 100644
--- a/include/lldb/DataFormatters/FormatCache.h
+++ b/include/lldb/DataFormatters/FormatCache.h
@@ -34,10 +34,13 @@
         lldb::SyntheticChildrenSP m_synthetic_sp;
     public:
         Entry ();
+        Entry (const Entry& rhs);
         Entry (lldb::TypeSummaryImplSP);
         Entry (lldb::SyntheticChildrenSP);
         Entry (lldb::TypeSummaryImplSP,lldb::SyntheticChildrenSP);
 
+        Entry& operator= (const Entry& rhs);
+
         bool
         IsSummaryCached ();
         
diff --git a/source/DataFormatters/FormatCache.cpp b/source/DataFormatters/FormatCache.cpp
index af7b1c3..89d6ad4 100644
--- a/source/DataFormatters/FormatCache.cpp
+++ b/source/DataFormatters/FormatCache.cpp
@@ -28,6 +28,13 @@
 m_synthetic_sp()
 {}
 
+FormatCache::Entry::Entry (const Entry& rhs) :
+m_summary_cached(rhs.m_summary_cached),
+m_synthetic_cached(rhs.m_synthetic_cached),
+m_summary_sp(rhs.m_summary_sp),
+m_synthetic_sp(rhs.m_synthetic_sp)
+{}
+
 FormatCache::Entry::Entry (lldb::TypeSummaryImplSP summary_sp) :
 m_synthetic_cached(false),
 m_synthetic_sp()
@@ -48,6 +55,18 @@
     SetSynthetic (synthetic_sp);
 }
 
+FormatCache::Entry& FormatCache::Entry::operator= (const Entry& rhs)
+{
+    if (this == &rhs)
+        return *this;
+
+    m_summary_cached = rhs.m_summary_cached;
+    m_synthetic_cached = rhs.m_synthetic_cached;
+    m_summary_sp = rhs.m_summary_sp;
+    m_synthetic_sp = rhs.m_synthetic_sp;
+    return *this;
+}
+
 bool
 FormatCache::Entry::IsSummaryCached ()
 {
diff --git a/source/Plugins/SymbolFile/DWARF/DWARFDebugLine.h b/source/Plugins/SymbolFile/DWARF/DWARFDebugLine.h
index cfa8654..3cc7dc6 100644
--- a/source/Plugins/SymbolFile/DWARF/DWARFDebugLine.h
+++ b/source/Plugins/SymbolFile/DWARF/DWARFDebugLine.h
@@ -110,6 +110,35 @@
         typedef collection::const_iterator  const_iterator;
 
         Row(bool default_is_stmt = false);
+        Row(const Row& rhs) :
+            address(rhs.address),
+            line(rhs.line),
+            column(rhs.column),
+            file(rhs.file),
+            is_stmt(rhs.is_stmt),
+            basic_block(rhs.basic_block),
+            end_sequence(rhs.end_sequence),
+            prologue_end(rhs.prologue_end),
+            epilogue_begin(rhs.epilogue_begin),
+            isa(rhs.isa)
+        {}
+        Row& operator =(const Row& rhs)
+        {
+            if (&rhs == this)
+                return *this;
+
+            address = rhs.address;
+            line = rhs.line;
+            column = rhs.column;
+            file = rhs.file;
+            is_stmt = rhs.is_stmt;
+            basic_block = rhs.basic_block;
+            end_sequence = rhs.end_sequence;
+            prologue_end = rhs.prologue_end;
+            epilogue_begin = rhs.epilogue_begin;
+            isa = rhs.isa;
+            return *this;
+        }
         virtual ~Row() {}
         void PostAppend ();
         void Reset(bool default_is_stmt);
