66 lines · plain
1; RUN: opt < %s -wasm-lower-em-ehsjlj -enable-emscripten-cxx-exceptions -emscripten-cxx-exceptions-allowed=do_catch -S | FileCheck %s2 3target datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128"4target triple = "wasm32-unknown-unknown"5 6define void @dont_catch() personality ptr @__gxx_personality_v0 {7; CHECK-LABEL: @dont_catch(8entry:9 invoke void @foo()10 to label %invoke.cont unwind label %lpad11; CHECK: entry:12; CHECK-NEXT: call void @foo()13; CHECK-NEXT: br label %invoke.cont14 15invoke.cont: ; preds = %entry16 br label %try.cont17 18lpad: ; preds = %entry19 %0 = landingpad { ptr, i32 }20 catch ptr null21 %1 = extractvalue { ptr, i32 } %0, 022 %2 = extractvalue { ptr, i32 } %0, 123 br label %catch24 25catch: ; preds = %lpad26 %3 = call ptr @__cxa_begin_catch(ptr %1)27 call void @__cxa_end_catch()28 br label %try.cont29 30try.cont: ; preds = %catch, %invoke.cont31 ret void32}33 34define void @do_catch() personality ptr @__gxx_personality_v0 {35; CHECK-LABEL: @do_catch(36entry:37 invoke void @foo()38 to label %invoke.cont unwind label %lpad39; CHECK: entry:40; CHECK-NEXT: store i32 0, ptr41; CHECK-NEXT: call cc{{.*}} void @__invoke_void(ptr @foo)42 43invoke.cont: ; preds = %entry44 br label %try.cont45 46lpad: ; preds = %entry47 %0 = landingpad { ptr, i32 }48 catch ptr null49 %1 = extractvalue { ptr, i32 } %0, 050 %2 = extractvalue { ptr, i32 } %0, 151 br label %catch52 53catch: ; preds = %lpad54 %3 = call ptr @__cxa_begin_catch(ptr %1)55 call void @__cxa_end_catch()56 br label %try.cont57 58try.cont: ; preds = %catch, %invoke.cont59 ret void60}61 62declare void @foo()63declare i32 @__gxx_personality_v0(...)64declare ptr @__cxa_begin_catch(ptr)65declare void @__cxa_end_catch()66