diff options
| author | bors <bors@rust-lang.org> | 2024-04-25 04:31:56 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2024-04-25 04:31:56 +0000 |
| commit | 284f94f9c0f77ad4ef85323a634cfda29c1a801d (patch) | |
| tree | d0857c02932df2dc5d1d32691edd1ae5a06e0e86 /compiler/rustc_llvm/llvm-wrapper/RustWrapper.cpp | |
| parent | cb3752d20e0f5d24348062211102a08d46fbecff (diff) | |
| parent | 976267b5141ef9a72ba3cb9edf01ca3bc53ec81e (diff) | |
| download | rust-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_llvm/llvm-wrapper/RustWrapper.cpp')
| -rw-r--r-- | compiler/rustc_llvm/llvm-wrapper/RustWrapper.cpp | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/compiler/rustc_llvm/llvm-wrapper/RustWrapper.cpp b/compiler/rustc_llvm/llvm-wrapper/RustWrapper.cpp index 565bdc3af03..20167a4b45e 100644 --- a/compiler/rustc_llvm/llvm-wrapper/RustWrapper.cpp +++ b/compiler/rustc_llvm/llvm-wrapper/RustWrapper.cpp @@ -312,6 +312,16 @@ static Attribute::AttrKind fromRust(LLVMRustAttribute Kind) { return Attribute::SafeStack; case FnRetThunkExtern: return Attribute::FnRetThunkExtern; +#if LLVM_VERSION_GE(18, 0) + case Writable: + return Attribute::Writable; + case DeadOnUnwind: + return Attribute::DeadOnUnwind; +#else + case Writable: + case DeadOnUnwind: + report_fatal_error("Not supported on this LLVM version"); +#endif } report_fatal_error("bad AttributeKind"); } |
