[safestack] Fix handling of array allocas.
[oota-llvm.git] / test / Transforms / Inline / invoke-cleanup.ll
1 ; RUN: opt %s -inline -S | FileCheck %s
2
3 declare void @external_func()
4
5 @exception_type1 = external global i8
6 @exception_type2 = external global i8
7
8
9 define internal void @inner() personality i8* null {
10   invoke void @external_func()
11       to label %cont unwind label %lpad
12 cont:
13   ret void
14 lpad:
15   %lp = landingpad i32
16       catch i8* @exception_type1
17   resume i32 %lp
18 }
19
20 ; Test that the "cleanup" clause is kept when inlining @inner() into
21 ; this call site (PR17872), otherwise C++ destructors will not be
22 ; called when they should be.
23
24 define void @outer() personality i8* null {
25   invoke void @inner()
26       to label %cont unwind label %lpad
27 cont:
28   ret void
29 lpad:
30   %lp = landingpad i32
31       cleanup
32       catch i8* @exception_type2
33   resume i32 %lp
34 }
35 ; CHECK: define void @outer
36 ; CHECK: landingpad
37 ; CHECK-NEXT: cleanup
38 ; CHECK-NEXT: catch i8* @exception_type1
39 ; CHECK-NEXT: catch i8* @exception_type2