diff options
Diffstat (limited to 'source/Plugins/Language/CPlusPlus/LibStdcppTuple.cpp')
| -rw-r--r-- | source/Plugins/Language/CPlusPlus/LibStdcppTuple.cpp | 13 | 
1 files changed, 9 insertions, 4 deletions
| diff --git a/source/Plugins/Language/CPlusPlus/LibStdcppTuple.cpp b/source/Plugins/Language/CPlusPlus/LibStdcppTuple.cpp index 66624e5beb6d..0ac7b8f8e02b 100644 --- a/source/Plugins/Language/CPlusPlus/LibStdcppTuple.cpp +++ b/source/Plugins/Language/CPlusPlus/LibStdcppTuple.cpp @@ -37,7 +37,12 @@ public:    size_t GetIndexOfChildWithName(ConstString name) override;  private: -  std::vector<ValueObjectSP> m_members; +  // The lifetime of a ValueObject and all its derivative ValueObjects +  // (children, clones, etc.) is managed by a ClusterManager. These +  // objects are only destroyed when every shared pointer to any of them +  // is destroyed, so we must not store a shared pointer to any ValueObject +  // derived from our backend ValueObject (since we're in the same cluster). +  std::vector<ValueObject*> m_members;  };  } // end of anonymous namespace @@ -72,7 +77,7 @@ bool LibStdcppTupleSyntheticFrontEnd::Update() {          if (value_sp) {            StreamString name;            name.Printf("[%zd]", m_members.size()); -          m_members.push_back(value_sp->Clone(ConstString(name.GetString()))); +          m_members.push_back(value_sp->Clone(ConstString(name.GetString())).get());          }        }      } @@ -85,8 +90,8 @@ bool LibStdcppTupleSyntheticFrontEnd::MightHaveChildren() { return true; }  lldb::ValueObjectSP  LibStdcppTupleSyntheticFrontEnd::GetChildAtIndex(size_t idx) { -  if (idx < m_members.size()) -    return m_members[idx]; +  if (idx < m_members.size() && m_members[idx]) +    return m_members[idx]->GetSP();    return lldb::ValueObjectSP();  } | 
