From 13b6cc4b088d7373bc501a45ea897b2742a53673 Mon Sep 17 00:00:00 2001 From: Eric Fiselier Date: Fri, 2 Dec 2016 22:30:52 +0000 Subject: [PATCH] Work around a bug in Clang's implementation of noexcept function types llvm-svn: 288544 --- .../utilities/meta/meta.rel/is_nothrow_callable.pass.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/libcxx/test/std/utilities/meta/meta.rel/is_nothrow_callable.pass.cpp b/libcxx/test/std/utilities/meta/meta.rel/is_nothrow_callable.pass.cpp index eefa6d1f22b1..a7dee5ca4c24 100644 --- a/libcxx/test/std/utilities/meta/meta.rel/is_nothrow_callable.pass.cpp +++ b/libcxx/test/std/utilities/meta/meta.rel/is_nothrow_callable.pass.cpp @@ -54,7 +54,11 @@ constexpr bool throws_callable() { void test_noexcept_function_pointers() { struct Dummy { void foo() noexcept {} static void bar() noexcept {} }; -#if !defined(__cpp_noexcept_function_type) + +// FIXME(EricWF): Remove the __clang__ workaround. As of 2/12/2016 Clang has +// a bug where calling a noexcept function pointer is not noexcept. +// See https://llvm.org/bugs/show_bug.cgi?id=31244 +#if !defined(__cpp_noexcept_function_type) || defined(__clang__) { // Check that PMF's and function pointers *work*. is_nothrow_callable will always // return false because 'noexcept' is not part of the function type.