1RUN: llc -filetype=obj %p/Inputs/debuginfo1.ll -o %t.debuginfo1.o
2RUN: llc -filetype=obj %p/Inputs/debuginfo2.ll -o %t.debuginfo2.o
3RUN: wasm-ld -o %t.wasm %t.debuginfo1.o %t.debuginfo2.o
4RUN: llvm-dwarfdump %t.wasm | FileCheck %s
5
6CHECK: file format WASM
7
8CHECK: .debug_info contents:
9CHECK: DW_TAG_compile_unit
10CHECK-NEXT:              DW_AT_producer	("clang version 7.0.0 (trunk {{.*}})")
11CHECK-NEXT:              DW_AT_language	(DW_LANG_C99)
12CHECK-NEXT:              DW_AT_name	("hi.c")
13
14CHECK:   DW_TAG_subprogram
15CHECK-NEXT:                DW_AT_low_pc
16CHECK-NEXT:                DW_AT_high_pc
17CHECK-NEXT:                DW_AT_frame_base
18CHECK-NEXT:                DW_AT_name	("test")
19CHECK-NEXT:                DW_AT_decl_file	("/Users/yury/llvmwasm{{(/|\\)}}hi.c")
20CHECK-NEXT:                DW_AT_decl_line	(3)
21CHECK-NEXT:                DW_AT_prototyped	(true)
22
23CHECK:     DW_TAG_formal_parameter
24CHECK-NEXT:                  DW_AT_name	("t")
25CHECK-NEXT:                  DW_AT_decl_file	("/Users/yury/llvmwasm{{(/|\\)}}hi.c")
26CHECK-NEXT:                  DW_AT_decl_line	(3)
27
28CHECK:   DW_TAG_subprogram
29CHECK-NEXT:                DW_AT_low_pc
30CHECK-NEXT:                DW_AT_high_pc
31CHECK-NEXT:                DW_AT_frame_base
32CHECK-NEXT:                DW_AT_name	("_start")
33CHECK-NEXT:                DW_AT_decl_file	("/Users/yury/llvmwasm{{(/|\\)}}hi.c")
34CHECK-NEXT:                DW_AT_decl_line	(7)
35
36CHECK:   DW_TAG_base_type
37CHECK-NEXT:                DW_AT_name	("int")
38CHECK-NEXT:                DW_AT_encoding	(DW_ATE_signed)
39CHECK-NEXT:                DW_AT_byte_size	(0x04)
40
41CHECK: DW_TAG_compile_unit
42CHECK-NEXT:              DW_AT_producer	("clang version 7.0.0 (trunk {{.*}})")
43CHECK-NEXT:              DW_AT_language	(DW_LANG_C99)
44CHECK-NEXT:              DW_AT_name	("hi_foo.c")
45
46CHECK:   DW_TAG_variable
47CHECK-NEXT:                DW_AT_name	("y")
48CHECK-NEXT:                DW_AT_type	(0x000000a1 "int[2]")
49CHECK-NEXT:                DW_AT_external	(true)
50CHECK-NEXT:                DW_AT_decl_file	("{{.*}}hi_foo.c")
51CHECK-NEXT:                DW_AT_decl_line	(1)
52CHECK:                     DW_AT_location	(DW_OP_addr 0x400)
53
54CHECK:   DW_TAG_array_type
55
56CHECK:     DW_TAG_subrange_type
57
58CHECK:   DW_TAG_base_type
59CHECK-NEXT:                DW_AT_name	("int")
60CHECK-NEXT:                DW_AT_encoding	(DW_ATE_signed)
61CHECK-NEXT:                DW_AT_byte_size	(0x04)
62
63CHECK:   DW_TAG_base_type
64CHECK-NEXT:                DW_AT_name	("__ARRAY_SIZE_TYPE__")
65CHECK-NEXT:                DW_AT_byte_size	(0x08)
66CHECK-NEXT:                DW_AT_encoding	(DW_ATE_unsigned)
67
68CHECK:   DW_TAG_variable
69CHECK-NEXT:                DW_AT_name	("z")
70CHECK-NEXT:                DW_AT_type	(0x000000a1 "int[2]")
71CHECK-NEXT:                DW_AT_external	(true)
72CHECK-NEXT:                DW_AT_decl_file	("{{.*}}hi_foo.c")
73CHECK-NEXT:                DW_AT_decl_line	(8)
74CHECK-NEXT:                DW_AT_location	(DW_OP_addr 0x0)
75
76CHECK:   DW_TAG_subprogram
77CHECK-NEXT:                DW_AT_low_pc
78CHECK-NEXT:                DW_AT_high_pc
79CHECK-NEXT:                DW_AT_frame_base
80CHECK-NEXT:                DW_AT_name	("foo")
81CHECK-NEXT:                DW_AT_decl_file	("{{.*}}hi_foo.c")
82CHECK-NEXT:                DW_AT_decl_line	(3)
83
84CHECK:     DW_TAG_formal_parameter
85CHECK-NEXT:                  DW_AT_name	("p")
86CHECK-NEXT:                  DW_AT_decl_file	("{{.*}}hi_foo.c")
87CHECK-NEXT:                  DW_AT_decl_line	(3)
88
89