forked from OSchip/llvm-project
Fix passing and returning of objects with non trivial copy constructors on
ARM. Fixes PR7310. llvm-svn: 105592
This commit is contained in:
parent
0271c5928e
commit
bbd44ef673
|
@ -1808,6 +1808,11 @@ ABIArgInfo ARMABIInfo::classifyArgumentType(QualType Ty,
|
|||
if (isEmptyRecord(Context, Ty, true))
|
||||
return ABIArgInfo::getIgnore();
|
||||
|
||||
// Structures with either a non-trivial destructor or a non-trivial
|
||||
// copy constructor are always indirect.
|
||||
if (isRecordWithNonTrivialDestructorOrCopyConstructor(Ty))
|
||||
return ABIArgInfo::getIndirect(0, /*ByVal=*/false);
|
||||
|
||||
// FIXME: This is kind of nasty... but there isn't much choice because the ARM
|
||||
// backend doesn't support byval.
|
||||
// FIXME: This doesn't handle alignment > 64 bits.
|
||||
|
@ -1927,6 +1932,11 @@ ABIArgInfo ARMABIInfo::classifyReturnType(QualType RetTy,
|
|||
ABIArgInfo::getExtend() : ABIArgInfo::getDirect());
|
||||
}
|
||||
|
||||
// Structures with either a non-trivial destructor or a non-trivial
|
||||
// copy constructor are always indirect.
|
||||
if (isRecordWithNonTrivialDestructorOrCopyConstructor(RetTy))
|
||||
return ABIArgInfo::getIndirect(0, /*ByVal=*/false);
|
||||
|
||||
// Are we following APCS?
|
||||
if (getABIKind() == APCS) {
|
||||
if (isEmptyRecord(Context, RetTy, false))
|
||||
|
|
Loading…
Reference in New Issue