diff options
author | Lang Hames <lhames@gmail.com> | 2017-04-26 23:29:59 +0000 |
---|---|---|
committer | Lang Hames <lhames@gmail.com> | 2017-04-26 23:29:59 +0000 |
commit | 6cc3354dd6f2290c18a9d8c1da395af62cc7e0e6 (patch) | |
tree | b391147ca82819c51548210052b23582a26d894f /lldb/source/Plugins/Language/CPlusPlus/LibCxxVector.cpp | |
parent | 1182779917b3c1681274e6feaa4d36e51b7e142e (diff) | |
download | bcm5719-llvm-6cc3354dd6f2290c18a9d8c1da395af62cc7e0e6.tar.gz bcm5719-llvm-6cc3354dd6f2290c18a9d8c1da395af62cc7e0e6.zip |
Fix libcxx formatters for changes in r300140.
Summary:
LLVM r300140 changed the layout and field names of __compressed_pair, which
broke LLDB's std::vector, std::map and std::unsorted_map formatters.
This patch attempts to fix these formatters by having them interogate the
__compressed_pair values to determine whether they're pre- or post-r300140
variants, then access them accordingly.
Reviewers: jingham, EricWF
Reviewed By: jingham
Differential Revision: https://reviews.llvm.org/D32554
llvm-svn: 301493
Diffstat (limited to 'lldb/source/Plugins/Language/CPlusPlus/LibCxxVector.cpp')
-rw-r--r-- | lldb/source/Plugins/Language/CPlusPlus/LibCxxVector.cpp | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/lldb/source/Plugins/Language/CPlusPlus/LibCxxVector.cpp b/lldb/source/Plugins/Language/CPlusPlus/LibCxxVector.cpp index 2843201e2ed..96d7e51deba 100644 --- a/lldb/source/Plugins/Language/CPlusPlus/LibCxxVector.cpp +++ b/lldb/source/Plugins/Language/CPlusPlus/LibCxxVector.cpp @@ -127,8 +127,25 @@ bool lldb_private::formatters::LibcxxStdVectorSyntheticFrontEnd::Update() { m_backend.GetChildMemberWithName(ConstString("__end_cap_"), true)); if (!data_type_finder_sp) return false; - data_type_finder_sp = data_type_finder_sp->GetChildMemberWithName( + + switch (data_type_finder_sp->GetCompilerType().GetNumDirectBaseClasses()) { + case 1: + // Assume a pre llvm r300140 __compressed_pair implementation: + data_type_finder_sp = data_type_finder_sp->GetChildMemberWithName( ConstString("__first_"), true); + break; + case 2: { + // Assume a post llvm r300140 __compressed_pair implementation: + ValueObjectSP first_elem_parent_sp = + data_type_finder_sp->GetChildAtIndex(0, true); + data_type_finder_sp = first_elem_parent_sp->GetChildMemberWithName( + ConstString("__value_"), true); + break; + } + default: + return false; + } + if (!data_type_finder_sp) return false; m_element_type = data_type_finder_sp->GetCompilerType().GetPointeeType(); |