summaryrefslogtreecommitdiffstats
path: root/clang/lib/CodeGen
diff options
context:
space:
mode:
authorRichard Smith <richard-llvm@metafoo.co.uk>2018-06-13 02:06:28 +0000
committerRichard Smith <richard-llvm@metafoo.co.uk>2018-06-13 02:06:28 +0000
commit8fa638ae6fdad381c8b50c4374b786f57f98bf53 (patch)
treef9c74dc1e01c775f1491abd7abc2cac7e3d51327 /clang/lib/CodeGen
parent92b931d519d46b84453ca2278ce95abad855b37e (diff)
downloadbcm5719-llvm-8fa638ae6fdad381c8b50c4374b786f57f98bf53.tar.gz
bcm5719-llvm-8fa638ae6fdad381c8b50c4374b786f57f98bf53.zip
Fix crash emitting transparent list initializer for a large aggregate.
llvm-svn: 334565
Diffstat (limited to 'clang/lib/CodeGen')
-rw-r--r--clang/lib/CodeGen/CGExprAgg.cpp2
1 files changed, 2 insertions, 0 deletions
diff --git a/clang/lib/CodeGen/CGExprAgg.cpp b/clang/lib/CodeGen/CGExprAgg.cpp
index 41e32a9d60f..d350a86a117 100644
--- a/clang/lib/CodeGen/CGExprAgg.cpp
+++ b/clang/lib/CodeGen/CGExprAgg.cpp
@@ -1673,6 +1673,8 @@ static CharUnits GetNumNonZeroBytesInInit(const Expr *E, CodeGenFunction &CGF) {
// If this is an initlist expr, sum up the size of sizes of the (present)
// elements. If this is something weird, assume the whole thing is non-zero.
const InitListExpr *ILE = dyn_cast<InitListExpr>(E);
+ while (ILE && ILE->isTransparent())
+ ILE = dyn_cast<InitListExpr>(ILE->getInit(0));
if (!ILE || !CGF.getTypes().isZeroInitializable(ILE->getType()))
return CGF.getContext().getTypeSizeInChars(E->getType());
OpenPOWER on IntegriCloud