diff options
author | Harald Anlauf <anlauf@gmx.de> | 2025-02-07 21:21:10 +0100 |
---|---|---|
committer | Harald Anlauf <anlauf@gmx.de> | 2025-02-07 21:42:21 +0100 |
commit | 818c36a85e3faec5442eb26799bfa3bba7764b36 (patch) | |
tree | b41edb5da8c30336d0ca8b000326db5ce5b672a3 /gcc/fortran/trans-expr.cc | |
parent | c9b8a8fc55168ba9ec5432fc7b86621074e1b887 (diff) | |
download | gcc-818c36a85e3faec5442eb26799bfa3bba7764b36.zip gcc-818c36a85e3faec5442eb26799bfa3bba7764b36.tar.gz gcc-818c36a85e3faec5442eb26799bfa3bba7764b36.tar.bz2 |
Fortran: fix initialization of allocatable non-deferred character [PR59252]
PR fortran/59252
gcc/fortran/ChangeLog:
* trans-expr.cc (gfc_trans_subcomponent_assign): Initialize
allocatable non-deferred character with NULL properly.
gcc/testsuite/ChangeLog:
* gfortran.dg/allocatable_char_1.f90: New test.
Diffstat (limited to 'gcc/fortran/trans-expr.cc')
-rw-r--r-- | gcc/fortran/trans-expr.cc | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/gcc/fortran/trans-expr.cc b/gcc/fortran/trans-expr.cc index f923aeb..1329efc 100644 --- a/gcc/fortran/trans-expr.cc +++ b/gcc/fortran/trans-expr.cc @@ -9836,9 +9836,13 @@ gfc_trans_subcomponent_assign (tree dest, gfc_component * cm, 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) + else if (cm->attr.allocatable && expr->expr_type == EXPR_NULL + && (init + || (cm->ts.type == BT_CHARACTER + && !(cm->ts.deferred || cm->attr.pdt_string)))) { - /* NULL initialization for allocatable components. */ + /* NULL initialization for allocatable components. + Deferred-length character is dealt with later. */ gfc_add_modify (&block, dest, fold_convert (TREE_TYPE (dest), null_pointer_node)); } |