[libcxx] r328265 - Avoid Clang error about throwing _LIBCPP_ASSERT in noexcept function.
Eric Fiselier via cfe-commits
cfe-commits at lists.llvm.org
Thu Mar 22 16:01:08 PDT 2018
Author: ericwf
Date: Thu Mar 22 16:01:08 2018
New Revision: 328265
URL: http://llvm.org/viewvc/llvm-project?rev=328265&view=rev
Log:
Avoid Clang error about throwing _LIBCPP_ASSERT in noexcept function.
This fixes a couple of tests which produced a warning that a 'throw'
occurred in a noexcept function (by way of _LIBCPP_ASSERT). It does
so by hiding the 'throw' across an opaque function boundary.
This fix isn't ideal, since we still have _LIBCPP_ASSERT's in functions
marked noexcept -- and this problem should be addressed in the future.
However, throwing _LIBCPP_ASSERT is really only meant to allow testing
of the assertions, and is not yet ready for general use.
Modified:
libcxx/trunk/test/libcxx/experimental/filesystem/class.path/path.itr/iterator_db.pass.cpp
libcxx/trunk/test/libcxx/thread/futures/futures.promise/set_exception.pass.cpp
libcxx/trunk/test/libcxx/thread/futures/futures.promise/set_exception_at_thread_exit.pass.cpp
libcxx/trunk/utils/libcxx/test/config.py
Modified: libcxx/trunk/test/libcxx/experimental/filesystem/class.path/path.itr/iterator_db.pass.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/libcxx/experimental/filesystem/class.path/path.itr/iterator_db.pass.cpp?rev=328265&r1=328264&r2=328265&view=diff
==============================================================================
--- libcxx/trunk/test/libcxx/experimental/filesystem/class.path/path.itr/iterator_db.pass.cpp (original)
+++ libcxx/trunk/test/libcxx/experimental/filesystem/class.path/path.itr/iterator_db.pass.cpp Thu Mar 22 16:01:08 2018
@@ -10,13 +10,15 @@
// UNSUPPORTED: c++98, c++03
// UNSUPPORTED: libcpp-no-exceptions
+// MODULES_DEFINES: _LIBCPP_DEBUG_USE_EXCEPTIONS
+// MODULES_DEFINES: _LIBCPP_DEBUG=0
+
// <experimental/filesystem>
// class path
#define _LIBCPP_DEBUG 0
-#define _LIBCPP_ASSERT(cond, msg) ((cond) ? ((void)0) : throw 42)
-
+#define _LIBCPP_DEBUG_USE_EXCEPTIONS
#include <experimental/filesystem>
#include <iterator>
#include <type_traits>
@@ -29,17 +31,18 @@ namespace fs = std::experimental::filesy
int main() {
using namespace fs;
+ using ExType = std::__libcpp_debug_exception;
// Test incrementing/decrementing a singular iterator
{
path::iterator singular;
try {
++singular;
assert(false);
- } catch (int) {}
+ } catch (ExType const&) {}
try {
--singular;
assert(false);
- } catch (int) {}
+ } catch (ExType const&) {}
}
// Test decrementing the begin iterator
{
@@ -48,13 +51,13 @@ int main() {
try {
--it;
assert(false);
- } catch (int) {}
+ } catch (ExType const&) {}
++it;
++it;
try {
++it;
assert(false);
- } catch (int) {}
+ } catch (ExType const&) {}
}
// Test incrementing the end iterator
{
@@ -63,12 +66,12 @@ int main() {
try {
++it;
assert(false);
- } catch (int) {}
+ } catch (ExType const&) {}
--it;
--it;
try {
--it;
assert(false);
- } catch (int) {}
+ } catch (ExType const&) {}
}
}
Modified: libcxx/trunk/test/libcxx/thread/futures/futures.promise/set_exception.pass.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/libcxx/thread/futures/futures.promise/set_exception.pass.cpp?rev=328265&r1=328264&r2=328265&view=diff
==============================================================================
--- libcxx/trunk/test/libcxx/thread/futures/futures.promise/set_exception.pass.cpp (original)
+++ libcxx/trunk/test/libcxx/thread/futures/futures.promise/set_exception.pass.cpp Thu Mar 22 16:01:08 2018
@@ -11,6 +11,9 @@
// UNSUPPORTED: libcpp-has-no-threads
// UNSUPPORTED: c++98, c++03
+// MODULES_DEFINES: _LIBCPP_DEBUG_USE_EXCEPTIONS
+// MODULES_DEFINES: _LIBCPP_DEBUG=0
+
// <future>
// class promise<R>
@@ -18,9 +21,8 @@
// void set_exception(exception_ptr p);
// Test that a null exception_ptr is diagnosed.
-#define _LIBCPP_ASSERT(x, m) ((x) ? ((void)0) : throw 42)
-
#define _LIBCPP_DEBUG 0
+#define _LIBCPP_DEBUG_USE_EXCEPTIONS
#include <future>
#include <exception>
#include <cstdlib>
@@ -29,14 +31,14 @@
int main()
{
+ typedef std::__libcpp_debug_exception ExType;
{
typedef int T;
std::promise<T> p;
try {
p.set_exception(std::exception_ptr());
assert(false);
- } catch (int const& value) {
- assert(value == 42);
+ } catch (ExType const&) {
}
}
{
@@ -45,8 +47,7 @@ int main()
try {
p.set_exception(std::exception_ptr());
assert(false);
- } catch (int const& value) {
- assert(value == 42);
+ } catch (ExType const&) {
}
}
}
Modified: libcxx/trunk/test/libcxx/thread/futures/futures.promise/set_exception_at_thread_exit.pass.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/libcxx/thread/futures/futures.promise/set_exception_at_thread_exit.pass.cpp?rev=328265&r1=328264&r2=328265&view=diff
==============================================================================
--- libcxx/trunk/test/libcxx/thread/futures/futures.promise/set_exception_at_thread_exit.pass.cpp (original)
+++ libcxx/trunk/test/libcxx/thread/futures/futures.promise/set_exception_at_thread_exit.pass.cpp Thu Mar 22 16:01:08 2018
@@ -11,6 +11,9 @@
// UNSUPPORTED: libcpp-has-no-threads
// UNSUPPORTED: c++98, c++03
+// MODULES_DEFINES: _LIBCPP_DEBUG_USE_EXCEPTIONS
+// MODULES_DEFINES: _LIBCPP_DEBUG=0
+
// <future>
// class promise<R>
@@ -18,9 +21,8 @@
// void set_exception_on_thread_exit(exception_ptr p);
// Test that a null exception_ptr is diagnosed.
-#define _LIBCPP_ASSERT(x, m) ((x) ? ((void)0) : throw 42)
-
#define _LIBCPP_DEBUG 0
+#define _LIBCPP_DEBUG_USE_EXCEPTIONS
#include <future>
#include <exception>
#include <cstdlib>
@@ -29,14 +31,14 @@
int main()
{
+ typedef std::__libcpp_debug_exception ExType;
{
typedef int T;
std::promise<T> p;
try {
p.set_exception_at_thread_exit(std::exception_ptr());
assert(false);
- } catch (int const& value) {
- assert(value == 42);
+ } catch (ExType const& value) {
}
}
{
@@ -45,8 +47,7 @@ int main()
try {
p.set_exception_at_thread_exit(std::exception_ptr());
assert(false);
- } catch (int const& value) {
- assert(value == 42);
+ } catch (ExType const& value) {
}
}
}
Modified: libcxx/trunk/utils/libcxx/test/config.py
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/utils/libcxx/test/config.py?rev=328265&r1=328264&r2=328265&view=diff
==============================================================================
--- libcxx/trunk/utils/libcxx/test/config.py (original)
+++ libcxx/trunk/utils/libcxx/test/config.py Thu Mar 22 16:01:08 2018
@@ -918,11 +918,6 @@ class Configuration(object):
self.cxx.addWarningFlagIfSupported('-Wno-user-defined-literals')
self.cxx.addWarningFlagIfSupported('-Wno-noexcept-type')
self.cxx.addWarningFlagIfSupported('-Wno-aligned-allocation-unavailable')
- # FIXME: Remove this work-around. It is a temporary hack to get the
- # throwing debug tests passing. For example:
- # * test/libcxx/experimental/filesystem/class.path/path.itr/iterator_db.pass.cpp
- # * test/libcxx/thread/futures/futures.promise/set_exception.pass.cpp
- self.cxx.addWarningFlagIfSupported("-Wno-exceptions")
# These warnings should be enabled in order to support the MSVC
# team using the test suite; They enable the warnings below and
# expect the test suite to be clean.
More information about the cfe-commits
mailing list