summaryrefslogtreecommitdiffstats
path: root/clang/lib/CodeGen/CGExprAgg.cpp
diff options
context:
space:
mode:
authorReid Kleckner <reid@kleckner.net>2015-05-20 21:59:25 +0000
committerReid Kleckner <reid@kleckner.net>2015-05-20 21:59:25 +0000
commit892bb0cace9f733df800e4875fcf9325f860501a (patch)
treebeec6f4d8624b513239270980ae51f497f6e2a40 /clang/lib/CodeGen/CGExprAgg.cpp
parent0c28fd7fda3d9e58d9efefb63a249e0270ef7ba4 (diff)
downloadbcm5719-llvm-892bb0cace9f733df800e4875fcf9325f860501a.tar.gz
bcm5719-llvm-892bb0cace9f733df800e4875fcf9325f860501a.zip
Evaluate union cast subexpressions when the cast value is unused
Fixes PR23597. llvm-svn: 237839
Diffstat (limited to 'clang/lib/CodeGen/CGExprAgg.cpp')
-rw-r--r--clang/lib/CodeGen/CGExprAgg.cpp7
1 files changed, 6 insertions, 1 deletions
diff --git a/clang/lib/CodeGen/CGExprAgg.cpp b/clang/lib/CodeGen/CGExprAgg.cpp
index 77e4464ee8c..6fedf0efda9 100644
--- a/clang/lib/CodeGen/CGExprAgg.cpp
+++ b/clang/lib/CodeGen/CGExprAgg.cpp
@@ -584,7 +584,12 @@ void AggExprEmitter::VisitCastExpr(CastExpr *E) {
}
case CK_ToUnion: {
- if (Dest.isIgnored()) break;
+ // Evaluate even if the destination is ignored.
+ if (Dest.isIgnored()) {
+ CGF.EmitAnyExpr(E->getSubExpr(), AggValueSlot::ignored(),
+ /*ignoreResult=*/true);
+ break;
+ }
// GCC union extension
QualType Ty = E->getSubExpr()->getType();
OpenPOWER on IntegriCloud