Commit 0c6ce8b0 by Paul Thomas

re PR fortran/34476 (Parameters: Bogus out of bounds error in array constructor)

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/34476
	* gfortran.dg/parameter_array_init_3.f90: New test.

From-SVN: r131396
parent 3672065a
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
......
......@@ -1024,14 +1024,17 @@ find_array_element (gfc_constructor *cons, gfc_array_ref *ar,
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;
......@@ -2496,6 +2499,7 @@ check_restricted (gfc_expr *e)
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.
! { 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" } }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment