]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR fortran/91642 (ICE: Bad IO basetype (transfer_expr, at fortran/trans-io.c:2507))
authorSteven G. Kargl <kargl@gcc.gnu.org>
Wed, 11 Sep 2019 18:27:17 +0000 (18:27 +0000)
committerSteven G. Kargl <kargl@gcc.gnu.org>
Wed, 11 Sep 2019 18:27:17 +0000 (18:27 +0000)
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.

From-SVN: r275655

gcc/fortran/ChangeLog
gcc/fortran/io.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/pr91642.f90 [new file with mode: 0644]

index 9c787f73bfd0df7dfbe563fab4517171709457a5..b3770ce04541808b4e61e7e6aab0e1c7b6d70818 100644 (file)
@@ -1,3 +1,9 @@
+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-05  Harald Anlauf  <anlauf@gmx.de>
 
        PR fortran/91496
index d57b7471da21d5a0e2a1061e817075d77be493dd..bb645602a2ca1c8103de76f3558a04ae84d933d0 100644 (file)
@@ -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 aa3127cf3fdb9b3071fefe27d6123fd31ff96f24..6c316ee7f93f335d967d528fec0b713b3aa72225 100644 (file)
@@ -1,3 +1,8 @@
+2019-09-11  Steven G. Kargl  <kargl@gcc.gnu.org>
+
+       PR fortran/91642
+       * gfortran.dg/pr91642.f90: New test.
+
 2019-09-11  Jakub Jelinek  <jakub@redhat.com>
 
        PR rtl-optimization/89435
diff --git a/gcc/testsuite/gfortran.dg/pr91642.f90 b/gcc/testsuite/gfortran.dg/pr91642.f90
new file mode 100644 (file)
index 0000000..b3cc40f
--- /dev/null
@@ -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) 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 2
+end