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:
parent
752c5e547d
commit
5270c302f0
|
@ -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>
|
2006-06-22 Francois-Xavier Coudert <coudert@clipper.ens.fr>
|
||||||
|
|
||||||
PR libfortran/26769
|
PR libfortran/26769
|
||||||
|
|
|
@ -1912,6 +1912,8 @@ gfc_match_rvalue (gfc_expr ** result)
|
||||||
gfc_expr *e;
|
gfc_expr *e;
|
||||||
match m, m2;
|
match m, m2;
|
||||||
int i;
|
int i;
|
||||||
|
gfc_typespec *ts;
|
||||||
|
bool implicit_char;
|
||||||
|
|
||||||
m = gfc_match_name (name);
|
m = gfc_match_name (name);
|
||||||
if (m != MATCH_YES)
|
if (m != MATCH_YES)
|
||||||
|
@ -2156,10 +2158,22 @@ gfc_match_rvalue (gfc_expr ** result)
|
||||||
|
|
||||||
if (m2 != MATCH_YES)
|
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
|
/* See if this could possibly be a substring reference of a name
|
||||||
that we're not sure is a variable yet. */
|
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)
|
&& match_substring (sym->ts.cl, 0, &e->ref) == MATCH_YES)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
|
@ -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>
|
2006-06-22 Zdenek Dvorak <dvorakz@suse.cz>
|
||||||
|
|
||||||
PR rtl-optimization/28121
|
PR rtl-optimization/28121
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue