------- Comment #10 from kargl at gcc dot gnu dot org  2009-12-30 00:33 -------
(In reply to comment #9)
> Some addition information from valgrind.
> 
> Error: Different shape for array assignment at (1) on dimension 1 (0 and 2)
> ==13911== Invalid read of size 8
> ==13911==    at 0x1C108F8: __gmpz_get_si (in /usr/local/lib/libgmp.so.8)
> ==13911==    by 0x4B426F: compare_actual_formal (interface.c:1704)

The order code is invalid code to say the least.  However, in interface.c
we end up at

        for (i = 0; i < ref->u.ar.as->rank; i++)
          {
            if (ref->u.ar.as->lower[i] && ref->u.ar.as->upper[i]
                && ref->u.ar.as->lower[i]->expr_type == EXPR_CONSTANT
                && ref->u.ar.as->upper[i]->expr_type == EXPR_CONSTANT)
              elements *= mpz_get_si (ref->u.ar.as->upper[i]->value.integer)
                          - mpz_get_si (ref->u.ar.as->lower[i]->value.integer)
                          + 1L;
            else

The segfault occurs because ref->u.ar.as->upper[i]->expr->ts.type is BT_REAL.
Somewhere up the call chain, gfortran is not checking that array
bounds are integers.


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36192

Reply via email to