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

--- Comment #7 from Jonathan Wakely <redi at gcc dot gnu.org> ---
OK, I see what's happening now:

Breakpoint 3.3, std::__gnu_cxx_ldbl128::num_put<char,
std::ostreambuf_iterator<char, std::char_traits<char> > >::num_put (
    this=0x101c1f98 <(anonymous namespace)::num_put_c>, __refs=1)
    at
/home/test/build/powerpc64le-unknown-linux-gnu/libstdc++-v3/include/bits/locale_facets.h:2339
2339          num_put(size_t __refs = 0) : facet(__refs) { }
(gdb) p this
$9 = (std::__gnu_cxx_ldbl128::num_put<char, std::ostreambuf_iterator<char,
std::char_traits<char> > > * const) 0x101c1f98 <(anonymous
namespace)::num_put_c>
(gdb) cont
Continuing.

Breakpoint 3.4, std::__gnu_cxx_ldbl128::num_put<wchar_t,
std::ostreambuf_iterator<wchar_t, std::char_traits<wchar_t> > >::num_put (
    this=0x101c25f8 <(anonymous namespace)::num_put_w>, __refs=1)
    at
/home/test/build/powerpc64le-unknown-linux-gnu/libstdc++-v3/include/bits/locale_facets.h:2339
2339          num_put(size_t __refs = 0) : facet(__refs) { }
(gdb) p this
$10 = (std::__gnu_cxx_ldbl128::num_put<wchar_t,
std::ostreambuf_iterator<wchar_t, std::char_traits<wchar_t> > > * const)
0x101c25f8 <(anonymous namespace)::num_put_w>
(gdb) cont
Continuing.

Breakpoint 3.1, std::__gnu_cxx_ieee128::num_put<char,
std::ostreambuf_iterator<char, std::char_traits<char> > >::num_put (
    this=0x101c06b8 <std::(anonymous namespace)::num_put_c>, __refs=1)
    at
/home/test/build/powerpc64le-unknown-linux-gnu/libstdc++-v3/include/bits/locale_facets.h:2339
2339          num_put(size_t __refs = 0) : facet(__refs) { }
(gdb) p this
$11 = (std::__gnu_cxx_ieee128::num_put<char, std::ostreambuf_iterator<char,
std::char_traits<char> > > * const) 0x101c06b8 <std::(anonymous
namespace)::num_put_c>
(gdb) cont
Continuing.

Breakpoint 3.2, std::__gnu_cxx_ieee128::num_put<wchar_t,
std::ostreambuf_iterator<wchar_t, std::char_traits<wchar_t> > >::num_put (
    this=0x101c06f8 <std::(anonymous namespace)::num_put_w>, __refs=1)
    at
/home/test/build/powerpc64le-unknown-linux-gnu/libstdc++-v3/include/bits/locale_facets.h:2339
2339          num_put(size_t __refs = 0) : facet(__refs) { }
(gdb) p this
$12 = (std::__gnu_cxx_ieee128::num_put<wchar_t,
std::ostreambuf_iterator<wchar_t, std::char_traits<wchar_t> > > * const)
0x101c06f8 <std::(anonymous namespace)::num_put_w>
(gdb) cont
Continuing.

Program received signal SIGSEGV, Segmentation fault.
0x0000000000000000 in ?? ()
(gdb) up
#1  0x0000000010015640 in std::__gnu_cxx_ieee128::num_put<char,
std::ostreambuf_iterator<char, std::char_traits<char> > >::put (
    this=0x101c1f98 <(anonymous namespace)::num_put_c>, __s=..., __io=...,
__fill=32 ' ', __v=0.100000000000000000000000000000000005)
    at
/home/test/build/powerpc64le-unknown-linux-gnu/libstdc++-v3/include/bits/locale_facets.h:2468
2468          { return this->do_put(__s, __io, __fill, __v); }
(gdb) p this
$13 = (const std::__gnu_cxx_ieee128::num_put<char,
std::ostreambuf_iterator<char, std::char_traits<char> > > * const) 0x101c1f98
<(anonymous namespace)::num_put_c>


The facet used for the output is __gnu_cxx_ieee128::num_put<char> but it has
the address of $9 which is a __gnu_cxx_ldbl128::num_put<char>. So the wrong
pointer is being returned when accessing the facet.

Reply via email to