]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR fortran/64771 (ICE(segfault) when passing coarrays around; ICE in gfc_zero_size...
authorTobias Burnus <burnus@net-b.de>
Tue, 27 Jan 2015 19:20:04 +0000 (20:20 +0100)
committerTobias Burnus <burnus@gcc.gnu.org>
Tue, 27 Jan 2015 19:20:04 +0000 (20:20 +0100)
2015-01-27  Tobias Burnus  <burnus@net-b.de>

        PR fortran/64771
gcc/fortran/
        * interface.c (check_dummy_characteristics): Fix coarray
        handling.

testsuite/
        * gfortran.dg/coarray_36.f: New.
        * gfortran.dg/coarray_37.f90: New.

From-SVN: r220184

gcc/fortran/ChangeLog
gcc/fortran/interface.c
gcc/testsuite/ChangeLog

index 5959553d1343c27450916d7ab58c76f5a0b6cdde..cbeb606d2ea29c630f23490a43bb73f2b3a2c9d6 100644 (file)
@@ -1,3 +1,8 @@
+2015-01-27  Tobias Burnus  <burnus@net-b.de>
+
+       PR fortran/64771
+       * interface.c (check_dummy_characteristics): Fix coarray handling.
+
 2015-01-26  Janus Weil  <janus@gcc.gnu.org>
 
        Backport from mainline
index f24641c1e5fd418dcf6ecec4a6d7a46e31010fdf..db20475af1e9ce90a69545ab326043e0bca6ef44 100644 (file)
@@ -1204,8 +1204,15 @@ check_dummy_characteristics (gfc_symbol *s1, gfc_symbol *s2,
          return false;
        }
 
+      if (s1->as->corank != s2->as->corank)
+       {
+         snprintf (errmsg, err_len, "Corank mismatch in argument '%s' (%i/%i)",
+                   s1->name, s1->as->corank, s2->as->corank);
+         return false;
+       }
+
       if (s1->as->type == AS_EXPLICIT)
-       for (i = 0; i < s1->as->rank + s1->as->corank; i++)
+       for (i = 0; i < s1->as->rank + MAX (0, s1->as->corank-1); i++)
          {
            shape1 = gfc_subtract (gfc_copy_expr (s1->as->upper[i]),
                                  gfc_copy_expr (s1->as->lower[i]));
@@ -1219,8 +1226,12 @@ check_dummy_characteristics (gfc_symbol *s1, gfc_symbol *s2,
              case -1:
              case  1:
              case -3:
-               snprintf (errmsg, err_len, "Shape mismatch in dimension %i of "
-                         "argument '%s'", i + 1, s1->name);
+               if (i < s1->as->rank)
+                 snprintf (errmsg, err_len, "Shape mismatch in dimension %i of"
+                           " argument '%s'", i + 1, s1->name);
+               else
+                 snprintf (errmsg, err_len, "Shape mismatch in codimension %i "
+                           "of argument '%s'", i - s1->as->rank + 1, s1->name);
                return false;
 
              case -2:
index 91901e834da569ba2d5377d42b5abe0a4b4dc7e9..6b46791cfc6688d9e56df67f12593273f59b00e1 100644 (file)
@@ -1,3 +1,9 @@
+2015-01-27  Tobias Burnus  <burnus@net-b.de>
+
+       PR fortran/64771
+       * gfortran.dg/coarray_36.f: New.
+       * gfortran.dg/coarray_37.f90: New.
+
 2015-01-26  Janus Weil  <janus@gcc.gnu.org>
 
        Backport from mainline