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 /gcc/fortran/decl.c | |
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
Diffstat (limited to 'gcc/fortran/decl.c')
-rw-r--r-- | gcc/fortran/decl.c | 52 |
1 files changed, 36 insertions, 16 deletions
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); |