@@ -2850,16 +2850,12 @@ ValueObjectSP ValueObject::Dereference(Status &error) {
28502850 if (m_deref_valobj)
28512851 return m_deref_valobj->GetSP ();
28522852
2853- bool omit_empty_base_classes = true ;
2854- bool ignore_array_bounds = false ;
28552853 std::string child_name_str;
28562854 uint32_t child_byte_size = 0 ;
28572855 int32_t child_byte_offset = 0 ;
28582856 uint32_t child_bitfield_bit_size = 0 ;
28592857 uint32_t child_bitfield_bit_offset = 0 ;
28602858 bool child_is_base_class = false ;
2861- bool child_is_deref_of_parent = false ;
2862- const bool transparent_pointers = false ;
28632859 CompilerType compiler_type = GetCompilerType ();
28642860 uint64_t language_flags = 0 ;
28652861 bool is_valid_dereference_type = false ;
@@ -2868,17 +2864,20 @@ ValueObjectSP ValueObject::Dereference(Status &error) {
28682864
28692865 CompilerType child_compiler_type;
28702866 auto child_compiler_type_or_err = compiler_type.GetDereferencedType (
2871- &exe_ctx, transparent_pointers, omit_empty_base_classes,
2872- ignore_array_bounds, child_name_str, child_byte_size, child_byte_offset,
2867+ &exe_ctx, child_name_str, child_byte_size, child_byte_offset,
28732868 child_bitfield_bit_size, child_bitfield_bit_offset, child_is_base_class,
2874- child_is_deref_of_parent, this , language_flags,
2875- is_valid_dereference_type);
2869+ this , language_flags, is_valid_dereference_type);
28762870
2877- if (!child_compiler_type_or_err && is_valid_dereference_type)
2878- LLDB_LOG_ERROR (GetLog (LLDBLog::Types),
2879- child_compiler_type_or_err.takeError (),
2880- " could not find child: {0}" );
2881- else
2871+ std::string deref_error;
2872+ if (!child_compiler_type_or_err) {
2873+ auto err = child_compiler_type_or_err.takeError ();
2874+ if (err.isA <llvm::StringError>()) {
2875+ deref_error = llvm::toString (std::move (err));
2876+ LLDB_LOG_ERROR (GetLog (LLDBLog::Types),
2877+ llvm::createStringError (deref_error),
2878+ " could not find child: {0}" );
2879+ }
2880+ } else
28822881 child_compiler_type = *child_compiler_type_or_err;
28832882
28842883 if (is_valid_dereference_type) {
@@ -2890,8 +2889,7 @@ ValueObjectSP ValueObject::Dereference(Status &error) {
28902889 m_deref_valobj = new ValueObjectChild (
28912890 *this , child_compiler_type, child_name, child_byte_size,
28922891 child_byte_offset, child_bitfield_bit_size, child_bitfield_bit_offset,
2893- child_is_base_class, child_is_deref_of_parent, eAddressTypeInvalid,
2894- language_flags);
2892+ child_is_base_class, true , eAddressTypeInvalid, language_flags);
28952893 }
28962894
28972895 // In case of incomplete child compiler type, use the pointee type and try
@@ -2911,8 +2909,8 @@ ValueObjectSP ValueObject::Dereference(Status &error) {
29112909 m_deref_valobj = new ValueObjectChild (
29122910 *this , child_compiler_type, child_name, child_byte_size,
29132911 child_byte_offset, child_bitfield_bit_size,
2914- child_bitfield_bit_offset, child_is_base_class,
2915- child_is_deref_of_parent, eAddressTypeInvalid, language_flags);
2912+ child_bitfield_bit_offset, child_is_base_class, true ,
2913+ eAddressTypeInvalid, language_flags);
29162914 }
29172915 }
29182916 }
@@ -2930,13 +2928,13 @@ ValueObjectSP ValueObject::Dereference(Status &error) {
29302928 StreamString strm;
29312929 GetExpressionPath (strm);
29322930
2933- if (is_valid_dereference_type )
2931+ if (deref_error. empty () )
29342932 error = Status::FromErrorStringWithFormat (
29352933 " dereference failed: (%s) %s" ,
29362934 GetTypeName ().AsCString (" <invalid type>" ), strm.GetData ());
29372935 else
29382936 error = Status::FromErrorStringWithFormat (
2939- " not a pointer or reference type : (%s) %s" ,
2937+ " dereference failed: %s : (%s) %s" , deref_error. c_str () ,
29402938 GetTypeName ().AsCString (" <invalid type>" ), strm.GetData ());
29412939 return ValueObjectSP ();
29422940 }
0 commit comments