@@ -112,7 +112,18 @@ let test_get_function m dibuilder file_di m_di =
112
112
stdout_metadata int_ty_di;
113
113
(* CHECK: [[INT32_PTR:<0x[0-9a-f]*>]] = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
114
114
*)
115
- let param_types = [| null_metadata; int_ty_di |] in
115
+ let int_ptr_ty_di =
116
+ Llvm_debuginfo. dibuild_create_pointer_type dibuilder
117
+ ~pointee_ty: int_ty_di
118
+ ~size_in_bits: 32
119
+ ~align_in_bits: 32
120
+ ~address_space: 0
121
+ ~name: " ptrint"
122
+ in
123
+ stdout_metadata int_ptr_ty_di;
124
+ (* CHECK: [[PTRINT32_PTR:<0x[0-9a-f]*>]] = !DIDerivedType(tag: DW_TAG_pointer_type, name: "ptrint", baseType: [[INT32_PTR]], size: 32, align: 32, dwarfAddressSpace: 0)
125
+ *)
126
+ let param_types = [| null_metadata; int_ty_di; int_ptr_ty_di |] in
116
127
let fty_di =
117
128
Llvm_debuginfo. dibuild_create_subroutine_type dibuilder ~file: file_di
118
129
~param_types flags_zero
@@ -126,15 +137,16 @@ let test_get_function m dibuilder file_di m_di =
126
137
Llvm_debuginfo. dibuild_get_or_create_type_array dibuilder ~data: param_types
127
138
in
128
139
stdout_metadata fty_di_args;
129
- (* CHECK: [[FARGS_PTR:<0x[0-9a-f]*>]] = !{null, [[INT32_PTR]]}
140
+ (* CHECK: [[FARGS_PTR:<0x[0-9a-f]*>]] = !{null, [[INT32_PTR]], [[PTRINT32_PTR]] }
130
141
*)
131
142
stdout_metadata fty_di;
132
143
(* CHECK: [[SBRTNTY_PTR:<0x[0-9a-f]*>]] = !DISubroutineType(types: [[FARGS_PTR]])
133
144
*)
134
145
(* Let's create the LLVM-IR function now. *)
135
146
let name = " tfun" in
136
147
let fty =
137
- Llvm. function_type (Llvm. void_type context) [| Llvm. i32_type context |]
148
+ Llvm. function_type (Llvm. void_type context)
149
+ [| Llvm. i32_type context; Llvm. pointer_type context |]
138
150
in
139
151
let f = Llvm. define_function name fty m in
140
152
let f_di =
@@ -160,11 +172,12 @@ let test_bbinstr fty f f_di file_di dibuilder =
160
172
group " basic_block and instructions tests" ;
161
173
(* Create this pattern:
162
174
* if (arg0 != 0) {
163
- * foo(arg0);
175
+ * foo(arg0, arg1 );
164
176
* }
165
177
* return;
166
178
*)
167
179
let arg0 = (Llvm. params f).(0 ) in
180
+ let arg1 = (Llvm. params f).(1 ) in
168
181
let builder = Llvm. builder_at_end context (Llvm. entry_block f) in
169
182
let zero = Llvm. const_int (Llvm. i32_type context) 0 in
170
183
let cmpi = Llvm. build_icmp Llvm.Icmp. Ne zero arg0 " cmpi" builder in
@@ -185,7 +198,7 @@ let test_bbinstr fty f f_di file_di dibuilder =
185
198
| Some file_of_f_di' , Some file_of_scope' ->
186
199
file_of_f_di' = file_di && file_of_scope' = file_di
187
200
| _ -> false );
188
- let foocall = Llvm. build_call fty foodecl [| arg0 |] " " builder in
201
+ let foocall = Llvm. build_call fty foodecl [| arg0; arg1 |] " " builder in
189
202
let foocall_loc =
190
203
Llvm_debuginfo. dibuild_create_debug_location context ~line: 10 ~column: 12
191
204
~scope
@@ -290,17 +303,17 @@ let test_variables f dibuilder file_di fun_di =
290
303
let () = Printf. printf " %s\n " (Llvm. string_of_lldbgrecord vdi) in
291
304
(* CHECK: dbg_declare(ptr %my_alloca, ![[#]], !DIExpression(), ![[#]])
292
305
*)
293
- let arg0 = (Llvm. params f).(0 ) in
306
+ let arg1 = (Llvm. params f).(1 ) in
294
307
let arg_var = Llvm_debuginfo. dibuild_create_parameter_variable dibuilder ~scope: fun_di
295
308
~name: " my_arg" ~argno: 1 ~file: file_di ~line: 10 ~ty
296
309
~always_preserve: false flags_zero
297
310
in
298
- let argdi = Llvm_debuginfo. dibuild_insert_declare_before dibuilder ~storage: arg0
311
+ let argdi = Llvm_debuginfo. dibuild_insert_declare_before dibuilder ~storage: arg1
299
312
~var_info: arg_var ~expr: (Llvm_debuginfo. dibuild_expression dibuilder [||])
300
313
~location ~instr: entry_term
301
314
in
302
315
let () = Printf. printf " %s\n " (Llvm. string_of_lldbgrecord argdi) in
303
- (* CHECK: dbg_declare(i32 %0 , ![[#]], !DIExpression(), ![[#]])
316
+ (* CHECK: dbg_declare(ptr %1 , ![[#]], !DIExpression(), ![[#]])
304
317
*)
305
318
()
306
319
0 commit comments