Pass value and valueLen to create a StringRef
Instead of creating a cstring. Co-authored-by: LoveSy <shana@zju.edu.cn>
This commit is contained in:
parent
adec1a2e84
commit
33db20978e
3 changed files with 10 additions and 10 deletions
|
@ -35,7 +35,6 @@ use libc::c_uint;
|
||||||
use std::borrow::Borrow;
|
use std::borrow::Borrow;
|
||||||
use std::cell::{Cell, RefCell};
|
use std::cell::{Cell, RefCell};
|
||||||
use std::ffi::CStr;
|
use std::ffi::CStr;
|
||||||
use std::ffi::CString;
|
|
||||||
use std::str;
|
use std::str;
|
||||||
|
|
||||||
/// There is one `CodegenCx` per compilation unit. Each one has its own LLVM
|
/// There is one `CodegenCx` per compilation unit. Each one has its own LLVM
|
||||||
|
@ -332,15 +331,14 @@ pub unsafe fn create_module<'ll>(
|
||||||
// correctly setting target-abi for the LTO object
|
// correctly setting target-abi for the LTO object
|
||||||
// FIXME: https://github.com/llvm/llvm-project/issues/50591
|
// FIXME: https://github.com/llvm/llvm-project/issues/50591
|
||||||
// If llvm_abiname is empty, emit nothing.
|
// If llvm_abiname is empty, emit nothing.
|
||||||
if matches!(sess.target.arch.as_ref(), "riscv32" | "riscv64")
|
let llvm_abiname = &sess.target.options.llvm_abiname;
|
||||||
&& !sess.target.options.llvm_abiname.is_empty()
|
if matches!(sess.target.arch.as_ref(), "riscv32" | "riscv64") && !llvm_abiname.is_empty() {
|
||||||
{
|
|
||||||
let llvm_abiname = CString::new(sess.target.options.llvm_abiname.as_ref()).unwrap();
|
|
||||||
llvm::LLVMRustAddModuleFlagString(
|
llvm::LLVMRustAddModuleFlagString(
|
||||||
llmod,
|
llmod,
|
||||||
llvm::LLVMModFlagBehavior::Error,
|
llvm::LLVMModFlagBehavior::Error,
|
||||||
c"target-abi".as_ptr() as *const _,
|
c"target-abi".as_ptr(),
|
||||||
llvm_abiname.as_ptr() as *const _,
|
llvm_abiname.as_ptr().cast(),
|
||||||
|
llvm_abiname.len(),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1813,6 +1813,7 @@ extern "C" {
|
||||||
merge_behavior: LLVMModFlagBehavior,
|
merge_behavior: LLVMModFlagBehavior,
|
||||||
name: *const c_char,
|
name: *const c_char,
|
||||||
value: *const c_char,
|
value: *const c_char,
|
||||||
|
value_len: size_t,
|
||||||
);
|
);
|
||||||
|
|
||||||
pub fn LLVMRustHasModuleFlag(M: &Module, name: *const c_char, len: size_t) -> bool;
|
pub fn LLVMRustHasModuleFlag(M: &Module, name: *const c_char, len: size_t) -> bool;
|
||||||
|
|
|
@ -829,9 +829,10 @@ extern "C" void LLVMRustAddModuleFlagString(
|
||||||
LLVMModuleRef M,
|
LLVMModuleRef M,
|
||||||
Module::ModFlagBehavior MergeBehavior,
|
Module::ModFlagBehavior MergeBehavior,
|
||||||
const char *Name,
|
const char *Name,
|
||||||
const char *Value) {
|
const char *Value,
|
||||||
llvm::LLVMContext &Ctx = unwrap(M)->getContext();
|
size_t ValueLen) {
|
||||||
unwrap(M)->addModuleFlag(MergeBehavior, Name, llvm::MDString::get(Ctx, Value));
|
unwrap(M)->addModuleFlag(MergeBehavior, Name,
|
||||||
|
MDString::get(unwrap(M)->getContext(), StringRef(Value, ValueLen)));
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" bool LLVMRustHasModuleFlag(LLVMModuleRef M, const char *Name,
|
extern "C" bool LLVMRustHasModuleFlag(LLVMModuleRef M, const char *Name,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue