aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndre Vehreschild <vehre@gcc.gnu.org>2017-02-19 19:18:33 +0100
committerAndre Vehreschild <vehre@gcc.gnu.org>2017-02-19 19:18:33 +0100
commite0396d770f84acfbbbb2397cd2bc53aa57996550 (patch)
treea39cc5e3a1fb427f0d6a210b901b623875d202de
parentf46e2bc9236de506841dca92414b217a1d90bbea (diff)
downloadgcc-e0396d770f84acfbbbb2397cd2bc53aa57996550.zip
gcc-e0396d770f84acfbbbb2397cd2bc53aa57996550.tar.gz
gcc-e0396d770f84acfbbbb2397cd2bc53aa57996550.tar.bz2
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
-rw-r--r--gcc/fortran/ChangeLog8
-rw-r--r--gcc/fortran/trans-array.c9
-rw-r--r--gcc/fortran/trans-expr.c6
3 files changed, 18 insertions, 5 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index d9c269d..f7a89cc 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -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.
diff --git a/gcc/fortran/trans-array.c b/gcc/fortran/trans-array.c
index d0dfc26..47e8c09 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 87bf069..cc41fe3 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);