]> granicus.if.org Git - clang/commit
P0145R3 (C++17 evaluation order tweaks): evaluate the right-hand side of
authorRichard Smith <richard-llvm@metafoo.co.uk>
Tue, 27 Sep 2016 23:44:22 +0000 (23:44 +0000)
committerRichard Smith <richard-llvm@metafoo.co.uk>
Tue, 27 Sep 2016 23:44:22 +0000 (23:44 +0000)
commit5b3280c92156724556fda9ff06e804f397cb3df7
tree08185dc1f8b37a0b76fb0bd9730ac3ce4b1b73d4
parent53874ed2c9a0976df7b8474cd673c0ece8f7bb02
P0145R3 (C++17 evaluation order tweaks): evaluate the right-hand side of
assignment and compound-assignment operators before the left-hand side. (Even
if it's an overloaded operator.)

This completes the implementation of P0145R3 + P0400R0 for all targets except
Windows, where the evaluation order guarantees for <<, >>, and ->* are
unimplementable as the ABI requires the function arguments are evaluated from
right to left (because parameter destructors are run from left to right in the
callee).

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@282556 91177308-0d34-0410-b5e6-96231b3b80d8
include/clang/AST/ExprCXX.h
lib/CodeGen/CGCall.cpp
lib/CodeGen/CGExpr.cpp
lib/CodeGen/CGExprCXX.cpp
lib/CodeGen/CodeGenFunction.h
lib/CodeGen/ItaniumCXXABI.cpp
test/CodeGenCXX/cxx1z-eval-order.cpp
test/CodeGenObjCXX/property-object-reference-2.mm
www/cxx_status.html