[gcc/devel/gccgo] re PR fortran/92990 (INVALID code with NULLIFY – partially misleading error message "If bounds rem

Ian Lance Taylor ian@gcc.gnu.org
Wed Jan 22 23:49:00 GMT 2020


https://gcc.gnu.org/g:b5fd86aba81ec7dbd50e588909f81771841c03bd

commit b5fd86aba81ec7dbd50e588909f81771841c03bd
Author: Harald Anlauf <anlauf@gmx.de>
Date:   Sat Dec 21 20:25:43 2019 +0000

    re PR fortran/92990 (INVALID code with NULLIFY – partially misleading error message "If bounds remapping is specified at (1), the pointer target shall not be NULL")
    
    2019-12-21  Harald Anlauf  <anlauf@gmx.de>
    
    	PR fortran/92990
    	* match.c (gfc_match_nullify): Check for valid pointer object.
    	Reject bounds remapping.
    
    	PR fortran/92990
    	* gfortran.dg/pr92990.f90: New test.
    
    From-SVN: r279698

Diff:
---
 gcc/fortran/ChangeLog                 |  6 ++++++
 gcc/fortran/match.c                   | 17 +++++++++++++++++
 gcc/testsuite/ChangeLog               |  5 +++++
 gcc/testsuite/gfortran.dg/pr92990.f90 | 12 ++++++++++++
 4 files changed, 40 insertions(+)

diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index dee20f6..63a6de6 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,9 @@
+2019-12-21  Harald Anlauf  <anlauf@gmx.de>
+
+	PR fortran/92990
+	* match.c (gfc_match_nullify): Check for valid pointer object.
+	Reject bounds remapping.
+
 2019-12-21  Paul Thomas  <pault@gcc.gnu.org>
 
 	PR fortran/92753
diff --git a/gcc/fortran/match.c b/gcc/fortran/match.c
index d3e3abc..b467d99 100644
--- a/gcc/fortran/match.c
+++ b/gcc/fortran/match.c
@@ -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);
 
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 1f1dec5..0068dc0 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2019-12-21  Harald Anlauf  <anlauf@gmx.de>
+
+	PR fortran/92990
+	* gfortran.dg/pr92990.f90: New test.
+
 2019-12-21  Paul Thomas  <pault@gcc.gnu.org>
 
 	PR fortran/92753
diff --git a/gcc/testsuite/gfortran.dg/pr92990.f90 b/gcc/testsuite/gfortran.dg/pr92990.f90
new file mode 100644
index 0000000..a996715
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pr92990.f90
@@ -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



More information about the Gcc-cvs mailing list