[llvm] [OCaml] Remove test with invalid usage of #dbg_declare (PR #134508)

via llvm-commits llvm-commits at lists.llvm.org
Sat Apr 5 14:43:49 PDT 2025


https://github.com/alan-j-hu updated https://github.com/llvm/llvm-project/pull/134508

>From 57fad57ccf33575d705d3c309a1d45b2dc6a3f83 Mon Sep 17 00:00:00 2001
From: Alan Hu <ahulambda at gmail.com>
Date: Sat, 5 Apr 2025 16:40:42 -0400
Subject: [PATCH 1/2] [OCaml] Remove test with invalid usage of #dbg_declare

Even though #dbg_declare can only describe pointers, one of the OCaml tests
tried to add a #dbg_declare to an i32 argument. The change introduced in
ecd4c08 caught this incorrect usage.
---
 llvm/test/Bindings/OCaml/debuginfo.ml | 12 ------------
 1 file changed, 12 deletions(-)

diff --git a/llvm/test/Bindings/OCaml/debuginfo.ml b/llvm/test/Bindings/OCaml/debuginfo.ml
index f95800dfcb025..797acbf4b9579 100644
--- a/llvm/test/Bindings/OCaml/debuginfo.ml
+++ b/llvm/test/Bindings/OCaml/debuginfo.ml
@@ -290,18 +290,6 @@ 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 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
-    ~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(), ![[#]])
-  *)
   ()
 
 let test_types dibuilder file_di m_di =

>From 1459b28a0b7b106e25d8ccef114cfda77c257a27 Mon Sep 17 00:00:00 2001
From: Alan Hu <ahulambda at gmail.com>
Date: Sat, 5 Apr 2025 17:43:26 -0400
Subject: [PATCH 2/2] Add pointer argument to OCaml debuginfo test function

---
 llvm/include/llvm-c/DebugInfo.h       |  2 +-
 llvm/test/Bindings/OCaml/debuginfo.ml | 35 +++++++++++++++++++++++----
 2 files changed, 31 insertions(+), 6 deletions(-)

diff --git a/llvm/include/llvm-c/DebugInfo.h b/llvm/include/llvm-c/DebugInfo.h
index 9fbe31d2629bd..11e0b9b4c81e8 100644
--- a/llvm/include/llvm-c/DebugInfo.h
+++ b/llvm/include/llvm-c/DebugInfo.h
@@ -173,7 +173,6 @@ enum {
   LLVMDISubrangeMetadataKind,
   LLVMDIEnumeratorMetadataKind,
   LLVMDIBasicTypeMetadataKind,
-  LLVMDIFixedPointTypeMetadataKind,
   LLVMDIDerivedTypeMetadataKind,
   LLVMDICompositeTypeMetadataKind,
   LLVMDISubroutineTypeMetadataKind,
@@ -199,6 +198,7 @@ enum {
   LLVMDIArgListMetadataKind,
   LLVMDIAssignIDMetadataKind,
   LLVMDISubrangeTypeMetadataKind,
+  LLVMDIFixedPointTypeMetadataKind,
 };
 typedef unsigned LLVMMetadataKind;
 
diff --git a/llvm/test/Bindings/OCaml/debuginfo.ml b/llvm/test/Bindings/OCaml/debuginfo.ml
index 797acbf4b9579..6ebc7c35879a4 100644
--- a/llvm/test/Bindings/OCaml/debuginfo.ml
+++ b/llvm/test/Bindings/OCaml/debuginfo.ml
@@ -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
@@ -126,7 +137,7 @@ 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]])
@@ -134,7 +145,8 @@ let test_get_function m dibuilder file_di m_di =
   (* 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 =
@@ -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
@@ -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
@@ -290,6 +303,18 @@ 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 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: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(ptr %1, ![[#]], !DIExpression(), ![[#]])
+  *)
   ()
 
 let test_types dibuilder file_di m_di =



More information about the llvm-commits mailing list