summaryrefslogtreecommitdiffstats
path: root/libcxx/test/std/depr/depr.c.headers/math_h.pass.cpp
diff options
context:
space:
mode:
authorEric Fiselier <eric@efcs.ca>2016-05-27 22:19:53 +0000
committerEric Fiselier <eric@efcs.ca>2016-05-27 22:19:53 +0000
commit589308a0b18f8d5bccd6e92461090871169c7b87 (patch)
tree4f3140a917a787d24e7d091e2c02b184e183fbca /libcxx/test/std/depr/depr.c.headers/math_h.pass.cpp
parent2abf6bdfc20968ad46aaa489c55873fe7fe77c84 (diff)
downloadbcm5719-llvm-589308a0b18f8d5bccd6e92461090871169c7b87.tar.gz
bcm5719-llvm-589308a0b18f8d5bccd6e92461090871169c7b87.zip
Tolerate incorrect return type for 'isinf' and 'isnan' in tests.
Summary: GLIBC recently removed the incorrect `int isinf(double)` and `int isnan(double)` overloads in C++11 and greater. This causes previously `XFAIL: linux` tests to start passing. Since there is no longer a way to 'XFAIL' the tests I choose to simply tolerate this bug. See https://sourceware.org/bugzilla/show_bug.cgi?id=19439 Reviewers: rsmith, mclow.lists, EricWF Subscribers: jroelofs, cfe-commits Differential Revision: http://reviews.llvm.org/D19835 llvm-svn: 271060
Diffstat (limited to 'libcxx/test/std/depr/depr.c.headers/math_h.pass.cpp')
-rw-r--r--libcxx/test/std/depr/depr.c.headers/math_h.pass.cpp51
1 files changed, 48 insertions, 3 deletions
diff --git a/libcxx/test/std/depr/depr.c.headers/math_h.pass.cpp b/libcxx/test/std/depr/depr.c.headers/math_h.pass.cpp
index ed12fcf73a8..7e1b2d11064 100644
--- a/libcxx/test/std/depr/depr.c.headers/math_h.pass.cpp
+++ b/libcxx/test/std/depr/depr.c.headers/math_h.pass.cpp
@@ -9,9 +9,6 @@
// <math.h>
-// NOTE: isinf and isnan are tested separately because they are expected to fail
-// on linux. We don't want their expected failure to hide other failures in this file.
-
#include <math.h>
#include <type_traits>
#include <cassert>
@@ -631,6 +628,29 @@ void test_isgreaterequal()
assert(isgreaterequal(-1.0, 0.F) == false);
}
+void test_isinf()
+{
+#ifdef isinf
+#error isinf defined
+#endif
+ static_assert((std::is_same<decltype(isinf((float)0)), bool>::value), "");
+
+ typedef decltype(isinf((double)0)) DoubleRetType;
+#ifndef __linux__
+ static_assert((std::is_same<DoubleRetType, bool>::value), "");
+#else
+ // GLIBC < 2.26 defines 'isinf(double)' with a return type of 'int' in
+ // all C++ dialects. The test should tolerate this.
+ // See: https://sourceware.org/bugzilla/show_bug.cgi?id=19439
+ static_assert((std::is_same<DoubleRetType, bool>::value
+ || std::is_same<DoubleRetType, int>::value), "");
+#endif
+
+ static_assert((std::is_same<decltype(isinf(0)), bool>::value), "");
+ static_assert((std::is_same<decltype(isinf((long double)0)), bool>::value), "");
+ assert(isinf(-1.0) == false);
+}
+
void test_isless()
{
#ifdef isless
@@ -688,6 +708,29 @@ void test_islessgreater()
assert(islessgreater(-1.0, 0.F) == true);
}
+void test_isnan()
+{
+#ifdef isnan
+#error isnan defined
+#endif
+ static_assert((std::is_same<decltype(isnan((float)0)), bool>::value), "");
+
+ typedef decltype(isnan((double)0)) DoubleRetType;
+#ifndef __linux__
+ static_assert((std::is_same<DoubleRetType, bool>::value), "");
+#else
+ // GLIBC < 2.26 defines 'isnan(double)' with a return type of 'int' in
+ // all C++ dialects. The test should tolerate this.
+ // See: https://sourceware.org/bugzilla/show_bug.cgi?id=19439
+ static_assert((std::is_same<DoubleRetType, bool>::value
+ || std::is_same<DoubleRetType, int>::value), "");
+#endif
+
+ static_assert((std::is_same<decltype(isnan(0)), bool>::value), "");
+ static_assert((std::is_same<decltype(isnan((long double)0)), bool>::value), "");
+ assert(isnan(-1.0) == false);
+}
+
void test_isunordered()
{
#ifdef isunordered
@@ -1443,9 +1486,11 @@ int main()
test_isnormal();
test_isgreater();
test_isgreaterequal();
+ test_isinf();
test_isless();
test_islessequal();
test_islessgreater();
+ test_isnan();
test_isunordered();
test_acosh();
test_asinh();
OpenPOWER on IntegriCloud