Author: marshall
Date: Tue Jan  2 20:37:30 2018
New Revision: 321689

URL: http://llvm.org/viewvc/llvm-project?rev=321689&view=rev
Log:
Mark LWG2824 as complete. We already did it, but I added a test to be sure

Modified:
    libcxx/trunk/test/std/containers/sequences/list/list.ops/sort_comp.pass.cpp
    libcxx/trunk/www/cxx1z_status.html

Modified: 
libcxx/trunk/test/std/containers/sequences/list/list.ops/sort_comp.pass.cpp
URL: 
http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/containers/sequences/list/list.ops/sort_comp.pass.cpp?rev=321689&r1=321688&r2=321689&view=diff
==============================================================================
--- libcxx/trunk/test/std/containers/sequences/list/list.ops/sort_comp.pass.cpp 
(original)
+++ libcxx/trunk/test/std/containers/sequences/list/list.ops/sort_comp.pass.cpp 
Tue Jan  2 20:37:30 2018
@@ -13,10 +13,29 @@
 
 #include <list>
 #include <functional>
+#include <algorithm>  // for is_permutation
 #include <cassert>
 
 #include "min_allocator.h"
 
+
+#ifndef TEST_HAS_NO_EXCEPTIONS
+template <typename T>
+struct throwingLess {
+    throwingLess() : num_(1) {}
+    throwingLess(int num) : num_(num) {}
+    
+    bool operator() (const T& lhs, const T& rhs) const
+    {
+    if ( --num_ == 0) throw 1;
+    return lhs < rhs;
+    }
+    
+    mutable int num_;
+    };
+#endif
+    
+    
 int main()
 {
     {
@@ -26,6 +45,28 @@ int main()
     c1.sort(std::greater<int>());
     assert(c1 == std::list<int>(a2, a2+sizeof(a2)/sizeof(a2[0])));
     }
+
+//  Test with throwing comparison; make sure that nothing is lost.
+//  This is (sort of) LWG #2824
+#ifndef TEST_HAS_NO_EXCEPTIONS
+    {
+    int a1[] = {4, 8, 1, 0, 5, 7, 2, 3, 6, 11, 10, 9};
+    const int sz = sizeof(a1)/sizeof(a1[0]);
+    for (int i = 0; i < 10; ++i)
+        {
+        std::list<int> c1(a1, a1 + sz);
+        try
+            {
+            throwingLess<int> comp(i);
+            c1.sort(std::cref(comp));
+            }
+        catch (int) {}
+        assert((c1.size() == sz));
+        assert((std::is_permutation(c1.begin(), c1.end(), a1)));
+        }
+    }
+#endif
+
 #if TEST_STD_VER >= 11
     {
     int a1[] = {4, 8, 1, 0, 5, 7, 2, 3, 6, 11, 10, 9};

Modified: libcxx/trunk/www/cxx1z_status.html
URL: 
http://llvm.org/viewvc/llvm-project/libcxx/trunk/www/cxx1z_status.html?rev=321689&r1=321688&r2=321689&view=diff
==============================================================================
--- libcxx/trunk/www/cxx1z_status.html (original)
+++ libcxx/trunk/www/cxx1z_status.html Tue Jan  2 20:37:30 2018
@@ -454,7 +454,7 @@
        <tr><td><a 
href="https://wg21.link/LWG2788";>2788</a></td><td>basic_string range mutators 
unintentionally require a default constructible 
allocator</td><td>Kona</td><td>Complete</td></tr>
        <tr><td><a 
href="https://wg21.link/LWG2789";>2789</a></td><td>Equivalence of contained 
objects</td><td>Kona</td><td>Complete</td></tr>
        <tr><td><a href="https://wg21.link/LWG2790";>2790</a></td><td>Missing 
specification of 
istreambuf_iterator::operator-&gt;</td><td>Kona</td><td>Complete</td></tr>
-       <tr><td><a href="https://wg21.link/LWG2794";>2794</a></td><td>Missing 
requirements for allocator pointers</td><td>Kona</td><td></td></tr>
+       <tr><td><a href="https://wg21.link/LWG2794";>2794</a></td><td>Missing 
requirements for allocator pointers</td><td>Kona</td><td><I>Nothing to 
do</I></td></tr>
        <tr><td><a 
href="https://wg21.link/LWG2795";>2795</a></td><td>&sect;[global.functions] 
provides incorrect example of ADL use</td><td>Kona</td><td>Complete</td></tr>
        <tr><td><a href="https://wg21.link/LWG2796";>2796</a></td><td>tuple 
should be a literal type</td><td>Kona</td><td>Complete</td></tr>
        <tr><td><a 
href="https://wg21.link/LWG2801";>2801</a></td><td>Default-constructibility of 
unique_ptr</td><td>Kona</td><td>Complete</td></tr>
@@ -463,7 +463,7 @@
        <tr><td><a href="https://wg21.link/LWG2806";>2806</a></td><td>Base class 
of bad_optional_access</td><td>Kona</td><td>Complete</td></tr>
        <tr><td><a 
href="https://wg21.link/LWG2807";>2807</a></td><td>std::invoke should use 
std::is_nothrow_callable</td><td>Kona</td><td></td></tr>
        <tr><td><a href="https://wg21.link/LWG2812";>2812</a></td><td>Range 
access is available with 
&lt;string_view&gt;</td><td>Kona</td><td>Complete</td></tr>
-       <tr><td><a href="https://wg21.link/LWG2824";>2824</a></td><td>list::sort 
should say that the order of elements is unspecified if an exception is 
thrown</td><td>Kona</td><td></td></tr>
+       <tr><td><a href="https://wg21.link/LWG2824";>2824</a></td><td>list::sort 
should say that the order of elements is unspecified if an exception is 
thrown</td><td>Kona</td><td>Complete</td></tr>
        <tr><td><a 
href="https://wg21.link/LWG2826";>2826</a></td><td>string_view iterators use old 
wording</td><td>Kona</td><td>Complete</td></tr>
        <tr><td><a href="https://wg21.link/LWG2834";>2834</a></td><td>Resolution 
LWG 2223 is missing wording about end 
iterators</td><td>Kona</td><td>Complete</td></tr>
        <tr><td><a href="https://wg21.link/LWG2835";>2835</a></td><td>LWG 2536 
seems to misspecify &lt;tgmath.h&gt;</td><td>Kona</td><td></td></tr>


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

Reply via email to