From: Steve Kargl Date: Tue, 13 Feb 2024 04:41:02 +0000 (-0800) Subject: Fortran: Set the length of an allocatable character X-Git-Tag: basepoints/gcc-15~1192 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6caec7d9ec37e60e718a12934c85bac9c12757ac;p=thirdparty%2Fgcc.git 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. --- 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