diff --git a/llvm/bindings/ocaml/llvm/llvm_ocaml.c b/llvm/bindings/ocaml/llvm/llvm_ocaml.c index d74d8030cea0d..55679f218b307 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 8ce6ee5cebb26..ebd4b4caaeb18 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 09746bdaf0c94..7cfe4dc4f775f 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 d6d159ab8b9e8..4b804a41a1676 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,