[Bug fortran/30872] Bogus "size of variable is too large"
pault at gcc dot gnu dot org
gcc-bugzilla@gcc.gnu.org
Sun Apr 1 22:12:00 GMT 2007
------- Comment #2 from pault at gcc dot gnu dot org 2007-04-01 23:11 -------
This fixes it and regtests on x86_ia64/FC5. The arithmetic for finding the
offset to a rank>1 element was plain wrong.
I will submit asap.
Paul
Index: gcc/fortran/expr.c
===================================================================
*** gcc/fortran/expr.c (revision 123382)
--- gcc/fortran/expr.c (working copy)
*************** find_array_element (gfc_constructor *con
*** 899,904 ****
--- 899,906 ----
int i;
mpz_t delta;
mpz_t offset;
+ mpz_t span;
+ mpz_t tmp;
gfc_expr *e;
try t;
*************** find_array_element (gfc_constructor *con
*** 907,912 ****
--- 909,916 ----
mpz_init_set_ui (offset, 0);
mpz_init (delta);
+ mpz_init (tmp);
+ mpz_init_set_ui (span, 1);
for (i = 0; i < ar->dimen; i++)
{
e = gfc_copy_expr (ar->start[i]);
*************** find_array_element (gfc_constructor *con
*** 930,936 ****
--- 934,946 ----
}
mpz_sub (delta, e->value.integer, ar->as->lower[i]->value.integer);
+ mpz_mul (delta, delta, span);
mpz_add (offset, offset, delta);
+
+ mpz_set_ui (tmp, 1);
+ mpz_add (tmp, tmp, ar->as->upper[i]->value.integer);
+ mpz_sub (tmp, tmp, ar->as->lower[i]->value.integer);
+ mpz_mul (span, span, tmp);
}
if (cons)
*************** find_array_element (gfc_constructor *con
*** 949,954 ****
--- 959,966 ----
depart:
mpz_clear (delta);
mpz_clear (offset);
+ mpz_clear (span);
+ mpz_clear (tmp);
if (e)
gfc_free_expr (e);
*rval = cons;
--
pault at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
AssignedTo|unassigned at gcc dot gnu |pault at gcc dot gnu dot org
|dot org |
Status|NEW |ASSIGNED
Last reconfirmed|2007-02-20 16:50:46 |2007-04-01 23:11:48
date| |
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=30872
More information about the Gcc-bugs
mailing list