Boost regression notification (2006-10-24 [RC_1_34_0])

Boost Regression test failures Report time: 2006-10-24T10:41:49Z This report lists all regression test failures on release platforms. Detailed report: http://engineering.meta-comm.com/boost-regression/CVS-RC_1_34_0/developer/is... 48 failures in 9 libraries iostreams (10) lambda (1) mpl (5) parameter (3) program_options (7) random (1) serialization (16) spirit (4) utility (1) |iostreams| bzip2_test: msvc-7.1 msvc-8.0 example_test: vc-6_5-stlport file_descriptor_test: cw-9.4 finite_state_filter_test: cw-9.4 gzip_test: msvc-7.1 msvc-8.0 mapped_file_test: cw-9.4 zlib_test: msvc-7.1 msvc-8.0 |lambda| exception_test: gcc-3_4_4_tru64 |mpl| multiset: gcc-4.0.3_linux gcc-4.1.0_linux gcc-4.1.0_linux_x86_64 gcc-4.1.1_sunos_i86pc gcc-4_0_3_tru64 |parameter| python_test: qcc-3.3.5_gpp sfinae: borland-5_8_2 vc-6_5-stlport |program_options| cmdline_test_dll: cw-9.4 options_description_test_dll: cw-9.4 parsers_test_dll: cw-9.4 positional_options_test_dll: cw-9.4 unicode_test_dll: cw-9.4 variable_map_test_dll: cw-9.4 winmain_dll: cw-9.4 |random| random_test: intel-linux-9.0 |serialization| test_class_info_load_text_warchive: vc-6_5 test_non_default_ctor2_text_archive: qcc-3.3.5_cpp test_non_default_ctor2_text_archive_dll: qcc-3.3.5_cpp test_non_default_ctor2_text_warchive: qcc-3.3.5_cpp test_non_default_ctor2_text_warchive_dll: qcc-3.3.5_cpp test_reset_object_address: vc-7_0 test_reset_object_address_dll: vc-7_0 test_simple_class_binary_archive_dll: vc-6_5 test_simple_class_text_archive_dll: vc-6_5 test_simple_class_text_warchive_dll: vc-6_5 test_simple_class_xml_archive_dll: vc-6_5 test_simple_class_xml_warchive_dll: vc-6_5 test_variant_xml_archive: borland-5_8_2 test_variant_xml_archive_dll: borland-5_8_2 test_variant_xml_warchive: borland-5_8_2 test_variant_xml_warchive_dll: borland-5_8_2 |spirit| action_tests: qcc-3.3.5_cpp qcc-3.3.5_gpp action_tests_debug: qcc-3.3.5_cpp qcc-3.3.5_gpp |utility| operators_test: gcc-3.4.5_linux_x86_64

On 2006-10-24, Douglas Gregor <dgregor@cs.indiana.edu> wrote:
Boost Regression test failures Report time: 2006-10-24T10:41:49Z [...] |mpl| multiset: gcc-4.0.3_linux gcc-4.1.0_linux gcc-4.1.0_linux_x86_64 gcc-4.1.1_sunos_i86pc gcc-4_0_3_tru64
These are not going to go away unless either: 1. they are marked as expected 2. the test is reworked to avoid the problem 3. the macro BOOST_MPL_ASSERT_RELATION is reworked to avoid the problem See http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29518 The macro is: #define BOOST_MPL_ASSERT(pred) \ enum { \ BOOST_PP_CAT(mpl_assertion_in_line_,__LINE__) = sizeof( \ boost::mpl::assertion_failed<false>( \ boost::mpl::assert_arg( (void (*) pred)0, 1 ) \ ) \ ) \ }\ /**/ It is apparently to do with the enum usage... I'm guessing there is a good reason why this code (and others in the boost/mpl/assert.hpp) uses enum directly rather than BOOST_STATIC_CONSTANT? phil -- change name before "@" to "phil" for email

Phil Richards writes:
On 2006-10-24, Douglas Gregor <dgregor@cs.indiana.edu> wrote:
Boost Regression test failures Report time: 2006-10-24T10:41:49Z [...] |mpl| multiset: gcc-4.0.3_linux gcc-4.1.0_linux gcc-4.1.0_linux_x86_64 gcc-4.1.1_sunos_i86pc gcc-4_0_3_tru64
These are not going to go away unless either: 1. they are marked as expected 2. the test is reworked to avoid the problem 3. the macro BOOST_MPL_ASSERT_RELATION is reworked to avoid the problem
Thanks for the lead!
The macro is: #define BOOST_MPL_ASSERT(pred) \ enum { \ BOOST_PP_CAT(mpl_assertion_in_line_,__LINE__) = sizeof( \ boost::mpl::assertion_failed<false>( \ boost::mpl::assert_arg( (void (*) pred)0, 1 ) \ ) \ ) \ }\ /**/
It is apparently to do with the enum usage...
Actually, no, enums in the bug's subject and reduced test case are a red herring. For example, this still fails for me on 4.1.1: template< int C > int assertion_failed(int); template< class > struct N { static int const value = 1; static int const t = sizeof( assertion_failed<value>(0) ); }; int main() { N<int> n; return n.t; } As a matter of fact, my current workaround for this issue involves _introducing_ an auxiliary enum for the values that are used in function templates' non-type arguments, e.g.: template< int C > int assertion_failed(int); template< class > struct N { static int const value = 1; enum { gcc_workaround = value }; static int const t = sizeof( assertion_failed<gcc_workaround>(0) ); // it compiles, yay! };
I'm guessing there is a good reason why this code (and others in the boost/mpl/assert.hpp) uses enum directly rather than BOOST_STATIC_CONSTANT?
I vaguely recalled that there was, but didn't remeber what it was, so in the end I found it out the hard way :). There are at least two reasons: 1) Borland can't cope with static constants there (http://article.gmane.org/gmane.comp.lib.boost.testing/3514). 2) GCC issues "unused variable" warnings when static constants are used at a function scope (http://article.gmane.org/gmane.comp.lib.boost.devel/150691). Thanks for your input, -- Aleksey Gurtovoy MetaCommunications Engineering
participants (3)
-
Aleksey Gurtovoy
-
Douglas Gregor
-
Phil Richards