diff options
author | jvdelisle <jvdelisle@138bc75d-0d04-0410-961f-82ee72b054a4> | 2018-02-20 04:05:38 +0000 |
---|---|---|
committer | jvdelisle <jvdelisle@138bc75d-0d04-0410-961f-82ee72b054a4> | 2018-02-20 04:05:38 +0000 |
commit | 04f55d111695902e825d5d41a896379d95135ec8 (patch) | |
tree | 2bdaecd26b171debe804816f07a92831838739a4 | |
parent | dbfcc2bdb0470b0ac7eb60227e0b06d1b1032fe2 (diff) | |
download | gcc-04f55d111695902e825d5d41a896379d95135ec8.tar.gz |
2018-02-19 Jerry DeLisle <jvdelisle@gcc.gnu.org>
Backport from trunk
PR fortran/82007
* resolve.c (resolve_transfer): Delete code looking for 'DT'
format specifiers in format strings. Set formatted to true if a
format string or format label is present.
* trans-io.c (get_dtio_proc): Likewise. (transfer_expr): Fix
whitespace.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@257837 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/fortran/ChangeLog | 10 | ||||
-rw-r--r-- | gcc/fortran/resolve.c | 16 | ||||
-rw-r--r-- | gcc/fortran/trans-io.c | 25 |
3 files changed, 17 insertions, 34 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 646021922db..a4636ebedd1 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,13 @@ +2018-02-19 Jerry DeLisle <jvdelisle@gcc.gnu.org> + + Backport from trunk + PR fortran/82007 + * resolve.c (resolve_transfer): Delete code looking for 'DT' + format specifiers in format strings. Set formatted to true if a + format string or format label is present. + * trans-io.c (get_dtio_proc): Likewise. (transfer_expr): Fix + whitespace. + 2018-02-17 Thomas Koenig <tkoenig@gcc.gnu.org> Backport from trunk diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index 6b93a5d38fa..b03724cfd2f 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -8999,19 +8999,9 @@ resolve_transfer (gfc_code *code) else derived = ts->u.derived->components->ts.u.derived; - if (dt->format_expr) - { - char *fmt; - fmt = gfc_widechar_to_char (dt->format_expr->value.character.string, - -1); - if (strtok (fmt, "DT") != NULL) - formatted = true; - } - else if (dt->format_label == &format_asterisk) - { - /* List directed io must call the formatted DTIO procedure. */ - formatted = true; - } + /* Determine when to use the formatted DTIO procedure. */ + if (dt && (dt->format_expr || dt->format_label)) + formatted = true; write = dt->dt_io_kind->value.iokind == M_WRITE || dt->dt_io_kind->value.iokind == M_PRINT; diff --git a/gcc/fortran/trans-io.c b/gcc/fortran/trans-io.c index af8ee02494d..dbf3a581c81 100644 --- a/gcc/fortran/trans-io.c +++ b/gcc/fortran/trans-io.c @@ -2214,25 +2214,9 @@ get_dtio_proc (gfc_typespec * ts, gfc_code * code, gfc_symbol **dtio_sub) bool formatted = false; gfc_dt *dt = code->ext.dt; - if (dt) - { - char *fmt = NULL; - - if (dt->format_label == &format_asterisk) - { - /* List directed io must call the formatted DTIO procedure. */ - formatted = true; - } - else if (dt->format_expr) - fmt = gfc_widechar_to_char (dt->format_expr->value.character.string, - -1); - else if (dt->format_label) - fmt = gfc_widechar_to_char (dt->format_label->format->value.character.string, - -1); - if (fmt && strtok (fmt, "DT") != NULL) - formatted = true; - - } + /* Determine when to use the formatted DTIO procedure. */ + if (dt && (dt->format_expr || dt->format_label)) + formatted = true; if (ts->type == BT_CLASS) derived = ts->u.derived->components->ts.u.derived; @@ -2442,8 +2426,7 @@ transfer_expr (gfc_se * se, gfc_typespec * ts, tree addr_expr, { /* Recurse into the elements of the derived type. */ expr = gfc_evaluate_now (addr_expr, &se->pre); - expr = build_fold_indirect_ref_loc (input_location, - expr); + expr = build_fold_indirect_ref_loc (input_location, expr); /* Make sure that the derived type has been built. An external function, if only referenced in an io statement, requires this |