diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index a53691c95059d9f7324ade595c823a7047b84fb3..f0275efa994080444a81af6bd4b488bec425f47c 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,8 @@
+2007-05-23  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+
+	PR fortran/31716
+	* array.c (spec_dimen_size): Test for correct BT_INTEGER type. 
+
 2007-05-23  Francois-Xavier Coudert  <fxcoudert@gcc.gnu.org>
 
 	PR fortran/32046
diff --git a/gcc/fortran/array.c b/gcc/fortran/array.c
index 9359624efec4c9dce7dda2fceba34be5dd19ddb5..2a88cc8ad56f2c1669fa0032a146dca949af7b2e 100644
--- a/gcc/fortran/array.c
+++ b/gcc/fortran/array.c
@@ -1725,7 +1725,9 @@ spec_dimen_size (gfc_array_spec *as, int dimen, mpz_t *result)
 
   if (as->type != AS_EXPLICIT
       || as->lower[dimen]->expr_type != EXPR_CONSTANT
-      || as->upper[dimen]->expr_type != EXPR_CONSTANT)
+      || as->upper[dimen]->expr_type != EXPR_CONSTANT
+      || as->lower[dimen]->ts.type != BT_INTEGER
+      || as->upper[dimen]->ts.type != BT_INTEGER)
     return FAILURE;
 
   mpz_init (*result);