labath wrote:

> So the difference is that if `value->Dereference` fails, the user should try 
> to manually dereference a synthetic value?

If that's what they want, yes.

> Are there no other users of this function other than the ones you addressed 
> in this patch? What about some Python code somewhere?

Inside lldb - no. It's of course possible there's python code out there which 
depends on this bug, but I'm saying that's what it is -- a bug. For other 
operations, you have to choose whether you want to access the synthetic or 
non-synthetic view of the value. For example, this is what you get with a 
vector variable:
```
(lldb) script lldb.frame.FindVariable("v").GetChildMemberWithName("_M_impl")
No value
(lldb) script 
lldb.frame.FindVariable("v").GetNonSyntheticValue().GetChildMemberWithName("_M_impl")
(std::_Vector_base<int, std::allocator<int> >::_Vector_impl) _M_impl = {
  std::_Vector_base<int, std::allocator<int> >::_Vector_impl_data = {
    _M_start = 0x000055555556b2b0
    _M_finish = 0x000055555556b2c4
    _M_end_of_storage = 0x000055555556b2c4
  }
}
(lldb) script 
lldb.frame.FindVariable("v").GetNonSyntheticValue().GetChildMemberWithName("[0]")
No value
(lldb) script lldb.frame.FindVariable("v").GetChildMemberWithName("[0]")
(int) [0] = 1
```

This makes `Dereference()` behave the same way (or at least, brings it closer 
to that).

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

Reply via email to