]> granicus.if.org Git - clang/commitdiff
Fix for PR5594: use EmitGlobalDefinition instead of EmitCXXDestructor so that
authorEli Friedman <eli.friedman@gmail.com>
Fri, 27 Nov 2009 01:42:12 +0000 (01:42 +0000)
committerEli Friedman <eli.friedman@gmail.com>
Fri, 27 Nov 2009 01:42:12 +0000 (01:42 +0000)
we check whether the vtable needs to be generated.

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

lib/CodeGen/CGCXX.cpp
test/CodeGenCXX/virt-dtor-key.cpp [new file with mode: 0644]

index a51845a52beb956ae3d706fcbb352a0ccf81b878..a848b1269b9cb051f85f939398f9790fbe491e48 100644 (file)
@@ -793,9 +793,9 @@ const char *CodeGenModule::getMangledCXXCtorName(const CXXConstructorDecl *D,
 
 void CodeGenModule::EmitCXXDestructors(const CXXDestructorDecl *D) {
   if (D->isVirtual())
-    EmitCXXDestructor(D, Dtor_Deleting);
-  EmitCXXDestructor(D, Dtor_Complete);
-  EmitCXXDestructor(D, Dtor_Base);
+    EmitGlobalDefinition(GlobalDecl(D, Dtor_Deleting));
+  EmitGlobalDefinition(GlobalDecl(D, Dtor_Complete));
+  EmitGlobalDefinition(GlobalDecl(D, Dtor_Base));
 }
 
 void CodeGenModule::EmitCXXDestructor(const CXXDestructorDecl *D,
diff --git a/test/CodeGenCXX/virt-dtor-key.cpp b/test/CodeGenCXX/virt-dtor-key.cpp
new file mode 100644 (file)
index 0000000..30f3563
--- /dev/null
@@ -0,0 +1,9 @@
+// RUN: clang-cc -emit-llvm %s -o - | FileCheck %s
+// CHECK: @_ZTI3foo = linkonce_odr constant
+class foo {
+   foo();
+   virtual ~foo();
+};
+
+foo::~foo() {
+}