]> granicus.if.org Git - clang/commitdiff
Debug Info: Emit vtables pointer members as artificial.
authorDavid Blaikie <dblaikie@gmail.com>
Thu, 13 Dec 2012 22:29:06 +0000 (22:29 +0000)
committerDavid Blaikie <dblaikie@gmail.com>
Thu, 13 Dec 2012 22:29:06 +0000 (22:29 +0000)
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

lib/CodeGen/CGDebugInfo.cpp
test/CodeGenCXX/debug-info-class.cpp

index f3468f29c1b370afe32f7961f4620434ccdecfac..844514be27c878410175e9b9b122db59be39ec50 100644 (file)
@@ -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);
 }
index 062227a02382faf02883a54a09cc92c695df3e61..131693b21a57e6dba23d4eb65587ee2e7a008830 100644 (file)
@@ -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;