diff options
| author | Ralf Jung <post@ralfj.de> | 2025-07-14 06:06:20 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-07-14 06:06:20 +0000 |
| commit | 794dc328b46520f145091771db6531bf1d5b5c4e (patch) | |
| tree | 57b04ecd511abfddf715b5605fc0e091a7792d16 /compiler/rustc_codegen_llvm/src/llvm/mod.rs | |
| parent | 91a52cac82ead1d8ed75fa5bd22df228a250bb17 (diff) | |
| parent | 8812d741eb54c58ee1b9bf6bd69e60f08bba941a (diff) | |
| download | rust-794dc328b46520f145091771db6531bf1d5b5c4e.tar.gz rust-794dc328b46520f145091771db6531bf1d5b5c4e.zip | |
Merge pull request #4467 from rust-lang/rustup-2025-07-14
Automatic Rustup
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() } } |
