https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92208

--- Comment #8 from Tobias Burnus <burnus at gcc dot gnu.org> ---
(In reply to Christophe Lyon from comment #7)
> On gcc-9, the patch introduced regressions, seen on arm and aarch64:

On trunk, the following was needed (PR92277, r277661) – but I it did
not trigger on the branch with x86_64.  Seemingly, for arm and aarch64
it does trigger.

Can you try the following patch? (Re-diffed for GCC 9):

--- ../../fortran/trans-expr.c  (revision 277818)
+++ ../../fortran/trans-expr.c  (working copy)
@@ -5029,2 +5029,6 @@ gfc_conv_gfc_desc_to_cfi_desc

+      bool is_artificial = (INDIRECT_REF_P (parmse->expr)
+                           ? DECL_ARTIFICIAL (TREE_OPERAND (parmse->expr, 0))
+                           : DECL_ARTIFICIAL (parmse->expr));
+
       /* Unallocated allocatable arrays and unassociated pointer arrays
@@ -5047,3 +5051,3 @@ gfc_conv_gfc_desc_to_cfi_desc

-      if (type && DECL_ARTIFICIAL (parmse->expr)
+      if (type && is_artificial
          && type != gfc_get_element_type (TREE_TYPE (parmse->expr)))
@@ -5059,4 +5063,3 @@ gfc_conv_gfc_desc_to_cfi_desc
        }
-      else if (type == NULL_TREE
-              || (!is_subref_array (e) && !DECL_ARTIFICIAL (parmse->expr)))
+      else if (type == NULL_TREE || (!is_subref_array (e) && !is_artificial))
        {

Reply via email to