diff options
| author | Laurențiu Nicola <lnicola@users.noreply.github.com> | 2025-07-15 14:52:23 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-07-15 14:52:23 +0000 |
| commit | 0393e061e74672661d7f816103df66b47b1dc312 (patch) | |
| tree | b3d42464413144da825bfc98a7375319f12d4dc5 /compiler/rustc_codegen_llvm/src/llvm/mod.rs | |
| parent | 4faef6f9040c788d564449a2b9431f351bc0f403 (diff) | |
| parent | 28f822f100c3714b37be9566b6dac376c72d2758 (diff) | |
| download | rust-0393e061e74672661d7f816103df66b47b1dc312.tar.gz rust-0393e061e74672661d7f816103df66b47b1dc312.zip | |
Merge pull request #20243 from lnicola/sync-from-rust
minor: Sync from downstream
Diffstat (limited to 'compiler/rustc_codegen_llvm/src/llvm/mod.rs')
| -rw-r--r-- | compiler/rustc_codegen_llvm/src/llvm/mod.rs | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/compiler/rustc_codegen_llvm/src/llvm/mod.rs b/compiler/rustc_codegen_llvm/src/llvm/mod.rs index 661174a80df..3fc83fca352 100644 --- a/compiler/rustc_codegen_llvm/src/llvm/mod.rs +++ b/compiler/rustc_codegen_llvm/src/llvm/mod.rs @@ -211,7 +211,7 @@ pub(crate) fn SetFunctionCallConv(fn_: &Value, cc: CallConv) { // function. // For more details on COMDAT sections see e.g., https://www.airs.com/blog/archives/52 pub(crate) fn SetUniqueComdat(llmod: &Module, val: &Value) { - let name_buf = get_value_name(val).to_vec(); + let name_buf = get_value_name(val); let name = CString::from_vec_with_nul(name_buf).or_else(|buf| CString::new(buf.into_bytes())).unwrap(); set_comdat(llmod, val, &name); @@ -319,12 +319,14 @@ pub(crate) fn get_param(llfn: &Value, index: c_uint) -> &Value { } } -/// Safe wrapper for `LLVMGetValueName2` into a byte slice -pub(crate) fn get_value_name(value: &Value) -> &[u8] { +/// Safe wrapper for `LLVMGetValueName2` +/// Needs to allocate the value, because `set_value_name` will invalidate +/// the pointer. +pub(crate) fn get_value_name(value: &Value) -> Vec<u8> { unsafe { let mut len = 0; let data = LLVMGetValueName2(value, &mut len); - std::slice::from_raw_parts(data.cast(), len) + std::slice::from_raw_parts(data.cast(), len).to_vec() } } |
