summaryrefslogtreecommitdiff
path: root/www
diff options
context:
space:
mode:
authorRichard Smith <richard-llvm@metafoo.co.uk>2016-09-28 19:09:10 +0000
committerRichard Smith <richard-llvm@metafoo.co.uk>2016-09-28 19:09:10 +0000
commit7da28aef685751f924bec4ea82195b6e19e2bfe5 (patch)
tree3b5f8f915f189a37662d367405f9232b3d0f8369 /www
parent6a96fd6a5252d5f6c32d116e2ca1b7a867a3db1a (diff)
downloadclang-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.html11
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&lt;&lt;</tt>, <tt>operator&gt;&gt;</tt>, <tt>operator-&gt;*</tt>,
+<tt>operator&amp;&amp;</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>