diff options
Diffstat (limited to 'gcc/fortran/trans-io.c')
-rw-r--r-- | gcc/fortran/trans-io.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/gcc/fortran/trans-io.c b/gcc/fortran/trans-io.c index b5ef13f5e16..416932173de 100644 --- a/gcc/fortran/trans-io.c +++ b/gcc/fortran/trans-io.c @@ -397,7 +397,6 @@ set_string (stmtblock_t * block, stmtblock_t * postblock, tree var, tree len; gfc_init_se (&se, NULL); - gfc_conv_expr (&se, e); io = build3 (COMPONENT_REF, TREE_TYPE (var), ioparm_var, var, NULL_TREE); len = build3 (COMPONENT_REF, TREE_TYPE (var_len), ioparm_var, var_len, @@ -406,6 +405,7 @@ set_string (stmtblock_t * block, stmtblock_t * postblock, tree var, /* Integer variable assigned a format label. */ if (e->ts.type == BT_INTEGER && e->symtree->n.sym->attr.assign == 1) { + gfc_conv_label_variable (&se, e); msg = gfc_build_cstring_const ("Assigned label is not a format label"); tmp = GFC_DECL_STRING_LEN (se.expr); @@ -417,6 +417,7 @@ set_string (stmtblock_t * block, stmtblock_t * postblock, tree var, } else { + gfc_conv_expr (&se, e); gfc_conv_string_parameter (&se); gfc_add_modify_expr (&se.pre, io, fold_convert (TREE_TYPE (io), se.expr)); gfc_add_modify_expr (&se.pre, len, se.string_length); @@ -816,7 +817,7 @@ gfc_trans_inquire (gfc_code * code) static gfc_expr * -gfc_new_nml_name_expr (char * name) +gfc_new_nml_name_expr (const char * name) { gfc_expr * nml_name; nml_name = gfc_get_expr(); @@ -825,7 +826,8 @@ gfc_new_nml_name_expr (char * name) nml_name->ts.kind = gfc_default_character_kind; nml_name->ts.type = BT_CHARACTER; nml_name->value.character.length = strlen(name); - nml_name->value.character.string = name; + nml_name->value.character.string = gfc_getmem (strlen (name) + 1); + strcpy (nml_name->value.character.string, name); return nml_name; } |