131 lines · plain
1# RUN: llvm-mc -triple=wasm32-unknown-unknown -mattr=+exception-handling < %s | FileCheck %s2 3# Tests if block/loop/try/catch/end/branch/rethrow instructions are correctly4# printed with their annotations.5 6 .text7 .section .text.test_annotation,"",@8 .type test_annotation,@function9test_annotation:10 .functype test_annotation (exnref) -> ()11 .tagtype __cpp_exception i3212 .tagtype __c_longjmp i3213 try14 br 015 catch __cpp_exception16 drop17 block18 i32.const 019 br_if 020 loop21 i32.const 022 br_if 123 end_loop24 end_block25 try26 rethrow 027 catch __cpp_exception28 drop29 catch_all30 block31 try32 br 033 try34 delegate 135 catch_all36 end_try37 end_block38 rethrow 039 end_try40 end_try41 42 block exnref43 block44 block () -> (i32, exnref)45 block i3246 try_table (catch __cpp_exception 0) (catch_ref __c_longjmp 1) (catch_all 2) (catch_all_ref 3)47 end_try_table48 return49 end_block50 return51 end_block52 return53 end_block54 return55 end_block56 drop57 58 i32.const 059 loop (i32) -> ()60 local.get 061 loop (exnref) -> ()62 try_table (catch __cpp_exception 1) (catch_all_ref 0)63 end_try_table64 drop65 end_loop66 drop67 end_loop68 end_function69 70# CHECK: test_annotation:71# CHECK: try72# CHECK-NEXT: br 0 # 0: down to label073# CHECK-NEXT: catch __cpp_exception # catch0:74# CHECK-NEXT: drop75# CHECK-NEXT: block76# CHECK-NEXT: i32.const 077# CHECK-NEXT: br_if 0 # 0: down to label178# CHECK-NEXT: loop # label2:79# CHECK-NEXT: i32.const 080# CHECK-NEXT: br_if 1 # 1: down to label181# CHECK-NEXT: end_loop82# CHECK-NEXT: end_block # label1:83# CHECK-NEXT: try84# CHECK-NEXT: rethrow 0 # down to catch385# CHECK-NEXT: catch __cpp_exception # catch3:86# CHECK-NEXT: drop87# CHECK-NEXT: catch_all{{$}}88# CHECK-NEXT: block89# CHECK-NEXT: try90# CHECK-NEXT: br 0 # 0: down to label591# CHECK-NEXT: try92# CHECK-NEXT: delegate 1 # label/catch6: down to catch493# CHECK-NEXT: catch_all # catch5:94# CHECK-NEXT: end_try # label5:95# CHECK-NEXT: end_block # label4:96# CHECK-NEXT: rethrow 0 # to caller97# CHECK-NEXT: end_try # label3:98# CHECK-NEXT: end_try # label0:99 100# CHECK: block exnref101# CHECK-NEXT: block102# CHECK-NEXT: block () -> (i32, exnref)103# CHECK-NEXT: block i32104# CHECK-NEXT: try_table (catch __cpp_exception 0) (catch_ref __c_longjmp 1) (catch_all 2) (catch_all_ref 3) # 0: down to label10105# CHECK-NEXT: # 1: down to label9106# CHECK-NEXT: # 2: down to label8107# CHECK-NEXT: # 3: down to label7108# CHECK-NEXT: end_try_table # label11:109# CHECK-NEXT: return110# CHECK-NEXT: end_block # label10:111# CHECK-NEXT: return112# CHECK-NEXT: end_block # label9:113# CHECK-NEXT: return114# CHECK-NEXT: end_block # label8:115# CHECK-NEXT: return116# CHECK-NEXT: end_block # label7:117# CHECK-NEXT: drop118 119# CHECK: i32.const 0120# CHECK-NEXT: loop (i32) -> () # label12:121# CHECK-NEXT: local.get 0122# CHECK-NEXT: loop (exnref) -> () # label13:123# CHECK-NEXT: try_table (catch __cpp_exception 1) (catch_all_ref 0) # 1: up to label12124# CHECK-NEXT: # 0: up to label13125# CHECK-NEXT: end_try_table # label14:126# CHECK-NEXT: drop127# CHECK-NEXT: end_loop128# CHECK-NEXT: drop129# CHECK-NEXT: end_loop130# CHECK-NEXT: end_function131