[llvm] [llvm-c] Add C API methods to match size_t ConstantDataArray C++ API signatures (PR #84433)
via llvm-commits
llvm-commits at lists.llvm.org
Fri Mar 8 10:13:58 PST 2024
https://github.com/erer1243 updated https://github.com/llvm/llvm-project/pull/84433
>From 7568060b8dbf5e8a81613ff40ed16abee5f61fde Mon Sep 17 00:00:00 2001
From: Oliver Faso <erer1243 at gmail.com>
Date: Fri, 8 Mar 2024 00:15:39 -0500
Subject: [PATCH] [llvm-c] Add C API methods to match size_t ConstantDataArray
C++ API signatures
---
llvm/bindings/ocaml/llvm/llvm_ocaml.c | 8 ++++----
llvm/docs/ReleaseNotes.rst | 3 +++
llvm/include/llvm-c/Core.h | 11 +++++++++++
llvm/lib/IR/Core.cpp | 9 +++++++++
4 files changed, 27 insertions(+), 4 deletions(-)
diff --git a/llvm/bindings/ocaml/llvm/llvm_ocaml.c b/llvm/bindings/ocaml/llvm/llvm_ocaml.c
index d74d8030cea0de..55679f218b307e 100644
--- a/llvm/bindings/ocaml/llvm/llvm_ocaml.c
+++ b/llvm/bindings/ocaml/llvm/llvm_ocaml.c
@@ -1043,14 +1043,14 @@ value llvm_const_float_of_string(value RealTy, value S) {
/* llcontext -> string -> llvalue */
value llvm_const_string(value Context, value Str) {
- return to_val(LLVMConstStringInContext(Context_val(Context), String_val(Str),
- caml_string_length(Str), 1));
+ return to_val(LLVMConstStringInContext2(Context_val(Context), String_val(Str),
+ caml_string_length(Str), 1));
}
/* llcontext -> string -> llvalue */
value llvm_const_stringz(value Context, value Str) {
- return to_val(LLVMConstStringInContext(Context_val(Context), String_val(Str),
- caml_string_length(Str), 0));
+ return to_val(LLVMConstStringInContext2(Context_val(Context), String_val(Str),
+ caml_string_length(Str), 0));
}
/* lltype -> llvalue array -> llvalue */
diff --git a/llvm/docs/ReleaseNotes.rst b/llvm/docs/ReleaseNotes.rst
index 8ce6ee5cebb266..ebd4b4caaeb18d 100644
--- a/llvm/docs/ReleaseNotes.rst
+++ b/llvm/docs/ReleaseNotes.rst
@@ -126,6 +126,9 @@ Changes to the C API
* Added ``LLVMGetBlockAddressFunction`` and ``LLVMGetBlockAddressBasicBlock``
functions for accessing the values in a blockaddress constant.
+* Added ``LLVMConstStringInContext2`` function, which better matches the C++
+ API by using ``size_t`` for string length. Deprecated ``LLVMConstStringInContext``.
+
Changes to the CodeGen infrastructure
-------------------------------------
diff --git a/llvm/include/llvm-c/Core.h b/llvm/include/llvm-c/Core.h
index 09746bdaf0c94e..7cfe4dc4f775fd 100644
--- a/llvm/include/llvm-c/Core.h
+++ b/llvm/include/llvm-c/Core.h
@@ -2165,11 +2165,22 @@ double LLVMConstRealGetDouble(LLVMValueRef ConstantVal, LLVMBool *losesInfo);
/**
* Create a ConstantDataSequential and initialize it with a string.
*
+ * @deprecated LLVMConstStringInContext is deprecated in favor of the API
+ * accurate LLVMConstStringInContext2
* @see llvm::ConstantDataArray::getString()
*/
LLVMValueRef LLVMConstStringInContext(LLVMContextRef C, const char *Str,
unsigned Length, LLVMBool DontNullTerminate);
+/**
+ * Create a ConstantDataSequential and initialize it with a string.
+ *
+ * @see llvm::ConstantDataArray::getString()
+ */
+LLVMValueRef LLVMConstStringInContext2(LLVMContextRef C, const char *Str,
+ size_t Length,
+ LLVMBool DontNullTerminate);
+
/**
* Create a ConstantDataSequential with string content in the global context.
*
diff --git a/llvm/lib/IR/Core.cpp b/llvm/lib/IR/Core.cpp
index d6d159ab8b9e83..4b804a41a1676f 100644
--- a/llvm/lib/IR/Core.cpp
+++ b/llvm/lib/IR/Core.cpp
@@ -1522,6 +1522,15 @@ LLVMValueRef LLVMConstStringInContext(LLVMContextRef C, const char *Str,
DontNullTerminate == 0));
}
+LLVMValueRef LLVMConstStringInContext2(LLVMContextRef C, const char *Str,
+ size_t Length,
+ LLVMBool DontNullTerminate) {
+ /* Inverted the sense of AddNull because ', 0)' is a
+ better mnemonic for null termination than ', 1)'. */
+ return wrap(ConstantDataArray::getString(*unwrap(C), StringRef(Str, Length),
+ DontNullTerminate == 0));
+}
+
LLVMValueRef LLVMConstString(const char *Str, unsigned Length,
LLVMBool DontNullTerminate) {
return LLVMConstStringInContext(LLVMGetGlobalContext(), Str, Length,
More information about the llvm-commits
mailing list