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.