From: Mikael Morin Date: Thu, 2 Jul 2026 08:44:25 +0000 (+0200) Subject: fortran: array descriptor: Move null factory function [PR122521] X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1b30f0f5eba2596c55cd60baf5e85b3dd072ac8a;p=thirdparty%2Fgcc.git fortran: array descriptor: Move null factory function [PR122521] Move null descriptor factory function to trans-descriptor.cc. PR fortran/122521 gcc/fortran/ChangeLog: * trans-array.cc (DATA_FIELD, OFFSET_FIELD, DTYPE_FIELD, SPAN_FIELD, DIMENSION_FIELD, CAF_TOKEN_FIELD, STRIDE_SUBFIELD, LBOUND_SUBFIELD, UBOUND_SUBFIELD): Remove preprocessor constants. (gfc_build_null_descriptor): Move function to ... * trans-descriptor.cc (gfc_build_null_descriptor): ... this file. * trans-array.h (gfc_build_null_descriptor): Move declaration to ... * trans-descriptor.h (gfc_build_null_descriptor): ... this file. --- diff --git a/gcc/fortran/trans-array.cc b/gcc/fortran/trans-array.cc index 2aaf89b6257..f45d2e51179 100644 --- a/gcc/fortran/trans-array.cc +++ b/gcc/fortran/trans-array.cc @@ -216,38 +216,6 @@ gfc_get_cfi_dim_sm (tree desc, tree idx) #undef CFI_DIM_FIELD_SM -#define DATA_FIELD 0 -#define OFFSET_FIELD 1 -#define DTYPE_FIELD 2 -#define SPAN_FIELD 3 -#define DIMENSION_FIELD 4 -#define CAF_TOKEN_FIELD 5 - -#define STRIDE_SUBFIELD 0 -#define LBOUND_SUBFIELD 1 -#define UBOUND_SUBFIELD 2 - -/* Build a null array descriptor constructor. */ - -tree -gfc_build_null_descriptor (tree type) -{ - tree field; - tree tmp; - - gcc_assert (GFC_DESCRIPTOR_TYPE_P (type)); - gcc_assert (DATA_FIELD == 0); - field = TYPE_FIELDS (type); - - /* Set a NULL data pointer. */ - tmp = build_constructor_single (type, field, null_pointer_node); - TREE_CONSTANT (tmp) = 1; - /* All other fields are ignored. */ - - return tmp; -} - - /* Modify a descriptor such that the lbound of a given dimension is the value specified. This also updates ubound and offset accordingly. */ @@ -285,19 +253,6 @@ gfc_conv_shift_descriptor_lbound (stmtblock_t* block, tree desc, } -/* Cleanup those #defines. */ - -#undef DATA_FIELD -#undef OFFSET_FIELD -#undef DTYPE_FIELD -#undef SPAN_FIELD -#undef DIMENSION_FIELD -#undef CAF_TOKEN_FIELD -#undef STRIDE_SUBFIELD -#undef LBOUND_SUBFIELD -#undef UBOUND_SUBFIELD - - /* Mark a SS chain as used. Flags specifies in which loops the SS is used. flags & 1 = Main loop body. flags & 2 = temp copy loop. */ diff --git a/gcc/fortran/trans-array.h b/gcc/fortran/trans-array.h index 721364fb6ac..e831d22c7bc 100644 --- a/gcc/fortran/trans-array.h +++ b/gcc/fortran/trans-array.h @@ -138,8 +138,6 @@ void gfc_conv_loop_setup (gfc_loopinfo *, locus *); void gfc_set_delta (gfc_loopinfo *); /* Resolve array assignment dependencies. */ void gfc_conv_resolve_dependencies (gfc_loopinfo *, gfc_ss *, gfc_ss *); -/* Build a null array descriptor constructor. */ -tree gfc_build_null_descriptor (tree); /* Get a single array element. */ void gfc_conv_array_ref (gfc_se *, gfc_array_ref *, gfc_expr *, locus *); diff --git a/gcc/fortran/trans-descriptor.cc b/gcc/fortran/trans-descriptor.cc index 18603601663..75fb9206ae9 100644 --- a/gcc/fortran/trans-descriptor.cc +++ b/gcc/fortran/trans-descriptor.cc @@ -379,6 +379,30 @@ gfc_get_descriptor_offsets_for_info (const_tree desc_type, tree *data_off, } +/* Array descriptor higher level routines. + ******************************************************************************/ + +/* Build a null array descriptor constructor. */ + +tree +gfc_build_null_descriptor (tree type) +{ + tree field; + tree tmp; + + gcc_assert (GFC_DESCRIPTOR_TYPE_P (type)); + gcc_assert (DATA_FIELD == 0); + field = TYPE_FIELDS (type); + + /* Set a NULL data pointer. */ + tmp = build_constructor_single (type, field, null_pointer_node); + TREE_CONSTANT (tmp) = 1; + /* All other fields are ignored. */ + + return tmp; +} + + /* Cleanup those #defines. */ #undef DATA_FIELD diff --git a/gcc/fortran/trans-descriptor.h b/gcc/fortran/trans-descriptor.h index db877ee402b..44c8f6f1215 100644 --- a/gcc/fortran/trans-descriptor.h +++ b/gcc/fortran/trans-descriptor.h @@ -51,4 +51,7 @@ void gfc_get_descriptor_offsets_for_info (const_tree, tree *, tree *, tree *, tree *, tree *, tree *, tree *, tree *); +/* Build a null array descriptor constructor. */ +tree gfc_build_null_descriptor (tree type); + #endif /* GFC_TRANS_DESCRIPTOR_H */