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 <[email protected]>
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