ptr(10,1:) => target was accepted as for the check "(10,1:)" was seen as
equivalent to the valid "(10:, 1:)" - although the first dimension is
not a range but an element. (Side note: (10:, 1:) would be wrong as well
as one then needs to have the same rank.)
Build and regtested on x86-64-linux.
OK for the trunk?
Tobias
2011-07-16 Tobias Burnus <bur...@net-b.de>
PR fortran/49624
* expr.c (gfc_check_pointer_assign): Fix checking for invalid
pointer bounds.
2011-07-16 Tobias Burnus <bur...@net-b.de>
PR fortran/49624
* gfortran.dg/pointer_remapping_7.f90: New.
diff --git a/gcc/fortran/expr.c b/gcc/fortran/expr.c
index 6db0836..b8eb555 100644
--- a/gcc/fortran/expr.c
+++ b/gcc/fortran/expr.c
@@ -3286,7 +3286,8 @@ gfc_check_pointer_assign (gfc_expr *lvalue, gfc_expr *rvalue)
upper bounds are present, we may do rank remapping. */
for (dim = 0; dim < ref->u.ar.dimen; ++dim)
{
- if (!ref->u.ar.start[dim])
+ if (!ref->u.ar.start[dim]
+ || ref->u.ar.dimen_type[dim] != DIMEN_RANGE)
{
gfc_error ("Lower bound has to be present at %L",
&lvalue->where);
--- /dev/null 2011-07-15 07:29:58.667884802 +0200
+++ gcc/gcc/testsuite/gfortran.dg/pointer_remapping_7.f90 2011-07-15 23:22:29.000000000 +0200
@@ -0,0 +1,8 @@
+! { dg-do compile }
+!
+! PR fortran/49624
+!
+ integer, target :: A(100)
+ integer,pointer :: P(:,:)
+ p(10,1:) => A ! { dg-error "Lower bound has to be present" }
+ end