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.

Reply via email to