diff options
author | Steven G. Kargl <kargl@gcc.gnu.org> | 2019-11-01 16:59:06 +0000 |
---|---|---|
committer | Steven G. Kargl <kargl@gcc.gnu.org> | 2019-11-01 16:59:06 +0000 |
commit | 2028ce454f4d9424aaf05c27b20f13ea52748caf (patch) | |
tree | baa3c86f200d00f42e71b57b4c79964df4701693 | |
parent | c7e3443332f8c97305d401e1a35cd65a15ada235 (diff) | |
download | gcc-2028ce454f4d9424aaf05c27b20f13ea52748caf.zip gcc-2028ce454f4d9424aaf05c27b20f13ea52748caf.tar.gz gcc-2028ce454f4d9424aaf05c27b20f13ea52748caf.tar.bz2 |
decl.c (match_byte_typespec): New function.
2019-11-01 Steven G. Kargl <kargl@gcc.gnu.org>
* decl.c (match_byte_typespec): New function. Match BYTE type-spec.
(gfc_match_decl_type_spec): Use it.
2019-11-01 Steven G. Kargl <kargl@gcc.gnu.org>
* gfortran.dg/byte_3.f: New test.
* gfortran.dg/byte_4.f90: Ditto.
From-SVN: r277715
-rw-r--r-- | gcc/fortran/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/fortran/decl.c | 52 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/byte_3.f | 6 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/byte_4.f90 | 10 |
5 files changed, 62 insertions, 16 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 34d7a71..74211ce 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,5 +1,10 @@ 2019-11-01 Steven G. Kargl <kargl@gcc.gnu.org> + * decl.c (match_byte_typespec): New function. Match BYTE type-spec. + (gfc_match_decl_type_spec): Use it. + +2019-11-01 Steven G. Kargl <kargl@gcc.gnu.org> + PR fortran/90988 * decl.c (gfc_match_private, gfc_match_public): Fixed-form source code does not require whitespace between PRIVATE (or PUBLIC) and an entity. diff --git a/gcc/fortran/decl.c b/gcc/fortran/decl.c index 652b578..7858973 100644 --- a/gcc/fortran/decl.c +++ b/gcc/fortran/decl.c @@ -3980,6 +3980,38 @@ error_return: } +/* Match a legacy nonstandard BYTE type-spec. */ + +static match +match_byte_typespec (gfc_typespec *ts) +{ + if (gfc_match (" byte") == MATCH_YES) + { + if (!gfc_notify_std (GFC_STD_GNU, "BYTE type at %C")) + return MATCH_ERROR; + + if (gfc_current_form == FORM_FREE) + { + char c = gfc_peek_ascii_char (); + if (!gfc_is_whitespace (c) && c != ',') + return MATCH_NO; + } + + if (gfc_validate_kind (BT_INTEGER, 1, true) < 0) + { + gfc_error ("BYTE type used at %C " + "is not available on the target machine"); + return MATCH_ERROR; + } + + ts->type = BT_INTEGER; + ts->kind = 1; + return MATCH_YES; + } + return MATCH_NO; +} + + /* Matches a declaration-type-spec (F03:R502). If successful, sets the ts structure to the matched specification. This is necessary for FUNCTION and IMPLICIT statements. @@ -4012,22 +4044,10 @@ gfc_match_decl_type_spec (gfc_typespec *ts, int implicit_flag) /* Clear the current binding label, in case one is given. */ curr_binding_label = NULL; - if (gfc_match (" byte") == MATCH_YES) - { - if (!gfc_notify_std (GFC_STD_GNU, "BYTE type at %C")) - return MATCH_ERROR; - - if (gfc_validate_kind (BT_INTEGER, 1, true) < 0) - { - gfc_error ("BYTE type used at %C " - "is not available on the target machine"); - return MATCH_ERROR; - } - - ts->type = BT_INTEGER; - ts->kind = 1; - return MATCH_YES; - } + /* Match BYTE type-spec. */ + m = match_byte_typespec (ts); + if (m != MATCH_NO) + return m; m = gfc_match (" type ("); matched_type = (m == MATCH_YES); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index e7dec2e..8b03bd9 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,10 @@ 2019-11-01 Steven G. Kargl <kargl@gcc.gnu.org> + * gfortran.dg/byte_3.f: New test. + * gfortran.dg/byte_4.f90: Ditto. + +2019-11-01 Steven G. Kargl <kargl@gcc.gnu.org> + PR fortran/90988 * gfortran.dg/pr90988_4.f: New test. diff --git a/gcc/testsuite/gfortran.dg/byte_3.f b/gcc/testsuite/gfortran.dg/byte_3.f new file mode 100644 index 0000000..35ee828 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/byte_3.f @@ -0,0 +1,6 @@ +c { dg-do run } +c { dg-options "-std=legacy" } + bytea + a = 1 + if (a /= 1 .and. kind(a) /= a) stop 1 + end diff --git a/gcc/testsuite/gfortran.dg/byte_4.f90 b/gcc/testsuite/gfortran.dg/byte_4.f90 new file mode 100644 index 0000000..06873e5 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/byte_4.f90 @@ -0,0 +1,10 @@ +! { dg-do compile } +! { dg-options "-w" } + bytea ! { dg-error "Unclassifiable statement" } + byte b + byte :: d + a = 1 + b = 1 + d = 1 + print *, a, b * d + end |