The fix for PR70853 changed an ICE-on-invalid for NULLIFY into a
misleading error message. The patch below rectifies that.
OK for trunk?
Regtested on x86_64-pc-linux-gnu.
Thanks,
Harald
Index: gcc/fortran/match.c
===================================================================
--- gcc/fortran/match.c (Revision 279645)
+++ gcc/fortran/match.c (Arbeitskopie)
@@ -4588,6 +4588,23 @@ gfc_match_nullify (void)
goto cleanup;
}
+ /* Check for valid array pointer object. Bounds remapping is not
+ allowed with NULLIFY. */
+ if (p->ref)
+ {
+ gfc_ref *remap = p->ref;
+ for (; remap; remap = remap->next)
+ if (!remap->next && remap->type == REF_ARRAY
+ && remap->u.ar.type != AR_FULL)
+ break;
+ if (remap)
+ {
+ gfc_error ("NULLIFY does not allow bounds remapping for "
+ "pointer object at %C");
+ goto cleanup;
+ }
+ }
+
/* build ' => NULL() '. */
e = gfc_get_null_expr (&gfc_current_locus);
Index: gcc/testsuite/gfortran.dg/pr92990.f90
===================================================================
--- gcc/testsuite/gfortran.dg/pr92990.f90 (nicht existent)
+++ gcc/testsuite/gfortran.dg/pr92990.f90 (Arbeitskopie)
@@ -0,0 +1,12 @@
+! { dg-do compile }
+! PR fortran/92990
+! Verify fix of error message for NULLIFY vs. pointer assignment (PR70853)
+program p
+ integer, pointer :: x(:)
+ type t
+ integer, pointer :: y(:)
+ end type t
+ type(t) :: z
+ nullify (x(1:2)) ! { dg-error "does not allow bounds remapping" }
+ nullify (z%y(:)) ! { dg-error "does not allow bounds remapping" }
+end
2019-12-20 Harald Anlauf <[email protected]>
PR fortran/92990
* match.c (gfc_match_nullify): Check for valid pointer object.
Reject bounds remapping.
2019-12-20 Harald Anlauf <[email protected]>
PR fortran/92990
* gfortran.dg/pr92990.f90: New test.