mirror of
https://github.com/intel/llvm.git
synced 2026-01-30 05:55:35 +08:00
Fix passing and returning of objects with non trivial copy constructors on
ARM. Fixes PR7310. llvm-svn: 105592
This commit is contained in:
@@ -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))
|
||||
|
||||
Reference in New Issue
Block a user