From a1aa489a8005eb44cd6b103d582ae37a1b5eb052 Mon Sep 17 00:00:00 2001 From: Krzysztof Parzyszek Date: Fri, 12 May 2017 13:18:07 +0000 Subject: [PATCH] [Hexagon] Make sure to pass empty struct arguments with nontrivial ctors Thanks to Richard Smith for the suggested fix. This fixes llvm.org/PR33009 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@302895 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/TargetInfo.cpp | 6 +++--- test/CodeGenCXX/array-default-argument.cpp | 4 ---- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/lib/CodeGen/TargetInfo.cpp b/lib/CodeGen/TargetInfo.cpp index 33d6a6ff41..18367d1602 100644 --- a/lib/CodeGen/TargetInfo.cpp +++ b/lib/CodeGen/TargetInfo.cpp @@ -7043,13 +7043,13 @@ ABIArgInfo HexagonABIInfo::classifyArgumentType(QualType Ty) const { 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); diff --git a/test/CodeGenCXX/array-default-argument.cpp b/test/CodeGenCXX/array-default-argument.cpp index a215c8f217..a07e390839 100644 --- a/test/CodeGenCXX/array-default-argument.cpp +++ b/test/CodeGenCXX/array-default-argument.cpp @@ -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(); -- 2.40.0