diff --git a/src/wasm-binary.h b/src/wasm-binary.h index 811524d2d28..99305acb22e 100644 --- a/src/wasm-binary.h +++ b/src/wasm-binary.h @@ -1026,7 +1026,7 @@ enum ASTNodes { Try = 0x06, Catch = 0x07, - CatchAll = 0x05, + CatchAll = 0x19, Delegate = 0x18, Throw = 0x08, Rethrow = 0x09, @@ -1617,4 +1617,4 @@ class WasmBinaryBuilder { #undef DEBUG_TYPE -#endif // wasm_wasm_binary_h \ No newline at end of file +#endif // wasm_wasm_binary_h diff --git a/src/wasm/wasm-binary.cpp b/src/wasm/wasm-binary.cpp index b843aad0363..dc0b1ab21ad 100644 --- a/src/wasm/wasm-binary.cpp +++ b/src/wasm/wasm-binary.cpp @@ -2967,16 +2967,13 @@ BinaryConsts::ASTNodes WasmBinaryBuilder::readExpression(Expression*& curr) { } break; case BinaryConsts::Else: - case BinaryConsts::Catch: { + case BinaryConsts::Catch: + case BinaryConsts::CatchAll: { curr = nullptr; if (DWARF && currFunction) { assert(!controlFlowStack.empty()); auto currControlFlow = controlFlowStack.back(); BinaryLocation delimiterId; - // Else and CatchAll have the same binary ID, so differentiate them - // using the control flow stack. - static_assert(BinaryConsts::CatchAll == BinaryConsts::Else, - "Else and CatchAll should have identical codes"); if (currControlFlow->is()) { delimiterId = BinaryLocations::Else; } else { diff --git a/test/passes/dwarf_with_exceptions.bin.txt b/test/passes/dwarf_with_exceptions.bin.txt index 9b853e17911..9e8ed37d54e 100644 --- a/test/passes/dwarf_with_exceptions.bin.txt +++ b/test/passes/dwarf_with_exceptions.bin.txt @@ -2,30 +2,29 @@ (type $none_=>_none (func)) (type $i32_=>_none (func (param i32))) (type $i32_=>_i32 (func (param i32) (result i32))) - (import "env" "foo" (func $foo)) + (import "env" "_Z3foov" (func $foo\28\29)) (import "env" "__cxa_begin_catch" (func $__cxa_begin_catch (param i32) (result i32))) (import "env" "__cxa_end_catch" (func $__cxa_end_catch)) (import "env" "_ZSt9terminatev" (func $std::terminate\28\29)) (memory $0 2) - (table $0 1 1 funcref) - (global $global$0 (mut i32) (i32.const 66560)) + (global $__stack_pointer (mut i32) (i32.const 66560)) (event $event$0 (attr 0) (param i32)) (export "memory" (memory $0)) (func $__wasm_call_ctors ) - (func $test_debuginfo + (func $dwarf_with_exceptions\28\29 (local $0 i32) (local $1 i32) ;; code offset: 0xe (local.set $0 ;; code offset: 0x8 - (global.get $global$0) + (global.get $__stack_pointer) ) ;; code offset: 0x10 (try $label$9 (do ;; code offset: 0x12 - (call $foo) + (call $foo\28\29) ) ;; code offset: 0x18 (catch $event$0 @@ -34,7 +33,7 @@ (pop i32) ) ;; code offset: 0x22 - (global.set $global$0 + (global.set $__stack_pointer ;; code offset: 0x20 (local.get $0) ) @@ -50,9 +49,9 @@ (try $label$8 (do ;; code offset: 0x33 - (call $foo) + (call $foo\28\29) ;; code offset: 0x3b - (global.set $global$0 + (global.set $__stack_pointer ;; code offset: 0x39 (local.get $0) ) @@ -72,7 +71,7 @@ (pop i32) ) ;; code offset: 0x54 - (global.set $global$0 + (global.set $__stack_pointer ;; code offset: 0x52 (local.get $0) ) @@ -117,18 +116,18 @@ ) ;; custom section ".debug_info", size 63 ;; custom section ".debug_abbrev", size 41 - ;; custom section ".debug_line", size 92 - ;; custom section ".debug_str", size 194 - ;; custom section "producers", size 137 - ;; features section: exception-handling, reference-types + ;; custom section ".debug_line", size 109 + ;; custom section ".debug_str", size 178 + ;; custom section "producers", size 134 + ;; features section: exception-handling ) DWARF debug info ================ Contains section .debug_info (63 bytes) Contains section .debug_abbrev (41 bytes) -Contains section .debug_line (92 bytes) -Contains section .debug_str (194 bytes) +Contains section .debug_line (109 bytes) +Contains section .debug_str (178 bytes) .debug_abbrev contents: Abbrev table for offset: 0x00000000 @@ -156,11 +155,11 @@ Abbrev table for offset: 0x00000000 0x00000000: Compile Unit: length = 0x0000003b version = 0x0004 abbr_offset = 0x0000 addr_size = 0x04 (next unit at 0x0000003f) 0x0000000b: DW_TAG_compile_unit [1] * - DW_AT_producer [DW_FORM_strp] ( .debug_str[0x00000000] = "clang version 12.0.0 (https://github.com/aheejin/llvm-project e74a5010a507b737fcbd40e87cde358f2c9fc812)") + DW_AT_producer [DW_FORM_strp] ( .debug_str[0x00000000] = "clang version 13.0.0 (https://github.com/llvm/llvm-project 3c4c205060c9398da705eb71b63ddd8a04999de9)") DW_AT_language [DW_FORM_data2] (DW_LANG_C_plus_plus_14) - DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000068] = "test.cpp") + DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000065] = "dwarf_with_exceptions.cpp") DW_AT_stmt_list [DW_FORM_sec_offset] (0x00000000) - DW_AT_comp_dir [DW_FORM_strp] ( .debug_str[0x00000071] = "/usr/local/google/home/aheejin/llvm-git/llvm/tw") + DW_AT_comp_dir [DW_FORM_strp] ( .debug_str[0x0000007f] = "/") DW_AT_low_pc [DW_FORM_addr] (0x0000000000000005) DW_AT_high_pc [DW_FORM_data4] (0x00000072) @@ -168,9 +167,9 @@ Abbrev table for offset: 0x00000000 DW_AT_low_pc [DW_FORM_addr] (0x0000000000000005) DW_AT_high_pc [DW_FORM_data4] (0x00000072) DW_AT_frame_base [DW_FORM_exprloc] (DW_OP_WASM_location 0x0 +0, DW_OP_stack_value) - DW_AT_linkage_name [DW_FORM_strp] ( .debug_str[0x000000a1] = "test_debuginfo") - DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000b0] = "test_terminatepad") - DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/aheejin/llvm-git/llvm/tw/test.cpp") + DW_AT_linkage_name [DW_FORM_strp] ( .debug_str[0x00000081] = "_Z21dwarf_with_exceptionsv") + DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000009c] = "dwarf_with_exceptions") + DW_AT_decl_file [DW_FORM_data1] ("/dwarf_with_exceptions.cpp") DW_AT_decl_line [DW_FORM_data1] (2) DW_AT_external [DW_FORM_flag_present] (true) @@ -179,9 +178,9 @@ Abbrev table for offset: 0x00000000 .debug_line contents: debug_line[0x00000000] Line table prologue: - total_length: 0x00000058 + total_length: 0x00000069 version: 4 - prologue_length: 0x00000020 + prologue_length: 0x00000031 min_inst_length: 1 max_ops_per_inst: 1 default_is_stmt: 1 @@ -201,82 +200,82 @@ standard_opcode_lengths[DW_LNS_set_prologue_end] = 0 standard_opcode_lengths[DW_LNS_set_epilogue_begin] = 0 standard_opcode_lengths[DW_LNS_set_isa] = 1 file_names[ 1]: - name: "test.cpp" + name: "dwarf_with_exceptions.cpp" dir_index: 0 mod_time: 0x00000000 length: 0x00000000 -0x0000002a: 00 DW_LNE_set_address (0x0000000000000005) -0x00000031: 13 address += 0, line += 1 +0x0000003b: 00 DW_LNE_set_address (0x0000000000000005) +0x00000042: 13 address += 0, line += 1 0x0000000000000005 2 0 1 0 0 is_stmt -0x00000032: 05 DW_LNS_set_column (5) -0x00000034: 0a DW_LNS_set_prologue_end -0x00000035: ae address += 11, line += 2 +0x00000043: 05 DW_LNS_set_column (5) +0x00000045: 0a DW_LNS_set_prologue_end +0x00000046: ae address += 11, line += 2 0x0000000000000010 4 5 1 0 0 is_stmt prologue_end -0x00000036: 05 DW_LNS_set_column (3) -0x00000038: 83 address += 8, line += 1 +0x00000047: 05 DW_LNS_set_column (3) +0x00000049: 83 address += 8, line += 1 0x0000000000000018 5 3 1 0 0 is_stmt -0x00000039: 05 DW_LNS_set_column (5) -0x0000003b: 08 DW_LNS_const_add_pc (0x0000000000000011) -0x0000003c: 83 address += 8, line += 1 +0x0000004a: 05 DW_LNS_set_column (5) +0x0000004c: 08 DW_LNS_const_add_pc (0x0000000000000011) +0x0000004d: 83 address += 8, line += 1 0x0000000000000031 6 5 1 0 0 is_stmt -0x0000003d: 06 DW_LNS_negate_stmt -0x0000003e: 03 DW_LNS_advance_line (0) -0x00000040: 82 address += 8, line += 0 +0x0000004e: 06 DW_LNS_negate_stmt +0x0000004f: 03 DW_LNS_advance_line (0) +0x00000051: 82 address += 8, line += 0 0x0000000000000039 0 5 1 0 0 -0x00000041: 05 DW_LNS_set_column (3) -0x00000043: 06 DW_LNS_negate_stmt -0x00000044: 89 address += 8, line += 7 +0x00000052: 05 DW_LNS_set_column (3) +0x00000054: 06 DW_LNS_negate_stmt +0x00000055: 89 address += 8, line += 7 0x0000000000000041 7 3 1 0 0 is_stmt -0x00000045: 06 DW_LNS_negate_stmt -0x00000046: 03 DW_LNS_advance_line (0) -0x00000048: 02 DW_LNS_advance_pc (42) -0x0000004a: 01 DW_LNS_copy +0x00000056: 06 DW_LNS_negate_stmt +0x00000057: 03 DW_LNS_advance_line (0) +0x00000059: 02 DW_LNS_advance_pc (42) +0x0000005b: 01 DW_LNS_copy 0x000000000000006b 0 3 1 0 0 -0x0000004b: 27 address += 1, line += 7 +0x0000005c: 27 address += 1, line += 7 0x000000000000006c 7 3 1 0 0 -0x0000004c: 03 DW_LNS_advance_line (0) -0x0000004e: 2e address += 2, line += 0 +0x0000005d: 03 DW_LNS_advance_line (0) +0x0000005f: 2e address += 2, line += 0 0x000000000000006e 0 3 1 0 0 -0x0000004f: 27 address += 1, line += 7 +0x00000060: 27 address += 1, line += 7 0x000000000000006f 7 3 1 0 0 -0x00000050: 03 DW_LNS_advance_line (0) -0x00000052: 66 address += 6, line += 0 +0x00000061: 03 DW_LNS_advance_line (0) +0x00000063: 66 address += 6, line += 0 0x0000000000000075 0 3 1 0 0 -0x00000053: 05 DW_LNS_set_column (1) -0x00000055: 06 DW_LNS_negate_stmt -0x00000056: 28 address += 1, line += 8 +0x00000064: 05 DW_LNS_set_column (1) +0x00000066: 06 DW_LNS_negate_stmt +0x00000067: 28 address += 1, line += 8 0x0000000000000076 8 1 1 0 0 is_stmt -0x00000057: 02 DW_LNS_advance_pc (1) -0x00000059: 00 DW_LNE_end_sequence +0x00000068: 02 DW_LNS_advance_pc (1) +0x0000006a: 00 DW_LNE_end_sequence 0x0000000000000077 8 1 1 0 0 is_stmt end_sequence .debug_str contents: -0x00000000: "clang version 12.0.0 (https://github.com/aheejin/llvm-project e74a5010a507b737fcbd40e87cde358f2c9fc812)" -0x00000068: "test.cpp" -0x00000071: "/usr/local/google/home/aheejin/llvm-git/llvm/tw" -0x000000a1: "test_debuginfo" -0x000000b0: "test_terminatepad" +0x00000000: "clang version 13.0.0 (https://github.com/llvm/llvm-project 3c4c205060c9398da705eb71b63ddd8a04999de9)" +0x00000065: "dwarf_with_exceptions.cpp" +0x0000007f: "/" +0x00000081: "_Z21dwarf_with_exceptionsv" +0x0000009c: "dwarf_with_exceptions" DWARF debug info ================ Contains section .debug_info (63 bytes) Contains section .debug_abbrev (41 bytes) -Contains section .debug_line (145 bytes) -Contains section .debug_str (194 bytes) +Contains section .debug_line (162 bytes) +Contains section .debug_str (178 bytes) .debug_abbrev contents: Abbrev table for offset: 0x00000000 @@ -304,11 +303,11 @@ Abbrev table for offset: 0x00000000 0x00000000: Compile Unit: length = 0x0000003b version = 0x0004 abbr_offset = 0x0000 addr_size = 0x04 (next unit at 0x0000003f) 0x0000000b: DW_TAG_compile_unit [1] * - DW_AT_producer [DW_FORM_strp] ( .debug_str[0x00000000] = "clang version 12.0.0 (https://github.com/aheejin/llvm-project e74a5010a507b737fcbd40e87cde358f2c9fc812)") + DW_AT_producer [DW_FORM_strp] ( .debug_str[0x00000000] = "clang version 13.0.0 (https://github.com/llvm/llvm-project 3c4c205060c9398da705eb71b63ddd8a04999de9)") DW_AT_language [DW_FORM_data2] (DW_LANG_C_plus_plus_14) - DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000068] = "test.cpp") + DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000065] = "dwarf_with_exceptions.cpp") DW_AT_stmt_list [DW_FORM_sec_offset] (0x00000000) - DW_AT_comp_dir [DW_FORM_strp] ( .debug_str[0x00000071] = "/usr/local/google/home/aheejin/llvm-git/llvm/tw") + DW_AT_comp_dir [DW_FORM_strp] ( .debug_str[0x0000007f] = "/") DW_AT_low_pc [DW_FORM_addr] (0x0000000000000005) DW_AT_high_pc [DW_FORM_data4] (0x00000040) @@ -316,9 +315,9 @@ Abbrev table for offset: 0x00000000 DW_AT_low_pc [DW_FORM_addr] (0x0000000000000005) DW_AT_high_pc [DW_FORM_data4] (0x00000040) DW_AT_frame_base [DW_FORM_exprloc] (DW_OP_WASM_location 0x0 +0, DW_OP_stack_value) - DW_AT_linkage_name [DW_FORM_strp] ( .debug_str[0x000000a1] = "test_debuginfo") - DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000b0] = "test_terminatepad") - DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/aheejin/llvm-git/llvm/tw/test.cpp") + DW_AT_linkage_name [DW_FORM_strp] ( .debug_str[0x00000081] = "_Z21dwarf_with_exceptionsv") + DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000009c] = "dwarf_with_exceptions") + DW_AT_decl_file [DW_FORM_data1] ("/dwarf_with_exceptions.cpp") DW_AT_decl_line [DW_FORM_data1] (2) DW_AT_external [DW_FORM_flag_present] (true) @@ -327,9 +326,9 @@ Abbrev table for offset: 0x00000000 .debug_line contents: debug_line[0x00000000] Line table prologue: - total_length: 0x0000008d + total_length: 0x0000009e version: 4 - prologue_length: 0x00000020 + prologue_length: 0x00000031 min_inst_length: 1 max_ops_per_inst: 1 default_is_stmt: 1 @@ -349,105 +348,104 @@ standard_opcode_lengths[DW_LNS_set_prologue_end] = 0 standard_opcode_lengths[DW_LNS_set_epilogue_begin] = 0 standard_opcode_lengths[DW_LNS_set_isa] = 1 file_names[ 1]: - name: "test.cpp" + name: "dwarf_with_exceptions.cpp" dir_index: 0 mod_time: 0x00000000 length: 0x00000000 -0x0000002a: 00 DW_LNE_set_address (0x0000000000000005) -0x00000031: 03 DW_LNS_advance_line (2) -0x00000033: 01 DW_LNS_copy +0x0000003b: 00 DW_LNE_set_address (0x0000000000000005) +0x00000042: 03 DW_LNS_advance_line (2) +0x00000044: 01 DW_LNS_copy 0x0000000000000005 2 0 1 0 0 is_stmt -0x00000034: 00 DW_LNE_set_address (0x000000000000000e) -0x0000003b: 03 DW_LNS_advance_line (4) -0x0000003d: 05 DW_LNS_set_column (5) -0x0000003f: 0a DW_LNS_set_prologue_end -0x00000040: 01 DW_LNS_copy +0x00000045: 00 DW_LNE_set_address (0x000000000000000e) +0x0000004c: 03 DW_LNS_advance_line (4) +0x0000004e: 05 DW_LNS_set_column (5) +0x00000050: 0a DW_LNS_set_prologue_end +0x00000051: 01 DW_LNS_copy 0x000000000000000e 4 5 1 0 0 is_stmt prologue_end -0x00000041: 00 DW_LNE_set_address (0x0000000000000012) -0x00000048: 03 DW_LNS_advance_line (5) -0x0000004a: 05 DW_LNS_set_column (3) -0x0000004c: 01 DW_LNS_copy +0x00000052: 00 DW_LNE_set_address (0x0000000000000012) +0x00000059: 03 DW_LNS_advance_line (5) +0x0000005b: 05 DW_LNS_set_column (3) +0x0000005d: 01 DW_LNS_copy 0x0000000000000012 5 3 1 0 0 is_stmt -0x0000004d: 00 DW_LNE_set_address (0x000000000000001f) -0x00000054: 03 DW_LNS_advance_line (6) -0x00000056: 05 DW_LNS_set_column (5) -0x00000058: 01 DW_LNS_copy +0x0000005e: 00 DW_LNE_set_address (0x000000000000001f) +0x00000065: 03 DW_LNS_advance_line (6) +0x00000067: 05 DW_LNS_set_column (5) +0x00000069: 01 DW_LNS_copy 0x000000000000001f 6 5 1 0 0 is_stmt -0x00000059: 00 DW_LNE_set_address (0x000000000000003e) -0x00000060: 03 DW_LNS_advance_line (7) -0x00000062: 05 DW_LNS_set_column (3) -0x00000064: 06 DW_LNS_negate_stmt -0x00000065: 01 DW_LNS_copy +0x0000006a: 00 DW_LNE_set_address (0x000000000000003e) +0x00000071: 03 DW_LNS_advance_line (7) +0x00000073: 05 DW_LNS_set_column (3) +0x00000075: 06 DW_LNS_negate_stmt +0x00000076: 01 DW_LNS_copy 0x000000000000003e 7 3 1 0 0 -0x00000066: 00 DW_LNE_set_address (0x0000000000000041) -0x0000006d: 01 DW_LNS_copy +0x00000077: 00 DW_LNE_set_address (0x0000000000000041) +0x0000007e: 01 DW_LNS_copy 0x0000000000000041 7 3 1 0 0 -0x0000006e: 00 DW_LNE_set_address (0x0000000000000044) -0x00000075: 03 DW_LNS_advance_line (8) -0x00000077: 05 DW_LNS_set_column (1) -0x00000079: 06 DW_LNS_negate_stmt -0x0000007a: 01 DW_LNS_copy +0x0000007f: 00 DW_LNE_set_address (0x0000000000000044) +0x00000086: 03 DW_LNS_advance_line (8) +0x00000088: 05 DW_LNS_set_column (1) +0x0000008a: 06 DW_LNS_negate_stmt +0x0000008b: 01 DW_LNS_copy 0x0000000000000044 8 1 1 0 0 is_stmt -0x0000007b: 00 DW_LNE_set_address (0x0000000000000045) -0x00000082: 01 DW_LNS_copy +0x0000008c: 00 DW_LNE_set_address (0x0000000000000045) +0x00000093: 01 DW_LNS_copy 0x0000000000000045 8 1 1 0 0 is_stmt -0x00000083: 00 DW_LNE_set_address (0x00000000ffffff61) -0x0000008a: 03 DW_LNS_advance_line (7) -0x0000008c: 05 DW_LNS_set_column (3) -0x0000008e: 00 DW_LNE_end_sequence - 0x00000000ffffff61 7 3 1 0 0 is_stmt end_sequence +0x00000094: 00 DW_LNE_set_address (0x00000000ffffff64) +0x0000009b: 03 DW_LNS_advance_line (7) +0x0000009d: 05 DW_LNS_set_column (3) +0x0000009f: 00 DW_LNE_end_sequence + 0x00000000ffffff64 7 3 1 0 0 is_stmt end_sequence .debug_str contents: -0x00000000: "clang version 12.0.0 (https://github.com/aheejin/llvm-project e74a5010a507b737fcbd40e87cde358f2c9fc812)" -0x00000068: "test.cpp" -0x00000071: "/usr/local/google/home/aheejin/llvm-git/llvm/tw" -0x000000a1: "test_debuginfo" -0x000000b0: "test_terminatepad" +0x00000000: "clang version 13.0.0 (https://github.com/llvm/llvm-project 3c4c205060c9398da705eb71b63ddd8a04999de9)" +0x00000065: "dwarf_with_exceptions.cpp" +0x0000007f: "/" +0x00000081: "_Z21dwarf_with_exceptionsv" +0x0000009c: "dwarf_with_exceptions" (module (type $none_=>_none (func)) (type $i32_=>_none (func (param i32))) (type $i32_=>_i32 (func (param i32) (result i32))) - (import "env" "foo" (func $foo)) + (import "env" "_Z3foov" (func $foo\28\29)) (import "env" "__cxa_begin_catch" (func $__cxa_begin_catch (param i32) (result i32))) (import "env" "__cxa_end_catch" (func $__cxa_end_catch)) (import "env" "_ZSt9terminatev" (func $std::terminate\28\29)) (memory $0 2) - (table $0 1 1 funcref) - (global $global$0 (mut i32) (i32.const 66560)) + (global $__stack_pointer (mut i32) (i32.const 66560)) (event $event$0 (attr 0) (param i32)) (export "memory" (memory $0)) (func $__wasm_call_ctors ) - (func $test_debuginfo + (func $dwarf_with_exceptions\28\29 (local $0 i32) (local $1 i32) ;; code offset: 0xc (local.set $0 ;; code offset: 0xa - (global.get $global$0) + (global.get $__stack_pointer) ) ;; code offset: 0xe (try $label$9 (do ;; code offset: 0x10 - (call $foo) + (call $foo\28\29) ) ;; code offset: 0x12 (catch $event$0 @@ -456,7 +454,7 @@ file_names[ 1]: (pop i32) ) ;; code offset: 0x18 - (global.set $global$0 + (global.set $__stack_pointer ;; code offset: 0x16 (local.get $0) ) @@ -472,9 +470,9 @@ file_names[ 1]: (try $label$8 (do ;; code offset: 0x21 - (call $foo) + (call $foo\28\29) ;; code offset: 0x25 - (global.set $global$0 + (global.set $__stack_pointer ;; code offset: 0x23 (local.get $0) ) @@ -494,7 +492,7 @@ file_names[ 1]: (pop i32) ) ;; code offset: 0x32 - (global.set $global$0 + (global.set $__stack_pointer ;; code offset: 0x30 (local.get $0) ) @@ -539,8 +537,8 @@ file_names[ 1]: ) ;; custom section ".debug_info", size 63 ;; custom section ".debug_abbrev", size 41 - ;; custom section ".debug_line", size 145 - ;; custom section ".debug_str", size 194 - ;; custom section "producers", size 137 - ;; features section: exception-handling, reference-types + ;; custom section ".debug_line", size 162 + ;; custom section ".debug_str", size 178 + ;; custom section "producers", size 134 + ;; features section: exception-handling ) diff --git a/test/passes/dwarf_with_exceptions.cpp b/test/passes/dwarf_with_exceptions.cpp new file mode 100644 index 00000000000..283b3006430 --- /dev/null +++ b/test/passes/dwarf_with_exceptions.cpp @@ -0,0 +1,14 @@ +void foo(); +void dwarf_with_exceptions() { + try { + foo(); + } catch (...) { + foo(); + } +} +// How to generate dwarf_with_exceptions.wasm: +// $ clang++ -std=c++14 --target=wasm32-unknown-unknown -g -fwasm-exceptions -Xclang -disable-O0-optnone -c -S -emit-llvm dwarf_with_exceptions.cpp -o temp.ll +// $ opt -S -mem2reg -simplifycfg temp.ll -o dwarf_with_exceptions.ll +// Remove some personal info from dwarf_with_exceptions.ll +// $ llc -exception-model=wasm -mattr=+exception-handling -filetype=obj dwarf_with_exceptions.ll -o dwarf_with_exceptions.o +// $ wasm-ld --no-entry --no-gc-sections --allow-undefined dwarf_with_exceptions.o -o dwarf_with_exceptions.wasm diff --git a/test/passes/dwarf_with_exceptions.wasm b/test/passes/dwarf_with_exceptions.wasm index c5ab0000c2c..d972a589952 100755 Binary files a/test/passes/dwarf_with_exceptions.wasm and b/test/passes/dwarf_with_exceptions.wasm differ