Skip to content

[OCaml] Fix test with invalid usage of #dbg_declare #134508

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
Apr 7, 2025
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 21 additions & 8 deletions llvm/test/Bindings/OCaml/debuginfo.ml
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,18 @@ let test_get_function m dibuilder file_di m_di =
stdout_metadata int_ty_di;
(* CHECK: [[INT32_PTR:<0x[0-9a-f]*>]] = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
*)
let param_types = [| null_metadata; int_ty_di |] in
let int_ptr_ty_di =
Llvm_debuginfo.dibuild_create_pointer_type dibuilder
~pointee_ty:int_ty_di
~size_in_bits:32
~align_in_bits:32
~address_space:0
~name:"ptrint"
in
stdout_metadata int_ptr_ty_di;
(* CHECK: [[PTRINT32_PTR:<0x[0-9a-f]*>]] = !DIDerivedType(tag: DW_TAG_pointer_type, name: "ptrint", baseType: [[INT32_PTR]], size: 32, align: 32, dwarfAddressSpace: 0)
*)
let param_types = [| null_metadata; int_ty_di; int_ptr_ty_di |] in
let fty_di =
Llvm_debuginfo.dibuild_create_subroutine_type dibuilder ~file:file_di
~param_types flags_zero
Expand All @@ -126,15 +137,16 @@ let test_get_function m dibuilder file_di m_di =
Llvm_debuginfo.dibuild_get_or_create_type_array dibuilder ~data:param_types
in
stdout_metadata fty_di_args;
(* CHECK: [[FARGS_PTR:<0x[0-9a-f]*>]] = !{null, [[INT32_PTR]]}
(* CHECK: [[FARGS_PTR:<0x[0-9a-f]*>]] = !{null, [[INT32_PTR]], [[PTRINT32_PTR]]}
*)
stdout_metadata fty_di;
(* CHECK: [[SBRTNTY_PTR:<0x[0-9a-f]*>]] = !DISubroutineType(types: [[FARGS_PTR]])
*)
(* Let's create the LLVM-IR function now. *)
let name = "tfun" in
let fty =
Llvm.function_type (Llvm.void_type context) [| Llvm.i32_type context |]
Llvm.function_type (Llvm.void_type context)
[| Llvm.i32_type context; Llvm.pointer_type context |]
in
let f = Llvm.define_function name fty m in
let f_di =
Expand All @@ -160,11 +172,12 @@ let test_bbinstr fty f f_di file_di dibuilder =
group "basic_block and instructions tests";
(* Create this pattern:
* if (arg0 != 0) {
* foo(arg0);
* foo(arg0, arg1);
* }
* return;
*)
let arg0 = (Llvm.params f).(0) in
let arg1 = (Llvm.params f).(1) in
let builder = Llvm.builder_at_end context (Llvm.entry_block f) in
let zero = Llvm.const_int (Llvm.i32_type context) 0 in
let cmpi = Llvm.build_icmp Llvm.Icmp.Ne zero arg0 "cmpi" builder in
Expand All @@ -185,7 +198,7 @@ let test_bbinstr fty f f_di file_di dibuilder =
| Some file_of_f_di', Some file_of_scope' ->
file_of_f_di' = file_di && file_of_scope' = file_di
| _ -> false );
let foocall = Llvm.build_call fty foodecl [| arg0 |] "" builder in
let foocall = Llvm.build_call fty foodecl [| arg0; arg1 |] "" builder in
let foocall_loc =
Llvm_debuginfo.dibuild_create_debug_location context ~line:10 ~column:12
~scope
Expand Down Expand Up @@ -290,17 +303,17 @@ let test_variables f dibuilder file_di fun_di =
let () = Printf.printf "%s\n" (Llvm.string_of_lldbgrecord vdi) in
(* CHECK: dbg_declare(ptr %my_alloca, ![[#]], !DIExpression(), ![[#]])
*)
let arg0 = (Llvm.params f).(0) in
let arg1 = (Llvm.params f).(1) in
let arg_var = Llvm_debuginfo.dibuild_create_parameter_variable dibuilder ~scope:fun_di
~name:"my_arg" ~argno:1 ~file:file_di ~line:10 ~ty
~always_preserve:false flags_zero
in
let argdi = Llvm_debuginfo.dibuild_insert_declare_before dibuilder ~storage:arg0
let argdi = Llvm_debuginfo.dibuild_insert_declare_before dibuilder ~storage:arg1
~var_info:arg_var ~expr:(Llvm_debuginfo.dibuild_expression dibuilder [||])
~location ~instr:entry_term
in
let () = Printf.printf "%s\n" (Llvm.string_of_lldbgrecord argdi) in
(* CHECK: dbg_declare(i32 %0, ![[#]], !DIExpression(), ![[#]])
(* CHECK: dbg_declare(ptr %1, ![[#]], !DIExpression(), ![[#]])
*)
()

Expand Down