jrtc27 created this revision. jrtc27 added a reviewer: arsenm. Herald added subscribers: kosarev, tpr. Herald added a project: All. jrtc27 requested review of this revision. Herald added subscribers: cfe-commits, wdng. Herald added a project: clang.
Indirect arguments are passed on the stack and so va_arg should use the default alloca address space, not hard-code 0, for pointers to those. The only in-tree target with a non-zero default alloca address space is AMDGPU, but that does not support variadic arguments, so we cannot test this upstream. However, downstream in CHERI LLVM (and Morello LLVM, a further fork of that) we have targets that do both and so require this change. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D132247 Files: clang/lib/CodeGen/TargetInfo.cpp Index: clang/lib/CodeGen/TargetInfo.cpp =================================================================== --- clang/lib/CodeGen/TargetInfo.cpp +++ clang/lib/CodeGen/TargetInfo.cpp @@ -392,8 +392,10 @@ // Cast the address we've calculated to the right type. llvm::Type *DirectTy = CGF.ConvertTypeForMem(ValueTy), *ElementTy = DirectTy; - if (IsIndirect) - DirectTy = DirectTy->getPointerTo(0); + if (IsIndirect) { + unsigned AllocaAS = CGF.CGM.getDataLayout().getAllocaAddrSpace(); + DirectTy = DirectTy->getPointerTo(AllocaAS); + } Address Addr = emitVoidPtrDirectVAArg(CGF, VAListAddr, DirectTy, DirectSize, DirectAlign,
Index: clang/lib/CodeGen/TargetInfo.cpp =================================================================== --- clang/lib/CodeGen/TargetInfo.cpp +++ clang/lib/CodeGen/TargetInfo.cpp @@ -392,8 +392,10 @@ // Cast the address we've calculated to the right type. llvm::Type *DirectTy = CGF.ConvertTypeForMem(ValueTy), *ElementTy = DirectTy; - if (IsIndirect) - DirectTy = DirectTy->getPointerTo(0); + if (IsIndirect) { + unsigned AllocaAS = CGF.CGM.getDataLayout().getAllocaAddrSpace(); + DirectTy = DirectTy->getPointerTo(AllocaAS); + } Address Addr = emitVoidPtrDirectVAArg(CGF, VAListAddr, DirectTy, DirectSize, DirectAlign,
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits