[PATCH] D22910: Add support for CXXOperatorCallExpr in Expr::HasSideEffects

Richard Smith via cfe-commits cfe-commits at lists.llvm.org
Thu Aug 18 12:25:38 PDT 2016


rsmith added inline comments.

================
Comment at: lib/AST/Expr.cpp:2865-2867
@@ +2864,5 @@
+  case CXXOperatorCallExprClass: {
+    // If it is an operator call expr it can have side effects when the
+    // underlaying operator is of assignment kind.
+    // Othrwise fall through the rest of cases.
+    OverloadedOperatorKind Op = cast<CXXOperatorCallExpr>(this)->getOperator();
----------------
Well, this is true for any overloaded operator. Perhaps something like

"When looking for potential side-effects, we assume that an overloaded assignment operator is intended to have a side-effect and other overloaded operators are not."

================
Comment at: lib/AST/Expr.cpp:2869-2871
@@ +2868,5 @@
+    OverloadedOperatorKind Op = cast<CXXOperatorCallExpr>(this)->getOperator();
+    if (CXXOperatorCallExpr::isAssignmentOp(Op)) {
+      return true;
+    }
+  }
----------------
I think this should go after the check for a pure callee -- if for whatever reason someone has defined an `operator=` with `__attribute__((pure))`, we shouldn't claim it has a side-effect.



https://reviews.llvm.org/D22910





More information about the cfe-commits mailing list