From: David Blaikie Date: Thu, 13 Dec 2012 22:29:06 +0000 (+0000) Subject: Debug Info: Emit vtables pointer members as artificial. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c9a9177e699897a71670ae211fa053240f41460e;p=clang Debug Info: Emit vtables pointer members as artificial. I wasn't sure where to put the test case for this, but this seemed like as good a place as any. I had to reorder the tests here to make them legible while still matching the order of metadata output in the IR file (for some reason making it virtual changed the ordering). Relevant commit to fix up LLVM to actually respect 'artificial' member variables is coming once I write up a test case for it. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@170154 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/CGDebugInfo.cpp b/lib/CodeGen/CGDebugInfo.cpp index f3468f29c1..844514be27 100644 --- a/lib/CodeGen/CGDebugInfo.cpp +++ b/lib/CodeGen/CGDebugInfo.cpp @@ -1199,7 +1199,7 @@ CollectVTableInfo(const CXXRecordDecl *RD, llvm::DIFile Unit, unsigned Size = CGM.getContext().getTypeSize(CGM.getContext().VoidPtrTy); llvm::DIType VPTR = DBuilder.createMemberType(Unit, getVTableName(RD), Unit, - 0, Size, 0, 0, 0, + 0, Size, 0, 0, llvm::DIDescriptor::FlagArtificial, getOrCreateVTablePtrType(Unit)); EltTys.push_back(VPTR); } diff --git a/test/CodeGenCXX/debug-info-class.cpp b/test/CodeGenCXX/debug-info-class.cpp index 062227a023..131693b21a 100644 --- a/test/CodeGenCXX/debug-info-class.cpp +++ b/test/CodeGenCXX/debug-info-class.cpp @@ -8,6 +8,11 @@ void func(bar *f) { // CHECK: DW_TAG_class_type union baz; void func(baz *f) { // CHECK: DW_TAG_union_type } +class B { // CHECK: DW_TAG_class_type +public: + virtual ~B(); +// CHECK: metadata !"_vptr$B", {{.*}}, i32 64, metadata !{{.*}}} ; [ DW_TAG_member ] +}; struct A { // CHECK: DW_TAG_structure_type int one; static const int HdrSize = 52; // CHECK: HdrSize @@ -16,8 +21,8 @@ struct A { // CHECK: DW_TAG_structure_type int x = 1; } }; -class B { // CHECK: DW_TAG_class_type -}; + + int main() { A a; B b;