aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/trans-expr.c
diff options
context:
space:
mode:
authorPaul Thomas <pault@gcc.gnu.org>2018-09-12 18:33:13 +0000
committerPaul Thomas <pault@gcc.gnu.org>2018-09-12 18:33:13 +0000
commit3b582f1f3b7e19f050a219117e0d1af0e9a76af4 (patch)
treec9348caadcc91e4c780f6e543070c5a33405dc15 /gcc/fortran/trans-expr.c
parentc0cbe5260fab673f7cd755df2226422b88b28837 (diff)
downloadgcc-3b582f1f3b7e19f050a219117e0d1af0e9a76af4.zip
gcc-3b582f1f3b7e19f050a219117e0d1af0e9a76af4.tar.gz
gcc-3b582f1f3b7e19f050a219117e0d1af0e9a76af4.tar.bz2
re PR fortran/87284 (Allocation of class arrays with mold results in "conditional jump or move depends on uninitialised value")
2018-09-12 Paul Thomas <pault@gcc.gnu.org> PR fortran/87284 * trans-expr.c (gfc_trans_class_init_assign): Access to to array elements of the dynamic type requires that the array reference be added to the class expression and not the _data component, unlike scalar expressions. 2018-09-12 Paul Thomas <pault@gcc.gnu.org> PR fortran/87284 * gfortran.dg/allocate_with_mold_2.f90: New test. From-SVN: r264249
Diffstat (limited to 'gcc/fortran/trans-expr.c')
-rw-r--r--gcc/fortran/trans-expr.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/gcc/fortran/trans-expr.c b/gcc/fortran/trans-expr.c
index 56ce98c..2596b8e 100644
--- a/gcc/fortran/trans-expr.c
+++ b/gcc/fortran/trans-expr.c
@@ -1505,7 +1505,6 @@ gfc_trans_class_init_assign (gfc_code *code)
gfc_start_block (&block);
lhs = gfc_copy_expr (code->expr1);
- gfc_add_data_component (lhs);
rhs = gfc_copy_expr (code->expr1);
gfc_add_vptr_component (rhs);
@@ -1523,11 +1522,15 @@ gfc_trans_class_init_assign (gfc_code *code)
{
gfc_array_spec *tmparr = gfc_get_array_spec ();
*tmparr = *CLASS_DATA (code->expr1)->as;
+ /* Adding the array ref to the class expression results in correct
+ indexing to the dynamic type. */
gfc_add_full_array_ref (lhs, tmparr);
tmp = gfc_trans_class_array_init_assign (rhs, lhs, code->expr1);
}
else
{
+ /* Scalar initialization needs the _data component. */
+ gfc_add_data_component (lhs);
sz = gfc_copy_expr (code->expr1);
gfc_add_vptr_component (sz);
gfc_add_size_component (sz);