diff options
| author | bjorn3 <bjorn3@users.noreply.github.com> | 2020-11-14 19:16:43 +0100 |
|---|---|---|
| committer | bjorn3 <bjorn3@users.noreply.github.com> | 2020-11-21 19:22:31 +0100 |
| commit | 39b8b2b623087fa643daeed424bd2fa79076f463 (patch) | |
| tree | f95a86e89504bccfa8d75930b5eaa19cf76e3dc2 /compiler/rustc_codegen_llvm/src | |
| parent | 42b0b8080d10b412d51d414a0de0e08959a64f5f (diff) | |
| download | rust-39b8b2b623087fa643daeed424bd2fa79076f463.tar.gz rust-39b8b2b623087fa643daeed424bd2fa79076f463.zip | |
Remove StructRet arg attr
It is applied exactly when the return value has an indirect pass mode. Except for InReg on x86 fastcall, arg attrs are now only used for optimization purposes and thus are fine to ignore.
Diffstat (limited to 'compiler/rustc_codegen_llvm/src')
| -rw-r--r-- | compiler/rustc_codegen_llvm/src/abi.rs | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/compiler/rustc_codegen_llvm/src/abi.rs b/compiler/rustc_codegen_llvm/src/abi.rs index e988fdb9d5c..bb152104d64 100644 --- a/compiler/rustc_codegen_llvm/src/abi.rs +++ b/compiler/rustc_codegen_llvm/src/abi.rs @@ -36,7 +36,7 @@ impl ArgAttributeExt for ArgAttribute { where F: FnMut(llvm::Attribute), { - for_each_kind!(self, f, NoAlias, NoCapture, NonNull, ReadOnly, StructRet, InReg) + for_each_kind!(self, f, NoAlias, NoCapture, NonNull, ReadOnly, InReg) } } @@ -429,7 +429,8 @@ impl<'tcx> FnAbiLlvmExt<'tcx> for FnAbi<'tcx, Ty<'tcx>> { } PassMode::Indirect { ref attrs, extra_attrs: _, on_stack } => { assert!(!on_stack); - apply(attrs); + let i = apply(attrs); + llvm::Attribute::StructRet.apply_llfn(llvm::AttributePlace::Argument(i), llfn); } _ => {} } @@ -484,7 +485,9 @@ impl<'tcx> FnAbiLlvmExt<'tcx> for FnAbi<'tcx, Ty<'tcx>> { } PassMode::Indirect { ref attrs, extra_attrs: _, on_stack } => { assert!(!on_stack); - apply(attrs); + let i = apply(attrs); + llvm::Attribute::StructRet + .apply_callsite(llvm::AttributePlace::Argument(i), callsite); } _ => {} } |
