https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86245
Jonathan Wakely <redi at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords| |ABI Status|UNCONFIRMED |NEW Last reconfirmed| |2018-06-28 Ever confirmed|0 |1 --- Comment #1 from Jonathan Wakely <redi at gcc dot gnu.org> --- This is my fault, as I misunderstood the purpose of the LONG_DOUBLE_COMPAT symbols and thought they weren't needed for the new types I added in the std::__cxx11 namespace. All the new facets using the new std::string got put in the __cxx11 namespace, so don't match the patterns that give the GLIBCXX_LDBL symver to everything in std::__gnu_cxx_ldbl128::* Furthermore, in <bits/locale_facets_nonio.h> we have: // XXX GLIBCXX_ABI Deprecated #if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined __LONG_DOUBLE_128__ \ && (_GLIBCXX_USE_CXX11_ABI == 0 virtual iter_type __do_get(iter_type __s, iter_type __end, bool __intl, ios_base& __io, ios_base::iostate& __err, double& __units) const; #else virtual iter_type do_get(iter_type __s, iter_type __end, bool __intl, ios_base& __io, ios_base::iostate& __err, long double& __units) const; #endif That placeholder in the vtable should still be there even when _GLIBCXX_USE_CXX11_ABI != 0 Apparently we don't have anything that actually tests whether the LONG_DOUBLE_COMPAT stuff works as intended, or this would have been noticed when I did the __cxx11 work.