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