summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkargl <kargl@138bc75d-0d04-0410-961f-82ee72b054a4>2018-02-07 21:01:00 +0000
committerkargl <kargl@138bc75d-0d04-0410-961f-82ee72b054a4>2018-02-07 21:01:00 +0000
commitef4da3c78ac6137cafcb1de465fbbd5a8e0ec3de (patch)
tree6d0c81e3093b1155b58b5a5da56865aca6ba2cce
parent941006c22580bfea335f2230b7684176f7268a71 (diff)
downloadgcc-ef4da3c78ac6137cafcb1de465fbbd5a8e0ec3de.tar.gz
2018-02-07 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/82049 * match.c (gfc_match_type_spec): If the charlen is non-NULL, then try to resolve it. While here return early if possible. 2018-02-07 Steven G. Kargl <kargl@gcc.gnu.org> PR fortran/82049 * gfortran.dg/assumed_charlen_parameter.f90: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-6-branch@257461 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/fortran/ChangeLog6
-rw-r--r--gcc/fortran/match.c8
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/assumed_charlen_parameter.f909
4 files changed, 28 insertions, 0 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index f3415473b1d..00caf4add6e 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,9 @@
+2018-02-07 Steven G. Kargl <kargl@gcc.gnu.org>
+
+ PR fortran/82049
+ * match.c (gfc_match_type_spec): If the charlen is non-NULL, then
+ try to resolve it. While here return early if possible.
+
2018-01-20 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/83900
diff --git a/gcc/fortran/match.c b/gcc/fortran/match.c
index eed3f618005..d3ea1673554 100644
--- a/gcc/fortran/match.c
+++ b/gcc/fortran/match.c
@@ -1983,11 +1983,17 @@ gfc_match_type_spec (gfc_typespec *ts)
{
match m;
locus old_locus;
+ char c;
gfc_clear_ts (ts);
gfc_gobble_whitespace ();
old_locus = gfc_current_locus;
+ /* If c isn't in [a-z], then return immediately. */
+ c = gfc_peek_ascii_char ();
+ if (!ISALPHA(c))
+ return MATCH_NO;
+
if (match_derived_type_spec (ts) == MATCH_YES)
{
/* Enforce F03:C401. */
@@ -2033,6 +2039,8 @@ gfc_match_type_spec (gfc_typespec *ts)
ts->type = BT_CHARACTER;
m = gfc_match_char_spec (ts);
+ if (ts->u.cl && ts->u.cl->length)
+ gfc_resolve_expr (ts->u.cl->length);
if (m == MATCH_NO)
m = MATCH_YES;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 7b73816e9ed..4e8db9407c9 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2018-02-07 Steven G. Kargl <kargl@gcc.gnu.org>
+
+ PR fortran/82049
+ * gfortran.dg/assumed_charlen_parameter.f90: New test.
+
2018-02-01 Renlin Li <renlin.li@arm.com>
Backport from mainline
diff --git a/gcc/testsuite/gfortran.dg/assumed_charlen_parameter.f90 b/gcc/testsuite/gfortran.dg/assumed_charlen_parameter.f90
new file mode 100644
index 00000000000..2653f1b127a
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/assumed_charlen_parameter.f90
@@ -0,0 +1,9 @@
+! { dg-do compile }
+! PR fortran/82049
+! Original code contributed by John Harper <john dot harper at vuw dot ac dot nz>
+program ice ! f2003
+ implicit none
+ character(*), parameter:: a = 'ice', b = '*'
+ character(*), parameter:: c(2) = [character(len(a)) :: a, b]
+ print "(2A4)",adjustr(c)
+end program ice