diff --git a/lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp b/lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp index fe0c53a7e9a3e..a23dce97f3f29 100644 --- a/lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp +++ b/lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp @@ -2771,6 +2771,9 @@ static bool GetCompleteQualType(clang::ASTContext *ast, ast, llvm::cast(qual_type)->getModifiedType(), allow_completion); + case clang::Type::MemberPointer: + return !qual_type.getTypePtr()->isIncompleteType(); + default: break; } diff --git a/lldb/test/Shell/SymbolFile/DWARF/x86/member-pointers.cpp b/lldb/test/Shell/SymbolFile/DWARF/x86/member-pointers.cpp new file mode 100644 index 0000000000000..817833d4fa751 --- /dev/null +++ b/lldb/test/Shell/SymbolFile/DWARF/x86/member-pointers.cpp @@ -0,0 +1,24 @@ +// REQUIRES: lld + +// Itanium ABI: +// RUN: %clang --target=x86_64-pc-linux -gdwarf -c -o %t_linux.o %s +// RUN: %lldb -f %t_linux.o -b -o "target variable mp" | FileCheck %s +// +// CHECK: (char SI::*) mp = 0x0000000000000000 + +// Microsoft ABI: +// RUN: %clang_cl --target=x86_64-windows-msvc -c -gdwarf %s -o %t_win.obj +// RUN: lld-link /out:%t_win.exe %t_win.obj /nodefaultlib /entry:main /debug +// RUN: %lldb -f %t_win.exe -b -o "target variable mp" | FileCheck --check-prefix=CHECK-MSVC %s +// +// DWARF has no representation of MSInheritanceAttr, so we cannot determine the size +// of member-pointers yet. For the moment, make sure we don't crash on such variables. +// CHECK-MSVC: error: Unable to determine byte size. + +struct SI { + char si; +}; + +char SI::*mp = &SI::si; + +int main() { return 0; }