mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-22 10:51:19 +08:00
re PR fortran/92775 (Incorrect expression in DW_AT_byte_stride on an array)
PR fortran/92775 * trans.h (struct lang_type, struct lang_decl): Remove span member. (GFC_DECL_SPAN, GFC_TYPE_ARRAY_SPAN): Remove macros. * trans-array.h (gfc_get_descriptor_offsets_for_info): Add another argument. * trans-array.c (gfc_get_descriptor_offsets_for_info): Add SPAN_OFF argument and initialize *SPAN_OFF to the offset of span field. * trans-types.c (gfc_get_array_descr_info): Adjust gfc_get_descriptor_offsets_for_info caller. Compute elem_size as base->span instead of TYPE_SIZE_UNIT (etype) constant. From-SVN: r279045
This commit is contained in:
parent
6e4d01d61f
commit
2297a38e0c
@ -1,5 +1,5 @@
|
||||
2019-12-06 Tobias Burnus <tobias@codesourcery.com>
|
||||
Kwok Cheung Yeung <kcy@codesourcery.com>
|
||||
Kwok Cheung Yeung <kcy@codesourcery.com>
|
||||
|
||||
* omp-low.c (lower_omp_target): For optional arguments, deref once
|
||||
more to obtain the type.
|
||||
|
@ -1,5 +1,18 @@
|
||||
2019-12-06 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR fortran/92775
|
||||
* trans.h (struct lang_type, struct lang_decl): Remove span member.
|
||||
(GFC_DECL_SPAN, GFC_TYPE_ARRAY_SPAN): Remove macros.
|
||||
* trans-array.h (gfc_get_descriptor_offsets_for_info): Add another
|
||||
argument.
|
||||
* trans-array.c (gfc_get_descriptor_offsets_for_info): Add SPAN_OFF
|
||||
argument and initialize *SPAN_OFF to the offset of span field.
|
||||
* trans-types.c (gfc_get_array_descr_info): Adjust
|
||||
gfc_get_descriptor_offsets_for_info caller. Compute elem_size
|
||||
as base->span instead of TYPE_SIZE_UNIT (etype) constant.
|
||||
|
||||
2019-12-06 Tobias Burnus <tobias@codesourcery.com>
|
||||
Kwok Cheung Yeung <kcy@codesourcery.com>
|
||||
Kwok Cheung Yeung <kcy@codesourcery.com>
|
||||
|
||||
* trans-openmp.c (gfc_build_conditional_assign,
|
||||
gfc_build_conditional_assign_expr): New static functions.
|
||||
|
@ -540,9 +540,10 @@ gfc_conv_shift_descriptor_lbound (stmtblock_t* block, tree desc,
|
||||
|
||||
void
|
||||
gfc_get_descriptor_offsets_for_info (const_tree desc_type, tree *data_off,
|
||||
tree *dtype_off, tree *dim_off,
|
||||
tree *dim_size, tree *stride_suboff,
|
||||
tree *lower_suboff, tree *upper_suboff)
|
||||
tree *dtype_off, tree *span_off,
|
||||
tree *dim_off, tree *dim_size,
|
||||
tree *stride_suboff, tree *lower_suboff,
|
||||
tree *upper_suboff)
|
||||
{
|
||||
tree field;
|
||||
tree type;
|
||||
@ -552,6 +553,8 @@ gfc_get_descriptor_offsets_for_info (const_tree desc_type, tree *data_off,
|
||||
*data_off = byte_position (field);
|
||||
field = gfc_advance_chain (TYPE_FIELDS (type), DTYPE_FIELD);
|
||||
*dtype_off = byte_position (field);
|
||||
field = gfc_advance_chain (TYPE_FIELDS (type), SPAN_FIELD);
|
||||
*span_off = byte_position (field);
|
||||
field = gfc_advance_chain (TYPE_FIELDS (type), DIMENSION_FIELD);
|
||||
*dim_off = byte_position (field);
|
||||
type = TREE_TYPE (TREE_TYPE (field));
|
||||
|
@ -163,7 +163,7 @@ void gfc_trans_array_cobounds (tree, stmtblock_t *, const gfc_symbol *);
|
||||
|
||||
/* Build expressions for accessing components of an array descriptor. */
|
||||
void gfc_get_descriptor_offsets_for_info (const_tree, tree *, tree *, tree *, tree *,
|
||||
tree *, tree *, tree *);
|
||||
tree *, tree *, tree *, tree *);
|
||||
|
||||
tree gfc_conv_descriptor_data_get (tree);
|
||||
tree gfc_conv_descriptor_data_addr (tree);
|
||||
|
@ -3266,7 +3266,7 @@ gfc_get_array_descr_info (const_tree type, struct array_descr_info *info)
|
||||
int rank, dim;
|
||||
bool indirect = false;
|
||||
tree etype, ptype, t, base_decl;
|
||||
tree data_off, dim_off, dtype_off, dim_size, elem_size;
|
||||
tree data_off, span_off, dim_off, dtype_off, dim_size, elem_size;
|
||||
tree lower_suboff, upper_suboff, stride_suboff;
|
||||
tree dtype, field, rank_off;
|
||||
|
||||
@ -3323,12 +3323,13 @@ gfc_get_array_descr_info (const_tree type, struct array_descr_info *info)
|
||||
if (indirect)
|
||||
base_decl = build1 (INDIRECT_REF, ptype, base_decl);
|
||||
|
||||
elem_size = fold_convert (gfc_array_index_type, TYPE_SIZE_UNIT (etype));
|
||||
|
||||
gfc_get_descriptor_offsets_for_info (type, &data_off, &dtype_off, &dim_off,
|
||||
&dim_size, &stride_suboff,
|
||||
gfc_get_descriptor_offsets_for_info (type, &data_off, &dtype_off, &span_off,
|
||||
&dim_off, &dim_size, &stride_suboff,
|
||||
&lower_suboff, &upper_suboff);
|
||||
|
||||
t = fold_build_pointer_plus (base_decl, span_off);
|
||||
elem_size = build1 (INDIRECT_REF, gfc_array_index_type, t);
|
||||
|
||||
t = base_decl;
|
||||
if (!integer_zerop (data_off))
|
||||
t = fold_build_pointer_plus (t, data_off);
|
||||
|
@ -981,7 +981,6 @@ struct GTY(()) lang_type {
|
||||
tree offset;
|
||||
tree dtype;
|
||||
tree dataptr_type;
|
||||
tree span;
|
||||
tree base_decl[2];
|
||||
tree nonrestricted_type;
|
||||
tree caf_token;
|
||||
@ -997,7 +996,6 @@ struct GTY(()) lang_decl {
|
||||
address of target label. */
|
||||
tree stringlen;
|
||||
tree addr;
|
||||
tree span;
|
||||
/* For assumed-shape coarrays. */
|
||||
tree token, caf_offset;
|
||||
unsigned int scalar_allocatable : 1;
|
||||
@ -1008,7 +1006,6 @@ struct GTY(()) lang_decl {
|
||||
|
||||
#define GFC_DECL_ASSIGN_ADDR(node) DECL_LANG_SPECIFIC(node)->addr
|
||||
#define GFC_DECL_STRING_LEN(node) DECL_LANG_SPECIFIC(node)->stringlen
|
||||
#define GFC_DECL_SPAN(node) DECL_LANG_SPECIFIC(node)->span
|
||||
#define GFC_DECL_TOKEN(node) DECL_LANG_SPECIFIC(node)->token
|
||||
#define GFC_DECL_CAF_OFFSET(node) DECL_LANG_SPECIFIC(node)->caf_offset
|
||||
#define GFC_DECL_SAVED_DESCRIPTOR(node) \
|
||||
@ -1059,7 +1056,6 @@ struct GTY(()) lang_decl {
|
||||
#define GFC_TYPE_ARRAY_DTYPE(node) (TYPE_LANG_SPECIFIC(node)->dtype)
|
||||
#define GFC_TYPE_ARRAY_DATAPTR_TYPE(node) \
|
||||
(TYPE_LANG_SPECIFIC(node)->dataptr_type)
|
||||
#define GFC_TYPE_ARRAY_SPAN(node) (TYPE_LANG_SPECIFIC(node)->span)
|
||||
#define GFC_TYPE_ARRAY_BASE_DECL(node, internal) \
|
||||
(TYPE_LANG_SPECIFIC(node)->base_decl[(internal)])
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user