@@ -2794,16 +2794,12 @@ ValueObjectSP ValueObject::Dereference(Status &error) {
27942794 if (m_deref_valobj)
27952795 return m_deref_valobj->GetSP ();
27962796
2797- bool omit_empty_base_classes = true ;
2798- bool ignore_array_bounds = false ;
27992797 std::string child_name_str;
28002798 uint32_t child_byte_size = 0 ;
28012799 int32_t child_byte_offset = 0 ;
28022800 uint32_t child_bitfield_bit_size = 0 ;
28032801 uint32_t child_bitfield_bit_offset = 0 ;
28042802 bool child_is_base_class = false ;
2805- bool child_is_deref_of_parent = false ;
2806- const bool transparent_pointers = false ;
28072803 CompilerType compiler_type = GetCompilerType ();
28082804 uint64_t language_flags = 0 ;
28092805 bool is_valid_dereference_type = false ;
@@ -2812,17 +2808,20 @@ ValueObjectSP ValueObject::Dereference(Status &error) {
28122808
28132809 CompilerType child_compiler_type;
28142810 auto child_compiler_type_or_err = compiler_type.GetDereferencedType (
2815- &exe_ctx, transparent_pointers, omit_empty_base_classes,
2816- ignore_array_bounds, child_name_str, child_byte_size, child_byte_offset,
2811+ &exe_ctx, child_name_str, child_byte_size, child_byte_offset,
28172812 child_bitfield_bit_size, child_bitfield_bit_offset, child_is_base_class,
2818- child_is_deref_of_parent, this , language_flags,
2819- is_valid_dereference_type);
2813+ this , language_flags, is_valid_dereference_type);
28202814
2821- if (!child_compiler_type_or_err && is_valid_dereference_type)
2822- LLDB_LOG_ERROR (GetLog (LLDBLog::Types),
2823- child_compiler_type_or_err.takeError (),
2824- " could not find child: {0}" );
2825- else
2815+ std::string deref_error;
2816+ if (!child_compiler_type_or_err) {
2817+ auto err = child_compiler_type_or_err.takeError ();
2818+ if (err.isA <llvm::StringError>()) {
2819+ deref_error = llvm::toString (std::move (err));
2820+ LLDB_LOG_ERROR (GetLog (LLDBLog::Types),
2821+ llvm::createStringError (deref_error),
2822+ " could not find child: {0}" );
2823+ }
2824+ } else
28262825 child_compiler_type = *child_compiler_type_or_err;
28272826
28282827 if (is_valid_dereference_type) {
@@ -2834,8 +2833,7 @@ ValueObjectSP ValueObject::Dereference(Status &error) {
28342833 m_deref_valobj = new ValueObjectChild (
28352834 *this , child_compiler_type, child_name, child_byte_size,
28362835 child_byte_offset, child_bitfield_bit_size, child_bitfield_bit_offset,
2837- child_is_base_class, child_is_deref_of_parent, eAddressTypeInvalid,
2838- language_flags);
2836+ child_is_base_class, true , eAddressTypeInvalid, language_flags);
28392837 }
28402838
28412839 // In case of incomplete child compiler type, use the pointee type and try
@@ -2855,8 +2853,8 @@ ValueObjectSP ValueObject::Dereference(Status &error) {
28552853 m_deref_valobj = new ValueObjectChild (
28562854 *this , child_compiler_type, child_name, child_byte_size,
28572855 child_byte_offset, child_bitfield_bit_size,
2858- child_bitfield_bit_offset, child_is_base_class,
2859- child_is_deref_of_parent, eAddressTypeInvalid, language_flags);
2856+ child_bitfield_bit_offset, child_is_base_class, true ,
2857+ eAddressTypeInvalid, language_flags);
28602858 }
28612859 }
28622860 }
@@ -2871,13 +2869,13 @@ ValueObjectSP ValueObject::Dereference(Status &error) {
28712869 StreamString strm;
28722870 GetExpressionPath (strm);
28732871
2874- if (is_valid_dereference_type )
2872+ if (deref_error. empty () )
28752873 error = Status::FromErrorStringWithFormat (
28762874 " dereference failed: (%s) %s" ,
28772875 GetTypeName ().AsCString (" <invalid type>" ), strm.GetData ());
28782876 else
28792877 error = Status::FromErrorStringWithFormat (
2880- " not a pointer or reference type : (%s) %s" ,
2878+ " dereference failed: %s : (%s) %s" , deref_error. c_str () ,
28812879 GetTypeName ().AsCString (" <invalid type>" ), strm.GetData ());
28822880 return ValueObjectSP ();
28832881 }
0 commit comments