jdoerfert added a comment. In D71225#1776105 <https://reviews.llvm.org/D71225#1776105>, @cchen wrote:
> Oops, accidentally remove my own comment. I'm not sure why `iarr[foo(), > foo(), 0]` violate the rule since it will be evaluated as `iarr[0]`, and the > counter `foo()` modified is also in the same location for both left hand side > and right hand side. It's not a violation but it taps into the unspecified behavior, which in combination with side effects seems to be worth a warning. So my reasoning is: //x := `iarr[foo(), foo(), 0]`// which is fine on its own. Using it in the atomic update of the form, // x = x + 1// also fine. However, the standard says the number of times //x// is evaluated is unspecified. Thus, transforming the above to // x += 1 // should be valid. So should be, // t = &x; *t = *t + 1 // and even // x = (x, x, x, x+1) // Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D71225/new/ https://reviews.llvm.org/D71225 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits