diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2018-06-13 02:06:28 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2018-06-13 02:06:28 +0000 |
commit | 8fa638ae6fdad381c8b50c4374b786f57f98bf53 (patch) | |
tree | f9c74dc1e01c775f1491abd7abc2cac7e3d51327 /clang/lib/CodeGen/CGExprAgg.cpp | |
parent | 92b931d519d46b84453ca2278ce95abad855b37e (diff) | |
download | bcm5719-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/CGExprAgg.cpp')
-rw-r--r-- | clang/lib/CodeGen/CGExprAgg.cpp | 2 |
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()); |