Commit b04fa738 by Paolo Carlini Committed by Paolo Carlini

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
parent a9e6994a
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.
2011-05-07 François Dumont <francois.cppdevs@free.fr>
* include/debug/macro.h (_GLIBCXX_DEBUG_VERIFY_AT): New.
......
// { 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
// { 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/>.
// 8.16.4 Additional overloads
#include <tr1/cmath>
// libstdc++/48933
#ifdef _GLIBCXX_USE_C99_MATH_TR1
struct Foo { };
template Foo std::tr1::atan2<Foo, Foo>(Foo, Foo); // { dg-error "not match" }
template Foo std::tr1::acosh<Foo>(Foo); // { dg-error "not match" }
template Foo std::tr1::asinh<Foo>(Foo); // { dg-error "not match" }
template Foo std::tr1::atanh<Foo>(Foo); // { dg-error "not match" }
template Foo std::tr1::cbrt<Foo>(Foo); // { dg-error "not match" }
template Foo std::tr1::copysign<Foo, Foo>(Foo, Foo); // { dg-error "not match" }
template Foo std::tr1::erf<Foo>(Foo); // { dg-error "not match" }
template Foo std::tr1::erfc<Foo>(Foo); // { dg-error "not match" }
template Foo std::tr1::exp2<Foo>(Foo); // { dg-error "not match" }
template Foo std::tr1::expm1<Foo>(Foo); // { dg-error "not match" }
template Foo std::tr1::fdim<Foo, Foo>(Foo, Foo); // { dg-error "not match" }
template Foo std::tr1::fma<Foo, Foo, Foo>(Foo(), Foo(), Foo()); // { dg-error "not match" }
template Foo std::tr1::fmax<Foo, Foo>(Foo, Foo); // { dg-error "not match" }
template Foo std::tr1::fmin<Foo, Foo>(Foo, Foo); // { dg-error "not match" }
template Foo std::tr1::hypot<Foo, Foo>(Foo, Foo); // { dg-error "not match" }
template int std::tr1::ilogb<Foo>(Foo); // { dg-error "not match" }
template Foo std::tr1::lgamma<Foo>(Foo); // { dg-error "not match" }
template long long std::tr1::llrint<Foo>(Foo); // { dg-error "not match" }
template long long std::tr1::llround<Foo>(Foo); // { dg-error "not match" }
template Foo std::tr1::log1p<Foo>(Foo); // { dg-error "not match" }
template Foo std::tr1::log2<Foo>(Foo); // { dg-error "not match" }
template Foo std::tr1::logb<Foo>(Foo); // { dg-error "not match" }
template long std::tr1::lrint<Foo>(Foo); // { dg-error "not match" }
template long std::tr1::lround<Foo>(Foo); // { dg-error "not match" }
template Foo std::tr1::nearbyint<Foo>(Foo); // { dg-error "not match" }
template Foo std::tr1::nextafter<Foo>(Foo, Foo); // { dg-error "not match" }
template Foo std::tr1::nexttoward<Foo>(Foo, long double); // { dg-error "not match" }
template Foo std::tr1::remainder<Foo, Foo>(Foo, Foo); // { dg-error "not match" }
template Foo std::tr1::remquo<Foo>(Foo, Foo, int*); // { dg-error "not match" }
template Foo std::tr1::rint<Foo>(Foo); // { dg-error "not match" }
template Foo std::tr1::round<Foo>(Foo); // { dg-error "not match" }
template Foo std::tr1::scalbln<Foo>(Foo, long); // { dg-error "not match" }
template Foo std::tr1::scalbn<Foo>(Foo, int); // { dg-error "not match" }
template Foo std::tr1::tgamma<Foo>(Foo); // { dg-error "not match" }
template Foo std::tr1::trunc<Foo>(Foo); // { dg-error "not match" }
#endif
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment