diff options
author | Paul Thomas <pault@gcc.gnu.org> | 2006-09-15 16:30:52 +0000 |
---|---|---|
committer | Paul Thomas <pault@gcc.gnu.org> | 2006-09-15 16:30:52 +0000 |
commit | 8c5c0b80a45b77182c83c950fb9c7443859d7d98 (patch) | |
tree | 2ee9a5e258ea7946f8f29aa839fb77c92adbaa72 | |
parent | 906d8c784a5e3e9819238cd3f6e253f6f13f8657 (diff) | |
download | gcc-8c5c0b80a45b77182c83c950fb9c7443859d7d98.zip gcc-8c5c0b80a45b77182c83c950fb9c7443859d7d98.tar.gz gcc-8c5c0b80a45b77182c83c950fb9c7443859d7d98.tar.bz2 |
re PR fortran/29051 (segfault when too few values are in data statement of character array)
2006-09-15 Paul Thomas <pault@gcc.gnu.org>
PR fortran/29051
* decl.c (match_old_style_init): Set the 'where' field of the
gfc_data structure 'newdata'.
* match.c (match_case_eos): Add a comprehensible error message.
2006-09-15 Paul Thomas <pault@gcc.gnu.org>
PR fortran/29051
* gfortran.dg/oldstyle_3.f90: New test.
From-SVN: r116977
-rw-r--r-- | gcc/fortran/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/fortran/decl.c | 1 | ||||
-rw-r--r-- | gcc/fortran/match.c | 5 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/oldstyle_3.f90 | 10 |
5 files changed, 28 insertions, 1 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 2e88fbf..371860a 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,11 @@ +2006-09-15 Paul Thomas <pault@gcc.gnu.org> + + PR fortran/29051 + * decl.c (match_old_style_init): Set the 'where' field of the + gfc_data structure 'newdata'. + + * match.c (match_case_eos): Add a comprehensible error message. + 2006-09-13 Wolfgang Gellerich <gellerich@de.ibm.com> * trans-expr.c (gfc_add_interface_mapping): For characters, dereference diff --git a/gcc/fortran/decl.c b/gcc/fortran/decl.c index 19bf1b0..6045b20 100644 --- a/gcc/fortran/decl.c +++ b/gcc/fortran/decl.c @@ -395,6 +395,7 @@ match_old_style_init (const char *name) newdata = gfc_get_data (); newdata->var = gfc_get_data_variable (); newdata->var->expr = gfc_get_variable_expr (st); + newdata->where = gfc_current_locus; /* Match initial value list. This also eats the terminal '/'. */ diff --git a/gcc/fortran/match.c b/gcc/fortran/match.c index d90fc47..3f393856 100644 --- a/gcc/fortran/match.c +++ b/gcc/fortran/match.c @@ -3056,7 +3056,10 @@ match_case_eos (void) /* If the case construct doesn't have a case-construct-name, we should have matched the EOS. */ if (!gfc_current_block ()) - return MATCH_ERROR; + { + gfc_error ("Expected the name of the select case construct at %C"); + return MATCH_ERROR; + } gfc_gobble_whitespace (); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 0e52fad..d2cb97d 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2006-09-15 Paul Thomas <pault@gcc.gnu.org> + + PR fortran/29051 + * gfortran.dg/oldstyle_3.f90: New test. + 2006-09-15 Jerry DeLisle <jvdelisle@gcc.gnu.org> PR libgfortran/29099 diff --git a/gcc/testsuite/gfortran.dg/oldstyle_3.f90 b/gcc/testsuite/gfortran.dg/oldstyle_3.f90 new file mode 100644 index 0000000..dad6956 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/oldstyle_3.f90 @@ -0,0 +1,10 @@ +! { dg-do compile } +! Suppress the warning about an old-style initializer; +! { dg-options "" } +! This tests the fix for PR29052 in which the error below would cause a seg-fault +! because the locus of the initializer was never set. +! +! Contributed by Bud Davis <bdavis@gcc.gnu.org> +! + character*10 a(4,2) /'aaa','bbb','ccc','ddd'/ ! { dg-error "more variables than values" } + end |