summaryrefslogtreecommitdiffstats
path: root/gcc/f
diff options
context:
space:
mode:
authorsayle <sayle@138bc75d-0d04-0410-961f-82ee72b054a4>2004-02-15 14:27:14 +0000
committersayle <sayle@138bc75d-0d04-0410-961f-82ee72b054a4>2004-02-15 14:27:14 +0000
commitb5ee7b1e602878a6fecba6d03ca6dc126664f98e (patch)
treea1226b180bc26dd66429b7674063afc8a76e8bc8 /gcc/f
parent3eeae8c088b1c937a1cb03ae52abd7bdeb83956d (diff)
downloadppe42-gcc-b5ee7b1e602878a6fecba6d03ca6dc126664f98e.tar.gz
ppe42-gcc-b5ee7b1e602878a6fecba6d03ca6dc126664f98e.zip
PR fortran/14129
* lex.c (ffelex_cfelex_): Avoid calling xrealloc on a local stack allocated array. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@77849 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/f')
-rw-r--r--gcc/f/ChangeLog6
-rw-r--r--gcc/f/lex.c16
2 files changed, 20 insertions, 2 deletions
diff --git a/gcc/f/ChangeLog b/gcc/f/ChangeLog
index 2677242a6a2..9893e5287bf 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 3be91b68298..8475d2ff2c3 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];
}
OpenPOWER on IntegriCloud