summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--clang/AST/Expr.cpp11
1 files changed, 9 insertions, 2 deletions
diff --git a/clang/AST/Expr.cpp b/clang/AST/Expr.cpp
index 15fbb24a0d4..5871a5c8682 100644
--- a/clang/AST/Expr.cpp
+++ b/clang/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;
OpenPOWER on IntegriCloud