http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48066
--- Comment #9 from Thomas Koenig <tkoenig at gcc dot gnu.org> 2011-03-12 17:22:50 UTC --- This one looks better: Index: m4/ifunction_logical.m4 =================================================================== --- m4/ifunction_logical.m4 (Revision 170897) +++ m4/ifunction_logical.m4 (Arbeitskopie) @@ -149,7 +149,7 @@ dest = retarray->data; - continue_loop = 1; + continue_loop = len > 0; while (continue_loop) { const GFC_LOGICAL_1 * restrict src; @@ -158,17 +158,12 @@ { ')dnl define(START_ARRAY_BLOCK, -` if (len <= 0) - *dest = '$1`; - else +` for (n = 0; n < len; n++, src += delta) { - for (n = 0; n < len; n++, src += delta) - { ')dnl define(FINISH_ARRAY_FUNCTION, - ` } - *dest = result; - } +` } + *dest = result; } /* Advance to the next element. */ count[0]++; Index: m4/ifunction.m4 =================================================================== --- m4/ifunction.m4 (Revision 170897) +++ m4/ifunction.m4 (Arbeitskopie) @@ -122,7 +122,7 @@ base = array->data; dest = retarray->data; - continue_loop = 1; + continue_loop = len > 0; while (continue_loop) { const atype_name * restrict src; @@ -131,18 +131,13 @@ { ')dnl define(START_ARRAY_BLOCK, -` if (len <= 0) - *dest = '$1`; - else +` for (n = 0; n < len; n++, src += delta) { - for (n = 0; n < len; n++, src += delta) - { ')dnl define(FINISH_ARRAY_FUNCTION, -` } - '$1` - *dest = result; - } +` } + '$1` + *dest = result; } /* Advance to the next element. */ count[0]++; Let's see if it survives regression-testing.