aboutsummaryrefslogtreecommitdiff
path: root/AST/Expr.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'AST/Expr.cpp')
-rw-r--r--AST/Expr.cpp11
1 files changed, 9 insertions, 2 deletions
diff --git a/AST/Expr.cpp b/AST/Expr.cpp
index 15fbb24a0d..5871a5c868 100644
--- a/AST/Expr.cpp
+++ b/AST/Expr.cpp
@@ -243,8 +243,15 @@ bool Expr::hasLocalSideEffect() const {
return UO->getSubExpr()->hasLocalSideEffect();
}
}
- case BinaryOperatorClass:
- return cast<BinaryOperator>(this)->isAssignmentOp();
+ case BinaryOperatorClass: {
+ const BinaryOperator *BinOp = cast<BinaryOperator>(this);
+ // Consider comma to have side effects if the LHS and RHS both do.
+ if (BinOp->getOpcode() == BinaryOperator::Comma)
+ return BinOp->getLHS()->hasLocalSideEffect() &&
+ BinOp->getRHS()->hasLocalSideEffect();
+
+ return BinOp->isAssignmentOp();
+ }
case CompoundAssignOperatorClass:
return true;