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  <vehre@gcc.gnu.org>

	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
This commit is contained in:
Andre Vehreschild 2017-02-19 19:18:33 +01:00
parent f46e2bc923
commit e0396d770f
3 changed files with 18 additions and 5 deletions

View File

@ -1,3 +1,11 @@
2017-02-19 Andre Vehreschild <vehre@gcc.gnu.org>
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 <jakub@redhat.com>
* trans-expr.c (gfc_conv_substring): Add missing space in diagnostics.

View File

@ -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);
}

View File

@ -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);