llvmbot wrote:

<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-lldb

Author: Ilia Kuklin (kuilpd)

<details>
<summary>Changes</summary>

Attempt an ObjC incomplete type fix even if `GetDereferencedType` returns an 
error.

---
Full diff: https://github.com/llvm/llvm-project/pull/139567.diff


1 Files Affected:

- (modified) lldb/source/ValueObject/ValueObject.cpp (+35-34) 


``````````diff
diff --git a/lldb/source/ValueObject/ValueObject.cpp 
b/lldb/source/ValueObject/ValueObject.cpp
index 6f0fe9a5b83f9..46426ae499be9 100644
--- a/lldb/source/ValueObject/ValueObject.cpp
+++ b/lldb/source/ValueObject/ValueObject.cpp
@@ -2810,46 +2810,47 @@ ValueObjectSP ValueObject::Dereference(Status &error) {
   std::string deref_error;
   if (deref_compiler_type_or_err) {
     deref_compiler_type = *deref_compiler_type_or_err;
-    if (deref_compiler_type && deref_byte_size) {
-      ConstString deref_name;
-      if (!deref_name_str.empty())
-        deref_name.SetCString(deref_name_str.c_str());
-
-      m_deref_valobj =
-          new ValueObjectChild(*this, deref_compiler_type, deref_name,
-                               deref_byte_size, deref_byte_offset, 0, 0, false,
-                               true, eAddressTypeInvalid, language_flags);
-    }
-
-    // In case of incomplete deref compiler type, use the pointee type and try
-    // to recreate a new ValueObjectChild using it.
-    if (!m_deref_valobj) {
-      // FIXME(#59012): C++ stdlib formatters break with incomplete types (e.g.
-      // `std::vector<int> &`). Remove ObjC restriction once that's resolved.
-      if (Language::LanguageIsObjC(GetPreferredDisplayLanguage()) &&
-          HasSyntheticValue()) {
-        deref_compiler_type = compiler_type.GetPointeeType();
-
-        if (deref_compiler_type) {
-          ConstString deref_name;
-          if (!deref_name_str.empty())
-            deref_name.SetCString(deref_name_str.c_str());
-
-          m_deref_valobj = new ValueObjectChild(
-              *this, deref_compiler_type, deref_name, deref_byte_size,
-              deref_byte_offset, 0, 0, false, true, eAddressTypeInvalid,
-              language_flags);
-        }
-      }
-    }
   } else {
     deref_error = llvm::toString(deref_compiler_type_or_err.takeError());
     LLDB_LOG(GetLog(LLDBLog::Types), "could not find child: {0}", deref_error);
-    if (IsSynthetic()) {
-      m_deref_valobj = GetChildMemberWithName("$$dereference$$").get();
+  }
+
+  if (deref_compiler_type && deref_byte_size) {
+    ConstString deref_name;
+    if (!deref_name_str.empty())
+      deref_name.SetCString(deref_name_str.c_str());
+
+    m_deref_valobj =
+        new ValueObjectChild(*this, deref_compiler_type, deref_name,
+                             deref_byte_size, deref_byte_offset, 0, 0, false,
+                             true, eAddressTypeInvalid, language_flags);
+  }
+
+  // In case of incomplete deref compiler type, use the pointee type and try
+  // to recreate a new ValueObjectChild using it.
+  if (!m_deref_valobj) {
+    // FIXME(#59012): C++ stdlib formatters break with incomplete types (e.g.
+    // `std::vector<int> &`). Remove ObjC restriction once that's resolved.
+    if (Language::LanguageIsObjC(GetPreferredDisplayLanguage()) &&
+        HasSyntheticValue()) {
+      deref_compiler_type = compiler_type.GetPointeeType();
+
+      if (deref_compiler_type) {
+        ConstString deref_name;
+        if (!deref_name_str.empty())
+          deref_name.SetCString(deref_name_str.c_str());
+
+        m_deref_valobj = new ValueObjectChild(
+            *this, deref_compiler_type, deref_name, deref_byte_size,
+            deref_byte_offset, 0, 0, false, true, eAddressTypeInvalid,
+            language_flags);
+      }
     }
   }
 
+  if (!m_deref_valobj && IsSynthetic())
+    m_deref_valobj = GetChildMemberWithName("$$dereference$$").get();
+
   if (m_deref_valobj) {
     error.Clear();
     return m_deref_valobj->GetSP();

``````````

</details>


https://github.com/llvm/llvm-project/pull/139567
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to