diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp b/lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp --- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp +++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp @@ -1357,7 +1357,7 @@ dwarf->ResolveTypeUID(attrs.containing_type.Reference(), true); CompilerType pointee_clang_type = pointee_type->GetForwardCompilerType(); - CompilerType class_clang_type = class_type->GetLayoutCompilerType(); + CompilerType class_clang_type = class_type->GetForwardCompilerType(); CompilerType clang_type = TypeSystemClang::CreateMemberPointerType( class_clang_type, pointee_clang_type); diff --git a/lldb/test/API/functionalities/lazy-loading/TestLazyLoading.py b/lldb/test/API/functionalities/lazy-loading/TestLazyLoading.py --- a/lldb/test/API/functionalities/lazy-loading/TestLazyLoading.py +++ b/lldb/test/API/functionalities/lazy-loading/TestLazyLoading.py @@ -41,6 +41,7 @@ class_we_enter_decl = [class_decl_kind, "ClassWeEnter"] class_member_decl = [struct_decl_kind, "ClassMember"] class_static_member_decl = [struct_decl_kind, "StaticClassMember"] + class_pointer_to_member_decl = [struct_decl_kind, "PointerToMember"] unused_class_member_decl = [struct_decl_kind, "UnusedClassMember"] unused_class_member_ptr_decl = [struct_decl_kind, "UnusedClassMemberPtr"] @@ -58,6 +59,7 @@ self.assert_decl_not_loaded(self.class_in_namespace_decl) self.assert_decl_not_loaded(self.class_member_decl) self.assert_decl_not_loaded(self.class_static_member_decl) + self.assert_decl_not_loaded(self.class_pointer_to_member_decl) self.assert_decl_not_loaded(self.unused_class_member_decl) def get_ast_dump(self): @@ -232,6 +234,8 @@ self.assert_decl_loaded(self.class_member_decl) # We didn't load the type of the unused static member. self.assert_decl_not_completed(self.class_static_member_decl) + # We didn't load the type of the unused pointer-to-member member. + self.assert_decl_not_completed(self.class_pointer_to_member_decl) # This should not have loaded anything else. self.assert_decl_not_loaded(self.other_struct_decl) diff --git a/lldb/test/API/functionalities/lazy-loading/main.cpp b/lldb/test/API/functionalities/lazy-loading/main.cpp --- a/lldb/test/API/functionalities/lazy-loading/main.cpp +++ b/lldb/test/API/functionalities/lazy-loading/main.cpp @@ -26,6 +26,9 @@ struct StaticClassMember { int i; }; struct UnusedClassMember { int i; }; struct UnusedClassMemberPtr { int i; }; +struct PointerToMember { + int i; +}; namespace NS { class ClassInNamespace { @@ -36,6 +39,7 @@ int dummy; // Prevent bug where LLDB always completes first member. ClassMember member; static StaticClassMember static_member; + int(PointerToMember::*ptr_to_member); UnusedClassMember unused_member; UnusedClassMemberPtr *unused_member_ptr; int enteredFunction() {