------- Comment #3 from hjl dot tools at gmail dot com 2008-05-10 15:36 ------- The bug is in quote_string:
/* Calculate the length we'll need: a backslash takes two ("\\"), non-printable characters take 10 ("\Uxxxxxxxx") and others take 1. */ for (p = s, i = 0; i < slength; p++, i++) { if (*p == '\\') len += 2; else if (!gfc_wide_is_printable (*p)) len += 10; else len++; } q = res = gfc_getmem (len + 1); for (p = s, i = 0; i < slength; p++, i++) { if (*p == '\\') *q++ = '\\', *q++ = '\\'; else if (!gfc_wide_is_printable (*p)) { sprintf (q, "\\U%08" HOST_WIDE_INT_PRINT "ux", (unsigned HOST_WIDE_INT) *p); q += 10; } "\\U%08" takes 11 bytes, not 10, if you count trailing '\0'. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36197