threadsafe-statics-exceptions.cpp revision f1549f66a8216a78112286e3978cea2c29d6334c
1// RUN: %clang_cc1 -emit-llvm -o - -fexceptions -triple x86_64-apple-darwin10 %s | FileCheck %s
2
3struct X {
4  X();
5  ~X();
6};
7
8struct Y { };
9
10// CHECK: define void @_Z1fv
11void f() {
12  // CHECK: call i32 @__cxa_guard_acquire(i64* @_ZGVZ1fvE1x)
13  // CHECK: invoke void @_ZN1XC1Ev
14  // CHECK: call void @__cxa_guard_release(i64* @_ZGVZ1fvE1x)
15  // CHECK-NEXT: call i32 @__cxa_atexit
16  // CHECK: br
17  static X x;
18
19  // CHECK: call i8* @__cxa_allocate_exception
20  // CHECK: invoke void @__cxa_throw
21  throw Y();
22
23  // Finally, the landing pad.
24  // CHECK: call i8* @llvm.eh.exception()
25  // CHECK: call i32 (i8*, i8*, ...)* @llvm.eh.selector
26  // CHECK: call void @__cxa_guard_abort(i64* @_ZGVZ1fvE1x)
27  // CHECK: call void @_Unwind_Resume_or_Rethrow
28  // CHECK: unreachable
29}
30