aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/trans-io.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/fortran/trans-io.cc')
-rw-r--r--gcc/fortran/trans-io.cc7
1 files changed, 5 insertions, 2 deletions
diff --git a/gcc/fortran/trans-io.cc b/gcc/fortran/trans-io.cc
index 824f232..9360bdd 100644
--- a/gcc/fortran/trans-io.cc
+++ b/gcc/fortran/trans-io.cc
@@ -2499,7 +2499,8 @@ transfer_expr (gfc_se * se, gfc_typespec * ts, tree addr_expr,
for (c = ts->u.derived->components; c; c = c->next)
{
/* Ignore hidden string lengths. */
- if (c->name[0] == '_')
+ if (c->name[0] == '_'
+ || c->attr.pdt_kind || c->attr.pdt_len)
continue;
field = c->backend_decl;
@@ -2645,7 +2646,9 @@ gfc_trans_transfer (gfc_code * code)
&& ((expr->symtree->n.sym->ts.type == BT_DERIVED && expr->ts.deferred)
|| (expr->symtree->n.sym->assoc
&& expr->symtree->n.sym->assoc->variable)
- || gfc_expr_attr (expr).pointer))
+ || gfc_expr_attr (expr).pointer
+ || (expr->symtree->n.sym->attr.pointer
+ && gfc_expr_attr (expr).target)))
goto scalarize;
/* With array-bounds checking enabled, force scalarization in some