There was a rather obvious bug in the logic for checking the arguments
to the OPEN statement when NEWUNIT= was specified, which prohibited
the generation of the appropriate error message.

Regtested successfully.

OK for trunk?

Thanks,
Harald

2019-02-20  Harald Anlauf  <anl...@gmx.de>

        PR fortran/83057
        * io.c (gfc_match_open): Fix logic in checks of OPEN statement
        when NEWUNIT= is specified.

2019-02-20  Harald Anlauf  <anl...@gmx.de>

        PR fortran/83057
        * gfortran.dg/newunit_6.f90: New test.

Index: gcc/fortran/io.c
===================================================================
--- gcc/fortran/io.c    (revision 269028)
+++ gcc/fortran/io.c    (working copy)
@@ -2504,16 +2504,15 @@
          goto cleanup;
        }
 
-      if (!open->file && open->status)
-        {
-         if (open->status->expr_type == EXPR_CONSTANT
+      if (!open->file &&
+         (!open->status ||
+          (open->status->expr_type == EXPR_CONSTANT
             && gfc_wide_strncasecmp (open->status->value.character.string,
-                                      "scratch", 7) != 0)
-          {
+                                     "scratch", 7) != 0)))
+       {
             gfc_error ("NEWUNIT specifier must have FILE= "
                        "or STATUS='scratch' at %C");
             goto cleanup;
-          }
        }
     }
   else if (!open->unit)
Index: gcc/testsuite/gfortran.dg/newunit_6.f90
===================================================================
--- gcc/testsuite/gfortran.dg/newunit_6.f90     (nonexistent)
+++ gcc/testsuite/gfortran.dg/newunit_6.f90     (working copy)
@@ -0,0 +1,9 @@
+! { dg-do compile }
+!
+! PR fortran/83057 - OPEN without a filename and without STATUS='SCRATCH'
+!                    could produce a warning
+
+  open(newunit=iun,file="file")         ! this is ok
+  open(newunit=jun,status="scratch")    ! this too
+  open(newunit=lun)             ! { dg-error "NEWUNIT specifier must have" }
+end

Reply via email to