[Bug sanitizer/70135] -fsanitize=undefined causes static_assert to fail

mpolacek at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Tue Mar 8 13:24:00 GMT 2016


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70135

--- Comment #6 from Marek Polacek <mpolacek at gcc dot gnu.org> ---
So in finish_static_assert without ubsan we have:
boost::detail::operators::operator==<boost::tuple<boost::tuple<boost::tuple<int,
int, int>, boost::tuple<char, char, char> >, boost::tuple<boost::range<long
int, 0l, 1l> >, boost::tuple<boost::tuple<boost::type_impl<char>::_,
boost::type_impl<int>::_>, boost::range<int, 0, 2>, boost::tuple<double,
std::nullptr_t> > >, boost::tuple<boost::tuple<boost::tuple<int, int, int>,
boost::tuple<char, char, char> >, boost::tuple<boost::range<long int, 0l, 1l>
>, boost::tuple<boost::tuple<boost::type_impl<char>::_,
boost::type_impl<int>::_>, boost::range<int, 0, 2>, boost::tuple<double,
std::nullptr_t> > > > (TARGET_EXPR <D.11827, grouped>, TARGET_EXPR <D.11816,
boost::make_t<boost::tuple_tag>::operator()<boost::tuple<boost::tuple<int, int,
int>, boost::tuple<char, char, char> >, boost::tuple<boost::range<long int, 0l,
1l> >, boost::tuple<boost::tuple<boost::type_impl<char>::_,
boost::type_impl<int>::_>, boost::range<int, 0, 2>, boost::tuple<double,
std::nullptr_t> > > (&make_tuple, TARGET_EXPR <D.11809,
boost::make_t<boost::tuple_tag>::operator()<boost::tuple<int, int, int>,
boost::tuple<char, char, char> > (&make_tuple, TARGET_EXPR <D.11807,
boost::make_t<boost::tuple_tag>::operator()<int, int, int> (&make_tuple, 1, 2,
3)>, TARGET_EXPR <D.11808, boost::make_t<boost::tuple_tag>::operator()<char,
char, char> (&make_tuple, 120, 121, 122)>)>, TARGET_EXPR <D.11811,
boost::make_t<boost::tuple_tag>::operator()<boost::range<long int, 0l, 1l> >
(&make_tuple, TARGET_EXPR <D.11810, range_c>;, <<< Unknown tree:
empty_class_expr >>>;)>, TARGET_EXPR <D.11815,
boost::make_t<boost::tuple_tag>::operator()<boost::tuple<boost::type_impl<char>::_,
boost::type_impl<int>::_>, boost::range<int, 0, 2>, boost::tuple<double,
std::nullptr_t> > (&make_tuple, TARGET_EXPR <D.11813, tuple_t>, TARGET_EXPR
<D.11814, range_c>;, <<< Unknown tree: empty_class_expr >>>;, TARGET_EXPR
<D.11812, boost::make_t<boost::tuple_tag>::operator()<double, std::nullptr_t>
(&make_tuple, 1.23400000000000005684341886080801486968994140625e+2, 0)>)>)>)

which gets folded to 1 and with -fsanitize=bounds:

boost::detail::operators::operator==<boost::tuple<boost::tuple<boost::tuple<int,
int, int>, boost::tuple<char, char, char> >, boost::tuple<boost::range<long
int, 0l, 1l> >, boost::tuple<boost::tuple<boost::type_impl<char>::_,
boost::type_impl<int>::_> > >, boost::tuple<boost::tuple<boost::tuple<int, int,
int>, boost::tuple<char, char, char> >, boost::tuple<boost::range<long int, 0l,
1l> >, boost::tuple<boost::tuple<boost::type_impl<char>::_,
boost::type_impl<int>::_>, boost::range<int, 0, 2>, boost::tuple<double,
std::nullptr_t> > > > (TARGET_EXPR <D.12685, grouped>, TARGET_EXPR <D.12674,
boost::make_t<boost::tuple_tag>::operator()<boost::tuple<boost::tuple<int, int,
int>, boost::tuple<char, char, char> >, boost::tuple<boost::range<long int, 0l,
1l> >, boost::tuple<boost::tuple<boost::type_impl<char>::_,
boost::type_impl<int>::_>, boost::range<int, 0, 2>, boost::tuple<double,
std::nullptr_t> > > (&make_tuple, TARGET_EXPR <D.11831,
boost::make_t<boost::tuple_tag>::operator()<boost::tuple<int, int, int>,
boost::tuple<char, char, char> > (&make_tuple, TARGET_EXPR <D.11829,
boost::make_t<boost::tuple_tag>::operator()<int, int, int> (&make_tuple, 1, 2,
3)>, TARGET_EXPR <D.11830, boost::make_t<boost::tuple_tag>::operator()<char,
char, char> (&make_tuple, 120, 121, 122)>)>, TARGET_EXPR <D.11833,
boost::make_t<boost::tuple_tag>::operator()<boost::range<long int, 0l, 1l> >
(&make_tuple, TARGET_EXPR <D.11832, range_c>;, <<< Unknown tree:
empty_class_expr >>>;)>, TARGET_EXPR <D.12287,
boost::make_t<boost::tuple_tag>::operator()<boost::tuple<boost::type_impl<char>::_,
boost::type_impl<int>::_>, boost::range<int, 0, 2>, boost::tuple<double,
std::nullptr_t> > (&make_tuple, TARGET_EXPR <D.11841, tuple_t>, TARGET_EXPR
<D.11842, range_c>;, <<< Unknown tree: empty_class_expr >>>;, TARGET_EXPR
<D.11834, boost::make_t<boost::tuple_tag>::operator()<double, std::nullptr_t>
(&make_tuple, 1.23400000000000005684341886080801486968994140625e+2, 0)>)>)>)

which gets folded to 0.

That doesn't tell much, eh.


More information about the Gcc-bugs mailing list