From 29eb509ccb9acd5aac604e6796e376bc09c4626d Mon Sep 17 00:00:00 2001 From: Andre Vehreschild Date: Fri, 15 Jul 2016 11:28:47 +0200 Subject: re PR fortran/71807 (Internal compiler error with NULL() reference in structure constructor) gcc/fortran/ChangeLog: 2016-07-15 Andre Vehreschild PR fortran/71807 * trans-expr.c (gfc_trans_subcomponent_assign): Special casing when allocatable component is set to null() in initializer. gcc/testsuite/ChangeLog: 2016-07-15 Andre Vehreschild PR fortran/71807 * gfortran.dg/null_9.f90: New test. From-SVN: r238368 --- gcc/fortran/ChangeLog | 6 ++++++ gcc/fortran/trans-expr.c | 6 ++++++ 2 files changed, 12 insertions(+) (limited to 'gcc/fortran') diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 594b19e..22ca4f4 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2016-07-15 Andre Vehreschild + + PR fortran/71807 + * trans-expr.c (gfc_trans_subcomponent_assign): Special casing + when allocatable component is set to null() in initializer. + 2016-07-14 Steven G. Kargl PR fortran/29819 diff --git a/gcc/fortran/trans-expr.c b/gcc/fortran/trans-expr.c index 4321850..e3559f4 100644 --- a/gcc/fortran/trans-expr.c +++ b/gcc/fortran/trans-expr.c @@ -7200,6 +7200,12 @@ gfc_trans_subcomponent_assign (tree dest, gfc_component * cm, gfc_expr * expr, tmp = gfc_trans_alloc_subarray_assign (tmp, cm, expr); gfc_add_expr_to_block (&block, tmp); } + else if (init && cm->attr.allocatable && expr->expr_type == EXPR_NULL) + { + /* NULL initialization for allocatable components. */ + gfc_add_modify (&block, dest, fold_convert (TREE_TYPE (dest), + null_pointer_node)); + } else if (init && (cm->attr.allocatable || (cm->ts.type == BT_CLASS && CLASS_DATA (cm)->attr.allocatable && expr->ts.type != BT_CLASS))) -- cgit v1.1