https://github.com/Jolyon0202 created https://github.com/llvm/llvm-project/pull/72624
Fix bug when emit null struct with attribute aligned(16) and ICE of debugbuild. >From f0245b42534f423edaba45c2b3b2dffeb86e3074 Mon Sep 17 00:00:00 2001 From: Jian Yang <yangjia...@huawei.com> Date: Wed, 15 Nov 2023 15:44:35 +0800 Subject: [PATCH] [clang] fix emitvaarg when struct is null Fix bug when emit null struct with attribute aligned(16) and ICE of debugbuild. --- clang/lib/CodeGen/Targets/AArch64.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/clang/lib/CodeGen/Targets/AArch64.cpp b/clang/lib/CodeGen/Targets/AArch64.cpp index be5145daa00b7f5..49dff102b7d554a 100644 --- a/clang/lib/CodeGen/Targets/AArch64.cpp +++ b/clang/lib/CodeGen/Targets/AArch64.cpp @@ -526,7 +526,7 @@ Address AArch64ABIInfo::EmitAAPCSVAArg(Address VAListAddr, QualType Ty, llvm::Type *BaseTy = CGF.ConvertType(Ty); if (IsIndirect) BaseTy = llvm::PointerType::getUnqual(BaseTy); - else if (AI.getCoerceToType()) + else if (AI.canHaveCoerceToType() && AI.getCoerceToType()) BaseTy = AI.getCoerceToType(); unsigned NumRegs = 1; @@ -594,7 +594,7 @@ Address AArch64ABIInfo::EmitAAPCSVAArg(Address VAListAddr, QualType Ty, // Integer arguments may need to correct register alignment (for example a // "struct { __int128 a; };" gets passed in x_2N, x_{2N+1}). In this case we // align __gr_offs to calculate the potential address. - if (!IsFPR && !IsIndirect && TyAlign.getQuantity() > 8) { + if (!IsFPR && !IsIndirect && TyAlign.getQuantity() > 8 && !TySize.isZero()) { int Align = TyAlign.getQuantity(); reg_offs = CGF.Builder.CreateAdd( _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits