diff options
author | Steven G. Kargl <kargl@gcc.gnu.org> | 2015-10-27 16:42:24 +0000 |
---|---|---|
committer | Steven G. Kargl <kargl@gcc.gnu.org> | 2015-10-27 16:42:24 +0000 |
commit | 54b96a2d6adb14e7158097f5d75c0aff6df8987f (patch) | |
tree | a37757079981bcc615f4dcff51924fac97030ef7 /gcc | |
parent | 5affe17f859a0857b9d9c7c638f1e4e3939d1172 (diff) | |
download | gcc-54b96a2d6adb14e7158097f5d75c0aff6df8987f.zip gcc-54b96a2d6adb14e7158097f5d75c0aff6df8987f.tar.gz gcc-54b96a2d6adb14e7158097f5d75c0aff6df8987f.tar.bz2 |
re PR fortran/68108 (erroneous error message 'scalar integer expression expected')
2015-10-27 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/68108
* decl.c (char_len_param_value): Check for REF_ARRAY.
2015-10-27 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/68108
* gfortran.dg/pr67805_2.f90: New test.
From-SVN: r229446
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/fortran/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/fortran/decl.c | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/pr67805_2.f90 | 22 |
4 files changed, 36 insertions, 2 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 51eeb0b..37956ce 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,8 @@ +2015-10-27 Steven G. Kargl <kargl@gcc.gnu.org> + + PR fortran/68108 + * decl.c (char_len_param_value): Check for REF_ARRAY. + 2015-10-26 Louis Krupp <louis.krupp@zoho.com> PR fortran/66056 diff --git a/gcc/fortran/decl.c b/gcc/fortran/decl.c index 651f1b0..07c5391 100644 --- a/gcc/fortran/decl.c +++ b/gcc/fortran/decl.c @@ -748,13 +748,15 @@ char_len_param_value (gfc_expr **expr, bool *deferred) /* This catches the invalid code "[character(m(2:3)) :: 'x', 'y']", which causes an ICE if gfc_reduce_init_expr() is called. */ - if (e->ref && e->ref->u.ar.type == AR_UNKNOWN + if (e->ref && e->ref->type == REF_ARRAY + && e->ref->u.ar.type == AR_UNKNOWN && e->ref->u.ar.dimen_type[0] == DIMEN_RANGE) goto syntax; gfc_reduce_init_expr (e); - if ((e->ref && e->ref->u.ar.type != AR_ELEMENT) + if ((e->ref && e->ref->type == REF_ARRAY + && e->ref->u.ar.type != AR_ELEMENT) || (!e->ref && e->expr_type == EXPR_ARRAY)) { gfc_free_expr (e); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index fc176e3..ab53bc1 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ + 2015-10-27 Steven G. Kargl <kargl@gcc.gnu.org> + + PR fortran/68108 + * gfortran.dg/pr67805_2.f90: New test. + 2015-10-27 Abderrazek Zaafrani <a.zaafrani@samsung.com> Aditya Kumar <aditya.k7@samsung.com> diff --git a/gcc/testsuite/gfortran.dg/pr67805_2.f90 b/gcc/testsuite/gfortran.dg/pr67805_2.f90 new file mode 100644 index 0000000..4438d3e --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr67805_2.f90 @@ -0,0 +1,22 @@ +! { dg-do compile } +! PR fortran/68108 +! Code contributed by Juergen Reuter (juergen.reuter at desy dot de) +! Test fix for regression caused by PR fortran/67805. +module lexers + implicit none + type :: template_t + character(256) :: charset1 + integer :: len1 + end type template_t + +contains + + subroutine match_quoted (tt, s, n) + type(template_t), intent(in) :: tt + character(*), intent(in) :: s + integer, intent(out) :: n + character(tt%len1) :: ch1 + ch1 = tt%charset1 + end subroutine match_quoted + +end module lexers |