diff options
author | Jerry DeLisle <jvdelisle@gcc.gnu.org> | 2007-05-06 04:10:53 +0000 |
---|---|---|
committer | Jerry DeLisle <jvdelisle@gcc.gnu.org> | 2007-05-06 04:10:53 +0000 |
commit | 16f8ffc831e99cf28ed7fe2aa9f96ef8dda30678 (patch) | |
tree | 9bf07d951e73fd47e03d74eb9003a09385971baa /gcc/fortran/decl.c | |
parent | a758fa89b5177aa2f986245c0b926f7c9376ab5a (diff) | |
download | gcc-16f8ffc831e99cf28ed7fe2aa9f96ef8dda30678.zip gcc-16f8ffc831e99cf28ed7fe2aa9f96ef8dda30678.tar.gz gcc-16f8ffc831e99cf28ed7fe2aa9f96ef8dda30678.tar.bz2 |
re PR fortran/31251 (Non-integer character length leads to segfault)
2007-05-05 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR fortran/31251
* decl.c (match_char_spec): Add check for invalid character lengths.
2007-05-05 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR fortran/31251
* gfortran.dg/char_type_len_2.f90: New test.
From-SVN: r124469
Diffstat (limited to 'gcc/fortran/decl.c')
-rw-r--r-- | gcc/fortran/decl.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/gcc/fortran/decl.c b/gcc/fortran/decl.c index 7665bc8..1dcc53d 100644 --- a/gcc/fortran/decl.c +++ b/gcc/fortran/decl.c @@ -1626,14 +1626,23 @@ rparen: syntax: gfc_error ("Syntax error in CHARACTER declaration at %C"); m = MATCH_ERROR; + gfc_free_expr (len); + return m; done: - if (m == MATCH_YES && gfc_validate_kind (BT_CHARACTER, kind, true) < 0) + if (gfc_validate_kind (BT_CHARACTER, kind, true) < 0) { gfc_error ("Kind %d is not a CHARACTER kind at %C", kind); m = MATCH_ERROR; } + if (seen_length == 1 && len != NULL + && len->ts.type != BT_INTEGER && len->ts.type != BT_UNKNOWN) + { + gfc_error ("Expression at %C must be of INTEGER type"); + m = MATCH_ERROR; + } + if (m != MATCH_YES) { gfc_free_expr (len); |