diff options
author | Steve Kargl <kargl@gcc.gnu.org> | 2024-02-12 20:41:02 -0800 |
---|---|---|
committer | Jerry DeLisle <jvdelisle@gcc.gnu.org> | 2024-02-12 20:49:49 -0800 |
commit | 6caec7d9ec37e60e718a12934c85bac9c12757ac (patch) | |
tree | ab90fc7e5c28928e22c99fd728929bd10d03da2d | |
parent | b753ef8f0c1d9cedd0ca688b68be10dc8f9c32bb (diff) | |
download | gcc-6caec7d9ec37e60e718a12934c85bac9c12757ac.zip gcc-6caec7d9ec37e60e718a12934c85bac9c12757ac.tar.gz gcc-6caec7d9ec37e60e718a12934c85bac9c12757ac.tar.bz2 |
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.
-rw-r--r-- | gcc/fortran/trans-array.cc | 3 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/allocatable_length.f90 | 9 |
2 files changed, 12 insertions, 0 deletions
diff --git a/gcc/fortran/trans-array.cc b/gcc/fortran/trans-array.cc index 1e0d698..2181990 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 0000000..e8b638f --- /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 |