http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47523
--- Comment #2 from Tobias Burnus <burnus at gcc dot gnu.org> 2011-01-28 21:04:40 UTC --- I think I/O is OK - the issue is probably the same as PR 47519: Mishandling of intrinsic operations. Though, this case looks a bit different than the other PR. void concat_string (gfc_charlen_type destlen, CHARTYPE * dest, gfc_charlen_type len1, const CHARTYPE * s1, gfc_charlen_type len2, const CHARTYPE * s2) But for a = a // 'x' if (a != 0B) goto L.3; L.3:; a = (character(kind=1)[1:.a] *) __builtin_realloc ((void *) a, (<unnamed-unsigned:64>) (.a + 1)); L.4:; .a = .a + 1; D.1536 = (.a + 1) * 64; D.1537 = (void * restrict) __builtin_malloc (MAX_EXPR <(<unnamed-unsigned:64>) D.1536, 1>); pstr.0 = (character(kind=1)[1:] *) D.1537; _gfortran_concat_string (.a + 1, pstr.0, .a, a, 1, &"x"[1]{lb: 1 sz: 1}); Thus, one first allocates "a", increments the length and then uses as "s1" argument to the intrinsic. That cannot work ...