From e0396d770f84acfbbbb2397cd2bc53aa57996550 Mon Sep 17 00:00:00 2001 From: Andre Vehreschild Date: Sun, 19 Feb 2017 19:18:33 +0100 Subject: [PATCH] re PR fortran/79335 (Conditional jump or move depends on uninitialised in value get_scalar_to_descriptor_type(tree_node*, symbol_attribute) (trans-expr.c:53)) gcc/fortran/ChangeLog: 2017-02-19 Andre Vehreschild PR fortran/79335 * trans-array.c (duplicate_allocatable_coarray): Ensure attributes passed are properly initialized. (structure_alloc_comps): Same. * trans-expr.c (gfc_trans_structure_assign): Same. From-SVN: r245579 --- gcc/fortran/ChangeLog | 8 ++++++++ gcc/fortran/trans-array.c | 9 ++++++--- gcc/fortran/trans-expr.c | 6 ++++-- 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index d9c269da6cf..f7a89cca0ec 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,11 @@ +2017-02-19 Andre Vehreschild + + PR fortran/79335 + * trans-array.c (duplicate_allocatable_coarray): Ensure attributes + passed are properly initialized. + (structure_alloc_comps): Same. + * trans-expr.c (gfc_trans_structure_assign): Same. + 2017-02-13 Jakub Jelinek * trans-expr.c (gfc_conv_substring): Add missing space in diagnostics. diff --git a/gcc/fortran/trans-array.c b/gcc/fortran/trans-array.c index d0dfc264f87..47e8c091a9b 100644 --- a/gcc/fortran/trans-array.c +++ b/gcc/fortran/trans-array.c @@ -7950,6 +7950,8 @@ duplicate_allocatable_coarray (tree dest, tree dest_tok, tree src, tree dummy_desc; gfc_init_se (&se, NULL); + gfc_clear_attr (&attr); + attr.allocatable = 1; dummy_desc = gfc_conv_scalar_to_descriptor (&se, dest, attr); gfc_add_block_to_block (&globalblock, &se.pre); size = TYPE_SIZE_UNIT (TREE_TYPE (type)); @@ -8518,14 +8520,15 @@ structure_alloc_comps (gfc_symbol * der_type, tree decl, else { gfc_se se; - symbol_attribute attr; gfc_init_se (&se, NULL); - gfc_clear_attr (&attr); token = fold_build3_loc (input_location, COMPONENT_REF, pvoid_type_node, decl, c->caf_token, NULL_TREE); - comp = gfc_conv_scalar_to_descriptor (&se, comp, attr); + comp = gfc_conv_scalar_to_descriptor (&se, comp, + c->ts.type == BT_CLASS + ? CLASS_DATA (c)->attr + : c->attr); gfc_add_block_to_block (&fnblock, &se.pre); } diff --git a/gcc/fortran/trans-expr.c b/gcc/fortran/trans-expr.c index 87bf069ffb6..cc41fe3fe6d 100644 --- a/gcc/fortran/trans-expr.c +++ b/gcc/fortran/trans-expr.c @@ -7516,7 +7516,6 @@ gfc_trans_structure_assign (tree dest, gfc_expr * expr, bool init, bool coarray) && (!c->expr || c->expr->expr_type == EXPR_NULL)) { tree token, desc, size; - symbol_attribute attr; bool is_array = cm->ts.type == BT_CLASS ? CLASS_DATA (cm)->attr.dimension : cm->attr.dimension; @@ -7549,7 +7548,10 @@ gfc_trans_structure_assign (tree dest, gfc_expr * expr, bool init, bool coarray) } else { - desc = gfc_conv_scalar_to_descriptor (&se, field, attr); + desc = gfc_conv_scalar_to_descriptor (&se, field, + cm->ts.type == BT_CLASS + ? CLASS_DATA (cm)->attr + : cm->attr); size = TYPE_SIZE_UNIT (TREE_TYPE (field)); } gfc_add_block_to_block (&block, &se.pre); -- 2.30.2