Boost logo

Boost :

Subject: Re: [boost] [1.41.0] [spirit] [serialisation] Beta 1releasecandidate
From: John Maddock (john_at_[hidden])
Date: 2009-11-04 08:26:43


>> ./boost/spirit/home/classic/core/scanner/scanner.hpp:132: warning:
>> dereferencing pointer 'val' does break strict-aliasing rules
>>
>> Again, this is normally a bug once optimizations are turned on.
>
> It's the first time I'm seeing this problem in Spirit. We need to
> investigate this more closely as the warning comes from a template
> function
> (and 'val' is a template parameter), so I assume the issue is in the code
> using Spirit. What file produces this diagnostic?

It's from the serialization build:

gcc.compile.c++
/home/john/bin/boost/bin.v2/libs/serialization/build/gcc-4.4.1/release/link-static/threading-multi/xml_wgrammar.o
In file included from ./boost/archive/impl/basic_xml_grammar.hpp:59,
                 from libs/serialization/src/xml_wgrammar.cpp:18:
./boost/spirit/core/non_terminal/rule.hpp:18:4: warning: #warning "This
header is deprecated. Please use: boost/spirit/include/classic_rule.hpp"
In file included from libs/serialization/src/basic_xml_grammar.ipp:20,
                 from libs/serialization/src/xml_wgrammar.cpp:146:
./boost/spirit/core/composite/operators.hpp:18:4: warning: #warning "This
header is deprecated. Please use:
boost/spirit/include/classic_operators.hpp"
In file included from libs/serialization/src/basic_xml_grammar.ipp:21,
                 from libs/serialization/src/xml_wgrammar.cpp:146:
./boost/spirit/core/composite/actions.hpp:18:4: warning: #warning "This
header is deprecated. Please use: boost/spirit/include/classic_actions.hpp"
In file included from libs/serialization/src/basic_xml_grammar.ipp:22,
                 from libs/serialization/src/xml_wgrammar.cpp:146:
./boost/spirit/core/primitives/numerics.hpp:18:4: warning: #warning "This
header is deprecated. Please use: boost/spirit/include/classic_numerics.hpp"
In file included from
./boost/spirit/home/classic/core/non_terminal/rule.hpp:33,
                 from ./boost/spirit/include/classic_rule.hpp:11,
                 from ./boost/spirit/core/non_terminal/rule.hpp:25,
                 from ./boost/archive/impl/basic_xml_grammar.hpp:59,
                 from libs/serialization/src/xml_wgrammar.cpp:18:
./boost/spirit/home/classic/core/scanner/scanner.hpp: In member function
'typename boost::spirit::match_result<ScannerT, AttrT>::type
boost::spirit::impl::concrete_parser<ParserT, ScannerT,
AttrT>::do_parse_virtual(const ScannerT&) const [with ParserT =
boost::spirit::alternative<boost::spirit::alternative<boost::spirit::alternative<boost::spirit::rule<boost::spirit::scanner<__gnu_cxx::__normal_iterator<wchar_t*,
std::basic_string<wchar_t, std::char_traits<wchar_t>,
std::allocator<wchar_t> > >,
boost::spirit::scanner_policies<boost::spirit::iteration_policy,
boost::spirit::match_policy, boost::spirit::action_policy> >,
boost::spirit::nil_t, boost::spirit::nil_t>,
boost::spirit::rule<boost::spirit::scanner<__gnu_cxx::__normal_iterator<wchar_t*,
std::basic_string<wchar_t, std::char_traits<wchar_t>,
std::allocator<wchar_t> > >,
boost::spirit::scanner_policies<boost::spirit::iteration_policy,
boost::spirit::match_policy, boost::spirit::action_policy> >,
boost::spirit::nil_t, boost::spirit::nil_t> >,
boost::spirit::rule<boost::spirit::scanner<__gnu_cxx::__normal_iterator<wchar_t*,
std::basic_string<wchar_t, std::char_traits<wchar_t>,
std::allocator<wchar_t> > >,
boost::spirit::scanner_policies<boost::spirit::iteration_policy,
boost::spirit::match_policy, boost::spirit::action_policy> >,
boost::spirit::nil_t, boost::spirit::nil_t> >,
boost::spirit::action<boost::spirit::chset<wchar_t>,
boost::archive::xml::append_char<std::basic_string<wchar_t,
std::char_traits<wchar_t>, std::allocator<wchar_t> > > > >, ScannerT =
boost::spirit::scanner<__gnu_cxx::__normal_iterator<wchar_t*,
std::basic_string<wchar_t, std::char_traits<wchar_t>,
std::allocator<wchar_t> > >,
boost::spirit::scanner_policies<boost::spirit::iteration_policy,
boost::spirit::match_policy, boost::spirit::action_policy> >, AttrT =
boost::spirit::nil_t]':
./boost/spirit/home/classic/core/scanner/scanner.hpp:132: warning:
dereferencing pointer 'val' does break strict-aliasing rules
./boost/optional/optional.hpp:422: note: initialized from here

Note that this warning only shows up in release mode.

Harmut, while I have your attention, maybe the largest slew of warnings (in
terms of lines of output) are coming from wave, the first one reads:

gcc.compile.c++
/home/john/bin/boost/bin.v2/libs/wave/build/gcc-4.4.1/release/threading-multi/instantiate_cpp_exprgrammar.o
In file included from ./boost/wave/wave_config.hpp:217,
                 from libs/wave/src/instantiate_cpp_exprgrammar.cpp:11:
./boost/wave/util/flex_string.hpp: In member function 'Storage&
boost::wave::util::CowString<Storage, Align>::Data() const [with Storage =
boost::wave::util::AllocatorStringStorage<char, std::allocator<char> >,
Align = char*]':
./boost/wave/util/flex_string.hpp:1312: instantiated from
'boost::wave::util::CowString<Storage, Align>::~CowString() [with Storage =
boost::wave::util::AllocatorStringStorage<char, std::allocator<char> >,
Align = char*]'
./boost/wave/util/flex_string.hpp:1519: instantiated from
'boost::wave::util::flex_string<E, T, A, Storage>::~flex_string() [with E =
char, T = std::char_traits<char>, A = std::allocator<char>, Storage =
boost::wave::util::CowString<boost::wave::util::AllocatorStringStorage<char,
std::allocator<char> >, char*>]'
./boost/wave/grammars/cpp_expression_grammar.hpp:769: instantiated from
'static bool
boost::wave::grammars::expression_grammar_gen<TokenT>::evaluate(const
typename std::list<TokenT, boost::fast_pool_allocator<TokenT,
boost::default_user_allocator_new_delete,
boost::details::pool::pthread_mutex, 32u> >::const_iterator&, const typename
std::list<TokenT, boost::fast_pool_allocator<TokenT,
boost::default_user_allocator_new_delete,
boost::details::pool::pthread_mutex, 32u> >::const_iterator&, const typename
TokenT::position_type&, bool, boost::wave::grammars::value_error&) [with
TokenT =
boost::wave::cpplexer::lex_token<boost::wave::util::file_position<boost::wave::util::flex_string<char,
std::char_traits<char>, std::allocator<char>,
boost::wave::util::CowString<boost::wave::util::AllocatorStringStorage<char,
std::allocator<char> >, char*> > > >]'
libs/wave/src/instantiate_cpp_exprgrammar.cpp:41: instantiated from here
./boost/wave/util/flex_string.hpp:1214: warning: dereferencing type-punned
pointer will break strict-aliasing rules
./boost/wave/util/flex_string.hpp: In member function 'void
boost::wave::util::CowString<Storage, Align>::MakeUnique() const [with
Storage = boost::wave::util::AllocatorStringStorage<char,
std::allocator<char> >, Align = char*]':
./boost/wave/util/flex_string.hpp:653: warning: dereferencing pointer
'<anonymous>' does break strict-aliasing rules
./boost/wave/util/flex_string.hpp:584: warning: dereferencing pointer
'<anonymous>' does break strict-aliasing rules
./boost/wave/util/flex_string.hpp:583: warning: dereferencing pointer
'<anonymous>' does break strict-aliasing rules
./boost/wave/util/flex_string.hpp:581: warning: dereferencing pointer
'<anonymous>' does break strict-aliasing rules
./boost/wave/util/flex_string.hpp:576: warning: dereferencing pointer
'<anonymous>' does break strict-aliasing rules
./boost/wave/util/flex_string.hpp:1243: note: initialized from here
./boost/wave/util/flex_string.hpp:611: warning: dereferencing pointer
'<anonymous>' does break strict-aliasing rules
./boost/wave/util/flex_string.hpp:1243: note: initialized from here

I'm not going to attempt to post the rest as there are 100's of K of them
:-(

HTH, John.


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