Boost logo

Boost :

From: Doug Gregor (dgregor_at_[hidden])
Date: 2005-11-28 08:22:39


On Nov 25, 2005, at 6:27 PM, Hartmut Kaiser wrote:
> Douglas Gregor wrote:
>
>> GCC 4.0.2 is failing on some of the "switch" tests for Spirit. Would
>> one of the Spirit developer please take a look at these? I'd like to
>> get full support for GCC 4.0.2 into 1.33.1, if possible.
>>
>>
>> http://engineering.meta-comm.com/boost-regression/CVS-RC_1_33_
>> 0/developer/spirit.html
>
> I hope to have it fixed (can't verify, though, don't have gcc 4.0.2
> available at the moment). Let's wait for the next regression tests.

I've managed to fix it with this patch, but I'd like you to check it
over before I commit it to CVS. Basically, I'm just casting the value
in the "case" statements into a "long". It seems safe, since we've
already forced cond_value to be a long.

        Doug

Index: switch.ipp
===================================================================
RCS file: /cvsroot/boost/boost/boost/spirit/dynamic/impl/switch.ipp,v
retrieving revision 1.10.6.1
diff -u -r1.10.6.1 switch.ipp
--- switch.ipp 25 Nov 2005 23:25:57 -0000 1.10.6.1
+++ switch.ipp 28 Nov 2005 12:22:25 -0000
@@ -385,7 +385,7 @@
      /**/

  #define BOOST_SPIRIT_PARSE_SWITCH_CASES(z, N, _)
      \
- case BOOST_PP_CAT(left_t, N)::value:
      \
+ case (long)(BOOST_PP_CAT(left_t, N)::value):
      \
          return delegate_parse(chain_parser<N,
left_t1>::right(p.left()), \
              scan, save);
      \
      /**/
@@ -404,7 +404,7 @@
                  BOOST_SPIRIT_PARSE_SWITCH_TYPEDEFS, _)
      \
                                                                         
      \
              switch (cond_value) {
      \
- case BOOST_PP_CAT(left_t, BOOST_PP_INC(N))::value:
      \
+ case (long)(BOOST_PP_CAT(left_t, BOOST_PP_INC(N))::value):
      \
                  return delegate_parse(
      \
                      chain_parser<
      \
                          case_chain<ParserT>::depth, ParserT
      \
@@ -413,7 +413,7 @@
              BOOST_PP_REPEAT_FROM_TO_ ## z(1, BOOST_PP_INC(N),
      \
                  BOOST_SPIRIT_PARSE_SWITCH_CASES, _)
      \
                                                                         
      \
- case left_t0::value:
      \
+ case (long)(left_t0::value):
      \
              default:
      \
                  typedef default_case<ParserT> default_t;
      \
                  typedef
      \


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk