trans-array.c (gfc_conv_ss_startstride): Support zero rank loop.
authorMikael Morin <mikael.morin@sfr.fr>
Fri, 7 Oct 2011 19:43:21 +0000 (21:43 +0200)
committerMikael Morin <mikael@gcc.gnu.org>
Fri, 7 Oct 2011 19:43:21 +0000 (19:43 +0000)
* trans-array.c (gfc_conv_ss_startstride): Support zero rank loop.

From-SVN: r179682

gcc/fortran/ChangeLog
gcc/fortran/trans-array.c

index 668149b68e974c1bd0e327dd5ca7c06e81673107..8657e59f8a1d853050b191b63ce60c6df2de4436 100644 (file)
@@ -1,3 +1,7 @@
+2011-10-07  Mikael Morin  <mikael.morin@sfr.fr>
+
+       * trans-array.c (gfc_conv_ss_startstride): Support zero rank loop.
+
 2011-10-07  Mikael Morin  <mikael.morin@sfr.fr>
 
        * trans-array.c (gfc_conv_section_startstride): Move code to
index ee5761bd947c413dcbe7c6e7152c9f4cd7d56232..067fe0b7fa34f4d83db1eb7918628b18f3d4ef5e 100644 (file)
@@ -3279,8 +3279,7 @@ gfc_conv_ss_startstride (gfc_loopinfo * loop)
 
   loop->dimen = 0;
   /* Determine the rank of the loop.  */
-  for (ss = loop->ss;
-       ss != gfc_ss_terminator && loop->dimen == 0; ss = ss->loop_chain)
+  for (ss = loop->ss; ss != gfc_ss_terminator; ss = ss->loop_chain)
     {
       switch (ss->type)
        {
@@ -3290,7 +3289,7 @@ gfc_conv_ss_startstride (gfc_loopinfo * loop)
        case GFC_SS_COMPONENT:
          loop->dimen = ss->data.info.dimen;
          loop->codimen = ss->data.info.codimen;
-         break;
+         goto done;
 
        /* As usual, lbound and ubound are exceptions!.  */
        case GFC_SS_INTRINSIC:
@@ -3300,14 +3299,14 @@ gfc_conv_ss_startstride (gfc_loopinfo * loop)
            case GFC_ISYM_UBOUND:
              loop->dimen = ss->data.info.dimen;
              loop->codimen = 0;
-             break;
+             goto done;
 
            case GFC_ISYM_LCOBOUND:
            case GFC_ISYM_UCOBOUND:
            case GFC_ISYM_THIS_IMAGE:
              loop->dimen = ss->data.info.dimen;
              loop->codimen = ss->data.info.codimen;
-             break;
+             goto done;
 
            default:
              break;
@@ -3320,8 +3319,9 @@ gfc_conv_ss_startstride (gfc_loopinfo * loop)
 
   /* We should have determined the rank of the expression by now.  If
      not, that's bad news.  */
-  gcc_assert (loop->dimen + loop->codimen != 0);
+  gcc_unreachable ();
 
+done:
   /* Loop over all the SS in the chain.  */
   for (ss = loop->ss; ss != gfc_ss_terminator; ss = ss->loop_chain)
     {