diff options
author | Steven G. Kargl <kargl@gcc.gnu.org> | 2018-12-11 01:39:23 +0000 |
---|---|---|
committer | Steven G. Kargl <kargl@gcc.gnu.org> | 2018-12-11 01:39:23 +0000 |
commit | 87550b74a7eea661abe7ba09a3eff68902546081 (patch) | |
tree | 30b4e146d561a20572cf36b8bbbde0743d1904a3 /gcc | |
parent | 1486eb791fce1b48d24075e281afd09864713e52 (diff) | |
download | gcc-87550b74a7eea661abe7ba09a3eff68902546081.zip gcc-87550b74a7eea661abe7ba09a3eff68902546081.tar.gz gcc-87550b74a7eea661abe7ba09a3eff68902546081.tar.bz2 |
2018-12-10 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/97922
* io.c (gfc_match_open): Additional checks on ASYNCHRONOUS.
2018-12-10 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/97922
* gfortran.dg/io_constraints_8.f90: Update error message.
* gfortran.dg/pr87922.f90: New test.
From-SVN: r266968
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/fortran/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/fortran/io.c | 30 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/io_constraints_8.f90 | 2 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/pr87922.f90 | 10 |
5 files changed, 52 insertions, 1 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index bbb8ce1..f5e3979 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,5 +1,10 @@ 2018-12-10 Steven G. Kargl <kargl@gcc.gnu.org> + PR fortran/97922 + * io.c (gfc_match_open): Additional checks on ASYNCHRONOUS. + +2018-12-10 Steven G. Kargl <kargl@gcc.gnu.org> + PR fortran/88269 * io.c (io_constraint): Update macro. If locus line buffer is NULL, use gfc_current_locus in error messages. diff --git a/gcc/fortran/io.c b/gcc/fortran/io.c index 8d54107..8415df1 100644 --- a/gcc/fortran/io.c +++ b/gcc/fortran/io.c @@ -2205,6 +2205,21 @@ gfc_match_open (void) if (!is_char_type ("ASYNCHRONOUS", open->asynchronous)) goto cleanup; + if (open->asynchronous->ts.kind != 1) + { + gfc_error ("ASYNCHRONOUS= specifier at %L must be of default " + "CHARACTER kind", &open->asynchronous->where); + return MATCH_ERROR; + } + + if (open->asynchronous->expr_type == EXPR_ARRAY + || open->asynchronous->expr_type == EXPR_STRUCTURE) + { + gfc_error ("ASYNCHRONOUS= specifier at %L must be scalar", + &open->asynchronous->where); + return MATCH_ERROR; + } + if (open->asynchronous->expr_type == EXPR_CONSTANT) { static const char * asynchronous[] = { "YES", "NO", NULL }; @@ -3799,6 +3814,21 @@ if (condition) \ if (!is_char_type ("ASYNCHRONOUS", dt->asynchronous)) return MATCH_ERROR; + if (dt->asynchronous->ts.kind != 1) + { + gfc_error ("ASYNCHRONOUS= specifier at %L must be of default " + "CHARACTER kind", &dt->asynchronous->where); + return MATCH_ERROR; + } + + if (dt->asynchronous->expr_type == EXPR_ARRAY + || dt->asynchronous->expr_type == EXPR_STRUCTURE) + { + gfc_error ("ASYNCHRONOUS= specifier at %L must be scalar", + &dt->asynchronous->where); + return MATCH_ERROR; + } + if (!compare_to_allowed_values ("ASYNCHRONOUS", asynchronous, NULL, NULL, dt->asynchronous->value.character.string, diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 414ecd3..43675b9 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2018-12-10 Steven G. Kargl <kargl@gcc.gnu.org> + + PR fortran/97922 + * gfortran.dg/io_constraints_8.f90: Update error message. + * gfortran.dg/pr87922.f90: New test. + 2018-12-10 Martin Sebor <msebor@redhat.com> PR tree-optimization/86196 diff --git a/gcc/testsuite/gfortran.dg/io_constraints_8.f90 b/gcc/testsuite/gfortran.dg/io_constraints_8.f90 index 81cece4..216a41b 100644 --- a/gcc/testsuite/gfortran.dg/io_constraints_8.f90 +++ b/gcc/testsuite/gfortran.dg/io_constraints_8.f90 @@ -14,7 +14,7 @@ integer :: i OPEN(99, access=4_'direct') ! { dg-error "must be a character string of default kind" } OPEN(99, action=4_'read') ! { dg-error "must be a character string of default kind" } -OPEN(99, asynchronous=4_'no') ! { dg-error "must be a character string of default kind" }) +OPEN(99, asynchronous=4_'no') ! { dg-error "must be of default CHARACTER kind" } OPEN(99, blank=4_'null') ! { dg-error "must be a character string of default kind" } OPEN(99, decimal=4_'comma') ! { dg-error "must be a character string of default kind" } OPEN(99, delim=4_'quote') ! { dg-error "must be a character string of default kind" } diff --git a/gcc/testsuite/gfortran.dg/pr87922.f90 b/gcc/testsuite/gfortran.dg/pr87922.f90 new file mode 100644 index 0000000..8bdc6bc --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr87922.f90 @@ -0,0 +1,10 @@ +! { dg-do compile } +! PR fortran/87922 +subroutine p + read(1, asynchronous=['no']) ! { dg-error "must be scalar" } + read(1, asynchronous=[character::]) ! { dg-error "must be scalar" } +end +subroutine q + write(1, asynchronous=['no']) ! { dg-error "must be scalar" } + write(1, asynchronous=[character::]) ! { dg-error "must be scalar" } +end |