Fix a trivial oversight with apple-kext static local destructors

and add a test case.

llvm-svn: 154653
This commit is contained in:
John McCall 2012-04-13 02:53:27 +00:00
parent f958f348c8
commit 32233a7c1a
2 changed files with 23 additions and 0 deletions

View File

@ -244,6 +244,7 @@ void CodeGenFunction::EmitCXXGlobalDtorRegistration(llvm::Constant *dtor,
if (CGM.getContext().getLangOpts().AppleKext) {
// Generate a global destructor entry.
CGM.AddCXXDtorEntry(dtor, addr);
return;
}
// Otherwise, we just use atexit.

View File

@ -0,0 +1,22 @@
// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fno-use-cxa-atexit -fapple-kext -emit-llvm -o - %s | FileCheck %s
// CHECK: @_ZN5test01aE = global [[A:%.*]] zeroinitializer
// CHECK: @llvm.global_ctors = appending global {{.*}} { i32 65535, void ()* [[CTOR0:@.*]] }
// CHECK: @llvm.global_dtors = appending global {{.*}} { i32 65535, void ()* [[DTOR0:@.*]] }
// rdar://11241230
namespace test0 {
struct A { A(); ~A(); };
A a;
}
// CHECK: define internal void [[CTOR0_:@.*]]()
// CHECK: call void @_ZN5test01AC1Ev([[A]]* @_ZN5test01aE)
// CHECK-NEXT: ret void
// CHECK: define internal void [[CTOR0]]()
// CHECK: call void [[CTOR0_]]()
// CHECK-NEXT: ret void
// CHECK: define internal void [[DTOR0]]()
// CHECK: call void @_ZN5test01AD1Ev([[A]]* @_ZN5test01aE)
// CHECK-NEXT: ret void