diff options
author | Paolo Carlini <paolo.carlini@oracle.com> | 2011-05-09 15:38:21 +0000 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2011-05-09 15:38:21 +0000 |
commit | b04fa7381131433b4019acea6b8e95aadd60aec4 (patch) | |
tree | 20e5b92b56d2f0953650bff5a899f3322af42ab5 /libstdc++-v3/testsuite/26_numerics | |
parent | a9e6994ab9f27c07d9345b6e5cbeb3ed2cf21625 (diff) | |
download | gcc-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.cc | 65 |
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 |