Boost C++ Libraries: Ticket #3911: Boost.Serialization test failures on AIX with vacpp https://svn.boost.org/trac10/ticket/3911 <p> The tests for Boost.serialization: test_polymorphic_polymorphic_text_archive test_polymorphic_polymorphic_text_warchive test_polymorphic_polymorphic_xml_archive test_polymorphic_polymorphic_xml_warchive </p> <p> on AIX with vacpp all fail with the error message: (S) The call to "save" has no best match These tests work fine with address-model=64. The compilation errors are only emitted in 32bit because the macro BOOST_NO_INT64_T is not defined in 32bit. </p> <p> I believe the right fix is changing boost/cstdint.hpp to define the macro BOOST_NO_INT64_T in 32bit mode on AIX with vacpp. </p> en-us Boost C++ Libraries /htdocs/site/boost.png https://svn.boost.org/trac10/ticket/3911 Trac 1.4.3 ccambly@… Mon, 08 Feb 2010 20:37:11 GMT attachment set https://svn.boost.org/trac10/ticket/3911 https://svn.boost.org/trac10/ticket/3911 <ul> <li><strong>attachment</strong> → <span class="trac-field-new">cstdint.hpp.patch</span> </li> </ul> Ticket Robert Ramey Thu, 11 Feb 2010 17:24:34 GMT owner changed https://svn.boost.org/trac10/ticket/3911#comment:1 https://svn.boost.org/trac10/ticket/3911#comment:1 <ul> <li><strong>owner</strong> changed from <span class="trac-author">Robert Ramey</span> to <span class="trac-author">John Maddock</span> </li> </ul> <p> I THINK this is the correct person to deal with this. If I'm wrong about this, feel free to bounce it back to me. </p> <p> Robert Ramey </p> Ticket anonymous Thu, 11 Feb 2010 18:44:58 GMT owner changed https://svn.boost.org/trac10/ticket/3911#comment:2 https://svn.boost.org/trac10/ticket/3911#comment:2 <ul> <li><strong>owner</strong> changed from <span class="trac-author">John Maddock</span> to <span class="trac-author">Robert Ramey</span> </li> </ul> <p> Whatever the cause is, I'm not convinced that this is the correct fix. </p> <p> I note that with the regression tests (32-bit) run with vacpp 10.1 that the integer tests are all compiling. </p> <p> Are you really saying that there is no int64_t in stdint.h? Come to that I don't see how this macro can be defined in 64-bit mode either? </p> <p> I believe the problem here is in polymorphic_iarchive.hpp, rather than: </p> <pre class="wiki"> #if !defined(BOOST_NO_INTRINSIC_INT64_T) virtual void load(boost::int64_t &amp; t) = 0; virtual void load(boost::uint64_t &amp; t) = 0; #endif </pre><p> It should be: </p> <pre class="wiki"> #if defined(BOOST_HAS_LONG_LONG) virtual void load(boost::long_long_type &amp; t) = 0; virtual void load(boost::ulong_long_type &amp; t) = 0; #elif defined(BOOST_HAS_MS_INT64) virtual void load(__int64 &amp; t) = 0; virtual void load(unsigned __int64 &amp; t) = 0; #endif </pre><p> In other word if you overload on <em>type</em>, then overload by "long long" or equivalent as well. Alternatively overload by <em>size</em>: int16_t, int32_t etc (but this may miss some types out if they're the same size as each other, causing problems down the road). But whatever you do don't mix the two! </p> <p> BTW long long will be part of the next standard, so we should be supporting this as a native type where available anyway. </p> <p> HTH, John. </p> Ticket ccambly@… Thu, 11 Feb 2010 23:25:54 GMT <link>https://svn.boost.org/trac10/ticket/3911#comment:3 </link> <guid isPermaLink="false">https://svn.boost.org/trac10/ticket/3911#comment:3</guid> <description> <p> I will retract my patch. </p> <p> The problem for vacpp is that those function overloads in polymorphic_iarchive.hpp are controlled by the macro BOOST_NO_INTRINSIC_INT64_T, but inside of the tests them selves the macro used is BOOST_NO_INT64_T. It is possible to have one macro defined and not the other. </p> <p> I originally was changing the tests A.ipp A.cpp A.hpp to use </p> <table class="wiki"> <tr>#if !(defined(BOOST_NO_INT64_T) <td> defined(BOOST_NO_INTRINSIC_INT64_T)) </td></tr></table> <p> instead of #ifndef BOOST_NO_INT64_T which worked as well. </p> <p> I changed my mind about the fix upon seeing code for _hpux in cstdint.h doing something to control the macro BOOST_NO_INT64_T but I'm really not sure what is the real issue. </p> <p> Johns change sounds reasonable. </p> </description> <category>Ticket</category> </item> <item> <author>ccambly@…</author> <pubDate>Fri, 12 Feb 2010 17:59:38 GMT</pubDate> <title/> <link>https://svn.boost.org/trac10/ticket/3911#comment:4 </link> <guid isPermaLink="false">https://svn.boost.org/trac10/ticket/3911#comment:4</guid> <description> <p> The section of code at the top of polymorphic_oarchive.hpp </p> <p> <em> determine if its necessary to handle (u)int64_t specifically </em> i.e. that its not a synonym for (unsigned) long <em> if there is no 64 bit int or if its the same as a long </em> we shouldn't define separate functions for int64 data types. #if defined(BOOST_NO_INT64_T) </p> <blockquote> <p> #define BOOST_NO_INTRINSIC_INT64_T </p> </blockquote> <p> #else </p> <blockquote> <p> #if defined(ULLONG_MAX) </p> <blockquote> <p> #if(ULONG_MAX == 18446744073709551615ul) <em> 2<strong>64 - 1 </strong></em></p> <blockquote> <p> #define BOOST_NO_INTRINSIC_INT64_T <em> vacpp gets here </em></p> </blockquote> <p> #endif </p> </blockquote> </blockquote> <p> ... </p> <p> So we have BOOST_NO_INT64_T not defined and BOOST_NO_INTRINSIC_INT64_T defined. In A.hpp we will get the members for f, and g defined. </p> <blockquote> <p> #ifndef BOOST_NO_INT64_T boost::int64_t f; boost::uint64_t g; #endif </p> </blockquote> <p> but in polymorphic_oarchive.hpp we do not get the declarations for </p> <blockquote> <p> #if !defined(BOOST_NO_INTRINSIC_INT64_T) virtual void save(const boost::int64_t t) = 0; virtual void save(const boost::uint64_t t) = 0; #endif </p> </blockquote> </description> <category>Ticket</category> </item> <item> <dc:creator>Robert Ramey</dc:creator> <pubDate>Fri, 26 Feb 2010 06:44:48 GMT</pubDate> <title>status changed; resolution set https://svn.boost.org/trac10/ticket/3911#comment:5 https://svn.boost.org/trac10/ticket/3911#comment:5 <ul> <li><strong>status</strong> <span class="trac-field-old">new</span> → <span class="trac-field-new">closed</span> </li> <li><strong>resolution</strong> → <span class="trac-field-new">fixed</span> </li> </ul> <p> 1) I've implemented John's suggestion. should show up in the trunk in a while. </p> <p> 2) seems like the analogous fix should be made in polymorphic_oarchive.hpp . correct? </p> <p> Robert Ramey </p> Ticket Robert Ramey Fri, 26 Feb 2010 06:49:39 GMT <link>https://svn.boost.org/trac10/ticket/3911#comment:6 </link> <guid isPermaLink="false">https://svn.boost.org/trac10/ticket/3911#comment:6</guid> <description> <p> looks the following headers should also get similar treatment </p> <p> collection_traits.hpp polymorphic_oarchive_route.hpp </p> </description> <category>Ticket</category> </item> </channel> </rss>