]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
backport: re PR fortran/79795 (Fortran ICE in resolve_symbol starting with r163221)
authorThomas Koenig <tkoenig@gcc.gnu.org>
Fri, 20 Oct 2017 19:26:35 +0000 (19:26 +0000)
committerThomas Koenig <tkoenig@gcc.gnu.org>
Fri, 20 Oct 2017 19:26:35 +0000 (19:26 +0000)
2017-10-20  Thomas Koenig  <tkoenig@gcc.gnu.org>

Backport from trunk
PR fortran/79795
* resolve.c (resovle_symbol): Change gcc_assert to
sensible error message.

2017-10-20  Thomas Koenig  <tkoenig@gcc.gnu.org>

Backport from trunk
PR fortran/79795
* gfortran.dg/assumed_size_2.f90: New test.

From-SVN: r253956

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

index 47cf5fb1f08cbb9aafae1873709748ca88a0ebd5..e6ae62f0a59ba69ee111427f7ffa13b6d151d852 100644 (file)
@@ -1,3 +1,10 @@
+2017-10-20  Thomas Koenig  <tkoenig@gcc.gnu.org>
+
+       Backport from trunk
+       PR fortran/79795
+       * resolve.c (resovle_symbol): Change gcc_assert to
+       sensible error message.
+
 2017-10-19  Paul Thomas  <pault@gcc.gnu.org>
 
        Backport from trunk
index 4fc8653ac3606335b97746c666d3434d5cb0d777..c3cc161ad9a7af25d6426de028a31324b075c3fa 100644 (file)
@@ -13965,7 +13965,23 @@ resolve_symbol (gfc_symbol *sym)
 
   if (as)
     {
-      gcc_assert (as->type != AS_IMPLIED_SHAPE);
+      /* If AS_IMPLIED_SHAPE makes it to here, it must be a bad
+        specification expression.  */
+      if (as->type == AS_IMPLIED_SHAPE)
+       {
+         int i;
+         for (i=0; i<as->rank; i++)
+           {
+             if (as->lower[i] != NULL && as->upper[i] == NULL)
+               {
+                 gfc_error ("Bad specification for assumed size array at %L",
+                            &as->lower[i]->where);
+                 return;
+               }
+           }
+         gcc_unreachable();
+       }
+
       if (((as->type == AS_ASSUMED_SIZE && !as->cp_was_assumed)
           || as->type == AS_ASSUMED_SHAPE)
          && !sym->attr.dummy && !sym->attr.select_type_temporary)
index 0044c7d8760ad7b0c893b3088826426684186484..9541d54bbfd3588495d4a402c1f1fbecaf1627e5 100644 (file)
@@ -1,3 +1,9 @@
+2017-10-20  Thomas Koenig  <tkoenig@gcc.gnu.org>
+
+       Backport from trunk
+       PR fortran/79795
+       * gfortran.dg/assumed_size_2.f90: New test.
+
 2017-10-19  Paul Thomas  <pault@gcc.gnu.org>
 
        Backport from trunk
diff --git a/gcc/testsuite/gfortran.dg/assumed_size_2.f90 b/gcc/testsuite/gfortran.dg/assumed_size_2.f90
new file mode 100644 (file)
index 0000000..e9a1185
--- /dev/null
@@ -0,0 +1,4 @@
+! { dg-do compile }
+subroutine foo(a)
+  dimension  a(*,*) ! { dg-error "Bad specification for assumed size array" }
+end