===================================================================
@@ -2455,7 +2455,9 @@ get_expr_storage_size (gfc_expr *e)
{
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)
+ && ref->u.ar.as->lower[i]->ts.type == BT_INTEGER
+ && ref->u.ar.as->upper[i]->expr_type == EXPR_CONSTANT
+ && ref->u.ar.as->upper[i]->ts.type == BT_INTEGER)
elements *= mpz_get_si (ref->u.ar.as->upper[i]->value.integer)
- mpz_get_si (ref->u.ar.as->lower[i]->value.integer)
+ 1L;
===================================================================
@@ -0,0 +1,12 @@
+! { dg-do compile }
+! PR fortran/36192
+program three_body
+ real, parameter :: n = 2, d = 2
+ real, dimension(n,d) :: x_hq ! { dg-error "of INTEGER type|of INTEGER type" }
+ call step(x_hq)
+ contains
+ subroutine step(x)
+ real, dimension(:,:), intent(in) :: x
+ end subroutine step
+end program three_body
+! { dg-prune-output "must have constant shape" }