From: Tobias Schlüter Date: Thu, 10 Nov 2005 21:49:29 +0000 (+0100) Subject: re PR fortran/24643 (Unclassifiable statement on implicitly typed character substring) X-Git-Tag: releases/gcc-4.1.0~938 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=c040ffff7577b6798465f6c025de2b1f77cec1e9;p=thirdparty%2Fgcc.git re PR fortran/24643 (Unclassifiable statement on implicitly typed character substring) fortran/ PR fortran/24643 * primary.c (match_varspec): Check for implicitly typed CHARACTER variables before matching substrings. testsuite/ PR fortran/24643 * gfortran.dg/implicit_6.f90, gfortran.dg/implicit_7.f90: New. From-SVN: r106753 --- diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index fbb487ef412a..fbedea28f87c 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2005-11-10 Tobias Schl"uter + + PR fortran/24643 + * primary.c (match_varspec): Check for implicitly typed CHARACTER + variables before matching substrings. + 2005-11-09 Steven G. Kargl * trans-intrinsic.c: Typo in comment. diff --git a/gcc/fortran/primary.c b/gcc/fortran/primary.c index e3e812795936..1cb5d231e4ff 100644 --- a/gcc/fortran/primary.c +++ b/gcc/fortran/primary.c @@ -1634,6 +1634,15 @@ match_varspec (gfc_expr * primary, int equiv_flag) } check_substring: + if (primary->ts.type == BT_UNKNOWN) + { + if (gfc_get_default_type (sym, sym->ns)->type == BT_CHARACTER) + { + gfc_set_default_type (sym, 0, sym->ns); + primary->ts = sym->ts; + } + } + if (primary->ts.type == BT_CHARACTER) { switch (match_substring (primary->ts.cl, equiv_flag, &substring)) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 2a845c376da5..ec545ea1a979 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2005-11-10 Tobias Schl"uter + + PR fortran/24643 + * gfortran.dg/implicit_6.f90, gfortran.dg/implicit_7.f90: New. + 2005-11-10 Alexandre Oliva * gcc.dg/attr-weakref-1.c: Add exit (0) to avoid spurious diff --git a/gcc/testsuite/gfortran.dg/implicit_6.f90 b/gcc/testsuite/gfortran.dg/implicit_6.f90 new file mode 100644 index 000000000000..bb7fe3221abd --- /dev/null +++ b/gcc/testsuite/gfortran.dg/implicit_6.f90 @@ -0,0 +1,8 @@ +! { dg-do compile } +! PR 24643 +! substring references on implicitly typed CHARACTER variables didn't work + PROGRAM P + IMPLICIT CHARACTER*8 (Y) + YLOCAL='A' + YBTABLE=YLOCAL(1:2) + END diff --git a/gcc/testsuite/gfortran.dg/implicit_7.f90 b/gcc/testsuite/gfortran.dg/implicit_7.f90 new file mode 100644 index 000000000000..750d2454f371 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/implicit_7.f90 @@ -0,0 +1,7 @@ +! { dg-do compile } +! PR 24643 +! This tests a case where the compiler used to ICE in an early +! incarnation of the patch +ylocal=1 +ybtable=ylocal(1:2) ! { dg-error "Unclassifiable" } +end