Hi! The cb.error hook is called in the case we are looking for with _("conversion from %s to %s not supported by iconv") where _(msgid) is dgettext ("cpplib", msgid), so if performing -fself-test on iconv that doesn't support ebcdic in a locale that has translations for this string, gcc ICEs.
The following patch uses the same translation as libcpp to avoid that. I've bootstrapped/regtested this on x86_64-linux and i686-linux, but there iconv doesn't fail, plus simulated in the debugger iconv error (both in LC_ALL=en_US.UTF-8 and LC_ALL=de_DE.UTF-8). Ok for trunk? 2017-01-03 Jakub Jelinek <ja...@redhat.com> PR bootstrap/77569 * input.c (ebcdic_execution_charset::on_error): Don't use strstr for a substring of the message, but strcmp with the whole message. Ifdef ENABLE_NLS, translate the message first using dgettext. --- gcc/input.c.jj 2017-01-01 12:45:37.000000000 +0100 +++ gcc/input.c 2017-01-03 13:40:46.827595040 +0100 @@ -2026,9 +2026,14 @@ class ebcdic_execution_charset : public ATTRIBUTE_FPTR_PRINTF(5,0) { gcc_assert (s_singleton); + /* Avoid exgettext from picking this up, it is translated in libcpp. */ + const char *msg = "conversion from %s to %s not supported by iconv"; +#ifdef ENABLE_NLS + msg = dgettext ("cpplib", msg); +#endif /* Detect and record errors emitted by libcpp/charset.c:init_iconv_desc when the local iconv build doesn't support the conversion. */ - if (strstr (msgid, "not supported by iconv")) + if (strcmp (msgid, msg) == 0) { s_singleton->m_num_iconv_errors++; return true; Jakub