From 7444639f2739905054ef37f3f100f4bad8810062 Mon Sep 17 00:00:00 2001 From: John McCall Date: Fri, 13 Apr 2012 02:53:27 +0000 Subject: [PATCH] Fix a trivial oversight with apple-kext static local destructors and add a test case. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@154653 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/CGDeclCXX.cpp | 1 + test/CodeGenCXX/apple-kext.cpp | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+) create mode 100644 test/CodeGenCXX/apple-kext.cpp diff --git a/lib/CodeGen/CGDeclCXX.cpp b/lib/CodeGen/CGDeclCXX.cpp index 99d50312b5..10f0b83e40 100644 --- a/lib/CodeGen/CGDeclCXX.cpp +++ b/lib/CodeGen/CGDeclCXX.cpp @@ -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. diff --git a/test/CodeGenCXX/apple-kext.cpp b/test/CodeGenCXX/apple-kext.cpp new file mode 100644 index 0000000000..03506a8aac --- /dev/null +++ b/test/CodeGenCXX/apple-kext.cpp @@ -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 -- 2.40.0