From 6caec7d9ec37e60e718a12934c85bac9c12757ac Mon Sep 17 00:00:00 2001 From: Steve Kargl <kargl@gcc.gnu.org> Date: Mon, 12 Feb 2024 20:41:02 -0800 Subject: [PATCH] Fortran: Set the length of an allocatable character PR fortran/113883 gcc/fortran/ChangeLog: * trans-array.cc (gfc_trans_deferred_array): Set length to zero, avoiding extraneous diagnostics. gcc/testsuite/ChangeLog: * gfortran.dg/allocatable_length.f90: New test. --- gcc/fortran/trans-array.cc | 3 +++ gcc/testsuite/gfortran.dg/allocatable_length.f90 | 9 +++++++++ 2 files changed, 12 insertions(+) create mode 100644 gcc/testsuite/gfortran.dg/allocatable_length.f90 diff --git a/gcc/fortran/trans-array.cc b/gcc/fortran/trans-array.cc index 1e0d698a9497..2181990aa04a 100644 --- a/gcc/fortran/trans-array.cc +++ b/gcc/fortran/trans-array.cc @@ -11531,6 +11531,9 @@ gfc_trans_deferred_array (gfc_symbol * sym, gfc_wrapped_block * block) if (sym->ts.type == BT_CHARACTER && !INTEGER_CST_P (sym->ts.u.cl->backend_decl)) { + if (sym->ts.deferred && !sym->ts.u.cl->length) + gfc_add_modify (&init, sym->ts.u.cl->backend_decl, + build_zero_cst (TREE_TYPE (sym->ts.u.cl->backend_decl))); gfc_conv_string_length (sym->ts.u.cl, NULL, &init); gfc_trans_vla_type_sizes (sym, &init); diff --git a/gcc/testsuite/gfortran.dg/allocatable_length.f90 b/gcc/testsuite/gfortran.dg/allocatable_length.f90 new file mode 100644 index 000000000000..e8b638fac880 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/allocatable_length.f90 @@ -0,0 +1,9 @@ +! { dg-do compile } +! { dg-options "-Werror -Wall" } +module foo + contains + subroutine bar + character(len=:), allocatable :: s(:) + call bah(s) + end subroutine bar +end module foo -- GitLab