From 44998b65262206d2dacc1dcabca5c80ea8c4a84b Mon Sep 17 00:00:00 2001 From: Janne Blomqvist Date: Mon, 30 May 2005 00:17:03 +0000 Subject: [PATCH] re PR fortran/20846 (inquire(FILE=..., UNIT=...) not flagged as error) fortran/PR20846 * io.c (gfc_match_inquire): Implement constraints on UNIT and FILE usage. From-SVN: r100338 --- gcc/fortran/ChangeLog | 5 +++++ gcc/fortran/io.c | 17 +++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index b10aea28ee1c..ac6a5d8134e5 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -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 PR libfortran/20006 diff --git a/gcc/fortran/io.c b/gcc/fortran/io.c index 5fae9a2d0942..7777f05a4100 100644 --- a/gcc/fortran/io.c +++ b/gcc/fortran/io.c @@ -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"); -- 2.43.5