]> granicus.if.org Git - clang/commitdiff
Fix PR6562. If a type is dependent, we don't know if it will have implicit
authorRafael Espindola <rafael.espindola@gmail.com>
Sat, 13 Mar 2010 18:12:56 +0000 (18:12 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Sat, 13 Mar 2010 18:12:56 +0000 (18:12 +0000)
destructors.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@98440 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Sema/SemaDeclCXX.cpp
test/SemaCXX/PR6562.cpp [new file with mode: 0644]

index 7693e144ba2e759a66d197456587b1e7fcb96bd7..db81e48f1da5536c38e97459d3ef3457449a021b 100644 (file)
@@ -1658,6 +1658,11 @@ Sema::SetBaseOrMemberInitializers(CXXConstructorDecl *Constructor,
         continue;
       CXXRecordDecl *BaseClassDecl =
           cast<CXXRecordDecl>(RT->getDecl());
+
+      // We don't know if a dependent type will have an implicit destructor.
+      if (BaseClassDecl->isDependentType())
+        continue;
+
       if (BaseClassDecl->hasTrivialDestructor())
         continue;
       CXXDestructorDecl *DD = BaseClassDecl->getDestructor(Context);
diff --git a/test/SemaCXX/PR6562.cpp b/test/SemaCXX/PR6562.cpp
new file mode 100644 (file)
index 0000000..854d9b0
--- /dev/null
@@ -0,0 +1,10 @@
+// RUN: %clang_cc1 -fsyntax-only -verify %s
+
+struct X { ~X(); };
+template <typename T>
+struct A {
+  struct B { X x; };
+  struct C : public B {
+    C() : B() { }
+  };
+};