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

--- Comment #16 from Iain Sandoe <iains at gcc dot gnu.org> ---
The first error that comes up is a missing
std::__codecvt_utf8_base<char32_t>::do_unshift(__mbstate_t&, char*, char*,
char*&) [libstdc++ reference to itself]

===

And indeed, if prevent the redirect_callers for darwin (by putting in the &&
sem_item::target_supports_symbol_aliases_p ()), then we get:

nm -P x86_64-apple-darwin12/libstdc++-v3/src/c++11/codecvt.o |c++filt |grep
do_unshift
std::__codecvt_utf8_base<char32_t>::do_unshift(__mbstate_t&, char*, char*,
char*&) const T 1540 0
std::__codecvt_utf8_base<char16_t>::do_unshift(__mbstate_t&, char*, char*,
char*&) const T 1530 0
std::__codecvt_utf8_base<wchar_t>::do_unshift(__mbstate_t&, char*, char*,
char*&) const T 1550 0
std::__codecvt_utf16_base<char32_t>::do_unshift(__mbstate_t&, char*, char*,
char*&) const T 1570 0
std::__codecvt_utf16_base<char16_t>::do_unshift(__mbstate_t&, char*, char*,
char*&) const T 1560 0
std::__codecvt_utf16_base<wchar_t>::do_unshift(__mbstate_t&, char*, char*,
char*&) const T 1580 0
std::__codecvt_utf8_utf16_base<char32_t>::do_unshift(__mbstate_t&, char*,
char*, char*&) const T 1500 0
std::__codecvt_utf8_utf16_base<char16_t>::do_unshift(__mbstate_t&, char*,
char*, char*&) const T 1590 0
std::__codecvt_utf8_utf16_base<wchar_t>::do_unshift(__mbstate_t&, char*, char*,
char*&) const T 1f0 0
std::codecvt<char32_t, char, __mbstate_t>::do_unshift(__mbstate_t&, char*,
char*, char*&) const T 1520 0
std::codecvt<char16_t, char, __mbstate_t>::do_unshift(__mbstate_t&, char*,
char*, char*&) const T 1510 0

when that is removed:
$ nm -P codecvt.o |c++filt |grep do_unshift
std::__codecvt_utf8_base<char32_t>::do_unshift(__mbstate_t&, char*, char*,
char*&) const U 0 0
std::__codecvt_utf8_base<char16_t>::do_unshift(__mbstate_t&, char*, char*,
char*&) const U 0 0
std::__codecvt_utf8_base<wchar_t>::do_unshift(__mbstate_t&, char*, char*,
char*&) const U 0 0
std::__codecvt_utf16_base<char32_t>::do_unshift(__mbstate_t&, char*, char*,
char*&) const U 0 0
std::__codecvt_utf16_base<char16_t>::do_unshift(__mbstate_t&, char*, char*,
char*&) const U 0 0
std::__codecvt_utf16_base<wchar_t>::do_unshift(__mbstate_t&, char*, char*,
char*&) const U 0 0
std::__codecvt_utf8_utf16_base<char32_t>::do_unshift(__mbstate_t&, char*,
char*, char*&) const U 0 0
std::__codecvt_utf8_utf16_base<char16_t>::do_unshift(__mbstate_t&, char*,
char*, char*&) const U 0 0
std::__codecvt_utf8_utf16_base<wchar_t>::do_unshift(__mbstate_t&, char*, char*,
char*&) const T 1f0 0
std::codecvt<char32_t, char, __mbstate_t>::do_unshift(__mbstate_t&, char*,
char*, char*&) const U 0 0
std::codecvt<char16_t, char, __mbstate_t>::do_unshift(__mbstate_t&, char*,
char*, char*&) const U 0 0

===

So now to figure out what's missing from the conditions used to decide on
removal of the alias.

Reply via email to