summaryrefslogtreecommitdiffstats
path: root/clang
diff options
context:
space:
mode:
authorKrzysztof Parzyszek <kparzysz@codeaurora.org>2017-05-12 13:18:07 +0000
committerKrzysztof Parzyszek <kparzysz@codeaurora.org>2017-05-12 13:18:07 +0000
commit408b272a006a32b4b57ea56bd50f738bea4b5054 (patch)
tree9aad28cab4fd976288c63d5522de449f82951dc4 /clang
parent7f03231cc6bb5cfd5245e9edf9a06d7d3486a3d4 (diff)
downloadbcm5719-llvm-408b272a006a32b4b57ea56bd50f738bea4b5054.tar.gz
bcm5719-llvm-408b272a006a32b4b57ea56bd50f738bea4b5054.zip
[Hexagon] Make sure to pass empty struct arguments with nontrivial ctors
Thanks to Richard Smith for the suggested fix. This fixes llvm.org/PR33009 llvm-svn: 302895
Diffstat (limited to 'clang')
-rw-r--r--clang/lib/CodeGen/TargetInfo.cpp6
-rw-r--r--clang/test/CodeGenCXX/array-default-argument.cpp4
2 files changed, 3 insertions, 7 deletions
diff --git a/clang/lib/CodeGen/TargetInfo.cpp b/clang/lib/CodeGen/TargetInfo.cpp
index 33d6a6ff414..18367d1602b 100644
--- a/clang/lib/CodeGen/TargetInfo.cpp
+++ b/clang/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/clang/test/CodeGenCXX/array-default-argument.cpp b/clang/test/CodeGenCXX/array-default-argument.cpp
index a215c8f2172..a07e3908392 100644
--- a/clang/test/CodeGenCXX/array-default-argument.cpp
+++ b/clang/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();
OpenPOWER on IntegriCloud