@@ -2810,46 +2810,47 @@ ValueObjectSP ValueObject::Dereference(Status &error) {
2810
2810
std::string deref_error;
2811
2811
if (deref_compiler_type_or_err) {
2812
2812
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
- }
2845
2813
} else {
2846
2814
deref_error = llvm::toString (deref_compiler_type_or_err.takeError ());
2847
2815
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
+ }
2850
2848
}
2851
2849
}
2852
2850
2851
+ if (!m_deref_valobj && IsSynthetic ())
2852
+ m_deref_valobj = GetChildMemberWithName (" $$dereference$$" ).get ();
2853
+
2853
2854
if (m_deref_valobj) {
2854
2855
error.Clear ();
2855
2856
return m_deref_valobj->GetSP ();
0 commit comments