Opened 10 years ago

Closed 10 years ago

Last modified 9 years ago

#8333 closed Bugs (fixed)

[math] PGI 11.3 problems (sph_bessel.cpp, sph_bessel.cpp)

Reported by: Mark Dixon <m.c.dixon@…> Owned by: John Maddock
Milestone: To Be Determined Component: math
Version: Boost 1.53.0 Severity: Problem
Keywords: pgi Cc:

Description

Hi,

Compilation of boost 1.53.0 with the PGI 11.3 compiler on RHEL5 fails for the following targets:

  • bin.v2/libs/math/build/pgi/release/threading-multi/sph_bessel.o
  • bin.v2/libs/math/build/pgi/release/threading-multi/sph_bessell.o

Is this a known issue? I cannot seem to find it mentioned in the bugtracker.

Thanks,

Mark

Error messages follow:

pgi.compile.c++ bin.v2/libs/math/build/pgi/release/threading-multi/sph_bessel.o
"./boost/math/special_functions/sinc.hpp", line 70: error: more than one
          instance of overloaded function "abs" matches the argument list:
            function "abs(double)"
            function "abs(int)"
            argument types are: (const long double)
              if    (abs(x) >= taylor_n_bound)
                     ^
          detected during:
            instantiation of "T boost::math::detail::sinc_pi_imp(T) [with
                      T=long double]" at line 110
            instantiation of "boost::math::tools::promote_args<T, float,
                      float, float, float, float>::type
                      boost::math::sinc_pi(T, const Policy &) [with T=long
                      double, Policy=c_policies::c_policy]" at line 154 of
                      "./boost/math/special_functions/bessel.hpp"
            instantiation of "T boost::math::detail::sph_bessel_j_imp(unsigned
                      int, T, const Policy &) [with T=long double,
                      Policy=c_policies::c_policy]" at line 394 of
                      "./boost/math/special_functions/bessel.hpp"
            instantiation of "boost::math::detail::bessel_traits<T, T,
                      Policy>::result_type boost::math::sph_bessel(unsigned
                      int, T, const Policy &) [with T=double,
                      Policy=c_policies::c_policy]" at line 129 of
                      "libs/math/build/../src/tr1/c_policy.hpp"
            instantiation of "boost::math::detail::bessel_traits<T, T,
                      c_policies::c_policy>::result_type
                      c_policies::sph_bessel(unsigned int, T) [with T=double]"
                      at line 16 of "libs/math/build/../src/tr1/sph_bessel.cpp"

"./boost/math/special_functions/sinc.hpp", line 79: error: more than one
          instance of overloaded function "abs" matches the argument list:
            function "abs(double)"
            function "abs(int)"
            argument types are: (const long double)
                  if    (abs(x) >= taylor_0_bound)
                         ^
          detected during:
            instantiation of "T boost::math::detail::sinc_pi_imp(T) [with
                      T=long double]" at line 110
            instantiation of "boost::math::tools::promote_args<T, float,
                      float, float, float, float>::type
                      boost::math::sinc_pi(T, const Policy &) [with T=long
                      double, Policy=c_policies::c_policy]" at line 154 of
                      "./boost/math/special_functions/bessel.hpp"
            instantiation of "T boost::math::detail::sph_bessel_j_imp(unsigned
                      int, T, const Policy &) [with T=long double,
                      Policy=c_policies::c_policy]" at line 394 of
                      "./boost/math/special_functions/bessel.hpp"
            instantiation of "boost::math::detail::bessel_traits<T, T,
                      Policy>::result_type boost::math::sph_bessel(unsigned
                      int, T, const Policy &) [with T=double,
                      Policy=c_policies::c_policy]" at line 129 of
                      "libs/math/build/../src/tr1/c_policy.hpp"
            instantiation of "boost::math::detail::bessel_traits<T, T,
                      c_policies::c_policy>::result_type
                      c_policies::sph_bessel(unsigned int, T) [with T=double]"
                      at line 16 of "libs/math/build/../src/tr1/sph_bessel.cpp"

"./boost/math/special_functions/sinc.hpp", line 86: error: more than one
          instance of overloaded function "abs" matches the argument list:
            function "abs(double)"
            function "abs(int)"
            argument types are: (const long double)
                      if    (abs(x) >= taylor_2_bound)
                             ^
          detected during:
            instantiation of "T boost::math::detail::sinc_pi_imp(T) [with
                      T=long double]" at line 110
            instantiation of "boost::math::tools::promote_args<T, float,
                      float, float, float, float>::type
                      boost::math::sinc_pi(T, const Policy &) [with T=long
                      double, Policy=c_policies::c_policy]" at line 154 of
                      "./boost/math/special_functions/bessel.hpp"
            instantiation of "T boost::math::detail::sph_bessel_j_imp(unsigned
                      int, T, const Policy &) [with T=long double,
                      Policy=c_policies::c_policy]" at line 394 of
                      "./boost/math/special_functions/bessel.hpp"
            instantiation of "boost::math::detail::bessel_traits<T, T,
                      Policy>::result_type boost::math::sph_bessel(unsigned
                      int, T, const Policy &) [with T=double,
                      Policy=c_policies::c_policy]" at line 129 of
                      "libs/math/build/../src/tr1/c_policy.hpp"
            instantiation of "boost::math::detail::bessel_traits<T, T,
                      c_policies::c_policy>::result_type
                      c_policies::sph_bessel(unsigned int, T) [with T=double]"
                      at line 16 of "libs/math/build/../src/tr1/sph_bessel.cpp"

3 errors detected in the compilation of "libs/math/build/../src/tr1/sph_bessel.cpp".

    "pgCC" -Kieee -fpic -fPIC -fast -Mx,8,0x10000000 -Minform=warn -DBOOST_ALL_NO_LIB=1 -DBOOST_MATH_TR1_DYN_LINK=1 -DNDEBUG -D__need_IOV_MAX -
I"." -I"libs/math/src/tr1" -c -o "bin.v2/libs/math/build/pgi/release/threading-multi/sph_bessel.o" "libs/math/build/../src/tr1/sph_bessel.cpp"


pgi.compile.c++ bin.v2/libs/math/build/pgi/release/threading-multi/sph_bessell.o
"./boost/math/special_functions/sinc.hpp", line 70: error: more than one
          instance of overloaded function "abs" matches the argument list:
            function "abs(double)"
            function "abs(int)"
            argument types are: (const long double)
              if    (abs(x) >= taylor_n_bound)
                     ^
          detected during:
            instantiation of "T boost::math::detail::sinc_pi_imp(T) [with
                      T=long double]" at line 110
            instantiation of "boost::math::tools::promote_args<T, float,
                      float, float, float, float>::type
                      boost::math::sinc_pi(T, const Policy &) [with T=long
                      double, Policy=c_policies::c_policy]" at line 154 of
                      "./boost/math/special_functions/bessel.hpp"
            instantiation of "T boost::math::detail::sph_bessel_j_imp(unsigned
                      int, T, const Policy &) [with T=long double,
                      Policy=c_policies::c_policy]" at line 394 of
                      "./boost/math/special_functions/bessel.hpp"
            instantiation of "boost::math::detail::bessel_traits<T, T,
                      Policy>::result_type boost::math::sph_bessel(unsigned
                      int, T, const Policy &) [with T=long double,
                      Policy=c_policies::c_policy]" at line 129 of
                      "libs/math/build/../src/tr1/c_policy.hpp"
            instantiation of "boost::math::detail::bessel_traits<T, T,
                      c_policies::c_policy>::result_type
                      c_policies::sph_bessel(unsigned int, T) [with T=long
                      double]" at line 16 of
                      "libs/math/build/../src/tr1/sph_bessell.cpp"

"./boost/math/special_functions/sinc.hpp", line 79: error: more than one
          instance of overloaded function "abs" matches the argument list:
            function "abs(double)"
            function "abs(int)"
            argument types are: (const long double)
                  if    (abs(x) >= taylor_0_bound)
                         ^
          detected during:
            instantiation of "T boost::math::detail::sinc_pi_imp(T) [with
                      T=long double]" at line 110
            instantiation of "boost::math::tools::promote_args<T, float,
                      float, float, float, float>::type
                      boost::math::sinc_pi(T, const Policy &) [with T=long
                      double, Policy=c_policies::c_policy]" at line 154 of
                      "./boost/math/special_functions/bessel.hpp"
            instantiation of "T boost::math::detail::sph_bessel_j_imp(unsigned
                      int, T, const Policy &) [with T=long double,
                      Policy=c_policies::c_policy]" at line 394 of
                      "./boost/math/special_functions/bessel.hpp"
            instantiation of "boost::math::detail::bessel_traits<T, T,
                      Policy>::result_type boost::math::sph_bessel(unsigned
                      int, T, const Policy &) [with T=long double,
                      Policy=c_policies::c_policy]" at line 129 of
                      "libs/math/build/../src/tr1/c_policy.hpp"
            instantiation of "boost::math::detail::bessel_traits<T, T,
                      c_policies::c_policy>::result_type
                      c_policies::sph_bessel(unsigned int, T) [with T=long
                      double]" at line 16 of
                      "libs/math/build/../src/tr1/sph_bessell.cpp"

"./boost/math/special_functions/sinc.hpp", line 86: error: more than one
          instance of overloaded function "abs" matches the argument list:
            function "abs(double)"
            function "abs(int)"
            argument types are: (const long double)
                      if    (abs(x) >= taylor_2_bound)
                             ^
          detected during:
            instantiation of "T boost::math::detail::sinc_pi_imp(T) [with
                      T=long double]" at line 110
            instantiation of "boost::math::tools::promote_args<T, float,
                      float, float, float, float>::type
                      boost::math::sinc_pi(T, const Policy &) [with T=long
                      double, Policy=c_policies::c_policy]" at line 154 of
                      "./boost/math/special_functions/bessel.hpp"
            instantiation of "T boost::math::detail::sph_bessel_j_imp(unsigned
                      int, T, const Policy &) [with T=long double,
                      Policy=c_policies::c_policy]" at line 394 of
                      "./boost/math/special_functions/bessel.hpp"
            instantiation of "boost::math::detail::bessel_traits<T, T,
                      Policy>::result_type boost::math::sph_bessel(unsigned
                      int, T, const Policy &) [with T=long double,
                      Policy=c_policies::c_policy]" at line 129 of
                      "libs/math/build/../src/tr1/c_policy.hpp"
            instantiation of "boost::math::detail::bessel_traits<T, T,
                      c_policies::c_policy>::result_type
                      c_policies::sph_bessel(unsigned int, T) [with T=long
                      double]" at line 16 of
                      "libs/math/build/../src/tr1/sph_bessell.cpp"

3 errors detected in the compilation of "libs/math/build/../src/tr1/sph_bessell.cpp".

    "pgCC" -Kieee -fpic -fPIC -fast -Mx,8,0x10000000 -Minform=warn -DBOOST_ALL_NO_LIB=1 -DBOOST_MATH_TR1_DYN_LINK=1 -DNDEBUG -D__need_IOV_MAX -
I"." -I"libs/math/src/tr1" -c -o "bin.v2/libs/math/build/pgi/release/threading-multi/sph_bessell.o" "libs/math/build/../src/tr1/sph_bessell.cpp
"

Change History (12)

comment:1 by John Maddock, 10 years ago

No it's not a known issue, is there no std::abs(long double) overload on that platform?

I could change it to use std::fabs if that helps?

comment:2 by Mark Dixon <m.c.dixon@…>, 10 years ago

Hi,

I warn you, I've not done any C++ before, but I'm not sure that's the problem - the following test compiles and prints out 3.14:

#include <cmath>
#include <iostream>

int main()
{
   long double value = -3.14;
   cout << "Absolute: " << std::abs(value) << endl;
}
$ pgCC -o test2 test2.cpp
$ ./test2
Absolute: 3.14

comment:3 by Steven Watanabe, 10 years ago

What happens if you add #include <cstdlib> to your test case?

comment:4 by John Maddock, 10 years ago

What happens if you add #include <cstdlib> to your test case?

That was going to be my next question as well, add

#include <cstdlib>

To the very top of libs/math/src/tr1/sph_bessel.cpp

comment:5 by Mark Dixon <m.c.dixon@…>, 10 years ago

Thank you both for the suggestions, but I'm afraid there's no change:-

My test case still works and the boost build still fails (with the same message - except it's now complaining about line 17 of sph_bessel.cpp instead of 16)

Mark

comment:6 by alan.r.wild@…, 10 years ago

I'm also seeing this error on PGI 12.2 and PGI 12.5 on SuSE 11 (CLE4, specifically). Same system compiling with GCC (4.6.1, 4.6.2, 4.7.0, & 4.7.1), Intel 11.1 or Cray's compiler (8.0 and 8.1) aren't showing this error.

comment:7 by anonymous, 10 years ago

Are you able to do a quick grep and find out which header defines std::abs(long double) on that platform as from the comments above neither <cmath> nor <cstdlib> appear to be defining it?

Thanks, John.

comment:8 by Mark Dixon <m.c.dixon@…>, 10 years ago

For PGI 11.3, it seems to be in:

${PGI_HOME}/include/CC/stl/_cmath.h

Which is included by the following headers:

${PGI_HOME}/include/CC/cmath
${PGI_HOME}/include/CC/stl/_valarray.h
${PGI_HOME}/include/CC/stl/_complex.h

So it "should" be included.

Sticking the following definition:

long double abs (long double __x) { return __x; }

At the very top of sph_bessel.cpp results in the following compile error:

"/apps/compilers/pgi/11.3/1/default/linux86-64/11.3/include/CC/stl/_cmath.h", line 208: error: 
          function "std::abs(long double)" conflicts with using-declaration of
          function "abs(long double)"
  inline long double abs (long double __x)                  { return _STLP_DO_ABS(long double)((double)__x); }
                     ^

"./boost/math/special_functions/fpclassify.hpp", line 85: error: 
          using-declaration of function "abs(long double)" conflicts with
          function "std::abs(long double)" (declared at line 208 of
          "/apps/compilers/pgi/11.3/1/default/linux86-64/11.3/include/CC/stl/_c
          math.h")
    namespace std{ using ::abs; using ::fabs; }
                           ^

2 errors detected in the compilation of "libs/math/src/tr1/sph_bessel.cpp".

So it would appear that it is being included.

Alternatively, if I alter sph_bessel.cpp to read:

//  Copyright John Maddock 2008.
//  Use, modification and distribution are subject to the
//  Boost Software License, Version 1.0.  (See accompanying file
//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
#  include <pch.hpp>
#ifndef BOOST_MATH_TR1_SOURCE
#  define BOOST_MATH_TR1_SOURCE
#endif
#include <boost/math/tr1.hpp>
#include <boost/math/special_functions/bessel.hpp>
#include "c_policy.hpp"

extern "C" double BOOST_MATH_TR1_DECL boost_sph_bessel BOOST_PREVENT_MACRO_SUBSTITUTION(unsigned n, double x) BOOST_MATH_C99_THROW_SPEC
{
   long double val = 3.14;
   std::abs(val);
   return c_policies::sph_bessel BOOST_PREVENT_MACRO_SUBSTITUTION(n, x);
}

I get the 3 compile errors originally reported, but no new ones. sph_bessel.cpp clearly knows about the long double abs definition.

Presumably the problem is deep in the include files?

Thanks,

Mark

comment:9 by anonymous, 10 years ago

OK, next try: can you replace in boost/math/special_functions/sinc.hpp, from line 64

#if defined(BOOST_NO_STDC_NAMESPACE) && !defined(__SUNPRO_CC)
            using    ::abs;
            using    ::sin;
            using    ::sqrt;
#else    /* BOOST_NO_STDC_NAMESPACE */
            using    ::std::abs;
            using    ::std::sin;
            using    ::std::sqrt;
#endif    /* BOOST_NO_STDC_NAMESPACE */

with simply

BOOST_MATH_STD_USING

And see if that kills some of the errors?

comment:10 by Mark Dixon <m.c.dixon@…>, 10 years ago

Nice one - library "math" now builds with no compiler errors at all :)

Thanks,

Mark

comment:11 by John Maddock, 10 years ago

Resolution: fixed
Status: newclosed

Fixed in Trunk.

comment:12 by John Maddock, 9 years ago

(In [85987]) Merge accumulated patches from Trunk. Refs #8384, Refs #8855, refs #9107, refs #9109, refs #8333, refs #8621, refs #8732, refs #8733, refs #8837, refs #8940, refs #9042, refs #9087, refs #9104, refs #9126.

Note: See TracTickets for help on using tickets.