[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