https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70147
Bug ID: 70147 Summary: testcase from hana testsuite gets miscompiled with -fsanitize=undefined Product: gcc Version: 6.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: sanitizer Assignee: unassigned at gcc dot gnu.org Reporter: trippels at gcc dot gnu.org CC: dodji at gcc dot gnu.org, dvyukov at gcc dot gnu.org, jakub at gcc dot gnu.org, kcc at gcc dot gnu.org Target Milestone: --- Created attachment 37901 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=37901&action=edit unreduced testcase markus@x4 printable % g++ -g -O2 metafunction.ii markus@x4 printable % ./a.out markus@x4 printable % clang++ -std=c++14 -g -O2 -fsanitize=undefined metafunction.ii markus@x4 printable % ./a.out markus@x4 printable % g++ -g -O2 -fsanitize=undefined metafunction.ii 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