re PR fortran/20846 (inquire(FILE=..., UNIT=...) not flagged as error)
authorJanne Blomqvist <jblomqvi@vipunen.hut.fi>
Mon, 30 May 2005 00:17:03 +0000 (00:17 +0000)
committerSteven G. Kargl <kargl@gcc.gnu.org>
Mon, 30 May 2005 00:17:03 +0000 (00:17 +0000)
 fortran/PR20846
 * io.c (gfc_match_inquire): Implement constraints on UNIT and FILE usage.

From-SVN: r100338

gcc/fortran/ChangeLog
gcc/fortran/io.c

index b10aea28ee1cf28214ca683b99847b2083f81b06..ac6a5d8134e524b6a657862f6d41bd8dd47274b0 100644 (file)
@@ -1,3 +1,8 @@
+2005-05-29  Steven G. Kargl
+  
+       fortran/PR20846
+       * io.c (gfc_match_inquire): Implement constraints on UNIT and FILE usage.
+
 2005-05-29  Francois-Xavier Coudert  <coudert@clipper.ens.fr>
 
        PR libfortran/20006
index 5fae9a2d09429c5016ec8536cdb7b111fcb94dc6..7777f05a41008a0b2aef6286bccddf027dca2ed7 100644 (file)
@@ -2363,6 +2363,7 @@ gfc_match_inquire (void)
   gfc_inquire *inquire;
   gfc_code *code;
   match m;
+  locus loc;
 
   m = gfc_match_char ('(');
   if (m == MATCH_NO)
@@ -2370,6 +2371,8 @@ gfc_match_inquire (void)
 
   inquire = gfc_getmem (sizeof (gfc_inquire));
 
+  loc = gfc_current_locus;
+
   m = match_inquire_element (inquire);
   if (m == MATCH_ERROR)
     goto cleanup;
@@ -2435,6 +2438,20 @@ gfc_match_inquire (void)
   if (gfc_match_eos () != MATCH_YES)
     goto syntax;
 
+  if (inquire->unit != NULL && inquire->file != NULL)
+    {
+      gfc_error ("INQUIRE statement at %L cannot contain both FILE and"
+                " UNIT specifiers", &loc);
+      goto cleanup;
+    }
+
+  if (inquire->unit == NULL && inquire->file == NULL)
+    {
+      gfc_error ("INQUIRE statement at %L requires either FILE or"
+                    " UNIT specifier", &loc);
+      goto cleanup;
+    }
+
   if (gfc_pure (NULL))
     {
       gfc_error ("INQUIRE statement not allowed in PURE procedure at %C");