diff options
Diffstat (limited to 'gcc/f')
-rw-r--r-- | gcc/f/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/f/lex.c | 16 |
2 files changed, 20 insertions, 2 deletions
diff --git a/gcc/f/ChangeLog b/gcc/f/ChangeLog index 2677242..9893e52 100644 --- a/gcc/f/ChangeLog +++ b/gcc/f/ChangeLog @@ -1,3 +1,9 @@ +2004-02-15 Roger Sayle <roger@eyesopen.com> + + PR fortran/14129 + * lex.c (ffelex_cfelex_): Avoid calling xrealloc on a local stack + allocated array. + 2004-02-03 Kazu Hirata <kazu@cs.umass.edu> * com.c (ffecom_member_phase2_): Use gen_rtx_MEM instead of diff --git a/gcc/f/lex.c b/gcc/f/lex.c index 3be91b6..8475d2f 100644 --- a/gcc/f/lex.c +++ b/gcc/f/lex.c @@ -694,7 +694,13 @@ ffelex_cfelex_ (ffelexToken *xtoken, FILE *finput, int c) register unsigned bytes_used = (p - q); buffer_length *= 2; - q = xrealloc (q, buffer_length); + if (q == &buff[0]) + { + q = xmalloc (buffer_length); + memcpy (q, buff, bytes_used); + } + else + q = xrealloc (q, buffer_length); p = &q[bytes_used]; r = &q[buffer_length]; } @@ -754,7 +760,13 @@ ffelex_cfelex_ (ffelexToken *xtoken, FILE *finput, int c) register unsigned bytes_used = (p - q); buffer_length = bytes_used * 2; - q = xrealloc (q, buffer_length); + if (q == &buff[0]) + { + q = xmalloc (buffer_length); + memcpy (q, buff, bytes_used); + } + else + q = xrealloc (q, buffer_length); p = &q[bytes_used]; r = &q[buffer_length]; } |