https://gcc.gnu.org/g:e25b835425e292e84ccb9bcfa67bde9e14ad926d
commit e25b835425e292e84ccb9bcfa67bde9e14ad926d 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 80c00d132b2a..9b91cc29d395 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 a7054571e24f..dafc6d33a12d 100644 --- a/gcc/fortran/trans.h +++ b/gcc/fortran/trans.h @@ -1103,6 +1103,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) \