diff options
Diffstat (limited to 'gcc/fortran/trans-array.c')
-rw-r--r-- | gcc/fortran/trans-array.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/gcc/fortran/trans-array.c b/gcc/fortran/trans-array.c index 47f4e0c..71db46d 100644 --- a/gcc/fortran/trans-array.c +++ b/gcc/fortran/trans-array.c @@ -1263,10 +1263,11 @@ gfc_trans_array_constructor_value (stmtblock_t * pblock, tree type, gfc_init_se (&se, NULL); gfc_conv_constant (&se, p->expr); + if (c->expr->ts.type != BT_CHARACTER) + se.expr = fold_convert (type, se.expr); /* For constant character array constructors we build an array of pointers. */ - if (p->expr->ts.type == BT_CHARACTER - && POINTER_TYPE_P (type)) + else if (POINTER_TYPE_P (type)) se.expr = gfc_build_addr_expr (gfc_get_pchar_type (p->expr->ts.kind), se.expr); @@ -1620,7 +1621,9 @@ gfc_build_constant_array_constructor (gfc_expr * expr, tree type) { gfc_init_se (&se, NULL); gfc_conv_constant (&se, c->expr); - if (c->expr->ts.type == BT_CHARACTER && POINTER_TYPE_P (type)) + if (c->expr->ts.type != BT_CHARACTER) + se.expr = fold_convert (type, se.expr); + else if (POINTER_TYPE_P (type)) se.expr = gfc_build_addr_expr (gfc_get_pchar_type (c->expr->ts.kind), se.expr); list = tree_cons (build_int_cst (gfc_array_index_type, nelem), |