summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjvdelisle <jvdelisle@138bc75d-0d04-0410-961f-82ee72b054a4>2018-02-20 04:05:38 +0000
committerjvdelisle <jvdelisle@138bc75d-0d04-0410-961f-82ee72b054a4>2018-02-20 04:05:38 +0000
commit04f55d111695902e825d5d41a896379d95135ec8 (patch)
tree2bdaecd26b171debe804816f07a92831838739a4
parentdbfcc2bdb0470b0ac7eb60227e0b06d1b1032fe2 (diff)
downloadgcc-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/ChangeLog10
-rw-r--r--gcc/fortran/resolve.c16
-rw-r--r--gcc/fortran/trans-io.c25
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