43 lines · cpp
1// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fno-use-cxa-atexit -fapple-kext -emit-llvm -o - %s | FileCheck %s2 3// CHECK: @_ZN5test01aE ={{.*}} global [[A:%.*]] zeroinitializer4// CHECK: @llvm.global_ctors = appending global {{.*}} { i32 65535, ptr [[CTOR0:@.*]], ptr null }5// CHECK: @llvm.global_dtors = appending global {{.*}} { i32 65535, ptr [[DTOR0:@.*]], ptr null }6 7// Check that the base destructor is marked as always_inline when generating8// code for kext.9 10namespace testBaseDestructor {11#pragma clang optimize off12struct D {13 virtual ~D();14};15 16D::~D() {}17#pragma clang optimize on18}19 20// CHECK: define{{.*}} void @_ZN18testBaseDestructor1DD2Ev({{.*}}) unnamed_addr #[[ATTR0:.*]] align 2 {21 22// CHECK: define{{.*}} void @_ZN18testBaseDestructor1DD1Ev({{.*}}) unnamed_addr #[[ATTR1:.*]] align 2 {23 24// CHECK: define{{.*}} void @_ZN18testBaseDestructor1DD0Ev({{.*}}) unnamed_addr #[[ATTR1]] align 2 {25namespace test0 {26 struct A { A(); ~A(); };27 A a;28}29// CHECK: define internal void [[CTOR0_:@.*]]()30// CHECK: call void @_ZN5test01AC1Ev(ptr {{[^,]*}} @_ZN5test01aE)31// CHECK-NEXT: ret void32 33// CHECK: define internal void [[CTOR0]]()34// CHECK: call void [[CTOR0_]]()35// CHECK-NEXT: ret void36 37// CHECK: define internal void [[DTOR0]]()38// CHECK: call void @_ZN5test01AD1Ev(ptr @_ZN5test01aE)39// CHECK-NEXT: ret void40 41// CHECK: attributes #[[ATTR0]] = { alwaysinline mustprogress nounwind {{.*}} }42// CHECK: attributes #[[ATTR1]] = { mustprogress noinline nounwind {{.*}} }43