gcc/gcc41-pr29712.patch
Jakub Jelinek d8d9cbe2d6 4.1.2-34
2007-11-25 20:29:41 +00:00

56 lines
2.0 KiB
Diff

2007-01-15 Paul Thomas <pault@gcc.gnu.org>
PR fortran/29712
* resolve.c (resolve_function): Only a reference to the final
dimension of an assumed size array is an error in an inquiry
function.
* gfortran.dg/bound_2.f90: Reinstate commented out line.
* gfortran.dg/initialization_1.f90: Change warning.
--- gcc/fortran/resolve.c (revision 120789)
+++ gcc/fortran/resolve.c (revision 120790)
@@ -1498,10 +1498,16 @@ resolve_function (gfc_expr * expr)
for (arg = expr->value.function.actual; arg; arg = arg->next)
{
- if (inquiry && arg->next != NULL && arg->next->expr
- && arg->next->expr->expr_type != EXPR_CONSTANT)
- break;
-
+ if (inquiry && arg->next != NULL && arg->next->expr)
+ {
+ if (arg->next->expr->expr_type != EXPR_CONSTANT)
+ break;
+
+ if ((int)mpz_get_si (arg->next->expr->value.integer)
+ < arg->expr->rank)
+ break;
+ }
+
if (arg->expr != NULL
&& arg->expr->rank > 0
&& resolve_assumed_size_actual (arg->expr))
--- gcc/testsuite/gfortran.dg/initialization_1.f90 (revision 120789)
+++ gcc/testsuite/gfortran.dg/initialization_1.f90 (revision 120790)
@@ -27,7 +27,7 @@ contains
integer :: l1 = len (ch1) ! { dg-warning "assumed character length variable" }
! These are warnings because they are gfortran extensions.
- integer :: m3 = size (x, 1) ! { dg-warning "upper bound in the last dimension" }
+ integer :: m3 = size (x, 1) ! { dg-warning "Evaluation of nonstandard initialization" }
integer :: m4(2) = shape (z) ! { dg-warning "Evaluation of nonstandard initialization" }
! This does not depend on non-constant properties.
--- gcc/testsuite/gfortran.dg/bound_2.f90 (revision 120789)
+++ gcc/testsuite/gfortran.dg/bound_2.f90 (revision 120790)
@@ -194,7 +194,7 @@ contains
subroutine foo (x,n)
integer :: x(7,n,2,*), n
- !if (ubound(x,1) /= 7 .or. ubound(x,2) /= 4 .or. ubound(x,3) /= 2) call abort
+ if (ubound(x,1) /= 7 .or. ubound(x,2) /= 4 .or. ubound(x,3) /= 2) call abort
end subroutine foo
subroutine jackal (b, c)