about summary refs log tree commit diff
path: root/compiler/rustc_codegen_llvm/src/llvm
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2025-07-11 01:06:04 +0000
committerbors <bors@rust-lang.org>2025-07-11 01:06:04 +0000
commitcdac44e608c3df9a241e0a1b53b3f62af250dbf1 (patch)
treef7e355279b7866227d1019dec44e56752e73cad5 /compiler/rustc_codegen_llvm/src/llvm
parent2a023bf80a6fbd6a06d5460a34eb247b986286ed (diff)
parent3a1bb04166b58762d8d9a1a7d1f5a24a938891f6 (diff)
downloadrust-cdac44e608c3df9a241e0a1b53b3f62af250dbf1.tar.gz
rust-cdac44e608c3df9a241e0a1b53b3f62af250dbf1.zip
Auto merge of #143762 - tgross35:rollup-n9t27c6, r=tgross35
Rollup of 7 pull requests

Successful merges:

 - rust-lang/rust#140136 (Add an aarch64-msvc build running on ARM64 Windows)
 - rust-lang/rust#143642 (stdarch subtree update)
 - rust-lang/rust#143707 (Fix `--skip-std-check-if-no-download-rustc`)
 - rust-lang/rust#143722 (Make some "safe" llvm ops actually sound)
 - rust-lang/rust#143728 (Resolve refactor: extraction of `finalize_module_binding` and `single_import_can_define_name`)
 - rust-lang/rust#143742 (Rework borrowing suggestions to use `Expr` instead of just `Span`)
 - rust-lang/rust#143744 (Properly track the depth when expanding free alias types)

r? `@ghost`
`@rustbot` modify labels: rollup
Diffstat (limited to 'compiler/rustc_codegen_llvm/src/llvm')
-rw-r--r--compiler/rustc_codegen_llvm/src/llvm/mod.rs10
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()
     }
 }