summaryrefslogtreecommitdiffstats
path: root/clang/lib/CodeGen/TargetInfo.cpp
diff options
context:
space:
mode:
authorAkira Hatanaka <ahatanak@gmail.com>2011-08-01 18:09:58 +0000
committerAkira Hatanaka <ahatanak@gmail.com>2011-08-01 18:09:58 +0000
commitdf425dbf04b6bc118d9813ddd99b7ea1e90ba7d9 (patch)
tree8341b04f178021ef174e3e4778a0a2e02f83fd7f /clang/lib/CodeGen/TargetInfo.cpp
parentaf8e96c185b2994f8b2cc051d1691f616acc801a (diff)
downloadbcm5719-llvm-df425dbf04b6bc118d9813ddd99b7ea1e90ba7d9.tar.gz
bcm5719-llvm-df425dbf04b6bc118d9813ddd99b7ea1e90ba7d9.zip
Pass records with non-trivial destructors or constructors indirectly.
llvm-svn: 136630
Diffstat (limited to 'clang/lib/CodeGen/TargetInfo.cpp')
-rw-r--r--clang/lib/CodeGen/TargetInfo.cpp5
1 files changed, 5 insertions, 0 deletions
diff --git a/clang/lib/CodeGen/TargetInfo.cpp b/clang/lib/CodeGen/TargetInfo.cpp
index ea0cec3d919..3866c2b2e50 100644
--- a/clang/lib/CodeGen/TargetInfo.cpp
+++ b/clang/lib/CodeGen/TargetInfo.cpp
@@ -2934,6 +2934,11 @@ ABIArgInfo MipsABIInfo::classifyArgumentType(QualType Ty) const {
if (getContext().getTypeSize(Ty) == 0)
return ABIArgInfo::getIgnore();
+ // Records with non trivial destructors/constructors should not be passed
+ // by value.
+ if (isRecordWithNonTrivialDestructorOrCopyConstructor(Ty))
+ return ABIArgInfo::getIndirect(0, /*ByVal=*/false);
+
return ABIArgInfo::getIndirect(0);
}
OpenPOWER on IntegriCloud