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

--- Comment #11 from Markus Trippelsdorf <trippels at gcc dot gnu.org> ---
Thanks for the quick fix.

I can now build the entire boot.hana testsuite with -fsanitize=undefined.
One testcase gets miscompiled however:

markus@x4 printable % g++ -g -O2 -I/var/tmp/hana/include metafunction.cpp
markus@x4 printable % ./a.out
markus@x4 printable % clang++ -std=c++14 -g -O2 -fsanitize=undefined
-I/var/tmp/hana/include metafunction.cpp
markus@x4 printable % ./a.out
markus@x4 printable % g++ -g -O2 -fsanitize=undefined -I/var/tmp/hana/include
metafunction.cpp
markus@x4 printable % gdb ./a.out
Reading symbols from ./a.out...done.
(gdb) run
Starting program: /var/tmp/hana/test/experimental/printable/a.out 
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/libthread_db.so.1".

Program received signal SIGSEGV, Segmentation fault.
0x0000000000410522 in std::basic_istream<char, std::char_traits<char>
>::basic_istream (__vtt_parm=<optimized out>, this=<optimized out>,
__in_chrg=<optimized out>)
    at /usr/lib/gcc/x86_64-pc-linux-gnu/6.0.0/include/g++-v6/istream:606
606           basic_istream()
(gdb) bt
#0  0x0000000000410522 in std::basic_istream<char, std::char_traits<char>
>::basic_istream (__vtt_parm=<optimized out>, this=<optimized out>,
__in_chrg=<optimized out>)
    at /usr/lib/gcc/x86_64-pc-linux-gnu/6.0.0/include/g++-v6/istream:606
#1  std::__cxx11::basic_istringstream<char, std::char_traits<char>,
std::allocator<char> >::basic_istringstream (__mode=std::_S_in, __str="2",
this=0x7fffffffd910, 
    __in_chrg=<optimized out>, __vtt_parm=<optimized out>) at
/usr/lib/gcc/x86_64-pc-linux-gnu/6.0.0/include/g++-v6/sstream:423
#2  std::__cxx11::regex_traits<char>::value (this=this@entry=0x7fffffffdb30,
__ch=__ch@entry=50 '2', __radix=__radix@entry=10)
    at /usr/lib/gcc/x86_64-pc-linux-gnu/6.0.0/include/g++-v6/bits/regex.tcc:347
#3  0x00000000004122b7 in
std::__cxx11::match_results<__gnu_cxx::__normal_iterator<char const*,
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >
>, std::allocator<std::__cxx11::sub_match<__gnu_cxx::__normal_iterator<char
const*, std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > > > >
>::format<std::back_insert_iterator<std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > > >
(this=this@entry=0x7fffffffdd00, __out=..., 
    __fmt_first=<optimized out>, __fmt_first@entry=0x4833f4 "$2<",
__fmt_last=__fmt_last@entry=0x4833f7 "", __flags=<optimized out>,
__flags@entry=(unknown: 0))
    at /usr/lib/gcc/x86_64-pc-linux-gnu/6.0.0/include/g++-v6/bits/regex.tcc:437
#4  0x000000000044a80c in
std::regex_replace<std::back_insert_iterator<std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > >,
__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > >,
std::__cxx11::regex_traits<char>, char> (__out=__out@entry=..., 
    __first=<error reading variable: Cannot access memory at address 0x0>,
__first@entry=98 'b', __last=<error reading variable: Cannot access memory at
address 0x0>, 
    __e=..., __fmt=__fmt@entry=0x4833f4 "$2<", __flags=__flags@entry=(unknown:
0)) at /usr/lib/gcc/x86_64-pc-linux-gnu/6.0.0/include/g++-v6/bits/regex.tcc:481
#5  0x00000000004055ab in std::regex_replace<std::__cxx11::regex_traits<char>,
char, std::char_traits<char>, std::allocator<char> > (__flags=(unknown: 0), 
    __fmt=0x4833f4 "$2<", __e=...,
__s="boost::hana::template_t<foo::my_template>") at
/usr/lib/gcc/x86_64-pc-linux-gnu/6.0.0/include/g++-v6/bits/regex.h:2366
#6  boost::hana::experimental::print_detail::strip_type_junk
(str="boost::hana::template_t<foo::my_template>")
    at /var/tmp/hana/include/boost/hana/experimental/printable.hpp:90
#7  0x0000000000403a4d in
boost::hana::experimental::print_impl<boost::hana::template_t<foo::my_template>,
void>::apply<boost::hana::template_t<foo::my_template> > ()
    at /var/tmp/hana/include/boost/hana/experimental/printable.hpp:228
#8 
boost::hana::experimental::print_t::operator()<boost::hana::template_t<foo::my_template>
> (this=<synthetic pointer>, t=<synthetic pointer>)
    at /var/tmp/hana/include/boost/hana/experimental/printable.hpp:74
#9  main () at metafunction.cpp:22

Reply via email to