Open romariorios opened 3 years ago
Oh, I almost forgot:
Compiler (from RedHat's devtoolset-8):
$ gcc --version
gcc (GCC) 8.3.1 20190311 (Red Hat 8.3.1-3)
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
OS:
$ lsb_release -a
LSB Version: :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch
Distributor ID: CentOS
Description: CentOS release 6.10 (Final)
Release: 6.10
Codename: Final
$ uname -a
Linux hostname 2.6.32-754.35.1.el6.x86_64 #1 SMP Sat Nov 7 12:42:14 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
Boost 1.74.0 from https://conan.io
I think this problem is solved best by using fp_traits_non_native
explicitly in the eos-portable-archive code, like I also suggested here:
https://github.com/cms-sw/cmssw/pull/40057
A little background: I'm updating boost 1.67 to 1.74. I also updated eos-portable-archive from a previous version that didn't support boost >= 1.69 to the most recent one.
So, in
portable_oarchive.hpp
, we have these asserts around line 393 in thesave
overload that saves floating point numbers:Before updating, everything worked fine. After updating, I'm hit with an error that says the
bits
member oftraits
in the snippet above is not a member ofboost::math::detail::fp_traits_native<double>
:Right before the asserts, there's a comment that says that, if I got to this point in the code, one of the following was likely the problem:
These comments assume I even get to the asserts below anyway, which I don't, so I believe this is something else? Also, these checks were in place in the previous version of boost + eos, so I don't think it has anything to do with my architecture.
Anyway, I went and checked which traits struct was this and then I get this in
boost/math/special_functions/detail/fp_traits.hpp
:It's just a tag type. For some reason, the native traits struct is being selected, but it clearly isn't expected here.
In the header section of
portable_oarchive.hpp
, I see this:If I go over to
fpclassify.hpp
:Since
BOOST_MATH_DISABLE_STD_FPCLASSIFY
is defined, shouldn't it choose thefp_traits_non_native
traits struct? Why is it choosing the native one? I'm not sure what's going on.And this is as far as I've got. I'm lost at what is happening here and I'm not familiar with this code.
I hope this helps you investigate.