diff options
author | Pavel Labath <labath@google.com> | 2018-03-08 16:03:09 +0000 |
---|---|---|
committer | Pavel Labath <labath@google.com> | 2018-03-08 16:03:09 +0000 |
commit | b312b1396069203bb1cfd64a5c4c903b05d3cd6a (patch) | |
tree | 1cfd4cba68af79bf60d0b33af8bd1e6448aa89f4 /lldb/source/Plugins/Language/CPlusPlus/LibStdcppUniquePointer.cpp | |
parent | 6bf2a8ea70aaf95a96d773441a595d9c1f80437c (diff) | |
download | bcm5719-llvm-b312b1396069203bb1cfd64a5c4c903b05d3cd6a.tar.gz bcm5719-llvm-b312b1396069203bb1cfd64a5c4c903b05d3cd6a.zip |
Fix std unique pointer pretty-printer for new stl versions
Summary: The unique pointer layout was changed in libstdc++ 6.0.23.
Reviewers: labath, clayborg
Reviewed By: labath, clayborg
Subscribers: luporl, lbianc, lldb-commits
Differential Revision: https://reviews.llvm.org/D44015
Patch by Alexandre Yukio Yamashita <alexandre.yamashita@eldorado.org.br>.
llvm-svn: 327017
Diffstat (limited to 'lldb/source/Plugins/Language/CPlusPlus/LibStdcppUniquePointer.cpp')
-rw-r--r-- | lldb/source/Plugins/Language/CPlusPlus/LibStdcppUniquePointer.cpp | 27 |
1 files changed, 23 insertions, 4 deletions
diff --git a/lldb/source/Plugins/Language/CPlusPlus/LibStdcppUniquePointer.cpp b/lldb/source/Plugins/Language/CPlusPlus/LibStdcppUniquePointer.cpp index b6d664df16e..19b0e88b896 100644 --- a/lldb/source/Plugins/Language/CPlusPlus/LibStdcppUniquePointer.cpp +++ b/lldb/source/Plugins/Language/CPlusPlus/LibStdcppUniquePointer.cpp @@ -43,6 +43,8 @@ private: ValueObjectSP m_ptr_obj; ValueObjectSP m_obj_obj; ValueObjectSP m_del_obj; + + ValueObjectSP GetTuple(); }; } // end of anonymous namespace @@ -53,17 +55,34 @@ LibStdcppUniquePtrSyntheticFrontEnd::LibStdcppUniquePtrSyntheticFrontEnd( Update(); } -bool LibStdcppUniquePtrSyntheticFrontEnd::Update() { +ValueObjectSP LibStdcppUniquePtrSyntheticFrontEnd::GetTuple() { ValueObjectSP valobj_backend_sp = m_backend.GetSP(); + if (!valobj_backend_sp) - return false; + return nullptr; ValueObjectSP valobj_sp = valobj_backend_sp->GetNonSyntheticValue(); if (!valobj_sp) - return false; + return nullptr; - ValueObjectSP tuple_sp = + ValueObjectSP obj_child_sp = valobj_sp->GetChildMemberWithName(ConstString("_M_t"), true); + + ValueObjectSP obj_subchild_sp = + obj_child_sp->GetChildMemberWithName(ConstString("_M_t"), true); + + // if there is a _M_t subchild, the tuple is found in + // the obj_subchild_sp (for libstdc++ 6.0.23). + if (obj_subchild_sp) { + return obj_subchild_sp; + } + + return obj_child_sp; +} + +bool LibStdcppUniquePtrSyntheticFrontEnd::Update() { + ValueObjectSP tuple_sp = GetTuple(); + if (!tuple_sp) return false; |