[dynamic_bitset] proposed fix for ticket #2842

Dear all, I have suffered the effects described on ticket #2842: "dynamic_bitset.hpp fails to compile with g++ (Ubuntu 4.3.3-5ubuntu2) 4.3.3" after upgrading from Ubuntu 8.10 to 9.04. After some testing, I have found a possible fix, but I would like to know how may I test thoroughly over as many compiler/versions as possible before I may suggest its inclusion in trunk. Fix data: -- tested under gcc versión 4.3.3 (Ubuntu 4.3.3-5ubuntu4) -- tested under gcc versión 4.1.2 20080704 (Red Hat 4.1.2-44) -- Patch data: <PATCH> Index: boost/dynamic_bitset/dynamic_bitset.hpp =================================================================== --- boost/dynamic_bitset/dynamic_bitset.hpp (revision 52752) +++ boost/dynamic_bitset/dynamic_bitset.hpp (working copy) @@ -999,11 +999,17 @@ using detail::dynamic_bitset_impl::access_by_blocks; using detail::dynamic_bitset_impl::value_to_type; +#if BOOST_WORKAROUND(__GNUC__, == 4) && (__GNUC_MINOR__ >= 3) + // NOTE: Explicitly qualificationf of "bits_per_block" + // breaks compilation on gcc 4.3.3 + const bool no_padding = bits_per_block == CHAR_BIT * sizeof(Block); +#else // NOTE: Explicitly qualifying "bits_per_block" to workaround // regressions of gcc 3.4.x const bool no_padding = dynamic_bitset<Block, Allocator>::bits_per_block == CHAR_BIT * sizeof(Block); +#endif const bool enough_table_width = table_width >= CHAR_BIT; </PATCH> TIA Zara

I have suffered the effects described on ticket #2842: "dynamic_bitset.hpp fails to compile with g++ (Ubuntu 4.3.3-5ubuntu2) 4.3.3" after upgrading from Ubuntu 8.10 to 9.04.
After some testing, I have found a possible fix, but I would like to know how may I test thoroughly over as many compiler/versions as possible before I may suggest its inclusion in trunk.
I applied your (slightly modified) patch to SVN trunk in the hope the authors don't object as it fixes a Spirit regression we're facing on the very same platform. Thanks! Regards Hartmut
Fix data:
-- tested under gcc versión 4.3.3 (Ubuntu 4.3.3-5ubuntu4) -- tested under gcc versión 4.1.2 20080704 (Red Hat 4.1.2-44) -- Patch data: <PATCH> Index: boost/dynamic_bitset/dynamic_bitset.hpp =================================================================== --- boost/dynamic_bitset/dynamic_bitset.hpp (revision 52752) +++ boost/dynamic_bitset/dynamic_bitset.hpp (working copy) @@ -999,11 +999,17 @@ using detail::dynamic_bitset_impl::access_by_blocks; using detail::dynamic_bitset_impl::value_to_type;
+#if BOOST_WORKAROUND(__GNUC__, == 4) && (__GNUC_MINOR__ >= 3) + // NOTE: Explicitly qualificationf of "bits_per_block" + // breaks compilation on gcc 4.3.3 + const bool no_padding = bits_per_block == CHAR_BIT * sizeof(Block); +#else // NOTE: Explicitly qualifying "bits_per_block" to workaround // regressions of gcc 3.4.x const bool no_padding = dynamic_bitset<Block, Allocator>::bits_per_block == CHAR_BIT * sizeof(Block); +#endif
const bool enough_table_width = table_width >= CHAR_BIT;
</PATCH>

Hartmut Kaiser escribió:
I have suffered the effects described on ticket #2842: "dynamic_bitset.hpp fails to compile with g++ (Ubuntu 4.3.3-5ubuntu2) 4.3.3" after upgrading from Ubuntu 8.10 to 9.04.
After some testing, I have found a possible fix, but I would like to know how may I test thoroughly over as many compiler/versions as possible before I may suggest its inclusion in trunk.
I applied your (slightly modified) patch to SVN trunk in the hope the authors don't object as it fixes a Spirit regression we're facing on the very same platform.
Tank's very much. Not only for applying *and* modifying the patch, but also for the modification itself, as it has shown me more details on the ways to make compiler classification. Thx very much
participants (2)
-
Hartmut Kaiser
-
Juan Antonio Zaratiegui Vallecillo, a.k.a. Zara