This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug target/79671] [7 Regression] mapnik miscompilation on armv7hl since r235622
- From: "jakub at gcc dot gnu.org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Mon, 27 Feb 2017 12:02:37 +0000
- Subject: [Bug target/79671] [7 Regression] mapnik miscompilation on armv7hl since r235622
- Auto-submitted: auto-generated
- References: <bug-79671-4@http.gcc.gnu.org/bugzilla/>
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79671
--- Comment #18 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
(In reply to Richard Biener from comment #14)
> Seems to be
>
> void move_assign(function10& f)
> {
> if (&f == this)
> return;
>
> { try {
> if (!f.empty()) {
> this->vtable = f.vtable;
> if (this->has_trivial_copy_and_destroy())
> this->functor = f.functor;
> ^^^
Indeed.
> for the aggregate copy but lineno info looks confused for the aliasing store.
> It points at
>
> operator=(Functor f)
> {
> self_type(f).swap(*this);
> return *this;
> }
The inline location of the aliasing store is:
In function ‘bool boost::detail::function::basic_vtable4<R, T0, T1, T2,
T3>::assign_to(FunctionObj, boost::detail::function::function_buffer&,
boost::detail::function::function_obj_tag) const [with FunctionObj =
boost::spirit::qi::detail::parser_binder<boost::spirit::qi::plus<boost::spirit::qi::difference<boost::spirit::qi::char_class<boost::spirit::tag::char_code<boost::spirit::tag::char_,
boost::spirit::char_encoding::standard_wide> >,
boost::spirit::qi::literal_char<boost::spirit::char_encoding::standard, true,
false> > >, mpl_::bool_<true> >; R = bool; T0 =
__gnu_cxx::__normal_iterator<const char*, std::__cxx11::basic_string<char> >&;
T1 = const __gnu_cxx::__normal_iterator<const char*,
std::__cxx11::basic_string<char> >&; T2 =
boost::spirit::context<boost::fusion::cons<std::__cxx11::basic_string<char>&,
boost::fusion::nil_>, boost::fusion::vector<> >&; T3 = const
boost::spirit::qi::char_class<boost::spirit::tag::char_code<boost::spirit::tag::space,
boost::spirit::char_encoding::standard_wide> >&]’,
inlined from ‘void boost::function4<R, T1, T2, T3, T4>::assign_to(Functor)
[with Functor =
boost::spirit::qi::detail::parser_binder<boost::spirit::qi::plus<boost::spirit::qi::difference<boost::spirit::qi::char_class<boost::spirit::tag::char_code<boost::spirit::tag::char_,
boost::spirit::char_encoding::standard_wide> >,
boost::spirit::qi::literal_char<boost::spirit::char_encoding::standard, true,
false> > >, mpl_::bool_<true> >; R = bool; T0 =
__gnu_cxx::__normal_iterator<const char*, std::__cxx11::basic_string<char> >&;
T1 = const __gnu_cxx::__normal_iterator<const char*,
std::__cxx11::basic_string<char> >&; T2 =
boost::spirit::context<boost::fusion::cons<std::__cxx11::basic_string<char>&,
boost::fusion::nil_>, boost::fusion::vector<> >&; T3 = const
boost::spirit::qi::char_class<boost::spirit::tag::char_code<boost::spirit::tag::space,
boost::spirit::char_encoding::standard_wide> >&]’ at
/usr/include/boost/function/function_template.hpp:498:45,
inlined from ‘boost::function4<R, T1, T2, T3, T4>::function4(Functor,
typename boost::enable_if_c<(! boost::is_integral<Functor>::value), int>::type)
[with Functor =
boost::spirit::qi::detail::parser_binder<boost::spirit::qi::plus<boost::spirit::qi::difference<boost::spirit::qi::char_class<boost::spirit::tag::char_code<boost::spirit::tag::char_,
boost::spirit::char_encoding::standard_wide> >,
boost::spirit::qi::literal_char<boost::spirit::char_encoding::standard, true,
false> > >, mpl_::bool_<true> >; R = bool; T0 =
__gnu_cxx::__normal_iterator<const char*, std::__cxx11::basic_string<char> >&;
T1 = const __gnu_cxx::__normal_iterator<const char*,
std::__cxx11::basic_string<char> >&; T2 =
boost::spirit::context<boost::fusion::cons<std::__cxx11::basic_string<char>&,
boost::fusion::nil_>, boost::fusion::vector<> >&; T3 = const
boost::spirit::qi::char_class<boost::spirit::tag::char_code<boost::spirit::tag::space,
boost::spirit::char_encoding::standard_wide> >&]’ at
/usr/include/boost/function/function_template.hpp:727:7,
inlined from ‘boost::function<R(T0, T1, T2, T3)>::function(Functor,
typename boost::enable_if_c<(! boost::is_integral<Functor>::value), int>::type)
[with Functor =
boost::spirit::qi::detail::parser_binder<boost::spirit::qi::plus<boost::spirit::qi::difference<boost::spirit::qi::char_class<boost::spirit::tag::char_code<boost::spirit::tag::char_,
boost::spirit::char_encoding::standard_wide> >,
boost::spirit::qi::literal_char<boost::spirit::char_encoding::standard, true,
false> > >, mpl_::bool_<true> >; R = bool; T0 =
__gnu_cxx::__normal_iterator<const char*, std::__cxx11::basic_string<char> >&;
T1 = const __gnu_cxx::__normal_iterator<const char*,
std::__cxx11::basic_string<char> >&; T2 =
boost::spirit::context<boost::fusion::cons<std::__cxx11::basic_string<char>&,
boost::fusion::nil_>, boost::fusion::vector<> >&; T3 = const
boost::spirit::qi::char_class<boost::spirit::tag::char_code<boost::spirit::tag::space,
boost::spirit::char_encoding::standard_wide> >&]’ at
/usr/include/boost/function/function_template.hpp:1073:16,
inlined from ‘boost::spirit::qi::rule<Iterator, T1, T2, T3, T4>&
boost::spirit::qi::operator%=(boost::spirit::qi::rule<Iterator, T1, T2, T3,
T4>&, Expr&&) [with Expr = const
boost::proto::exprns_::expr<boost::proto::tagns_::tag::unary_plus,
boost::proto::argsns_::list1<const
boost::proto::exprns_::expr<boost::proto::tagns_::tag::minus,
boost::proto::argsns_::list2<boost::spirit::terminal<boost::spirit::tag::char_code<boost::spirit::tag::char_,
boost::spirit::char_encoding::standard_wide> >&,
boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal,
boost::proto::argsns_::term<const char&>, 0> >, 2>&>, 1>; Iterator =
__gnu_cxx::__normal_iterator<const char*, std::__cxx11::basic_string<char> >;
T1 = std::__cxx11::basic_string<char>(); T2 =
boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal,
boost::proto::argsns_::term<boost::spirit::tag::char_code<boost::spirit::tag::space,
boost::spirit::char_encoding::standard_wide> >, 0>; T3 =
boost::spirit::unused_type; T4 = boost::spirit::unused_type]’ at
/usr/include/boost/function/function_template.hpp:1126:5,
inlined from ‘path_expression_grammar<Iterator>::path_expression_grammar()
[with Iterator = __gnu_cxx::__normal_iterator<const char*,
std::__cxx11::basic_string<char> >]’ at /tmp/rh1422456.C:36:5:
That is:
template<typename F>
bool assign_to(F f, function_buffer& functor) const
{
typedef typename get_function_tag<F>::type tag;
return assign_to(f, functor, tag());
}
and
template<typename Functor>
function4(Functor f
,typename boost::enable_if_c<
!(is_integral<Functor>::value),
int>::type = 0
) :
function_base()
{
this->assign_to(f);
}
and
template<typename Functor>
function(Functor f
,typename boost::enable_if_c<
!(is_integral<Functor>::value),
int>::type = 0
) :
base_type(f)
{
}
and
operator=(Functor f)
{
self_type(f).swap(*this);
return *this;
}
and
attr %= +(char_ - ']');
but there is no location for the innermost inlined frame :(.