about summary refs log tree commit diff
path: root/compiler/rustc_codegen_llvm/src/llvm/ffi.rs
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2024-04-25 04:31:56 +0000
committerbors <bors@rust-lang.org>2024-04-25 04:31:56 +0000
commit284f94f9c0f77ad4ef85323a634cfda29c1a801d (patch)
treed0857c02932df2dc5d1d32691edd1ae5a06e0e86 /compiler/rustc_codegen_llvm/src/llvm/ffi.rs
parentcb3752d20e0f5d24348062211102a08d46fbecff (diff)
parent976267b5141ef9a72ba3cb9edf01ca3bc53ec81e (diff)
downloadrust-284f94f9c0f77ad4ef85323a634cfda29c1a801d.tar.gz
rust-284f94f9c0f77ad4ef85323a634cfda29c1a801d.zip
Auto merge of #121298 - nikic:writable, r=cuviper
Set writable and dead_on_unwind attributes for sret arguments

Set the `writable` and `dead_on_unwind` attributes for `sret` arguments. This allows call slot optimization to remove more memcpy's.

See https://llvm.org/docs/LangRef.html#parameter-attributes for the specification of these attributes. In short, the statement we're making here is that:

 * The return slot is writable.
 * The return slot will not be read if the function unwinds.

Fixes https://github.com/rust-lang/rust/issues/90595.
Diffstat (limited to 'compiler/rustc_codegen_llvm/src/llvm/ffi.rs')
-rw-r--r--compiler/rustc_codegen_llvm/src/llvm/ffi.rs2
1 files changed, 2 insertions, 0 deletions
diff --git a/compiler/rustc_codegen_llvm/src/llvm/ffi.rs b/compiler/rustc_codegen_llvm/src/llvm/ffi.rs
index a10dc61967e..7a34e21628d 100644
--- a/compiler/rustc_codegen_llvm/src/llvm/ffi.rs
+++ b/compiler/rustc_codegen_llvm/src/llvm/ffi.rs
@@ -200,6 +200,8 @@ pub enum AttributeKind {
     AllocAlign = 39,
     SanitizeSafeStack = 40,
     FnRetThunkExtern = 41,
+    Writable = 42,
+    DeadOnUnwind = 43,
 }
 
 /// LLVMIntPredicate