diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2016-09-28 19:09:10 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2016-09-28 19:09:10 +0000 |
commit | 7da28aef685751f924bec4ea82195b6e19e2bfe5 (patch) | |
tree | 3b5f8f915f189a37662d367405f9232b3d0f8369 /www | |
parent | 6a96fd6a5252d5f6c32d116e2ca1b7a867a3db1a (diff) | |
download | clang-7da28aef685751f924bec4ea82195b6e19e2bfe5.tar.gz |
Re-commit r282556, reverted in r282564, with a fix to CallArgList::addFrom to
function correctly when targeting MS ABIs (this appears to have never mattered
prior to this change).
Update test case to always cover both 32-bit and 64-bit Windows ABIs, since
they behave somewhat differently from each other here.
Update test case to also cover operators , && and ||, which it appears are also
affected by P0145R3 (they're not explicitly called out by the design document,
but this is the emergent behavior of the existing wording).
Original commit message:
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@282619 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'www')
-rw-r--r-- | www/cxx_status.html | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/www/cxx_status.html b/www/cxx_status.html index b22ec4598a..d77bff420f 100644 --- a/www/cxx_status.html +++ b/www/cxx_status.html @@ -701,7 +701,7 @@ as the draft C++1z standard evolves.</p> <tr> <td rowspan=2>Stricter expression evaluation order</td> <td><a href="http://wg21.link/p0145r3">P0145R3</a></td> - <td class="none" align="center" rowspan=2>No</td> + <td class="svn" align="center" rowspan=2>SVN <a href="#p0145">(10)</a></td> </tr> <tr> <td><a href="http://wg21.link/p0400r0">P0400R0</a></td> @@ -741,6 +741,15 @@ In Clang 3.7, a warning is emitted for all cases that would change meaning. </span><br> <span id="p0136">(9): This is the resolution to a Defect Report, so is applied to all language versions supporting inheriting constructors. +</span><br> +<span id="p0145">(10): Under the MS ABI, this feature is not fully implementable, +because the calling convention requires that function parameters are destroyed +from left to right in the callee. In order to guarantee that destruction order +is reverse construction order, the operands of overloaded +<tt>operator<<</tt>, <tt>operator>></tt>, <tt>operator->*</tt>, +<tt>operator&&</tt>, <tt>operator||</tt>, and <tt>operator,</tt> +functions are evaluated right-to-left under the MS ABI when called using operator +syntax, not left-to-right as P0145R3 requires. </span> </p> |