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) \

Reply via email to