@@ -2810,46 +2810,47 @@ ValueObjectSP ValueObject::Dereference(Status &error) {
28102810 std::string deref_error;
28112811 if (deref_compiler_type_or_err) {
28122812 deref_compiler_type = *deref_compiler_type_or_err;
2813- if (deref_compiler_type && deref_byte_size) {
2814- ConstString deref_name;
2815- if (!deref_name_str.empty ())
2816- deref_name.SetCString (deref_name_str.c_str ());
2817-
2818- m_deref_valobj =
2819- new ValueObjectChild (*this , deref_compiler_type, deref_name,
2820- deref_byte_size, deref_byte_offset, 0 , 0 , false ,
2821- true , eAddressTypeInvalid, language_flags);
2822- }
2823-
2824- // In case of incomplete deref compiler type, use the pointee type and try
2825- // to recreate a new ValueObjectChild using it.
2826- if (!m_deref_valobj) {
2827- // FIXME(#59012): C++ stdlib formatters break with incomplete types (e.g.
2828- // `std::vector<int> &`). Remove ObjC restriction once that's resolved.
2829- if (Language::LanguageIsObjC (GetPreferredDisplayLanguage ()) &&
2830- HasSyntheticValue ()) {
2831- deref_compiler_type = compiler_type.GetPointeeType ();
2832-
2833- if (deref_compiler_type) {
2834- ConstString deref_name;
2835- if (!deref_name_str.empty ())
2836- deref_name.SetCString (deref_name_str.c_str ());
2837-
2838- m_deref_valobj = new ValueObjectChild (
2839- *this , deref_compiler_type, deref_name, deref_byte_size,
2840- deref_byte_offset, 0 , 0 , false , true , eAddressTypeInvalid,
2841- language_flags);
2842- }
2843- }
2844- }
28452813 } else {
28462814 deref_error = llvm::toString (deref_compiler_type_or_err.takeError ());
28472815 LLDB_LOG (GetLog (LLDBLog::Types), " could not find child: {0}" , deref_error);
2848- if (IsSynthetic ()) {
2849- m_deref_valobj = GetChildMemberWithName (" $$dereference$$" ).get ();
2816+ }
2817+
2818+ if (deref_compiler_type && deref_byte_size) {
2819+ ConstString deref_name;
2820+ if (!deref_name_str.empty ())
2821+ deref_name.SetCString (deref_name_str.c_str ());
2822+
2823+ m_deref_valobj =
2824+ new ValueObjectChild (*this , deref_compiler_type, deref_name,
2825+ deref_byte_size, deref_byte_offset, 0 , 0 , false ,
2826+ true , eAddressTypeInvalid, language_flags);
2827+ }
2828+
2829+ // In case of incomplete deref compiler type, use the pointee type and try
2830+ // to recreate a new ValueObjectChild using it.
2831+ if (!m_deref_valobj) {
2832+ // FIXME(#59012): C++ stdlib formatters break with incomplete types (e.g.
2833+ // `std::vector<int> &`). Remove ObjC restriction once that's resolved.
2834+ if (Language::LanguageIsObjC (GetPreferredDisplayLanguage ()) &&
2835+ HasSyntheticValue ()) {
2836+ deref_compiler_type = compiler_type.GetPointeeType ();
2837+
2838+ if (deref_compiler_type) {
2839+ ConstString deref_name;
2840+ if (!deref_name_str.empty ())
2841+ deref_name.SetCString (deref_name_str.c_str ());
2842+
2843+ m_deref_valobj = new ValueObjectChild (
2844+ *this , deref_compiler_type, deref_name, deref_byte_size,
2845+ deref_byte_offset, 0 , 0 , false , true , eAddressTypeInvalid,
2846+ language_flags);
2847+ }
28502848 }
28512849 }
28522850
2851+ if (!m_deref_valobj && IsSynthetic ())
2852+ m_deref_valobj = GetChildMemberWithName (" $$dereference$$" ).get ();
2853+
28532854 if (m_deref_valobj) {
28542855 error.Clear ();
28552856 return m_deref_valobj->GetSP ();
0 commit comments