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
This commit is contained in:
parent
3672065a1d
commit
0c6ce8b027
4 changed files with 39 additions and 7 deletions
|
@ -1,3 +1,10 @@
|
|||
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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
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
|
||||
|
|
16
gcc/testsuite/gfortran.dg/parameter_array_init_3.f90
Normal file
16
gcc/testsuite/gfortran.dg/parameter_array_init_3.f90
Normal file
|
@ -0,0 +1,16 @@
|
|||
! { 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" } }
|
Loading…
Add table
Reference in a new issue