https://gcc.gnu.org/g:708eb59b45197553bcfcd8b178fda6716421614e

commit 708eb59b45197553bcfcd8b178fda6716421614e
Author: Mikael Morin <mik...@gcc.gnu.org>
Date:   Mon May 5 17:03:44 2025 +0200

    Correction régression guality/arg1

Diff:
---
 gcc/fortran/trans-decl.cc  |  9 +++++++--
 gcc/fortran/trans-types.cc | 17 ++++++++++++++++-
 2 files changed, 23 insertions(+), 3 deletions(-)

diff --git a/gcc/fortran/trans-decl.cc b/gcc/fortran/trans-decl.cc
index 99c53fab755a..92a0ccdb3588 100644
--- a/gcc/fortran/trans-decl.cc
+++ b/gcc/fortran/trans-decl.cc
@@ -1264,10 +1264,15 @@ gfc_build_qualified_array (tree decl, gfc_symbol * sym)
     {
       tree size, range;
 
+      tree lower = TYPE_MIN_VALUE (TYPE_DOMAIN (type));
+      if (lower == NULL_TREE)
+       lower = gfc_index_zero_node;
+
       size = fold_build2_loc (input_location, MINUS_EXPR, gfc_array_index_type,
                              GFC_TYPE_ARRAY_SIZE (type), gfc_index_one_node);
-      range = build_range_type (gfc_array_index_type, gfc_index_zero_node,
-                               size);
+      size = fold_build2_loc (input_location, PLUS_EXPR, gfc_array_index_type,
+                             size, lower);
+      range = build_range_type (gfc_array_index_type, lower, size);
       TYPE_DOMAIN (type) = range;
       layout_type (type);
     }
diff --git a/gcc/fortran/trans-types.cc b/gcc/fortran/trans-types.cc
index dd8c306b3b32..9568d8f821ab 100644
--- a/gcc/fortran/trans-types.cc
+++ b/gcc/fortran/trans-types.cc
@@ -1860,6 +1860,7 @@ gfc_get_nodesc_array_type (tree etype, gfc_array_spec * 
as, gfc_packed packed,
   mpz_t stride;
   mpz_t spc;
   mpz_t delta;
+  mpz_t *lbound0 = nullptr;
   gfc_expr *expr;
 
   mpz_init_set_ui (offset, 0);
@@ -1889,6 +1890,8 @@ gfc_get_nodesc_array_type (tree etype, gfc_array_spec * 
as, gfc_packed packed,
       expr = as->lower[n];
       if (expr && expr->expr_type == EXPR_CONSTANT)
         {
+         if (n == 0)
+           lbound0 = &expr->value.integer;
           tmp = gfc_conv_mpz_to_tree (expr->value.integer,
                                      gfc_index_integer_kind);
         }
@@ -2004,13 +2007,25 @@ gfc_get_nodesc_array_type (tree etype, gfc_array_spec * 
as, gfc_packed packed,
          mpz_t size;
          mpz_init (size);
          mpz_sub_ui (size, stride, 1);
+         if (as->rank == 1 && lbound0)
+           mpz_add (size, size, *lbound0);
+         else if (as->rank == 1 && as->lower[0] == nullptr)
+           mpz_add_ui (size, size, 1);
          max_idx = gfc_conv_mpz_to_tree (size, gfc_index_integer_kind);
        }
       else
        max_idx = NULL_TREE;
 
+      tree lower;
+      if (as->rank == 1 && lbound0)
+       lower = gfc_conv_mpz_to_tree (*lbound0, gfc_index_integer_kind);
+      else if (as->rank == 1 && as && as->lower[0] == nullptr)
+       lower = gfc_index_one_node;
+      else
+       lower = gfc_index_zero_node;
+
       TYPE_DOMAIN (type) = build_range_type (gfc_array_index_type,
-                                            gfc_index_zero_node, max_idx);
+                                            lower, max_idx);
       TREE_TYPE (type) = etype;
     }

Reply via email to