mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-26 17:00:58 +08:00
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>
|
||||
|
||||
PR libfortran/26769
|
||||
|
@ -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)
|
||||
{
|
||||
|
||||
|
@ -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
|
||||
|
16
gcc/testsuite/gfortran.dg/implicit_8.f90
Normal file
16
gcc/testsuite/gfortran.dg/implicit_8.f90
Normal 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
|
||||
|
Loading…
x
Reference in New Issue
Block a user