Author: kparzysz Date: Fri May 12 08:18:07 2017 New Revision: 302895 URL: http://llvm.org/viewvc/llvm-project?rev=302895&view=rev Log: [Hexagon] Make sure to pass empty struct arguments with nontrivial ctors
Thanks to Richard Smith for the suggested fix. This fixes llvm.org/PR33009 Modified: cfe/trunk/lib/CodeGen/TargetInfo.cpp cfe/trunk/test/CodeGenCXX/array-default-argument.cpp Modified: cfe/trunk/lib/CodeGen/TargetInfo.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/TargetInfo.cpp?rev=302895&r1=302894&r2=302895&view=diff ============================================================================== --- cfe/trunk/lib/CodeGen/TargetInfo.cpp (original) +++ cfe/trunk/lib/CodeGen/TargetInfo.cpp Fri May 12 08:18:07 2017 @@ -7043,13 +7043,13 @@ ABIArgInfo HexagonABIInfo::classifyArgum ABIArgInfo::getExtend() : ABIArgInfo::getDirect()); } + if (CGCXXABI::RecordArgABI RAA = getRecordArgABI(Ty, getCXXABI())) + return getNaturalAlignIndirect(Ty, RAA == CGCXXABI::RAA_DirectInMemory); + // Ignore empty records. if (isEmptyRecord(getContext(), Ty, true)) return ABIArgInfo::getIgnore(); - if (CGCXXABI::RecordArgABI RAA = getRecordArgABI(Ty, getCXXABI())) - return getNaturalAlignIndirect(Ty, RAA == CGCXXABI::RAA_DirectInMemory); - uint64_t Size = getContext().getTypeSize(Ty); if (Size > 64) return getNaturalAlignIndirect(Ty, /*ByVal=*/true); Modified: cfe/trunk/test/CodeGenCXX/array-default-argument.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/array-default-argument.cpp?rev=302895&r1=302894&r2=302895&view=diff ============================================================================== --- cfe/trunk/test/CodeGenCXX/array-default-argument.cpp (original) +++ cfe/trunk/test/CodeGenCXX/array-default-argument.cpp Fri May 12 08:18:07 2017 @@ -1,10 +1,6 @@ // RUN: %clang_cc1 -emit-llvm -o - %s -triple %itanium_abi_triple | FileCheck %s // RUN: %clang_cc1 -emit-llvm -o - %s -triple %itanium_abi_triple -std=c++98 -fexceptions -fcxx-exceptions | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-EH -// Hexagon calling convention lowering is horribly broken and fails to pass A -// object to B constructor at all! -// XFAIL: hexagon - struct A { A(); ~A(); _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits