From 199c387dd1cad65c9ebbfb158e36d4cf005f6838 Mon Sep 17 00:00:00 2001 From: Mikael Morin Date: Fri, 7 Oct 2011 21:43:21 +0200 Subject: [PATCH] trans-array.c (gfc_conv_ss_startstride): Support zero rank loop. * trans-array.c (gfc_conv_ss_startstride): Support zero rank loop. From-SVN: r179682 --- gcc/fortran/ChangeLog | 4 ++++ gcc/fortran/trans-array.c | 12 ++++++------ 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 668149b68e9..8657e59f8a1 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,7 @@ +2011-10-07 Mikael Morin + + * trans-array.c (gfc_conv_ss_startstride): Support zero rank loop. + 2011-10-07 Mikael Morin * trans-array.c (gfc_conv_section_startstride): Move code to diff --git a/gcc/fortran/trans-array.c b/gcc/fortran/trans-array.c index ee5761bd947..067fe0b7fa3 100644 --- a/gcc/fortran/trans-array.c +++ b/gcc/fortran/trans-array.c @@ -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) { -- 2.30.2