diff options
author | Francois-Xavier Coudert <coudert@clipper.ens.fr> | 2006-10-31 21:15:22 +0100 |
---|---|---|
committer | François-Xavier Coudert <fxcoudert@gcc.gnu.org> | 2006-10-31 20:15:22 +0000 |
commit | 150675a88bae488e66055ad2a1eba0309ecabce3 (patch) | |
tree | 1024583b95a9dd9e2598bb3e446caa4624ef6e9f /gcc/fortran/decl.c | |
parent | 70198b9f22c93aeab38aacafe9e2aec87d126813 (diff) | |
download | gcc-150675a88bae488e66055ad2a1eba0309ecabce3.zip gcc-150675a88bae488e66055ad2a1eba0309ecabce3.tar.gz gcc-150675a88bae488e66055ad2a1eba0309ecabce3.tar.bz2 |
re PR fortran/29067 (gfc_resolve_expr(): Bad expression type)
PR fortran/29067
* decl.c (gfc_set_constant_character_len): NULL-terminate the
character constant string.
* data.c (create_character_intializer): Likewise.
* expr.c (gfc_simplify_expr): NULL-terminate the substring
character constant.
* primary.c (match_hollerith_constant): NULL-terminate the
character constant string.
* gfortran.dg/pr29067.f: New test.
From-SVN: r118338
Diffstat (limited to 'gcc/fortran/decl.c')
-rw-r--r-- | gcc/fortran/decl.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/gcc/fortran/decl.c b/gcc/fortran/decl.c index e17e9e3..84797b7 100644 --- a/gcc/fortran/decl.c +++ b/gcc/fortran/decl.c @@ -754,10 +754,11 @@ gfc_set_constant_character_len (int len, gfc_expr * expr) slen = expr->value.character.length; if (len != slen) { - s = gfc_getmem (len); + s = gfc_getmem (len + 1); memcpy (s, expr->value.character.string, MIN (len, slen)); if (len > slen) memset (&s[slen], ' ', len - slen); + s[len] = '\0'; gfc_free (expr->value.character.string); expr->value.character.string = s; expr->value.character.length = len; |