1577fb5b2c15f7c187983a53e53f4f53b5d7aabb1Chad Rosier// RUN: %clang_cc1 -std=c++11 -triple i386-unknown-unknown -fexceptions -fcxx-exceptions %s -emit-llvm -o - | FileCheck %s
2577fb5b2c15f7c187983a53e53f4f53b5d7aabb1Chad Rosier// REQUIRES: asserts
3577fb5b2c15f7c187983a53e53f4f53b5d7aabb1Chad Rosier
4577fb5b2c15f7c187983a53e53f4f53b5d7aabb1Chad Rosierstruct Throws {
5577fb5b2c15f7c187983a53e53f4f53b5d7aabb1Chad Rosier  Throws(int);
6577fb5b2c15f7c187983a53e53f4f53b5d7aabb1Chad Rosier  Throws();
7577fb5b2c15f7c187983a53e53f4f53b5d7aabb1Chad Rosier  ~Throws();
8577fb5b2c15f7c187983a53e53f4f53b5d7aabb1Chad Rosier};
9577fb5b2c15f7c187983a53e53f4f53b5d7aabb1Chad Rosier
1093ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// CHECK-LABEL: define void @_Z7cleanupi
11577fb5b2c15f7c187983a53e53f4f53b5d7aabb1Chad Rosiervoid cleanup(int n) {
12577fb5b2c15f7c187983a53e53f4f53b5d7aabb1Chad Rosier  // CHECK: invoke void @_ZN6ThrowsC1Ei
13577fb5b2c15f7c187983a53e53f4f53b5d7aabb1Chad Rosier  // CHECK-NEXT: to label %{{[^ ]+}} unwind label %[[LPAD:[^ ]+]]
14577fb5b2c15f7c187983a53e53f4f53b5d7aabb1Chad Rosier  // CHECK: invoke void @_ZN6ThrowsC1Ei
15577fb5b2c15f7c187983a53e53f4f53b5d7aabb1Chad Rosier  // CHECK-NEXT: to label %{{[^ ]+}} unwind label %[[LPAD]]
16577fb5b2c15f7c187983a53e53f4f53b5d7aabb1Chad Rosier  // CHECK: invoke void @_ZN6ThrowsC1Ei
17577fb5b2c15f7c187983a53e53f4f53b5d7aabb1Chad Rosier  // CHECK-NEXT: to label %{{[^ ]+}} unwind label %[[LPAD]]
18577fb5b2c15f7c187983a53e53f4f53b5d7aabb1Chad Rosier  // CHECK: invoke void @_ZN6ThrowsC1Ev
19577fb5b2c15f7c187983a53e53f4f53b5d7aabb1Chad Rosier  // CHECK-NEXT: to label %{{[^ ]+}} unwind label %[[LPAD]]
20577fb5b2c15f7c187983a53e53f4f53b5d7aabb1Chad Rosier  new Throws[n] { 1, 2, 3 };
21577fb5b2c15f7c187983a53e53f4f53b5d7aabb1Chad Rosier  // CHECK: [[LPAD]]:
22577fb5b2c15f7c187983a53e53f4f53b5d7aabb1Chad Rosier  // CHECK-NEXT: landingpad
23577fb5b2c15f7c187983a53e53f4f53b5d7aabb1Chad Rosier  // CHECK: call void @_ZN6ThrowsD1Ev
24577fb5b2c15f7c187983a53e53f4f53b5d7aabb1Chad Rosier  // CHECK: call void @_ZdaPv
25577fb5b2c15f7c187983a53e53f4f53b5d7aabb1Chad Rosier}
26577fb5b2c15f7c187983a53e53f4f53b5d7aabb1Chad Rosier
27577fb5b2c15f7c187983a53e53f4f53b5d7aabb1Chad Rosier
2893ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// CHECK-LABEL: define void @_Z7cleanupv
29577fb5b2c15f7c187983a53e53f4f53b5d7aabb1Chad Rosiervoid cleanup() {
30577fb5b2c15f7c187983a53e53f4f53b5d7aabb1Chad Rosier  // CHECK: invoke void @_ZN6ThrowsC1Ei
31577fb5b2c15f7c187983a53e53f4f53b5d7aabb1Chad Rosier  // CHECK-NEXT: to label %{{[^ ]+}} unwind label %[[LPAD2:[^ ]+]]
32577fb5b2c15f7c187983a53e53f4f53b5d7aabb1Chad Rosier  // CHECK: invoke void @_ZN6ThrowsC1Ei
33577fb5b2c15f7c187983a53e53f4f53b5d7aabb1Chad Rosier  // CHECK-NEXT: to label %{{[^ ]+}} unwind label %[[LPAD2]]
34577fb5b2c15f7c187983a53e53f4f53b5d7aabb1Chad Rosier  // CHECK: invoke void @_ZN6ThrowsC1Ei
35577fb5b2c15f7c187983a53e53f4f53b5d7aabb1Chad Rosier  // CHECK-NEXT: to label %{{[^ ]+}} unwind label %[[LPAD2]]
36577fb5b2c15f7c187983a53e53f4f53b5d7aabb1Chad Rosier  new Throws[3] { 1, 2, 3 };
37577fb5b2c15f7c187983a53e53f4f53b5d7aabb1Chad Rosier  // CHECK: [[LPAD2]]:
38577fb5b2c15f7c187983a53e53f4f53b5d7aabb1Chad Rosier  // CHECK-NEXT: landingpad
39577fb5b2c15f7c187983a53e53f4f53b5d7aabb1Chad Rosier  // CHECK: call void @_ZN6ThrowsD1Ev
40577fb5b2c15f7c187983a53e53f4f53b5d7aabb1Chad Rosier  // CHECK: call void @_ZdaPv
41577fb5b2c15f7c187983a53e53f4f53b5d7aabb1Chad Rosier}
42