[Committed] PR fortran/91642 -- NULL() cannot be in iolength inquire
diff mbox series

Message ID 20190911182922.GA10330@troutmask.apl.washington.edu
State New
Headers show
Series
  • [Committed] PR fortran/91642 -- NULL() cannot be in iolength inquire
Related show

Commit Message

Steve Kargl Sept. 11, 2019, 6:29 p.m. UTC
Committed as obvious.

2019-09-11  Steven G. Kargl  <kargl@gcc.gnu.org>

	PR fortran/91642
	* io.c (gfc_match_inquire): null() cannot be in an iolength inquire
	list.

2019-09-11  Steven G. Kargl  <kargl@gcc.gnu.org>

	PR fortran/91642
	* gfortran.dg/pr91642.f90: New test.

Patch
diff mbox series

Index: gcc/fortran/io.c
===================================================================
--- gcc/fortran/io.c	(revision 275651)
+++ gcc/fortran/io.c	(working copy)
@@ -4641,6 +4641,17 @@  gfc_match_inquire (void)
       if (m == MATCH_NO)
 	goto syntax;
 
+      for (gfc_code *c = code; c; c = c->next)
+	if (c->expr1 && c->expr1->expr_type == EXPR_FUNCTION
+	    && c->expr1->symtree && c->expr1->symtree->n.sym->attr.function
+	    && !c->expr1->symtree->n.sym->attr.external
+	    && strcmp (c->expr1->symtree->name, "null") == 0)
+	  {
+	    gfc_error ("NULL() near %L cannot appear in INQUIRE statement",
+		       &c->expr1->where);
+	    goto cleanup;
+	  }
+
       new_st.op = EXEC_IOLENGTH;
       new_st.expr1 = inquire->iolength;
       new_st.ext.inquire = inquire;
Index: gcc/testsuite/gfortran.dg/pr91642.f90
===================================================================
--- gcc/testsuite/gfortran.dg/pr91642.f90	(nonexistent)
+++ gcc/testsuite/gfortran.dg/pr91642.f90	(working copy)
@@ -0,0 +1,19 @@ 
+! { dg-do compile }
+! PR fortran/91642
+! Code contributed by Gerhard Steinmetz
+program p
+   integer i
+   integer :: iol
+   integer, external :: null
+   i = 0
+   inquire (iolength=iol) i, null()
+   if (iol == 4) stop 1
+end
+
+subroutine q
+   integer i
+   integer :: iol
+   i = 0
+   inquire (iolength=iol) i, null() ! { dg-error "cannot appear in INQUIRE" }
+   if (iol == 4) stop 1
+end