[cfe-commits] r105592 - /cfe/trunk/lib/CodeGen/TargetInfo.cpp

Rafael Espindola rafael.espindola at gmail.com
Mon Jun 7 19:42:09 PDT 2010


Author: rafael
Date: Mon Jun  7 21:42:08 2010
New Revision: 105592

URL: http://llvm.org/viewvc/llvm-project?rev=105592&view=rev
Log:
Fix passing and returning of objects with non trivial copy constructors on
ARM.

Fixes PR7310.

Modified:
    cfe/trunk/lib/CodeGen/TargetInfo.cpp

Modified: cfe/trunk/lib/CodeGen/TargetInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/TargetInfo.cpp?rev=105592&r1=105591&r2=105592&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/TargetInfo.cpp (original)
+++ cfe/trunk/lib/CodeGen/TargetInfo.cpp Mon Jun  7 21:42:08 2010
@@ -1808,6 +1808,11 @@
   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::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))





More information about the cfe-commits mailing list