PR fortran/34476
* expr.c (find_array_element): Check that the array bounds are
constant before using them. Use lower, as well as upper bound.
(check_restricted): Allow implied index variable.
2008-01-08 Paul Thomas <pault@gcc.gnu.org>
PR fortran/34476
* gfortran.dg/parameter_array_init_3.f90: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@131396
138bc75d-0d04-0410-961f-
82ee72b054a4
2008-01-08 Paul Thomas <pault@gcc.gnu.org>
+ PR fortran/34476
+ * expr.c (find_array_element): Check that the array bounds are
+ constant before using them. Use lower, as well as upper bound.
+ (check_restricted): Allow implied index variable.
+
+2008-01-08 Paul Thomas <pault@gcc.gnu.org>
+
PR fortran/34681
* trans_array.c (gfc_trans_deferred_array): Do not null the
data pointer on entering scope, nor deallocate it on leaving
cons = NULL;
goto depart;
}
-
- /* Check the bounds. */
- if (ar->as->upper[i]
- && (mpz_cmp (e->value.integer, ar->as->upper[i]->value.integer) > 0
- || mpz_cmp (e->value.integer,
- ar->as->lower[i]->value.integer) < 0))
+ /* Check the bounds. */
+ if ((ar->as->upper[i]
+ && ar->as->upper[i]->expr_type == EXPR_CONSTANT
+ && mpz_cmp (e->value.integer,
+ ar->as->upper[i]->value.integer) > 0)
+ ||
+ (ar->as->lower[i]->expr_type == EXPR_CONSTANT
+ && mpz_cmp (e->value.integer,
+ ar->as->lower[i]->value.integer) < 0))
{
- gfc_error ("index in dimension %d is out of bounds "
+ gfc_error ("Index in dimension %d is out of bounds "
"at %L", i + 1, &ar->c_where[i]);
cons = NULL;
t = FAILURE;
if (sym->attr.in_common
|| sym->attr.use_assoc
|| sym->attr.dummy
+ || sym->attr.implied_index
|| sym->ns != gfc_current_ns
|| (sym->ns->proc_name != NULL
&& sym->ns->proc_name->attr.flavor == FL_MODULE)
2008-01-08 Paul Thomas <pault@gcc.gnu.org>
+ PR fortran/34476
+ * gfortran.dg/parameter_array_init_3.f90: New test.
+
+2008-01-08 Paul Thomas <pault@gcc.gnu.org>
+
PR fortran/34681
PR fortran/34704
* gfortran.dg/alloc_comp_default_init_1.f90: New test.
--- /dev/null
+! { dg-do compile }
+! Test the fix for PR34476 in which an 'out of bounds' error would be
+! generated for the array initializations AND the implicit index 'i'
+! would be rejected.
+!
+! Reported by Tobias Burnus <burnus@gcc.gnu.org> following a thread
+! on comp.lang.fortran (see PR)
+!
+module abuse_mod
+ implicit none
+ integer i
+ character(8), parameter :: HEX1 = '40490FDB'
+ integer(1), parameter :: MSKa1(len(HEX1)) = [(1,i=1,len(HEX1))]
+ integer(1), parameter :: ARR1(len(HEX1)) = [( MSKa1(i), i=1,len(HEX1) )]
+end module abuse_mod
+! { dg-final { cleanup-modules "abuse_mod" } }