summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorAlon Zakai <azakai@google.com>2020-02-18 19:22:39 -0800
committerGitHub <noreply@github.com>2020-02-18 19:22:39 -0800
commit08cc4d6711702a3f69159a0a4aa6e8ecedb98b5c (patch)
tree8cd28afd9739f85dc799616cf6bf3690cd009bef /test
parent8307ac45a831273ba86707a8267f908ee1c7c747 (diff)
downloadbinaryen-08cc4d6711702a3f69159a0a4aa6e8ecedb98b5c.tar.gz
binaryen-08cc4d6711702a3f69159a0a4aa6e8ecedb98b5c.tar.bz2
binaryen-08cc4d6711702a3f69159a0a4aa6e8ecedb98b5c.zip
DWARF: Fix debug_range handling of invalid entries (#2662)
If an invalid entry appears - either it began as such, or became invalid after optimization - we should not emit (0, 0) which is an end marker. Instead, emit an invalid entry marker, something with (0, x) for x != 0. As a bonus, if a test/passes case has "noprint" in the name, don't print the wasm, which we do by default. In the testcase here for example we just care about the dwarf, and the printed module would be quite large. Thank you to @paolosevMSFT for identifying and suggesting the fix.
Diffstat (limited to 'test')
-rw-r--r--test/passes/class_with_dwarf_noprint.bin.txt708
-rw-r--r--test/passes/class_with_dwarf_noprint.passes1
-rw-r--r--test/passes/class_with_dwarf_noprint.wasmbin0 -> 23966 bytes
3 files changed, 709 insertions, 0 deletions
diff --git a/test/passes/class_with_dwarf_noprint.bin.txt b/test/passes/class_with_dwarf_noprint.bin.txt
new file mode 100644
index 000000000..bf62b2ce3
--- /dev/null
+++ b/test/passes/class_with_dwarf_noprint.bin.txt
@@ -0,0 +1,708 @@
+DWARF debug info
+================
+
+Contains section .debug_info (429 bytes)
+Contains section .debug_loc (199 bytes)
+Contains section .debug_ranges (24 bytes)
+Contains section .debug_abbrev (337 bytes)
+Contains section .debug_line (438 bytes)
+Contains section .debug_str (364 bytes)
+
+.debug_abbrev contents:
+Abbrev table for offset: 0x00000000
+[1] DW_TAG_compile_unit DW_CHILDREN_yes
+ DW_AT_producer DW_FORM_strp
+ DW_AT_language DW_FORM_data2
+ DW_AT_name DW_FORM_strp
+ DW_AT_stmt_list DW_FORM_sec_offset
+ DW_AT_comp_dir DW_FORM_strp
+ DW_AT_low_pc DW_FORM_addr
+ DW_AT_high_pc DW_FORM_data4
+
+[2] DW_TAG_variable DW_CHILDREN_no
+ DW_AT_name DW_FORM_strp
+ DW_AT_type DW_FORM_ref4
+ DW_AT_external DW_FORM_flag_present
+ DW_AT_decl_file DW_FORM_data1
+ DW_AT_decl_line DW_FORM_data1
+ DW_AT_location DW_FORM_exprloc
+
+[3] DW_TAG_structure_type DW_CHILDREN_yes
+ DW_AT_calling_convention DW_FORM_data1
+ DW_AT_name DW_FORM_strp
+ DW_AT_byte_size DW_FORM_data1
+ DW_AT_decl_file DW_FORM_data1
+ DW_AT_decl_line DW_FORM_data1
+
+[4] DW_TAG_member DW_CHILDREN_no
+ DW_AT_name DW_FORM_strp
+ DW_AT_type DW_FORM_ref4
+ DW_AT_decl_file DW_FORM_data1
+ DW_AT_decl_line DW_FORM_data1
+ DW_AT_data_member_location DW_FORM_data1
+ DW_AT_accessibility DW_FORM_data1
+
+[5] DW_TAG_subprogram DW_CHILDREN_yes
+ DW_AT_name DW_FORM_strp
+ DW_AT_decl_file DW_FORM_data1
+ DW_AT_decl_line DW_FORM_data1
+ DW_AT_declaration DW_FORM_flag_present
+ DW_AT_external DW_FORM_flag_present
+
+[6] DW_TAG_formal_parameter DW_CHILDREN_no
+ DW_AT_type DW_FORM_ref4
+ DW_AT_artificial DW_FORM_flag_present
+
+[7] DW_TAG_subprogram DW_CHILDREN_yes
+ DW_AT_linkage_name DW_FORM_strp
+ DW_AT_name DW_FORM_strp
+ DW_AT_decl_file DW_FORM_data1
+ DW_AT_decl_line DW_FORM_data1
+ DW_AT_type DW_FORM_ref4
+ DW_AT_declaration DW_FORM_flag_present
+ DW_AT_external DW_FORM_flag_present
+
+[8] DW_TAG_formal_parameter DW_CHILDREN_no
+ DW_AT_type DW_FORM_ref4
+
+[9] DW_TAG_enumeration_type DW_CHILDREN_yes
+ DW_AT_type DW_FORM_ref4
+ DW_AT_byte_size DW_FORM_data1
+ DW_AT_decl_file DW_FORM_data1
+ DW_AT_decl_line DW_FORM_data1
+
+[10] DW_TAG_enumerator DW_CHILDREN_no
+ DW_AT_name DW_FORM_strp
+ DW_AT_const_value DW_FORM_udata
+
+[11] DW_TAG_base_type DW_CHILDREN_no
+ DW_AT_name DW_FORM_strp
+ DW_AT_encoding DW_FORM_data1
+ DW_AT_byte_size DW_FORM_data1
+
+[12] DW_TAG_pointer_type DW_CHILDREN_no
+ DW_AT_type DW_FORM_ref4
+
+[13] DW_TAG_namespace DW_CHILDREN_yes
+ DW_AT_name DW_FORM_strp
+
+[14] DW_TAG_typedef DW_CHILDREN_no
+ DW_AT_type DW_FORM_ref4
+ DW_AT_name DW_FORM_strp
+ DW_AT_decl_file DW_FORM_data1
+ DW_AT_decl_line DW_FORM_data1
+
+[15] DW_TAG_unspecified_type DW_CHILDREN_no
+ DW_AT_name DW_FORM_strp
+
+[16] DW_TAG_imported_declaration DW_CHILDREN_no
+ DW_AT_decl_file DW_FORM_data1
+ DW_AT_decl_line DW_FORM_data1
+ DW_AT_import DW_FORM_ref4
+
+[17] DW_TAG_subprogram DW_CHILDREN_yes
+ DW_AT_specification DW_FORM_ref4
+ DW_AT_inline DW_FORM_data1
+ DW_AT_object_pointer DW_FORM_ref4
+
+[18] DW_TAG_formal_parameter DW_CHILDREN_no
+ DW_AT_name DW_FORM_strp
+ DW_AT_type DW_FORM_ref4
+ DW_AT_artificial DW_FORM_flag_present
+
+[19] DW_TAG_formal_parameter DW_CHILDREN_no
+ DW_AT_name DW_FORM_strp
+ DW_AT_decl_file DW_FORM_data1
+ DW_AT_decl_line DW_FORM_data1
+ DW_AT_type DW_FORM_ref4
+
+[20] DW_TAG_subprogram DW_CHILDREN_yes
+ DW_AT_low_pc DW_FORM_addr
+ DW_AT_high_pc DW_FORM_data4
+ DW_AT_frame_base DW_FORM_exprloc
+ DW_AT_GNU_all_call_sites DW_FORM_flag_present
+ DW_AT_name DW_FORM_strp
+ DW_AT_decl_file DW_FORM_data1
+ DW_AT_decl_line DW_FORM_data1
+ DW_AT_type DW_FORM_ref4
+ DW_AT_external DW_FORM_flag_present
+
+[21] DW_TAG_variable DW_CHILDREN_no
+ DW_AT_location DW_FORM_sec_offset
+ DW_AT_name DW_FORM_strp
+ DW_AT_decl_file DW_FORM_data1
+ DW_AT_decl_line DW_FORM_data1
+ DW_AT_type DW_FORM_ref4
+
+[22] DW_TAG_lexical_block DW_CHILDREN_yes
+ DW_AT_low_pc DW_FORM_addr
+ DW_AT_high_pc DW_FORM_data4
+
+[23] DW_TAG_inlined_subroutine DW_CHILDREN_yes
+ DW_AT_abstract_origin DW_FORM_ref4
+ DW_AT_ranges DW_FORM_sec_offset
+ DW_AT_call_file DW_FORM_data1
+ DW_AT_call_line DW_FORM_data1
+ DW_AT_call_column DW_FORM_data1
+
+[24] DW_TAG_formal_parameter DW_CHILDREN_no
+ DW_AT_abstract_origin DW_FORM_ref4
+
+[25] DW_TAG_formal_parameter DW_CHILDREN_no
+ DW_AT_location DW_FORM_sec_offset
+ DW_AT_abstract_origin DW_FORM_ref4
+
+[26] DW_TAG_inlined_subroutine DW_CHILDREN_yes
+ DW_AT_abstract_origin DW_FORM_ref4
+ DW_AT_low_pc DW_FORM_addr
+ DW_AT_high_pc DW_FORM_data4
+ DW_AT_call_file DW_FORM_data1
+ DW_AT_call_line DW_FORM_data1
+ DW_AT_call_column DW_FORM_data1
+
+[27] DW_TAG_GNU_call_site DW_CHILDREN_no
+ DW_AT_low_pc DW_FORM_addr
+
+
+.debug_info contents:
+0x00000000: Compile Unit: length = 0x000001a9 version = 0x0004 abbr_offset = 0x0000 addr_size = 0x04 (next unit at 0x000001ad)
+
+0x0000000b: DW_TAG_compile_unit [1] *
+ DW_AT_producer [DW_FORM_strp] ( .debug_str[0x00000000] = "clang version 11.0.0 (/b/s/w/ir/cache/git/chromium.googlesource.com-external-github.com-llvm-llvm--project d6fe253653b7e760f94ca21d0a7ebbfeeee28777)")
+ DW_AT_language [DW_FORM_data2] (DW_LANG_C_plus_plus)
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000095] = "/tmp/emscripten_test_wasm3_2u9tontv/src.cpp")
+ DW_AT_stmt_list [DW_FORM_sec_offset] (0x00000000)
+ DW_AT_comp_dir [DW_FORM_strp] ( .debug_str[0x000000c1] = "/tmp/emscripten_test_wasm3_2u9tontv")
+ DW_AT_low_pc [DW_FORM_addr] (0x0000000000000006)
+ DW_AT_high_pc [DW_FORM_data4] (0x000000a6)
+
+0x00000026: DW_TAG_variable [2]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000e5] = "rng1")
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0037 => {0x00000037} "Random")
+ DW_AT_external [DW_FORM_flag_present] (true)
+ DW_AT_decl_file [DW_FORM_data1] ("/tmp/emscripten_test_wasm3_2u9tontv/src.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (23)
+ DW_AT_location [DW_FORM_exprloc] (DW_OP_addr 0x638)
+
+0x00000037: DW_TAG_structure_type [3] *
+ DW_AT_calling_convention [DW_FORM_data1] (DW_CC_pass_by_value)
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000fc] = "Random")
+ DW_AT_byte_size [DW_FORM_data1] (0x04)
+ DW_AT_decl_file [DW_FORM_data1] ("/tmp/emscripten_test_wasm3_2u9tontv/src.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (9)
+
+0x00000040: DW_TAG_member [4]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000ea] = "last")
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0095 => {0x00000095} "unsigned int")
+ DW_AT_decl_file [DW_FORM_data1] ("/tmp/emscripten_test_wasm3_2u9tontv/src.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (22)
+ DW_AT_data_member_location [DW_FORM_data1] (0x00)
+ DW_AT_accessibility [DW_FORM_data1] (DW_ACCESS_protected)
+
+0x0000004d: DW_TAG_subprogram [5] *
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000fc] = "Random")
+ DW_AT_decl_file [DW_FORM_data1] ("/tmp/emscripten_test_wasm3_2u9tontv/src.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (15)
+ DW_AT_declaration [DW_FORM_flag_present] (true)
+ DW_AT_external [DW_FORM_flag_present] (true)
+
+0x00000054: DW_TAG_formal_parameter [6]
+ DW_AT_type [DW_FORM_ref4] (cu + 0x009c => {0x0000009c} "Random*")
+ DW_AT_artificial [DW_FORM_flag_present] (true)
+
+0x00000059: NULL
+
+0x0000005a: DW_TAG_subprogram [7] *
+ DW_AT_linkage_name [DW_FORM_strp] ( .debug_str[0x00000103] = "_ZN6Random3getEf")
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000114] = "get")
+ DW_AT_decl_file [DW_FORM_data1] ("/tmp/emscripten_test_wasm3_2u9tontv/src.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (16)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x00a1 => {0x000000a1} "float")
+ DW_AT_declaration [DW_FORM_flag_present] (true)
+ DW_AT_external [DW_FORM_flag_present] (true)
+
+0x00000069: DW_TAG_formal_parameter [6]
+ DW_AT_type [DW_FORM_ref4] (cu + 0x009c => {0x0000009c} "Random*")
+ DW_AT_artificial [DW_FORM_flag_present] (true)
+
+0x0000006e: DW_TAG_formal_parameter [8]
+ DW_AT_type [DW_FORM_ref4] (cu + 0x00a1 => {0x000000a1} "float")
+
+0x00000073: NULL
+
+0x00000074: DW_TAG_enumeration_type [9] *
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0095 => {0x00000095} "unsigned int")
+ DW_AT_byte_size [DW_FORM_data1] (0x04)
+ DW_AT_decl_file [DW_FORM_data1] ("/tmp/emscripten_test_wasm3_2u9tontv/src.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (10)
+
+0x0000007c: DW_TAG_enumerator [10]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000011e] = "IM")
+ DW_AT_const_value [DW_FORM_udata] (139968)
+
+0x00000084: DW_TAG_enumerator [10]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000121] = "IA")
+ DW_AT_const_value [DW_FORM_udata] (3877)
+
+0x0000008b: DW_TAG_enumerator [10]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000124] = "IC")
+ DW_AT_const_value [DW_FORM_udata] (29573)
+
+0x00000093: NULL
+
+0x00000094: NULL
+
+0x00000095: DW_TAG_base_type [11]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000ef] = "unsigned int")
+ DW_AT_encoding [DW_FORM_data1] (DW_ATE_unsigned)
+ DW_AT_byte_size [DW_FORM_data1] (0x04)
+
+0x0000009c: DW_TAG_pointer_type [12]
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0037 => {0x00000037} "Random")
+
+0x000000a1: DW_TAG_base_type [11]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000118] = "float")
+ DW_AT_encoding [DW_FORM_data1] (DW_ATE_float)
+ DW_AT_byte_size [DW_FORM_data1] (0x04)
+
+0x000000a8: DW_TAG_namespace [13] *
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000127] = "std")
+
+0x000000ad: DW_TAG_typedef [14]
+ DW_AT_type [DW_FORM_ref4] (cu + 0x00b9 => {0x000000b9} "decltype(nullptr)")
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000013d] = "nullptr_t")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/system/include/libcxx/__nullptr")
+ DW_AT_decl_line [DW_FORM_data1] (57)
+
+0x000000b8: NULL
+
+0x000000b9: DW_TAG_unspecified_type [15]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000012b] = "decltype(nullptr)")
+
+0x000000be: DW_TAG_imported_declaration [16]
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/system/include/libcxx/stddef.h")
+ DW_AT_decl_line [DW_FORM_data1] (52)
+ DW_AT_import [DW_FORM_ref4] (cu + 0x00ad => {0x000000ad})
+
+0x000000c5: DW_TAG_subprogram [17] *
+ DW_AT_specification [DW_FORM_ref4] (cu + 0x005a => {0x0000005a} "_ZN6Random3getEf")
+ DW_AT_inline [DW_FORM_data1] (DW_INL_inlined)
+ DW_AT_object_pointer [DW_FORM_ref4] (cu + 0x00cf => {0x000000cf})
+
+0x000000cf: DW_TAG_formal_parameter [18]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000147] = "this")
+ DW_AT_type [DW_FORM_ref4] (cu + 0x00e4 => {0x000000e4} "Random*")
+ DW_AT_artificial [DW_FORM_flag_present] (true)
+
+0x000000d8: DW_TAG_formal_parameter [19]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000014c] = "max")
+ DW_AT_decl_file [DW_FORM_data1] ("/tmp/emscripten_test_wasm3_2u9tontv/src.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (16)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x00a1 => {0x000000a1} "float")
+
+0x000000e3: NULL
+
+0x000000e4: DW_TAG_pointer_type [12]
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0037 => {0x00000037} "Random")
+
+0x000000e9: DW_TAG_subprogram [20] *
+ DW_AT_low_pc [DW_FORM_addr] (0x0000000000000006)
+ DW_AT_high_pc [DW_FORM_data4] (0x000000a6)
+ DW_AT_frame_base [DW_FORM_exprloc] (DW_OP_WASM_location 0x0 +0, DW_OP_stack_value)
+ DW_AT_GNU_all_call_sites [DW_FORM_flag_present] (true)
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000150] = "main")
+ DW_AT_decl_file [DW_FORM_data1] ("/tmp/emscripten_test_wasm3_2u9tontv/src.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (24)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x01a5 => {0x000001a5} "int")
+ DW_AT_external [DW_FORM_flag_present] (true)
+
+0x00000101: DW_TAG_variable [21]
+ DW_AT_location [DW_FORM_sec_offset] (0x00000000:
+ [0x00000018, 0x00000020): DW_OP_constu 0x2a, DW_OP_stack_value
+ [0x00000007, 0x00000007): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value)
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000159] = "rng2")
+ DW_AT_decl_file [DW_FORM_data1] ("/tmp/emscripten_test_wasm3_2u9tontv/src.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (25)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0037 => {0x00000037} "Random")
+
+0x00000110: DW_TAG_variable [21]
+ DW_AT_location [DW_FORM_sec_offset] (0x00000023:
+ [0x00000018, 0x00000020): DW_OP_consts +0, DW_OP_stack_value
+ [0x00000085, 0x00000092): DW_OP_WASM_location 0x0 +2, DW_OP_stack_value)
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000015e] = "count")
+ DW_AT_decl_file [DW_FORM_data1] ("/tmp/emscripten_test_wasm3_2u9tontv/src.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (26)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x01a5 => {0x000001a5} "int")
+
+0x0000011f: DW_TAG_lexical_block [22] *
+ DW_AT_low_pc [DW_FORM_addr] (0x0000000000000026)
+ DW_AT_high_pc [DW_FORM_data4] (0xffffffda)
+
+0x00000128: DW_TAG_variable [21]
+ DW_AT_location [DW_FORM_sec_offset] (0x00000046:
+ [0x00000018, 0x00000020): DW_OP_consts +0, DW_OP_stack_value
+ [0x00000007, 0x00000007): DW_OP_WASM_location 0x0 +3, DW_OP_stack_value)
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000164] = "i")
+ DW_AT_decl_file [DW_FORM_data1] ("/tmp/emscripten_test_wasm3_2u9tontv/src.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (27)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x01a5 => {0x000001a5} "int")
+
+0x00000137: DW_TAG_lexical_block [22] *
+ DW_AT_low_pc [DW_FORM_addr] (0x0000000000000026)
+ DW_AT_high_pc [DW_FORM_data4] (0x0000005f)
+
+0x00000140: DW_TAG_variable [21]
+ DW_AT_location [DW_FORM_sec_offset] (0x0000009b:
+ [0x00000007, 0x00000007): DW_OP_WASM_location 0x0 +5, DW_OP_stack_value)
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000166] = "x2")
+ DW_AT_decl_file [DW_FORM_data1] ("/tmp/emscripten_test_wasm3_2u9tontv/src.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (29)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x00a1 => {0x000000a1} "float")
+
+0x0000014f: DW_TAG_variable [21]
+ DW_AT_location [DW_FORM_sec_offset] (0x000000b1:
+ [0x00000007, 0x00000007): DW_OP_WASM_location 0x0 +6, DW_OP_stack_value)
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000169] = "x1")
+ DW_AT_decl_file [DW_FORM_data1] ("/tmp/emscripten_test_wasm3_2u9tontv/src.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (28)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x00a1 => {0x000000a1} "float")
+
+0x0000015e: DW_TAG_inlined_subroutine [23] *
+ DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x00c5 => {0x000000c5} "_ZN6Random3getEf")
+ DW_AT_ranges [DW_FORM_sec_offset] (0x00000000
+ [0x00000006, 0x00000007)
+ [0x00000061, 0x0000006a))
+ DW_AT_call_file [DW_FORM_data1] ("/tmp/emscripten_test_wasm3_2u9tontv/src.cpp")
+ DW_AT_call_line [DW_FORM_data1] (28)
+ DW_AT_call_column [DW_FORM_data1] (0x15)
+
+0x0000016a: DW_TAG_formal_parameter [24]
+ DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x00cf => {0x000000cf} "this")
+
+0x0000016f: DW_TAG_formal_parameter [25]
+ DW_AT_location [DW_FORM_sec_offset] (0x00000069:
+ [0x00000022, 0x00000092): DW_OP_constu 0x3f800000, DW_OP_stack_value)
+ DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x00d8 => {0x000000d8} "max")
+
+0x00000178: NULL
+
+0x00000179: DW_TAG_inlined_subroutine [26] *
+ DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x00c5 => {0x000000c5} "_ZN6Random3getEf")
+ DW_AT_low_pc [DW_FORM_addr] (0x0000000000000040)
+ DW_AT_high_pc [DW_FORM_data4] (0x00000019)
+ DW_AT_call_file [DW_FORM_data1] ("/tmp/emscripten_test_wasm3_2u9tontv/src.cpp")
+ DW_AT_call_line [DW_FORM_data1] (29)
+ DW_AT_call_column [DW_FORM_data1] (0x15)
+
+0x00000189: DW_TAG_formal_parameter [24]
+ DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x00cf => {0x000000cf} "this")
+
+0x0000018e: DW_TAG_formal_parameter [25]
+ DW_AT_location [DW_FORM_sec_offset] (0x00000082:
+ [0x00000007, 0x00000007): DW_OP_constu 0x3f800000, DW_OP_stack_value)
+ DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x00d8 => {0x000000d8} "max")
+
+0x00000197: NULL
+
+0x00000198: NULL
+
+0x00000199: NULL
+
+0x0000019a: DW_TAG_GNU_call_site [27]
+ DW_AT_low_pc [DW_FORM_addr] (0x000000000000007a)
+
+0x0000019f: DW_TAG_GNU_call_site [27]
+ DW_AT_low_pc [DW_FORM_addr] (0x00000000000000a1)
+
+0x000001a4: NULL
+
+0x000001a5: DW_TAG_base_type [11]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000155] = "int")
+ DW_AT_encoding [DW_FORM_data1] (DW_ATE_signed)
+ DW_AT_byte_size [DW_FORM_data1] (0x04)
+
+0x000001ac: NULL
+
+.debug_loc contents:
+0x00000000:
+ [0x00000012, 0x0000001a): DW_OP_constu 0x2a, DW_OP_stack_value
+ [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value
+
+0x00000023:
+ [0x00000012, 0x0000001a): DW_OP_consts +0, DW_OP_stack_value
+ [0x0000007f, 0x0000008c): DW_OP_WASM_location 0x0 +2, DW_OP_stack_value
+
+0x00000046:
+ [0x00000012, 0x0000001a): DW_OP_consts +0, DW_OP_stack_value
+ [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +3, DW_OP_stack_value
+
+0x00000069:
+ [0x0000001c, 0x0000008c): DW_OP_constu 0x3f800000, DW_OP_stack_value
+
+0x00000082:
+ [0x00000001, 0x00000001): DW_OP_constu 0x3f800000, DW_OP_stack_value
+
+0x0000009b:
+ [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +5, DW_OP_stack_value
+
+0x000000b1:
+ [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +6, DW_OP_stack_value
+
+.debug_line contents:
+debug_line[0x00000000]
+Line table prologue:
+ total_length: 0x000001b2
+ version: 4
+ prologue_length: 0x0000007b
+ min_inst_length: 1
+max_ops_per_inst: 1
+ default_is_stmt: 1
+ line_base: -5
+ line_range: 14
+ opcode_base: 13
+standard_opcode_lengths[DW_LNS_copy] = 0
+standard_opcode_lengths[DW_LNS_advance_pc] = 1
+standard_opcode_lengths[DW_LNS_advance_line] = 1
+standard_opcode_lengths[DW_LNS_set_file] = 1
+standard_opcode_lengths[DW_LNS_set_column] = 1
+standard_opcode_lengths[DW_LNS_negate_stmt] = 0
+standard_opcode_lengths[DW_LNS_set_basic_block] = 0
+standard_opcode_lengths[DW_LNS_const_add_pc] = 0
+standard_opcode_lengths[DW_LNS_fixed_advance_pc] = 1
+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
+include_directories[ 1] = "/usr/local/google/home/azakai/Dev/emscripten/system/include/libcxx"
+file_names[ 1]:
+ name: "src.cpp"
+ dir_index: 0
+ mod_time: 0x00000000
+ length: 0x00000000
+file_names[ 2]:
+ name: "__nullptr"
+ dir_index: 1
+ mod_time: 0x00000000
+ length: 0x00000000
+file_names[ 3]:
+ name: "stddef.h"
+ dir_index: 1
+ mod_time: 0x00000000
+ length: 0x00000000
+0x00000085: 00 DW_LNE_set_address (0x0000000000000006)
+0x0000008c: 03 DW_LNS_advance_line (24)
+0x0000008e: 01 DW_LNS_copy
+ 0x0000000000000006 24 0 1 0 0 is_stmt
+
+
+0x0000008f: 00 DW_LNE_set_address (0x0000000000000026)
+0x00000096: 03 DW_LNS_advance_line (17)
+0x00000098: 05 DW_LNS_set_column (13)
+0x0000009a: 0a DW_LNS_set_prologue_end
+0x0000009b: 01 DW_LNS_copy
+ 0x0000000000000026 17 13 1 0 0 is_stmt prologue_end
+
+
+0x0000009c: 00 DW_LNE_set_address (0x000000000000002d)
+0x000000a3: 05 DW_LNS_set_column (18)
+0x000000a5: 06 DW_LNS_negate_stmt
+0x000000a6: 01 DW_LNS_copy
+ 0x000000000000002d 17 18 1 0 0
+
+
+0x000000a7: 00 DW_LNE_set_address (0x0000000000000032)
+0x000000ae: 05 DW_LNS_set_column (23)
+0x000000b0: 01 DW_LNS_copy
+ 0x0000000000000032 17 23 1 0 0
+
+
+0x000000b1: 00 DW_LNE_set_address (0x0000000000000037)
+0x000000b8: 05 DW_LNS_set_column (29)
+0x000000ba: 01 DW_LNS_copy
+ 0x0000000000000037 17 29 1 0 0
+
+
+0x000000bb: 00 DW_LNE_set_address (0x0000000000000038)
+0x000000c2: 05 DW_LNS_set_column (10)
+0x000000c4: 01 DW_LNS_copy
+ 0x0000000000000038 17 10 1 0 0
+
+
+0x000000c5: 00 DW_LNE_set_address (0x000000000000003e)
+0x000000cc: 03 DW_LNS_advance_line (30)
+0x000000ce: 05 DW_LNS_set_column (5)
+0x000000d0: 06 DW_LNS_negate_stmt
+0x000000d1: 01 DW_LNS_copy
+ 0x000000000000003e 30 5 1 0 0 is_stmt
+
+
+0x000000d2: 00 DW_LNE_set_address (0x0000000000000040)
+0x000000d9: 03 DW_LNS_advance_line (17)
+0x000000db: 05 DW_LNS_set_column (18)
+0x000000dd: 01 DW_LNS_copy
+ 0x0000000000000040 17 18 1 0 0 is_stmt
+
+
+0x000000de: 00 DW_LNE_set_address (0x000000000000004a)
+0x000000e5: 05 DW_LNS_set_column (23)
+0x000000e7: 06 DW_LNS_negate_stmt
+0x000000e8: 01 DW_LNS_copy
+ 0x000000000000004a 17 23 1 0 0
+
+
+0x000000e9: 00 DW_LNE_set_address (0x000000000000004f)
+0x000000f0: 05 DW_LNS_set_column (29)
+0x000000f2: 01 DW_LNS_copy
+ 0x000000000000004f 17 29 1 0 0
+
+
+0x000000f3: 00 DW_LNE_set_address (0x0000000000000050)
+0x000000fa: 03 DW_LNS_advance_line (18)
+0x000000fc: 05 DW_LNS_set_column (18)
+0x000000fe: 06 DW_LNS_negate_stmt
+0x000000ff: 01 DW_LNS_copy
+ 0x0000000000000050 18 18 1 0 0 is_stmt
+
+
+0x00000100: 00 DW_LNE_set_address (0x0000000000000058)
+0x00000107: 05 DW_LNS_set_column (23)
+0x00000109: 06 DW_LNS_negate_stmt
+0x0000010a: 01 DW_LNS_copy
+ 0x0000000000000058 18 23 1 0 0
+
+
+0x0000010b: 00 DW_LNE_set_address (0x0000000000000059)
+0x00000112: 03 DW_LNS_advance_line (30)
+0x00000114: 05 DW_LNS_set_column (28)
+0x00000116: 06 DW_LNS_negate_stmt
+0x00000117: 01 DW_LNS_copy
+ 0x0000000000000059 30 28 1 0 0 is_stmt
+
+
+0x00000118: 00 DW_LNE_set_address (0x000000000000005c)
+0x0000011f: 05 DW_LNS_set_column (5)
+0x00000121: 06 DW_LNS_negate_stmt
+0x00000122: 01 DW_LNS_copy
+ 0x000000000000005c 30 5 1 0 0
+
+
+0x00000123: 00 DW_LNE_set_address (0x0000000000000061)
+0x0000012a: 03 DW_LNS_advance_line (18)
+0x0000012c: 05 DW_LNS_set_column (18)
+0x0000012e: 06 DW_LNS_negate_stmt
+0x0000012f: 01 DW_LNS_copy
+ 0x0000000000000061 18 18 1 0 0 is_stmt
+
+
+0x00000130: 00 DW_LNE_set_address (0x0000000000000069)
+0x00000137: 05 DW_LNS_set_column (23)
+0x00000139: 06 DW_LNS_negate_stmt
+0x0000013a: 01 DW_LNS_copy
+ 0x0000000000000069 18 23 1 0 0
+
+
+0x0000013b: 00 DW_LNE_set_address (0x000000000000006a)
+0x00000142: 03 DW_LNS_advance_line (30)
+0x00000144: 05 DW_LNS_set_column (24)
+0x00000146: 06 DW_LNS_negate_stmt
+0x00000147: 01 DW_LNS_copy
+ 0x000000000000006a 30 24 1 0 0 is_stmt
+
+
+0x00000148: 00 DW_LNE_set_address (0x000000000000006d)
+0x0000014f: 05 DW_LNS_set_column (5)
+0x00000151: 06 DW_LNS_negate_stmt
+0x00000152: 01 DW_LNS_copy
+ 0x000000000000006d 30 5 1 0 0
+
+
+0x00000153: 00 DW_LNE_set_address (0x000000000000007b)
+0x0000015a: 03 DW_LNS_advance_line (31)
+0x0000015c: 05 DW_LNS_set_column (9)
+0x0000015e: 06 DW_LNS_negate_stmt
+0x0000015f: 01 DW_LNS_copy
+ 0x000000000000007b 31 9 1 0 0 is_stmt
+
+
+0x00000160: 00 DW_LNE_set_address (0x000000000000007d)
+0x00000167: 05 DW_LNS_set_column (12)
+0x00000169: 06 DW_LNS_negate_stmt
+0x0000016a: 01 DW_LNS_copy
+ 0x000000000000007d 31 12 1 0 0
+
+
+0x0000016b: 00 DW_LNE_set_address (0x0000000000000082)
+0x00000172: 05 DW_LNS_set_column (9)
+0x00000174: 01 DW_LNS_copy
+ 0x0000000000000082 31 9 1 0 0
+
+
+0x00000175: 00 DW_LNE_set_address (0x0000000000000085)
+0x0000017c: 03 DW_LNS_advance_line (27)
+0x0000017e: 05 DW_LNS_set_column (29)
+0x00000180: 06 DW_LNS_negate_stmt
+0x00000181: 01 DW_LNS_copy
+ 0x0000000000000085 27 29 1 0 0 is_stmt
+
+
+0x00000182: 00 DW_LNE_set_address (0x000000000000008f)
+0x00000189: 05 DW_LNS_set_column (21)
+0x0000018b: 06 DW_LNS_negate_stmt
+0x0000018c: 01 DW_LNS_copy
+ 0x000000000000008f 27 21 1 0 0
+
+
+0x0000018d: 00 DW_LNE_set_address (0x0000000000000090)
+0x00000194: 05 DW_LNS_set_column (3)
+0x00000196: 01 DW_LNS_copy
+ 0x0000000000000090 27 3 1 0 0
+
+
+0x00000197: 00 DW_LNE_set_address (0x0000000000000093)
+0x0000019e: 03 DW_LNS_advance_line (33)
+0x000001a0: 06 DW_LNS_negate_stmt
+0x000001a1: 01 DW_LNS_copy
+ 0x0000000000000093 33 3 1 0 0 is_stmt
+
+
+0x000001a2: 00 DW_LNE_set_address (0x00000000000000a2)
+0x000001a9: 03 DW_LNS_advance_line (34)
+0x000001ab: 01 DW_LNS_copy
+ 0x00000000000000a2 34 3 1 0 0 is_stmt
+
+
+0x000001ac: 00 DW_LNE_set_address (0x00000000000000ac)
+0x000001b3: 00 DW_LNE_end_sequence
+ 0x00000000000000ac 34 3 1 0 0 is_stmt end_sequence
+
+
+.debug_str contents:
+0x00000000: "clang version 11.0.0 (/b/s/w/ir/cache/git/chromium.googlesource.com-external-github.com-llvm-llvm--project d6fe253653b7e760f94ca21d0a7ebbfeeee28777)"
+0x00000095: "/tmp/emscripten_test_wasm3_2u9tontv/src.cpp"
+0x000000c1: "/tmp/emscripten_test_wasm3_2u9tontv"
+0x000000e5: "rng1"
+0x000000ea: "last"
+0x000000ef: "unsigned int"
+0x000000fc: "Random"
+0x00000103: "_ZN6Random3getEf"
+0x00000114: "get"
+0x00000118: "float"
+0x0000011e: "IM"
+0x00000121: "IA"
+0x00000124: "IC"
+0x00000127: "std"
+0x0000012b: "decltype(nullptr)"
+0x0000013d: "nullptr_t"
+0x00000147: "this"
+0x0000014c: "max"
+0x00000150: "main"
+0x00000155: "int"
+0x00000159: "rng2"
+0x0000015e: "count"
+0x00000164: "i"
+0x00000166: "x2"
+0x00000169: "x1"
+
+.debug_ranges contents:
+00000000 00000000 00000001
+00000000 0000005b 00000064
+00000000 <End of list>
diff --git a/test/passes/class_with_dwarf_noprint.passes b/test/passes/class_with_dwarf_noprint.passes
new file mode 100644
index 000000000..8b1cab885
--- /dev/null
+++ b/test/passes/class_with_dwarf_noprint.passes
@@ -0,0 +1 @@
+roundtrip_dwarfdump_g
diff --git a/test/passes/class_with_dwarf_noprint.wasm b/test/passes/class_with_dwarf_noprint.wasm
new file mode 100644
index 000000000..23a3cc212
--- /dev/null
+++ b/test/passes/class_with_dwarf_noprint.wasm
Binary files differ