diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2017-05-02 18:31:19 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2017-05-02 18:31:19 +0000 |
commit | 773dd0e6e632d48d7123a321ba86f50847b9afc0 (patch) | |
tree | c6bd992bb1963df11f8de346d12a5a70c2e4deb2 /source/Plugins/Language/CPlusPlus/LibCxxVector.cpp | |
parent | 5060b64b7d79491d507a75201be161fd0c38fcbb (diff) |
Notes
Diffstat (limited to 'source/Plugins/Language/CPlusPlus/LibCxxVector.cpp')
-rw-r--r-- | source/Plugins/Language/CPlusPlus/LibCxxVector.cpp | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/source/Plugins/Language/CPlusPlus/LibCxxVector.cpp b/source/Plugins/Language/CPlusPlus/LibCxxVector.cpp index 2843201e2ed9..96d7e51deba4 100644 --- a/source/Plugins/Language/CPlusPlus/LibCxxVector.cpp +++ b/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(); |