[libcxx] r204777 - Add tests that should fail when lock() throws. THis is part of LWG issue #2135. No library changes here.

Marshall Clow mclow.lists at gmail.com
Tue Mar 25 19:11:48 PDT 2014


Author: marshall
Date: Tue Mar 25 21:11:47 2014
New Revision: 204777

URL: http://llvm.org/viewvc/llvm-project?rev=204777&view=rev
Log:
Add tests that should fail when lock() throws. THis is part of LWG issue #2135. No library changes here.

Added:
    libcxx/trunk/test/thread/thread.condition/thread.condition.condvarany/wait.exception.pass.cpp
    libcxx/trunk/test/thread/thread.condition/thread.condition.condvarany/wait_for.exception.pass.cpp

Added: libcxx/trunk/test/thread/thread.condition/thread.condition.condvarany/wait.exception.pass.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/thread/thread.condition/thread.condition.condvarany/wait.exception.pass.cpp?rev=204777&view=auto
==============================================================================
--- libcxx/trunk/test/thread/thread.condition/thread.condition.condvarany/wait.exception.pass.cpp (added)
+++ libcxx/trunk/test/thread/thread.condition/thread.condition.condvarany/wait.exception.pass.cpp Tue Mar 25 21:11:47 2014
@@ -0,0 +1,52 @@
+#include <thread>
+#include <condition_variable>
+#include <mutex>
+#include <chrono>
+#include <iostream>
+#include <cassert>
+
+void f1()
+{
+    std::exit(0);
+}
+
+struct Mutex
+{
+    unsigned state = 0;
+    Mutex() = default;
+    ~Mutex() = default;
+    Mutex(const Mutex&) = delete;
+    Mutex& operator=(const Mutex&) = delete;
+
+    void lock()
+    {
+    if (++state == 2)
+        throw 1;  // this throw should end up calling terminate()
+    }
+
+    void unlock() {}
+};
+
+Mutex mut;
+std::condition_variable_any cv;
+
+void
+signal_me()
+{
+    std::this_thread::sleep_for(std::chrono::milliseconds(500));
+    cv.notify_one();
+}
+
+int
+main()
+{
+    std::set_terminate(f1);
+    try
+    {
+        std::thread(signal_me).detach();
+        mut.lock();
+        cv.wait(mut);
+    }
+    catch (...) {}
+    assert(false);
+}

Added: libcxx/trunk/test/thread/thread.condition/thread.condition.condvarany/wait_for.exception.pass.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/thread/thread.condition/thread.condition.condvarany/wait_for.exception.pass.cpp?rev=204777&view=auto
==============================================================================
--- libcxx/trunk/test/thread/thread.condition/thread.condition.condvarany/wait_for.exception.pass.cpp (added)
+++ libcxx/trunk/test/thread/thread.condition/thread.condition.condvarany/wait_for.exception.pass.cpp Tue Mar 25 21:11:47 2014
@@ -0,0 +1,52 @@
+#include <thread>
+#include <condition_variable>
+#include <mutex>
+#include <chrono>
+#include <iostream>
+#include <cassert>
+
+void f1()
+{
+    std::exit(0);
+}
+
+struct Mutex
+{
+    unsigned state = 0;
+    Mutex() = default;
+    ~Mutex() = default;
+    Mutex(const Mutex&) = delete;
+    Mutex& operator=(const Mutex&) = delete;
+
+    void lock()
+    {
+    if (++state == 2)
+        throw 1;  // this throw should end up calling terminate()
+    }
+
+    void unlock() {}
+};
+
+Mutex mut;
+std::condition_variable_any cv;
+
+void
+signal_me()
+{
+    std::this_thread::sleep_for(std::chrono::milliseconds(500));
+    cv.notify_one();
+}
+
+int
+main()
+{
+    std::set_terminate(f1);
+    try
+    {
+        std::thread(signal_me).detach();
+        mut.lock();
+        cv.wait_for(mut, std::chrono::milliseconds(250));
+    }
+    catch (...) {}
+    assert(false);
+}





More information about the cfe-commits mailing list