diff options
Diffstat (limited to 'compiler/rustc_codegen_llvm/src/abi.rs')
| -rw-r--r-- | compiler/rustc_codegen_llvm/src/abi.rs | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/compiler/rustc_codegen_llvm/src/abi.rs b/compiler/rustc_codegen_llvm/src/abi.rs index d714ff1fe9b..d9393ffe534 100644 --- a/compiler/rustc_codegen_llvm/src/abi.rs +++ b/compiler/rustc_codegen_llvm/src/abi.rs @@ -430,7 +430,13 @@ impl<'tcx> FnAbiLlvmExt<'tcx> for FnAbi<'tcx, Ty<'tcx>> { PassMode::Indirect { ref attrs, extra_attrs: _, on_stack } => { assert!(!on_stack); let i = apply(attrs); - llvm::Attribute::StructRet.apply_llfn(llvm::AttributePlace::Argument(i), llfn); + unsafe { + llvm::LLVMRustAddStructRetAttr( + llfn, + llvm::AttributePlace::Argument(i).as_uint(), + self.ret.layout.llvm_type(cx), + ); + } } _ => {} } @@ -486,8 +492,13 @@ impl<'tcx> FnAbiLlvmExt<'tcx> for FnAbi<'tcx, Ty<'tcx>> { PassMode::Indirect { ref attrs, extra_attrs: _, on_stack } => { assert!(!on_stack); let i = apply(attrs); - llvm::Attribute::StructRet - .apply_callsite(llvm::AttributePlace::Argument(i), callsite); + unsafe { + llvm::LLVMRustAddStructRetCallSiteAttr( + callsite, + llvm::AttributePlace::Argument(i).as_uint(), + self.ret.layout.llvm_type(bx), + ); + } } _ => {} } |
