Author: marshall
Date: Wed Sep 12 07:46:17 2018
New Revision: 342057

URL: http://llvm.org/viewvc/llvm-project?rev=342057&view=rev
Log:
Implement LWG #3017. list splice functions should use addressof

Modified:
    libcxx/trunk/include/list
    libcxx/trunk/test/std/containers/sequences/list/list.ops/merge.pass.cpp
    libcxx/trunk/test/std/containers/sequences/list/list.ops/merge_comp.pass.cpp
    libcxx/trunk/www/cxx2a_status.html

Modified: libcxx/trunk/include/list
URL: 
http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/list?rev=342057&r1=342056&r2=342057&view=diff
==============================================================================
--- libcxx/trunk/include/list (original)
+++ libcxx/trunk/include/list Wed Sep 12 07:46:17 2018
@@ -2208,7 +2208,7 @@ template <class _Comp>
 void
 list<_Tp, _Alloc>::merge(list& __c, _Comp __comp)
 {
-    if (this != &__c)
+    if (this != _VSTD::addressof(__c))
     {
         iterator __f1 = begin();
         iterator __e1 = end();

Modified: 
libcxx/trunk/test/std/containers/sequences/list/list.ops/merge.pass.cpp
URL: 
http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/containers/sequences/list/list.ops/merge.pass.cpp?rev=342057&r1=342056&r2=342057&view=diff
==============================================================================
--- libcxx/trunk/test/std/containers/sequences/list/list.ops/merge.pass.cpp 
(original)
+++ libcxx/trunk/test/std/containers/sequences/list/list.ops/merge.pass.cpp Wed 
Sep 12 07:46:17 2018
@@ -10,6 +10,7 @@
 // <list>
 
 // void merge(list& x);
+// If (&addressof(x) == this) does nothing; otherwise ...
 
 #include <list>
 #include <cassert>
@@ -26,7 +27,16 @@ int main()
     std::list<int> c2(a2, a2+sizeof(a2)/sizeof(a2[0]));
     c1.merge(c2);
     assert(c1 == std::list<int>(a3, a3+sizeof(a3)/sizeof(a3[0])));
+    assert(c2.empty());
     }
+
+    {
+    int a1[] = {1, 3, 7, 9, 10};
+    std::list<int> c1(a1, a1+sizeof(a1)/sizeof(a1[0]));
+    c1.merge(c1);
+    assert((c1 == std::list<int>(a1, a1+sizeof(a1)/sizeof(a1[0]))));
+    }
+
 #if TEST_STD_VER >= 11
     {
     int a1[] = {1, 3, 7, 9, 10};
@@ -36,6 +46,7 @@ int main()
     std::list<int, min_allocator<int>> c2(a2, a2+sizeof(a2)/sizeof(a2[0]));
     c1.merge(c2);
     assert((c1 == std::list<int, min_allocator<int>>(a3, 
a3+sizeof(a3)/sizeof(a3[0]))));
+    assert(c2.empty());
     }
 #endif
 }

Modified: 
libcxx/trunk/test/std/containers/sequences/list/list.ops/merge_comp.pass.cpp
URL: 
http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/containers/sequences/list/list.ops/merge_comp.pass.cpp?rev=342057&r1=342056&r2=342057&view=diff
==============================================================================
--- 
libcxx/trunk/test/std/containers/sequences/list/list.ops/merge_comp.pass.cpp 
(original)
+++ 
libcxx/trunk/test/std/containers/sequences/list/list.ops/merge_comp.pass.cpp 
Wed Sep 12 07:46:17 2018
@@ -10,6 +10,7 @@
 // <list>
 
 // template <class Compare> void merge(list& x, Compare comp);
+// If (&addressof(x) == this) does nothing; otherwise ...
 
 #include <list>
 #include <functional>
@@ -27,7 +28,15 @@ int main()
     std::list<int> c2(a2, a2+sizeof(a2)/sizeof(a2[0]));
     c1.merge(c2, std::greater<int>());
     assert(c1 == std::list<int>(a3, a3+sizeof(a3)/sizeof(a3[0])));
+    assert(c2.empty());
     }
+    {
+    int a1[] = {10, 9, 7, 3, 1};
+    std::list<int> c1(a1, a1+sizeof(a1)/sizeof(a1[0]));
+    c1.merge(c1, std::greater<int>());
+    assert((c1 == std::list<int>(a1, a1+sizeof(a1)/sizeof(a1[0]))));
+    }
+
 #if TEST_STD_VER >= 11
     {
     int a1[] = {10, 9, 7, 3, 1};
@@ -37,6 +46,7 @@ int main()
     std::list<int, min_allocator<int>> c2(a2, a2+sizeof(a2)/sizeof(a2[0]));
     c1.merge(c2, std::greater<int>());
     assert((c1 == std::list<int, min_allocator<int>>(a3, 
a3+sizeof(a3)/sizeof(a3[0]))));
+    assert(c2.empty());
     }
 #endif
 }

Modified: libcxx/trunk/www/cxx2a_status.html
URL: 
http://llvm.org/viewvc/llvm-project/libcxx/trunk/www/cxx2a_status.html?rev=342057&r1=342056&r2=342057&view=diff
==============================================================================
--- libcxx/trunk/www/cxx2a_status.html (original)
+++ libcxx/trunk/www/cxx2a_status.html Wed Sep 12 07:46:17 2018
@@ -73,7 +73,7 @@
        <tr><td><a 
href="https://wg21.link/P0768R1";>P0768R1</a></td><td>CWG</td><td>Library 
Support for the Spaceship (Comparison) 
Operator</td><td>Albuquerque</td><td></td><td></td></tr>
        <tr><td><a 
href="https://wg21.link/P0777R1";>P0777R1</a></td><td>LWG</td><td>Treating 
Unnecessary 
<tt>decay</tt></td><td>Albuquerque</td><td>Complete</td><td>7.0</td></tr>
        <tr><td><a 
href="https://wg21.link/P0122R7";>P0122R7</a></td><td>LWG</td><td>&lt;span&gt;</td><td>Jacksonville</td><td>Complete</td><td>7.0</td></tr>
-       <tr><td><a 
href="https://wg21.link/P0355R7";>P0355R7</a></td><td>LWG</td><td>Extending 
chrono to Calendars and Time 
Zones</td><td>Jacksonville</td><td></td><td></td></tr>
+       <tr><td><a 
href="https://wg21.link/P0355R7";>P0355R7</a></td><td>LWG</td><td>Extending 
chrono to Calendars and Time Zones</td><td>Jacksonville</td><td></td><td><i>In 
progress</i></td></tr>
        <tr><td><a 
href="https://wg21.link/P0551R3";>P0551R3</a></td><td>LWG</td><td>Thou Shalt Not 
Specialize <tt>std</tt> Function 
Templates!</td><td>Jacksonville</td><td></td><td></td></tr>
        <tr><td><a 
href="https://wg21.link/P0753R2";>P0753R2</a></td><td>LWG</td><td>Manipulators 
for C++ Synchronized Buffered 
Ostream</td><td>Jacksonville</td><td></td><td></td></tr>
        <tr><td><a 
href="https://wg21.link/P0754R2";>P0754R2</a></td><td>LWG</td><td>&lt;version&gt;</td><td>Jacksonville</td><td>Complete</td><td>7.0</td></tr>
@@ -89,7 +89,7 @@
        <tr><td><a 
href="https://wg21.link/P0476R2";>P0476R2</a></td><td>LWG</td><td>Bit-casting 
object representations</td><td>Rapperswil</td><td></td><td></td></tr>
        <tr><td><a 
href="https://wg21.link/P0528R3";>P0528R3</a></td><td>CWG</td><td>The Curious 
Case of Padding Bits, Featuring Atomic 
Compare-and-Exchange</td><td>Rapperswil</td><td></td><td></td></tr>
        <tr><td><a 
href="https://wg21.link/P0542R5";>P0542R5</a></td><td>CWG</td><td>Support for 
contract based programming in C++</td><td>Rapperswil</td><td></td><td></td></tr>
-       <tr><td><a 
href="https://wg21.link/P0556R3";>P0556R3</a></td><td>LWG</td><td>Integral 
power-of-2 operations</td><td>Rapperswil</td><td><i>In 
Progress</i></td><td></td></tr>
+       <tr><td><a 
href="https://wg21.link/P0556R3";>P0556R3</a></td><td>LWG</td><td>Integral 
power-of-2 operations</td><td>Rapperswil</td><td><i>In 
Progress</i></td><td><i>In progress</i></td></tr>
        <tr><td><a 
href="https://wg21.link/P0619R4";>P0619R4</a></td><td>LWG</td><td>Reviewing 
Deprecated Facilities of C++17 for 
C++20</td><td>Rapperswil</td><td></td><td></td></tr>
        <tr><td><a 
href="https://wg21.link/P0646R1";>P0646R1</a></td><td>LWG</td><td>Improving the 
Return Value of Erase-Like 
Algorithms</td><td>Rapperswil</td><td></td><td></td></tr>
        <tr><td><a 
href="https://wg21.link/P0722R3";>P0722R3</a></td><td>CWG</td><td>Efficient 
sized delete for variable sized 
classes</td><td>Rapperswil</td><td></td><td></td></tr>
@@ -102,7 +102,7 @@
        <tr><td><a 
href="https://wg21.link/P0892R2";>P0892R2</a></td><td>CWG</td><td>explicit(bool)</td><td>Rapperswil</td><td></td><td></td></tr>
        <tr><td><a 
href="https://wg21.link/P0898R3";>P0898R3</a></td><td>LWG</td><td>Standard 
Library Concepts</td><td>Rapperswil</td><td></td><td></td></tr>
        <tr><td><a 
href="https://wg21.link/P0935R0";>P0935R0</a></td><td>LWG</td><td>Eradicating 
unnecessarily explicit default constructors from the standard 
library</td><td>Rapperswil</td><td></td><td></td></tr>
-       <tr><td><a 
href="https://wg21.link/P0941R2";>P0941R2</a></td><td>CWG</td><td>Integrating 
feature-test macros into the C++ 
WD</td><td>Rapperswil</td><td></td><td></td></tr>
+       <tr><td><a 
href="https://wg21.link/P0941R2";>P0941R2</a></td><td>CWG</td><td>Integrating 
feature-test macros into the C++ WD</td><td>Rapperswil</td><td></td><td><i>In 
progress</i></td></tr>
        <tr><td><a 
href="https://wg21.link/P1023R0";>P1023R0</a></td><td>LWG</td><td>constexpr 
comparison operators for 
std::array</td><td>Rapperswil</td><td>Complete</td><td>8.0</td></tr>
        <tr><td><a 
href="https://wg21.link/P1025R1";>P1025R1</a></td><td>CWG</td><td>Update The 
Reference To The Unicode Standard</td><td>Rapperswil</td><td></td><td></td></tr>
        <tr><td><a 
href="https://wg21.link/P1120R0";>P1120R0</a></td><td>CWG</td><td>Consistency 
improvements for &lt;=&gt; and other comparison 
operators</td><td>Rapperswil</td><td></td><td></td></tr>
@@ -187,7 +187,7 @@
        <tr><td><a 
href="https://wg21.link/LWG3013";>3013</a></td><td><tt>(recursive_)directory_iterator</tt>
 construction and traversal should not be 
<tt>noexcept</tt></td><td>Jacksonville</td><td>Complete</td></tr>
        <tr><td><a href="https://wg21.link/LWG3014";>3014</a></td><td>More 
<tt>noexcept</tt> issues with filesystem 
operations</td><td>Jacksonville</td><td>Complete</td></tr>
        <tr><td><a 
href="https://wg21.link/LWG3015";>3015</a></td><td><tt>copy_options::<i>unspecified</i></tt>
 underspecified</td><td>Jacksonville</td><td><i>Nothing to do</i></td></tr>
-       <tr><td><a href="https://wg21.link/LWG3017";>3017</a></td><td><tt>list 
splice</tt> functions should use 
<tt>addressof</tt></td><td>Jacksonville</td><td></td></tr>
+       <tr><td><a href="https://wg21.link/LWG3017";>3017</a></td><td><tt>list 
splice</tt> functions should use 
<tt>addressof</tt></td><td>Jacksonville</td><td>Complete</td></tr>
        <tr><td><a 
href="https://wg21.link/LWG3020";>3020</a></td><td>[networking.ts] Remove 
spurious nested <tt>value_type</tt> buffer sequence 
requirement</td><td>Jacksonville</td><td></td></tr>
        <tr><td><a 
href="https://wg21.link/LWG3026";>3026</a></td><td><tt>filesystem::weakly_canonical</tt>
 still defined in terms of <tt>canonical(p, 
base)</tt></td><td>Jacksonville</td><td>Complete</td></tr>
        <tr><td><a href="https://wg21.link/LWG3030";>3030</a></td><td>Who shall 
meet the requirements of 
<tt>try_lock</tt>?</td><td>Jacksonville</td><td><i>Nothing to do</i></td></tr>
@@ -222,7 +222,7 @@
 <!--   <tr><td></td><td></td><td></td><td></td></tr> -->
   </table>
 
-  <p>Last Updated: 27-Aug-2018</p>
+  <p>Last Updated: 11-Sep-2018</p>
 </div>
 </body>
 </html>


_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to