From: Tobias Burnus Date: Tue, 5 Nov 2019 14:28:07 +0000 (+0000) Subject: PR 92208 + PR 92277 – GCC 9 follow-up fix X-Git-Tag: releases/gcc-9.3.0~430 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=42b414a54bc0e718352b53bfcb6584229f57a4b6;p=thirdparty%2Fgcc.git PR 92208 + PR 92277 – GCC 9 follow-up fix PR fortran/92208 Backport from mainline 2019-10-31 Tobias Burnus PR fortran/92277 * trans-expr.c (gfc_conv_gfc_desc_to_cfi_desc): Fix DECL_ARTIFICIAL checking. From-SVN: r277840 --- diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index e8ab85fc4248..a93696917221 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,13 @@ +2019-11-05 Tobias Burnus + + PR fortran/92208 + Backport from mainline + 2019-10-31 Tobias Burnus + + PR fortran/92277 + * trans-expr.c (gfc_conv_gfc_desc_to_cfi_desc): Fix DECL_ARTIFICIAL + checking. + 2019-11-04 Tobias Burnus Backport from mainline diff --git a/gcc/fortran/trans-expr.c b/gcc/fortran/trans-expr.c index 245e656a1f81..52a8cdd6902e 100644 --- a/gcc/fortran/trans-expr.c +++ b/gcc/fortran/trans-expr.c @@ -5027,6 +5027,10 @@ gfc_conv_gfc_desc_to_cfi_desc (gfc_se *parmse, gfc_expr *e, gfc_symbol *fsym) parmse->expr = build_fold_indirect_ref_loc (input_location, parmse->expr); + 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 need their dtype setting if they are argument associated with assumed rank dummies. */ @@ -5045,7 +5049,7 @@ gfc_conv_gfc_desc_to_cfi_desc (gfc_se *parmse, gfc_expr *e, gfc_symbol *fsym) type = e->ts.type != BT_ASSUMED ? gfc_typenode_for_spec (&e->ts) : NULL_TREE; - if (type && DECL_ARTIFICIAL (parmse->expr) + if (type && is_artificial && type != gfc_get_element_type (TREE_TYPE (parmse->expr))) { /* Obtain the offset to the data. */ @@ -5057,8 +5061,7 @@ gfc_conv_gfc_desc_to_cfi_desc (gfc_se *parmse, gfc_expr *e, gfc_symbol *fsym) gfc_conv_descriptor_dtype (parmse->expr), gfc_get_dtype_rank_type (e->rank, type)); } - else if (type == NULL_TREE - || (!is_subref_array (e) && !DECL_ARTIFICIAL (parmse->expr))) + else if (type == NULL_TREE || (!is_subref_array (e) && !is_artificial)) { /* Make sure that the span is set for expressions where it might not have been done already. */