jarin updated this revision to Diff 265141.
jarin marked 2 inline comments as done.
jarin added a comment.
Added more assertions, reformatted the test code.
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D80254/new/
https://reviews.llvm.org/D80254
Files:
lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp
lldb/test/API/functionalities/pointer_num_children/Makefile
lldb/test/API/functionalities/pointer_num_children/TestPointerNumChildren.py
lldb/test/API/functionalities/pointer_num_children/main.cpp
Index: lldb/test/API/functionalities/pointer_num_children/main.cpp
===================================================================
--- /dev/null
+++ lldb/test/API/functionalities/pointer_num_children/main.cpp
@@ -0,0 +1,16 @@
+struct Inner {
+ int a;
+ int b;
+};
+
+struct Outer {
+ Inner *inner;
+};
+
+int main() {
+ Inner inner{42, 56};
+ Outer outer{&inner};
+ auto Ptr = &(outer.inner);
+ auto &Ref = outer.inner;
+ return 0; // break here
+}
Index: lldb/test/API/functionalities/pointer_num_children/TestPointerNumChildren.py
===================================================================
--- /dev/null
+++ lldb/test/API/functionalities/pointer_num_children/TestPointerNumChildren.py
@@ -0,0 +1,28 @@
+"""
+"""
+import lldb
+from lldbsuite.test.decorators import *
+from lldbsuite.test.lldbtest import *
+from lldbsuite.test import lldbutil
+
+
+class TestPointerNumChilden(TestBase):
+ mydir = TestBase.compute_mydir(__file__)
+
+ def test_pointer_num_children(self):
+ self.main_source_file = lldb.SBFileSpec("main.cpp")
+ self.build()
+ (_, _, thread, _) = lldbutil.run_to_source_breakpoint(self, "// break here", self.main_source_file)
+ frame = thread.GetSelectedFrame()
+
+ result = frame.FindVariable("Ref")
+ self.assertEqual(1, result.GetNumChildren())
+ self.assertEqual(2, result.GetChildAtIndex(0).GetNumChildren())
+ self.assertEqual("42", result.GetChildAtIndex(0).GetChildAtIndex(0).GetValue())
+ self.assertEqual("56", result.GetChildAtIndex(0).GetChildAtIndex(1).GetValue())
+
+ result = frame.FindVariable("Ptr")
+ self.assertEqual(1, result.GetNumChildren())
+ self.assertEqual(2, result.GetChildAtIndex(0).GetNumChildren())
+ self.assertEqual("42", result.GetChildAtIndex(0).GetChildAtIndex(0).GetValue())
+ self.assertEqual("56", result.GetChildAtIndex(0).GetChildAtIndex(1).GetValue())
Index: lldb/test/API/functionalities/pointer_num_children/Makefile
===================================================================
--- /dev/null
+++ lldb/test/API/functionalities/pointer_num_children/Makefile
@@ -0,0 +1,3 @@
+CXX_SOURCES := main.cpp
+
+include Makefile.rules
Index: lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp
===================================================================
--- lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp
+++ lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp
@@ -5173,11 +5173,12 @@
break;
case clang::Type::ObjCObjectPointer: {
- const clang::ObjCObjectPointerType *pointer_type =
- llvm::cast<clang::ObjCObjectPointerType>(qual_type.getTypePtr());
- clang::QualType pointee_type = pointer_type->getPointeeType();
- uint32_t num_pointee_children =
- GetType(pointee_type).GetNumChildren(omit_empty_base_classes, exe_ctx);
+ CompilerType pointee_clang_type(GetPointeeType(type));
+
+ uint32_t num_pointee_children = 0;
+ if (pointee_clang_type.IsAggregateType())
+ num_pointee_children =
+ pointee_clang_type.GetNumChildren(omit_empty_base_classes, exe_ctx);
// If this type points to a simple type, then it has 1 child
if (num_pointee_children == 0)
num_children = 1;
@@ -5209,8 +5210,11 @@
const clang::PointerType *pointer_type =
llvm::cast<clang::PointerType>(qual_type.getTypePtr());
clang::QualType pointee_type(pointer_type->getPointeeType());
- uint32_t num_pointee_children =
- GetType(pointee_type).GetNumChildren(omit_empty_base_classes, exe_ctx);
+ CompilerType pointee_clang_type(GetType(pointee_type));
+ uint32_t num_pointee_children = 0;
+ if (pointee_clang_type.IsAggregateType())
+ num_pointee_children =
+ pointee_clang_type.GetNumChildren(omit_empty_base_classes, exe_ctx);
if (num_pointee_children == 0) {
// We have a pointer to a pointee type that claims it has no children. We
// will want to look at
@@ -5223,9 +5227,11 @@
case clang::Type::RValueReference: {
const clang::ReferenceType *reference_type =
llvm::cast<clang::ReferenceType>(qual_type.getTypePtr());
- clang::QualType pointee_type = reference_type->getPointeeType();
- uint32_t num_pointee_children =
- GetType(pointee_type).GetNumChildren(omit_empty_base_classes, exe_ctx);
+ CompilerType pointee_clang_type = GetType(reference_type->getPointeeType());
+ uint32_t num_pointee_children = 0;
+ if (pointee_clang_type.IsAggregateType())
+ num_pointee_children =
+ pointee_clang_type.GetNumChildren(omit_empty_base_classes, exe_ctx);
// If this type points to a simple type, then it has 1 child
if (num_pointee_children == 0)
num_children = 1;
_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits