aboutsummaryrefslogtreecommitdiff
path: root/libstdc++-v3/testsuite/26_numerics
diff options
context:
space:
mode:
authorPaolo Carlini <paolo.carlini@oracle.com>2011-05-09 15:38:21 +0000
committerPaolo Carlini <paolo@gcc.gnu.org>2011-05-09 15:38:21 +0000
commitb04fa7381131433b4019acea6b8e95aadd60aec4 (patch)
tree20e5b92b56d2f0953650bff5a899f3322af42ab5 /libstdc++-v3/testsuite/26_numerics
parenta9e6994ab9f27c07d9345b6e5cbeb3ed2cf21625 (diff)
downloadgcc-b04fa7381131433b4019acea6b8e95aadd60aec4.zip
gcc-b04fa7381131433b4019acea6b8e95aadd60aec4.tar.gz
gcc-b04fa7381131433b4019acea6b8e95aadd60aec4.tar.bz2
re PR libstdc++/48933 (Infinite recursion in tr1/cmath functions with complex parameters)
2011-05-09 Paolo Carlini <paolo.carlini@oracle.com> PR libstdc++/48933 * include/c_global/cmath (acosh, asinh, atanh, cbrt, copysign, erf, erfc, exp2, expm1, fdim, fma, fmax, hypot, ilogb, lgamma, llrint, llround, log1p, log2, logb, lrint, lround, nearbyint, nextafter, nexttoward, remainder, remquo, rint, round, scalbln, scalbn, tgamma, trunc): Use __enable_if on the return type. * include/tr1/cmath: Likewise. * testsuite/26_numerics/headers/cmath/overloads_c++0x_neg.cc: New. * testsuite/tr1/8_c_compatibility/cmath/overloads_neg.cc: Likewise. From-SVN: r173574
Diffstat (limited to 'libstdc++-v3/testsuite/26_numerics')
-rw-r--r--libstdc++-v3/testsuite/26_numerics/headers/cmath/overloads_c++0x_neg.cc65
1 files changed, 65 insertions, 0 deletions
diff --git a/libstdc++-v3/testsuite/26_numerics/headers/cmath/overloads_c++0x_neg.cc b/libstdc++-v3/testsuite/26_numerics/headers/cmath/overloads_c++0x_neg.cc
new file mode 100644
index 0000000..2d8862e
--- /dev/null
+++ b/libstdc++-v3/testsuite/26_numerics/headers/cmath/overloads_c++0x_neg.cc
@@ -0,0 +1,65 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <cmath>
+
+// libstdc++/48933
+
+#ifdef _GLIBCXX_USE_C99_MATH_TR1
+
+struct Foo { };
+
+template Foo std::atan2<Foo, Foo>(Foo, Foo); // { dg-error "not match" }
+template Foo std::acosh<Foo>(Foo); // { dg-error "not match" }
+template Foo std::asinh<Foo>(Foo); // { dg-error "not match" }
+template Foo std::atanh<Foo>(Foo); // { dg-error "not match" }
+template Foo std::cbrt<Foo>(Foo); // { dg-error "not match" }
+template Foo std::copysign<Foo, Foo>(Foo, Foo); // { dg-error "not match" }
+template Foo std::erf<Foo>(Foo); // { dg-error "not match" }
+template Foo std::erfc<Foo>(Foo); // { dg-error "not match" }
+template Foo std::exp2<Foo>(Foo); // { dg-error "not match" }
+template Foo std::expm1<Foo>(Foo); // { dg-error "not match" }
+template Foo std::fdim<Foo, Foo>(Foo, Foo); // { dg-error "not match" }
+template Foo std::fma<Foo, Foo, Foo>(Foo(), Foo(), Foo()); // { dg-error "not match" }
+template Foo std::fmax<Foo, Foo>(Foo, Foo); // { dg-error "not match" }
+template Foo std::fmin<Foo, Foo>(Foo, Foo); // { dg-error "not match" }
+template Foo std::hypot<Foo, Foo>(Foo, Foo); // { dg-error "not match" }
+template int std::ilogb<Foo>(Foo); // { dg-error "not match" }
+template Foo std::lgamma<Foo>(Foo); // { dg-error "not match" }
+template long long std::llrint<Foo>(Foo); // { dg-error "not match" }
+template long long std::llround<Foo>(Foo); // { dg-error "not match" }
+template Foo std::log1p<Foo>(Foo); // { dg-error "not match" }
+template Foo std::log2<Foo>(Foo); // { dg-error "not match" }
+template Foo std::logb<Foo>(Foo); // { dg-error "not match" }
+template long std::lrint<Foo>(Foo); // { dg-error "not match" }
+template long std::lround<Foo>(Foo); // { dg-error "not match" }
+template Foo std::nearbyint<Foo>(Foo); // { dg-error "not match" }
+template Foo std::nextafter<Foo>(Foo, Foo); // { dg-error "not match" }
+template Foo std::nexttoward<Foo>(Foo, long double); // { dg-error "not match" }
+template Foo std::remainder<Foo, Foo>(Foo, Foo); // { dg-error "not match" }
+template Foo std::remquo<Foo>(Foo, Foo, int*); // { dg-error "not match" }
+template Foo std::rint<Foo>(Foo); // { dg-error "not match" }
+template Foo std::round<Foo>(Foo); // { dg-error "not match" }
+template Foo std::scalbln<Foo>(Foo, long); // { dg-error "not match" }
+template Foo std::scalbn<Foo>(Foo, int); // { dg-error "not match" }
+template Foo std::tgamma<Foo>(Foo); // { dg-error "not match" }
+template Foo std::trunc<Foo>(Foo); // { dg-error "not match" }
+
+#endif