diff options
author | nerix <nerixdev@outlook.de> | 2025-05-30 21:43:53 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-05-30 20:43:53 +0100 |
commit | 9e9626b3d5aa56828b71b03d99bf3167fdfeb08d (patch) | |
tree | 1086e1e6401aff9184443b39d27333a7a2acc87d /lldb/source/Plugins/Language/CPlusPlus/LibStdcpp.cpp | |
parent | c5f3018668efea156831feb24843e34e4602a8e6 (diff) | |
download | llvm-9e9626b3d5aa56828b71b03d99bf3167fdfeb08d.zip llvm-9e9626b3d5aa56828b71b03d99bf3167fdfeb08d.tar.gz llvm-9e9626b3d5aa56828b71b03d99bf3167fdfeb08d.tar.bz2 |
[LLDB] Avoid crashes when inspecting MSVC STL types (#140761)
When inspecting/printing types from MSVC's STL, LLDB would crash because
it assumes these types were from libstdc++. Specifically,
`std::shared_ptr` and `std::optional` would crash because of a null
pointer dereference. I added a minimal test that tests the types with
C++ helpers for libstdc++ (only tests for crashes).
- Fixes #115216
- Fixes #120310
This still has one unresolved discussion: What about MS STL types? This
is https://github.com/llvm/llvm-project/issues/24834, but there was a
bit of discussion in #120310 as well. The main issue is that MSVC's STL
uses the same type names as libstdc++ (i.e. neither uses an inline
namespace like libc++ for some types).
Diffstat (limited to 'lldb/source/Plugins/Language/CPlusPlus/LibStdcpp.cpp')
-rw-r--r-- | lldb/source/Plugins/Language/CPlusPlus/LibStdcpp.cpp | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/lldb/source/Plugins/Language/CPlusPlus/LibStdcpp.cpp b/lldb/source/Plugins/Language/CPlusPlus/LibStdcpp.cpp index 02113ba..08cfcd4 100644 --- a/lldb/source/Plugins/Language/CPlusPlus/LibStdcpp.cpp +++ b/lldb/source/Plugins/Language/CPlusPlus/LibStdcpp.cpp @@ -379,6 +379,9 @@ LibStdcppSharedPtrSyntheticFrontEnd::CalculateNumChildren() { lldb::ValueObjectSP LibStdcppSharedPtrSyntheticFrontEnd::GetChildAtIndex(uint32_t idx) { + if (!m_ptr_obj) + return nullptr; + if (idx == 0) return m_ptr_obj->GetSP(); if (idx == 1) { |