re PR fortran/68108 (erroneous error message 'scalar integer expression expected')
authorSteven G. Kargl <kargl@gcc.gnu.org>
Tue, 27 Oct 2015 16:42:24 +0000 (16:42 +0000)
committerSteven G. Kargl <kargl@gcc.gnu.org>
Tue, 27 Oct 2015 16:42:24 +0000 (16:42 +0000)
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

gcc/fortran/ChangeLog
gcc/fortran/decl.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/pr67805_2.f90 [new file with mode: 0644]

index 51eeb0b61f534682291eb34f32f9a6f2a221da55..37956ce444a567ef81c9db1384cbeff1b469c0a7 100644 (file)
@@ -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
index 651f1b0265de8a9e100b4c173a071d37ea41e056..07c539162f4a3857cf38fdd4f30b000896ed6d23 100644 (file)
@@ -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);
index fc176e37e05df75a2149828e3ed23b7479e9b085..ab53bc1ff3c7ad5ce5159863e6976cb249d700ce 100644 (file)
@@ -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 (file)
index 0000000..4438d3e
--- /dev/null
@@ -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