[Patch] PR92990 - fix error message for invalid argument of NULLIFY

Harald Anlauf anlauf@gmx.de
Fri Dec 20 21:33:00 GMT 2019


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  <anlauf@gmx.de>

	PR fortran/92990
	* match.c (gfc_match_nullify): Check for valid pointer object.
	Reject bounds remapping.


2019-12-20  Harald Anlauf  <anlauf@gmx.de>

	PR fortran/92990
	* gfortran.dg/pr92990.f90: New test.



More information about the Fortran mailing list