re PR fortran/24748 (substring of implicitly typed variable not rejected)

PR fortran/24748
	* primary.c (gfc_match_rvalue): Don't call match_substring for
	implicit non-character types.

	PR fortran/24748
	* gfortran.dg/implicit_8.f90: New.

From-SVN: r114901
This commit is contained in:
Asher Langton 2006-06-22 18:30:18 +00:00 committed by Asher Langton
parent 752c5e547d
commit 5270c302f0
4 changed files with 42 additions and 1 deletions

View File

@ -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

View File

@ -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)
{

View File

@ -1,3 +1,8 @@
2006-06-22 Asher Langton <langton2@llnl.gov>
PR fortran/24748
* gfortran.dg/implicit_8.f90: New.
2006-06-22 Zdenek Dvorak <dvorakz@suse.cz>
PR rtl-optimization/28121

View File

@ -0,0 +1,16 @@
! { dg-do compile }
! PR 24748
! The compiler used to crash trying to take a substring of an implicit
! real scalar.
subroutine variant1
ybtable=ylocal(1:2) ! { dg-error "Syntax error in argument list" }
end
! We want the behavior to be the same whether ylocal is implicitly
! or explicitly typed.
subroutine variant2
real ylocal
ybtable=ylocal(1:2) ! { dg-error "Syntax error in argument list" }
end