Subject: [Boost-bugs] [Boost C++ Libraries] #11160: failed to build Boost.Math library with cray compiler 8.3.6 on CLE5.2
From: Boost C++ Libraries (noreply_at_[hidden])
Date: 2015-03-31 17:04:33
#11160: failed to build Boost.Math library with cray compiler 8.3.6 on CLE5.2
--------------------------------+-------------------------
Reporter: Alan Wild <alan@â¦> | Owner: johnmaddock
Type: Bugs | Status: new
Milestone: To Be Determined | Component: math
Version: Boost 1.57.0 | Severity: Problem
Keywords: |
--------------------------------+-------------------------
This is quite similar to
{{{
https://svn.boost.org/trac/boost/ticket/10925
}}}
Error is as follows:
{{{
CC -c -g -O0 -hgnu -fPIC -h system_alloc -h tolerant -h fp0 -static
-DBOOST_ALL_NO_LIB=1 -I"." -I"libs/math/src/tr1" -o "/dev/shm/build-boost-
tmp-cce_8.3.6/boost/bin.v2/libs/math/build/cray/debug/boost.locale.icu-off
/link-static/runtime-link-static/assoc_legendre.o"
"libs/math/build/../src/tr1/assoc_legendre.cpp"
CC-70 crayc++: ERROR File =
/dev/shm/boost_1_57_0/./boost/math/cstdfloat/cstdfloat_types.hpp, Line =
350
The indicated type is incomplete.
BOOST_STATIC_ASSERT_MSG(std::numeric_limits<boost::float32_t>::is_iec559
== true, "boost::float32_t has been detected in <boost/cstdfloat>, but
verification with std::numeric_limits fails");
^
CC-70 crayc++: ERROR File =
/dev/shm/boost_1_57_0/./boost/math/cstdfloat/cstdfloat_types.hpp, Line =
364
The indicated type is incomplete.
BOOST_STATIC_ASSERT_MSG(std::numeric_limits<boost::float64_t>::is_iec559
== true, "boost::float64_t has been detected in <boost/cstdfloat>, but
verification with std::numeric_limits fails");
}}}
I am getting around it for the time being with the following patch:
{{{
--- boost_1_57_0/boost/math/cstdfloat/cstdfloat_types.hpp 2014-10-30
06:35:53.000000000 -0500
+++ boost_1_57_0.xom/boost/math/cstdfloat/cstdfloat_types.hpp 2015-03-30
14:58:00.000000000 -0500
@@ -347,7 +347,13 @@
typedef boost::float32_t float_fast32_t;
typedef boost::float32_t float_least32_t;
+ #if defined(_CRAYC)
+
BOOST_STATIC_ASSERT_MSG(std::numeric_limits<boost::float32_t>::has_infinity
== true, "boost::float32_t has been detected in <boost/cstdfloat>, but
verification with std::numeric_limits fails");
+
BOOST_STATIC_ASSERT_MSG(std::numeric_limits<boost::float32_t>::has_quiet_NaN
== true, "boost::float32_t has been detected in <boost/cstdfloat>, but
verification with std::numeric_limits fails");
+
BOOST_STATIC_ASSERT_MSG(std::numeric_limits<boost::float32_t>::has_signaling_NaN
== true, "boost::float32_t has been detected in <boost/cstdfloat>, but
verification with std::numeric_limits fails");
+ #else
BOOST_STATIC_ASSERT_MSG(std::numeric_limits<boost::float32_t>::is_iec559
== true, "boost::float32_t has been detected in <boost/cstdfloat>, but
verification with std::numeric_limits fails");
+ #endif
BOOST_STATIC_ASSERT_MSG(std::numeric_limits<boost::float32_t>::radix
== 2, "boost::float32_t has been detected in <boost/cstdfloat>, but
verification with std::numeric_limits fails");
BOOST_STATIC_ASSERT_MSG(std::numeric_limits<boost::float32_t>::digits
== 24, "boost::float32_t has been detected in <boost/cstdfloat>, but
verification with std::numeric_limits fails");
BOOST_STATIC_ASSERT_MSG(std::numeric_limits<boost::float32_t>::max_exponent
== 128, "boost::float32_t has been detected in <boost/cstdfloat>, but
verification with std::numeric_limits fails");
@@ -361,7 +367,13 @@
typedef boost::float64_t float_fast64_t;
typedef boost::float64_t float_least64_t;
+ #if defined(_CRAYC)
+
BOOST_STATIC_ASSERT_MSG(std::numeric_limits<boost::float64_t>::has_infinity
== true, "boost::float64_t has been detected in <boost/cstdfloat>, but
verification with std::numeric_limits fails");
+
BOOST_STATIC_ASSERT_MSG(std::numeric_limits<boost::float64_t>::has_quiet_NaN
== true, "boost::float64_t has been detected in <boost/cstdfloat>, but
verification with std::numeric_limits fails");
+
BOOST_STATIC_ASSERT_MSG(std::numeric_limits<boost::float64_t>::has_signaling_NaN
== true, "boost::float64_t has been detected in <boost/cstdfloat>, but
verification with std::numeric_limits fails");
+ #else
BOOST_STATIC_ASSERT_MSG(std::numeric_limits<boost::float64_t>::is_iec559
== true, "boost::float64_t has been detected in <boost/cstdfloat>, but
verification with std::numeric_limits fails");
+ #endif
BOOST_STATIC_ASSERT_MSG(std::numeric_limits<boost::float64_t>::radix
== 2, "boost::float64_t has been detected in <boost/cstdfloat>, but
verification with std::numeric_limits fails");
BOOST_STATIC_ASSERT_MSG(std::numeric_limits<boost::float64_t>::digits
== 53, "boost::float64_t has been detected in <boost/cstdfloat>, but
verification with std::numeric_limits fails");
BOOST_STATIC_ASSERT_MSG(std::numeric_limits<boost::float64_t>::max_exponent
== 1024, "boost::float64_t has been detected in <boost/cstdfloat>, but
verification with std::numeric_limits fails");
}}}
The -h fp0 flags I'm using for this build is the "most standards
compliant/least optimizing" floating-point flag I've found for this
compiler. I'm also attempting to open a bug with Cray to address this
issue, but in the meantime is there something I should be doing
differently or is this patch at least "reasonable".
Or is the write answer here not to attempt to provide Boost.Math to my
users (for my 1.57 builds anyway). FWIW, I do believe this problem was
introduced in 1.56... I've just never built it myself.
-- Ticket URL: <https://svn.boost.org/trac/boost/ticket/11160> Boost C++ Libraries <http://www.boost.org/> Boost provides free peer-reviewed portable C++ source libraries.
This archive was generated by hypermail 2.1.7 : 2017-02-16 18:50:18 UTC