1; RUN: opt %s -inline -S | FileCheck %s 2 3declare void @external_func() 4 5@exception_type1 = external global i8 6@exception_type2 = external global i8 7 8 9define internal void @inner() personality i8* null { 10 invoke void @external_func() 11 to label %cont unwind label %lpad 12cont: 13 ret void 14lpad: 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 24define void @outer() personality i8* null { 25 invoke void @inner() 26 to label %cont unwind label %lpad 27cont: 28 ret void 29lpad: 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 40