teemperor requested changes to this revision.
teemperor added a comment.
This revision now requires changes to proceed.

Thanks for the patch!

So IIUC correctly this fixes a crash when calling `Dereference` on an SBValue 
that is of type `SomeTypedef` with `typedef int& SomeTypedef`? If yes, then I 
think the test here could just be another type+assert in 
`TestCPPDereferencingReferences.py`. The test here is a bit expensive and seems 
to depend on a specific libc++ version (-> it will also always pass on Linux), 
even though this is just a TypeSystemClang patch.



================
Comment at: lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp:6505
     if (idx_is_valid) {
-      const clang::ReferenceType *reference_type =
-          llvm::cast<clang::ReferenceType>(GetQualType(type).getTypePtr());
-      CompilerType pointee_clang_type =
-          GetType(reference_type->getPointeeType());
+      CompilerType pointee_clang_type;
+
----------------
I really like the idea of reusing the TypeSystemClang functions here (we should 
do this everywhere I think). FWIW, I think this can all just be `CompilerType 
pointee_clang_type = GetNonReferenceType(type);` From the code below 
`GetPointeeType` would also work. We already call the variable here `pointee` 
type so I don't think calling references pointers here will hurt too much, so I 
think both is fine.


================
Comment at: lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp:6508
+      if (parent_type_class == clang::Type::LValueReference)
+        pointee_clang_type = GetLValueReferenceType(type).GetPointeeType();
+      else
----------------
I think the logic here is reversed? `type` is a reference type (potentially 
behind a typedef). `GetLValueReferenceType` on `type` returns the reference 
type *to* that type. Not the underlying reference. The fallback for this is 
just that it returns the current type IIRC if you already have a reference, 
that's why this works. So, `GetLValueReferenceType` is just a no-op and 
`GetPointeeType` is doing the actual dereferencing. I think just the 
`GetPointeeType` is needed.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D108717/new/

https://reviews.llvm.org/D108717

_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to