https://gcc.gnu.org/g:373a725756d2f5674909476d964d64d87fdc5b3b
commit 373a725756d2f5674909476d964d64d87fdc5b3b Author: Mikael Morin <mik...@gcc.gnu.org> Date: Fri Apr 25 19:08:46 2025 +0200 Correction régression pr59586.f Diff: --- gcc/fortran/trans-decl.cc | 2 +- gcc/fortran/trans-types.cc | 3 +++ gcc/fortran/trans.h | 1 + 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/gcc/fortran/trans-decl.cc b/gcc/fortran/trans-decl.cc index 6f2567d943ec..ae69ca5ff18c 100644 --- a/gcc/fortran/trans-decl.cc +++ b/gcc/fortran/trans-decl.cc @@ -1262,7 +1262,7 @@ gfc_build_qualified_array (tree decl, gfc_symbol * sym) if (! COMPLETE_TYPE_P (type) && GFC_TYPE_ARRAY_SIZE (type) - && GFC_DECL_PACKED_ARRAY (decl)) + && GFC_TYPE_PACKED_ARRAY (type)) { tree size, range; diff --git a/gcc/fortran/trans-types.cc b/gcc/fortran/trans-types.cc index 52f74724735c..c33d18a20366 100644 --- a/gcc/fortran/trans-types.cc +++ b/gcc/fortran/trans-types.cc @@ -2022,6 +2022,9 @@ gfc_get_nodesc_array_type (tree etype, gfc_array_spec * as, gfc_packed packed, if (packed != PACKED_NO) GFC_TYPE_ARRAY_ELEM_LEN (type) = TYPE_SIZE_UNIT (etype); + if (packed == PACKED_FULL || packed == PACKED_STATIC) + GFC_TYPE_PACKED_ARRAY (type) = 1; + GFC_TYPE_ARRAY_RANK (type) = as->rank; GFC_TYPE_ARRAY_CORANK (type) = as->corank; GFC_TYPE_ARRAY_DTYPE (type) = NULL_TREE; diff --git a/gcc/fortran/trans.h b/gcc/fortran/trans.h index 8673fd8cb423..42060ede54bd 100644 --- a/gcc/fortran/trans.h +++ b/gcc/fortran/trans.h @@ -1108,6 +1108,7 @@ struct GTY(()) lang_decl { #define GFC_ARRAY_TYPE_P(node) TYPE_LANG_FLAG_2(node) /* Fortran CLASS type. */ #define GFC_CLASS_TYPE_P(node) TYPE_LANG_FLAG_4(node) +#define GFC_TYPE_PACKED_ARRAY(node) TYPE_LANG_FLAG_5(node) /* The GFC_TYPE_ARRAY_* members are present in both descriptor and descriptorless array types. */ #define GFC_TYPE_ARRAY_LBOUND(node, dim) \