[Bug fortran/45159] Unnecessary temporaries
tkoenig at netcologne dot de
gcc-bugzilla@gcc.gnu.org
Tue Aug 10 09:19:00 GMT 2010
------- Comment #18 from tkoenig at netcologne dot de 2010-08-10 09:19 -------
Subject: Re: Unnecessary temporaries
Am Dienstag, den 10.08.2010, 08:45 +0000 schrieb dominiq at lps dot ens
dot fr:
> I think that
>
> + identical_strides = gfc_dep_compare_expr (l_stride, r_stride)
> == 1;
>
> should also be replaced with
>
> + identical_strides = gfc_dep_compare_expr (l_stride, r_stride)
> == 0;
Correct.
Although it is probably better set the stride during resolution.
Here's a tentative patch for that. There are probably very many places
that NULL checks can be elided with this.
Index: resolve.c
===================================================================
--- resolve.c (Revision 163041)
+++ resolve.c (Arbeitskopie)
@@ -4378,12 +4378,19 @@
return FAILURE;
}
+ /* Always fill in a stride of one. */
+
+ if (ar->dimen_type[i] == DIMEN_RANGE
+ && ar->stride[i] == NULL)
+ ar->stride[i] = gfc_get_int_expr (gfc_index_integer_kind,
+ &ar->where, 1);
+
/* Fill in the upper bound, which may be lower than the
specified one for something like a(2:10:5), which is
identical to a(2:7:5). Only relevant for strides not equal
to one. */
if (ar->dimen_type[i] == DIMEN_RANGE
- && ar->stride[i] != NULL && ar->stride[i]->expr_type ==
EXPR_CONSTANT
+ && ar->stride[i]->expr_type == EXPR_CONSTANT
&& mpz_cmp_si (ar->stride[i]->value.integer, 1L) != 0)
{
mpz_t size, end;
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45159
More information about the Gcc-bugs
mailing list