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
PR fortran/83057
* io.c (gfc_match_open): Fix logic in checks of OPEN statement
when NEWUNIT= is specified.
2019-02-20 Harald Anlauf
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