[gcc(refs/users/mikael/heads/save_class_999_v02)] fortran: Statically initialize length of SAVEd character arrays

Mikael Morin mikael@gcc.gnu.org
Wed Jun 18 20:24:53 GMT 2025


https://gcc.gnu.org/g:f7118d596a7989e01cff6a9d91c87f32a8ce55d2

commit f7118d596a7989e01cff6a9d91c87f32a8ce55d2
Author: Mikael Morin <mikael@gcc.gnu.org>
Date:   Wed Jun 18 19:50:32 2025 +0200

    fortran: Statically initialize length of SAVEd character arrays
    
    gcc/fortran/ChangeLog:
    
            * trans-array.cc (gfc_trans_deferred_array): Statically
            initialize deferred length variable for SAVEd character arrays.

Diff:
---
 gcc/fortran/trans-array.cc | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/gcc/fortran/trans-array.cc b/gcc/fortran/trans-array.cc
index 960613167f72..3d274439895d 100644
--- a/gcc/fortran/trans-array.cc
+++ b/gcc/fortran/trans-array.cc
@@ -12067,8 +12067,16 @@ gfc_trans_deferred_array (gfc_symbol * sym, gfc_wrapped_block * block)
       && !INTEGER_CST_P (sym->ts.u.cl->backend_decl))
     {
       if (sym->ts.deferred && !sym->ts.u.cl->length && !sym->attr.dummy)
-	gfc_add_modify (&init, sym->ts.u.cl->backend_decl,
-			build_zero_cst (TREE_TYPE (sym->ts.u.cl->backend_decl)));
+	{
+	  tree len_expr = sym->ts.u.cl->backend_decl;
+	  tree init_val = build_zero_cst (TREE_TYPE (len_expr));
+	  if (VAR_P (len_expr)
+	      && sym->attr.save
+	      && !DECL_INITIAL (len_expr))
+	    DECL_INITIAL (len_expr) = init_val;
+	  else
+	    gfc_add_modify (&init, len_expr, init_val);
+	}
       gfc_conv_string_length (sym->ts.u.cl, NULL, &init);
       gfc_trans_vla_type_sizes (sym, &init);


More information about the Gcc-cvs mailing list