summaryrefslogtreecommitdiff
path: root/lldb/source
diff options
context:
space:
mode:
authorJeffrey Tan <jeffreytan@fb.com>2023-05-10 14:44:16 -0700
committerJeffrey Tan <jeffreytan@fb.com>2023-05-12 10:09:58 -0700
commit25159ee3af5cd1c05c010ea195b4b359df3fe820 (patch)
treec334552c67b796bca6913da3d283789d44e5e640 /lldb/source
parentb58dd9230e655feb0d904b8095f113a4f0246cbf (diff)
downloadllvm-25159ee3af5cd1c05c010ea195b4b359df3fe820.tar.gz
Fix libstdc++ data formatter for reference/pointer to std::string
This patch fixes libstdc++ data formatter for reference/pointer to std::string. The failure testcases are added which succeed with the patch. Differential Revision: https://reviews.llvm.org/D150313
Diffstat (limited to 'lldb/source')
-rw-r--r--lldb/source/Plugins/Language/CPlusPlus/LibStdcpp.cpp11
1 files changed, 9 insertions, 2 deletions
diff --git a/lldb/source/Plugins/Language/CPlusPlus/LibStdcpp.cpp b/lldb/source/Plugins/Language/CPlusPlus/LibStdcpp.cpp
index 90976fa053b8..c7f1c7942224 100644
--- a/lldb/source/Plugins/Language/CPlusPlus/LibStdcpp.cpp
+++ b/lldb/source/Plugins/Language/CPlusPlus/LibStdcpp.cpp
@@ -233,8 +233,15 @@ bool lldb_private::formatters::LibStdcppStringSummaryProvider(
ValueObject &valobj, Stream &stream, const TypeSummaryOptions &options) {
const bool scalar_is_load_addr = true;
AddressType addr_type;
- lldb::addr_t addr_of_string =
- valobj.GetAddressOf(scalar_is_load_addr, &addr_type);
+ lldb::addr_t addr_of_string = LLDB_INVALID_ADDRESS;
+ if (valobj.IsPointerOrReferenceType()) {
+ Status error;
+ ValueObjectSP pointee_sp = valobj.Dereference(error);
+ if (pointee_sp && error.Success())
+ addr_of_string = pointee_sp->GetAddressOf(scalar_is_load_addr, &addr_type);
+ } else
+ addr_of_string =
+ valobj.GetAddressOf(scalar_is_load_addr, &addr_type);
if (addr_of_string != LLDB_INVALID_ADDRESS) {
switch (addr_type) {
case eAddressTypeLoad: {