https://gcc.gnu.org/g:b32d67e972d5b09e2e497e25de3180566d42f8f9
commit b32d67e972d5b09e2e497e25de3180566d42f8f9 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 a3c72acbdeee..c2a64cff3668 100644 --- a/gcc/fortran/trans-decl.cc +++ b/gcc/fortran/trans-decl.cc @@ -1260,7 +1260,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 d67a64b363ab..dd8c306b3b32 100644 --- a/gcc/fortran/trans-types.cc +++ b/gcc/fortran/trans-types.cc @@ -2019,6 +2019,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 fb728247f058..eec98b4d04f0 100644 --- a/gcc/fortran/trans.h +++ b/gcc/fortran/trans.h @@ -1105,6 +1105,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) \