diff options
Diffstat (limited to 'gcc/fortran')
-rw-r--r-- | gcc/fortran/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/fortran/primary.c | 16 |
2 files changed, 21 insertions, 1 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 55e66cd..a02bebd 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2006-06-22 Asher Langton <langton2@llnl.gov> + + PR fortran/24748 + * primary.c (gfc_match_rvalue): Don't call match_substring for + implicit non-character types. + 2006-06-22 Francois-Xavier Coudert <coudert@clipper.ens.fr> PR libfortran/26769 diff --git a/gcc/fortran/primary.c b/gcc/fortran/primary.c index 8fe1294..ad569fc 100644 --- a/gcc/fortran/primary.c +++ b/gcc/fortran/primary.c @@ -1912,6 +1912,8 @@ gfc_match_rvalue (gfc_expr ** result) gfc_expr *e; match m, m2; int i; + gfc_typespec *ts; + bool implicit_char; m = gfc_match_name (name); if (m != MATCH_YES) @@ -2156,10 +2158,22 @@ gfc_match_rvalue (gfc_expr ** result) if (m2 != MATCH_YES) { + /* Try to figure out whether we're dealing with a character type. + We're peeking ahead here, because we don't want to call + match_substring if we're dealing with an implicitly typed + non-character variable. */ + implicit_char = false; + if (sym->ts.type == BT_UNKNOWN) + { + ts = gfc_get_default_type (sym,NULL); + if (ts->type == BT_CHARACTER) + implicit_char = true; + } + /* See if this could possibly be a substring reference of a name that we're not sure is a variable yet. */ - if ((sym->ts.type == BT_UNKNOWN || sym->ts.type == BT_CHARACTER) + if ((implicit_char || sym->ts.type == BT_CHARACTER) && match_substring (sym->ts.cl, 0, &e->ref) == MATCH_YES) { |