This patch fixes the distructor test when checking for vtordisp requirements in
microsoft record layout. A test case is also included.
Addresses:
http://llvm.org/bugs/show_bug.cgi?id=16406#c7
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@192616
91177308-0d34-0410-b5e6-
96231b3b80d8
for (CXXRecordDecl::method_iterator i = RD->method_begin(),
e = RD->method_end();
i != e; ++i)
- if ((*i)->isVirtual() && (*i) != RD->getDestructor())
+ if ((*i)->isVirtual() && !isa<CXXDestructorDecl>(*i))
Work.insert(*i);
while (!Work.empty()) {
const CXXMethodDecl *MD = *Work.begin();
// CHECK: | [sizeof=96, align=32
// CHECK: | nvsize=12, nvalign=4]
+struct AT {\r
+ virtual ~AT(){}\r
+};\r
+struct CT : virtual AT {\r
+ virtual ~CT();\r
+};\r
+CT::~CT(){}
+
+// CHECK: *** Dumping AST Record Layout\r
+// CHECK: 0 | struct CT\r
+// CHECK: 0 | (CT vbtable pointer)\r
+// CHECK: 4 | struct AT (virtual base)\r
+// CHECK: 4 | (AT vftable pointer)\r
+// CHECK: | [sizeof=8, align=4\r
+// CHECK: | nvsize=4, nvalign=4]\r
+
int a[
sizeof(A)+
sizeof(C)+
-sizeof(D)];
+sizeof(D)+
+sizeof(CT)];