From: Thomas Koenig Date: Mon, 12 Feb 2018 19:53:17 +0000 (+0000) Subject: libgfortran.h (GFC_ARRAY_DESCRIPTOR): Remove dimension of descriptor to use vaiable... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=e9bfdf18cb4f6fd6d323bc1a9008d2e717670ff7;p=gcc.git libgfortran.h (GFC_ARRAY_DESCRIPTOR): Remove dimension of descriptor to use vaiable members for dim. 2018-02-12 Thomas Koenig * libgfortran.h (GFC_ARRAY_DESCRIPTOR): Remove dimension of descriptor to use vaiable members for dim. Change usage of GFC_ARRAY_DESCRIPTOR accordingly. (GFC_FILL_ARRAY_DESCRIPTOR): New macro. (gfc_full_array_i4): New type. * intrinsics/date_and_time.c (secnds): Use sizeof (gfc_array_i4) + sizeof (descriptor_dimension) for memory allocation. * intrinsics/reshape_generic.c: Use GFC_FULL_ARRAY_DESCRIPTOR. * io/format.c: Use sizeof (gfc_array_i4) + sizeof (descriptor_dimension) for memoy allocation. * io/list_read.c (list_formatted_read_scalar): Use gfc_full_array_i4 for variable. (nml_read_obj): Likewise. * io/write.c (list_formatted_write_scalar): Likewise. (nml_write_obj): Likewise. * m4/reshape.m4: Use GFC_FULL_ARRAY_DESCRIPTOR. * generated/reshape_c10.c: Regenerated. * generated/reshape_c16.c: Regenerated. * generated/reshape_c4.c: Regenerated. * generated/reshape_c8.c: Regenerated. * generated/reshape_i16.c: Regenerated. * generated/reshape_i4.c: Regenerated. * generated/reshape_i8.c: Regenerated. * generated/reshape_r10.c: Regenerated. * generated/reshape_r16.c: Regenerated. * generated/reshape_r4.c: Regenerated. * generated/reshape_r8.c: Regenerated. From-SVN: r257601 --- diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog index 77ae9f76809..2220ec2bae6 100644 --- a/libgfortran/ChangeLog +++ b/libgfortran/ChangeLog @@ -1,3 +1,34 @@ +2018-02-12 Thomas Koenig + + * libgfortran.h (GFC_ARRAY_DESCRIPTOR): Remove dimension + of descriptor to use vaiable members for dim. + Change usage of GFC_ARRAY_DESCRIPTOR accordingly. + (GFC_FILL_ARRAY_DESCRIPTOR): New macro. + (gfc_full_array_i4): New type. + * intrinsics/date_and_time.c (secnds): Use sizeof + (gfc_array_i4) + sizeof (descriptor_dimension) for memory + allocation. + * intrinsics/reshape_generic.c: Use GFC_FULL_ARRAY_DESCRIPTOR. + * io/format.c: Use sizeof (gfc_array_i4) + sizeof + (descriptor_dimension) for memoy allocation. + * io/list_read.c (list_formatted_read_scalar): Use + gfc_full_array_i4 for variable. + (nml_read_obj): Likewise. + * io/write.c (list_formatted_write_scalar): Likewise. + (nml_write_obj): Likewise. + * m4/reshape.m4: Use GFC_FULL_ARRAY_DESCRIPTOR. + * generated/reshape_c10.c: Regenerated. + * generated/reshape_c16.c: Regenerated. + * generated/reshape_c4.c: Regenerated. + * generated/reshape_c8.c: Regenerated. + * generated/reshape_i16.c: Regenerated. + * generated/reshape_i4.c: Regenerated. + * generated/reshape_i8.c: Regenerated. + * generated/reshape_r10.c: Regenerated. + * generated/reshape_r16.c: Regenerated. + * generated/reshape_r4.c: Regenerated. + * generated/reshape_r8.c: Regenerated. + 2018-01-31 Janne Blomqvist * generated/cshift1_16.c (cshift1): Regenerated. diff --git a/libgfortran/generated/reshape_c10.c b/libgfortran/generated/reshape_c10.c index dbea98d1738..a6077551e1b 100644 --- a/libgfortran/generated/reshape_c10.c +++ b/libgfortran/generated/reshape_c10.c @@ -28,7 +28,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see #if defined (HAVE_GFC_COMPLEX_10) -typedef GFC_ARRAY_DESCRIPTOR(1, index_type) shape_type; +typedef GFC_FULL_ARRAY_DESCRIPTOR(1, index_type) shape_type; extern void reshape_c10 (gfc_array_c10 * const restrict, diff --git a/libgfortran/generated/reshape_c16.c b/libgfortran/generated/reshape_c16.c index 4cf875f1518..daecd1eb875 100644 --- a/libgfortran/generated/reshape_c16.c +++ b/libgfortran/generated/reshape_c16.c @@ -28,7 +28,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see #if defined (HAVE_GFC_COMPLEX_16) -typedef GFC_ARRAY_DESCRIPTOR(1, index_type) shape_type; +typedef GFC_FULL_ARRAY_DESCRIPTOR(1, index_type) shape_type; extern void reshape_c16 (gfc_array_c16 * const restrict, diff --git a/libgfortran/generated/reshape_c4.c b/libgfortran/generated/reshape_c4.c index da718ad9a44..c2f89e9f99a 100644 --- a/libgfortran/generated/reshape_c4.c +++ b/libgfortran/generated/reshape_c4.c @@ -28,7 +28,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see #if defined (HAVE_GFC_COMPLEX_4) -typedef GFC_ARRAY_DESCRIPTOR(1, index_type) shape_type; +typedef GFC_FULL_ARRAY_DESCRIPTOR(1, index_type) shape_type; extern void reshape_c4 (gfc_array_c4 * const restrict, diff --git a/libgfortran/generated/reshape_c8.c b/libgfortran/generated/reshape_c8.c index 9fa7aca1abd..2b2a0b8ee7c 100644 --- a/libgfortran/generated/reshape_c8.c +++ b/libgfortran/generated/reshape_c8.c @@ -28,7 +28,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see #if defined (HAVE_GFC_COMPLEX_8) -typedef GFC_ARRAY_DESCRIPTOR(1, index_type) shape_type; +typedef GFC_FULL_ARRAY_DESCRIPTOR(1, index_type) shape_type; extern void reshape_c8 (gfc_array_c8 * const restrict, diff --git a/libgfortran/generated/reshape_i16.c b/libgfortran/generated/reshape_i16.c index 8d3e218cdd6..620d74bf137 100644 --- a/libgfortran/generated/reshape_i16.c +++ b/libgfortran/generated/reshape_i16.c @@ -28,7 +28,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see #if defined (HAVE_GFC_INTEGER_16) -typedef GFC_ARRAY_DESCRIPTOR(1, index_type) shape_type; +typedef GFC_FULL_ARRAY_DESCRIPTOR(1, index_type) shape_type; extern void reshape_16 (gfc_array_i16 * const restrict, diff --git a/libgfortran/generated/reshape_i4.c b/libgfortran/generated/reshape_i4.c index d5348529290..fb616e64fd6 100644 --- a/libgfortran/generated/reshape_i4.c +++ b/libgfortran/generated/reshape_i4.c @@ -28,7 +28,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see #if defined (HAVE_GFC_INTEGER_4) -typedef GFC_ARRAY_DESCRIPTOR(1, index_type) shape_type; +typedef GFC_FULL_ARRAY_DESCRIPTOR(1, index_type) shape_type; extern void reshape_4 (gfc_array_i4 * const restrict, diff --git a/libgfortran/generated/reshape_i8.c b/libgfortran/generated/reshape_i8.c index 205d45efd25..abe46636828 100644 --- a/libgfortran/generated/reshape_i8.c +++ b/libgfortran/generated/reshape_i8.c @@ -28,7 +28,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see #if defined (HAVE_GFC_INTEGER_8) -typedef GFC_ARRAY_DESCRIPTOR(1, index_type) shape_type; +typedef GFC_FULL_ARRAY_DESCRIPTOR(1, index_type) shape_type; extern void reshape_8 (gfc_array_i8 * const restrict, diff --git a/libgfortran/generated/reshape_r10.c b/libgfortran/generated/reshape_r10.c index 15e68f1f2ba..e2f6cb64604 100644 --- a/libgfortran/generated/reshape_r10.c +++ b/libgfortran/generated/reshape_r10.c @@ -28,7 +28,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see #if defined (HAVE_GFC_REAL_10) -typedef GFC_ARRAY_DESCRIPTOR(1, index_type) shape_type; +typedef GFC_FULL_ARRAY_DESCRIPTOR(1, index_type) shape_type; extern void reshape_r10 (gfc_array_r10 * const restrict, diff --git a/libgfortran/generated/reshape_r16.c b/libgfortran/generated/reshape_r16.c index 4e17d31fb7d..0a24a751c80 100644 --- a/libgfortran/generated/reshape_r16.c +++ b/libgfortran/generated/reshape_r16.c @@ -28,7 +28,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see #if defined (HAVE_GFC_REAL_16) -typedef GFC_ARRAY_DESCRIPTOR(1, index_type) shape_type; +typedef GFC_FULL_ARRAY_DESCRIPTOR(1, index_type) shape_type; extern void reshape_r16 (gfc_array_r16 * const restrict, diff --git a/libgfortran/generated/reshape_r4.c b/libgfortran/generated/reshape_r4.c index 7f419b113c1..db8d76a4135 100644 --- a/libgfortran/generated/reshape_r4.c +++ b/libgfortran/generated/reshape_r4.c @@ -28,7 +28,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see #if defined (HAVE_GFC_REAL_4) -typedef GFC_ARRAY_DESCRIPTOR(1, index_type) shape_type; +typedef GFC_FULL_ARRAY_DESCRIPTOR(1, index_type) shape_type; extern void reshape_r4 (gfc_array_r4 * const restrict, diff --git a/libgfortran/generated/reshape_r8.c b/libgfortran/generated/reshape_r8.c index 0315b0b36ad..06fc72f6efc 100644 --- a/libgfortran/generated/reshape_r8.c +++ b/libgfortran/generated/reshape_r8.c @@ -28,7 +28,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see #if defined (HAVE_GFC_REAL_8) -typedef GFC_ARRAY_DESCRIPTOR(1, index_type) shape_type; +typedef GFC_FULL_ARRAY_DESCRIPTOR(1, index_type) shape_type; extern void reshape_r8 (gfc_array_r8 * const restrict, diff --git a/libgfortran/intrinsics/date_and_time.c b/libgfortran/intrinsics/date_and_time.c index a493b448b6a..78a7cd0e48b 100644 --- a/libgfortran/intrinsics/date_and_time.c +++ b/libgfortran/intrinsics/date_and_time.c @@ -267,8 +267,10 @@ secnds (GFC_REAL_4 *x) GFC_INTEGER_4 values[VALUES_SIZE]; GFC_REAL_4 temp1, temp2; - /* Make the INTEGER*4 array for passing to date_and_time. */ - gfc_array_i4 *avalues = xmalloc (sizeof (gfc_array_i4)); + /* Make the INTEGER*4 array for passing to date_and_time, with enough space + for a rank-one array. */ + gfc_array_i4 *avalues = xmalloc (sizeof (gfc_array_i4) + + sizeof (descriptor_dimension)); avalues->base_addr = &values[0]; GFC_DESCRIPTOR_DTYPE (avalues).type = BT_REAL; GFC_DESCRIPTOR_DTYPE (avalues).elem_len = 4; diff --git a/libgfortran/intrinsics/reshape_generic.c b/libgfortran/intrinsics/reshape_generic.c index 94e45f510f9..276c69ca595 100644 --- a/libgfortran/intrinsics/reshape_generic.c +++ b/libgfortran/intrinsics/reshape_generic.c @@ -26,8 +26,8 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see #include "libgfortran.h" #include -typedef GFC_ARRAY_DESCRIPTOR(1, index_type) shape_type; -typedef GFC_ARRAY_DESCRIPTOR(GFC_MAX_DIMENSIONS, char) parray; +typedef GFC_FULL_ARRAY_DESCRIPTOR(1, index_type) shape_type; +typedef GFC_FULL_ARRAY_DESCRIPTOR(GFC_MAX_DIMENSIONS, char) parray; static void reshape_internal (parray *ret, parray *source, shape_type *shape, diff --git a/libgfortran/io/format.c b/libgfortran/io/format.c index b718faadc76..b4920aaf1f1 100644 --- a/libgfortran/io/format.c +++ b/libgfortran/io/format.c @@ -1024,8 +1024,9 @@ parse_format_list (st_parameter_dt *dtp, bool *seen_dd) t = format_lex (fmt); - /* Initialize the vlist to a zero size array. */ - tail->u.udf.vlist= xmalloc (sizeof(gfc_array_i4)); + /* Initialize the vlist to a zero size, rank-one array. */ + tail->u.udf.vlist= xmalloc (sizeof(gfc_array_i4) + + sizeof (descriptor_dimension)); GFC_DESCRIPTOR_DATA(tail->u.udf.vlist) = NULL; GFC_DIMENSION_SET(tail->u.udf.vlist->dim[0],1, 0, 0); diff --git a/libgfortran/io/list_read.c b/libgfortran/io/list_read.c index fbd7dc27edf..d052d1fa828 100644 --- a/libgfortran/io/list_read.c +++ b/libgfortran/io/list_read.c @@ -2198,7 +2198,7 @@ list_formatted_read_scalar (st_parameter_dt *dtp, bt type, void *p, gfc_charlen_type child_iomsg_len; int noiostat; int *child_iostat = NULL; - gfc_array_i4 vlist; + gfc_full_array_i4 vlist; GFC_DESCRIPTOR_DATA(&vlist) = NULL; GFC_DIMENSION_SET(vlist.dim[0],1, 0, 0); @@ -2996,7 +2996,7 @@ nml_read_obj (st_parameter_dt *dtp, namelist_info *nl, index_type offset, gfc_charlen_type child_iomsg_len; int noiostat; int *child_iostat = NULL; - gfc_array_i4 vlist; + gfc_full_array_i4 vlist; formatted_dtio dtio_ptr = (formatted_dtio)nl->dtio_sub; GFC_DESCRIPTOR_DATA(&vlist) = NULL; diff --git a/libgfortran/io/write.c b/libgfortran/io/write.c index 28ea852867b..50ea13364e3 100644 --- a/libgfortran/io/write.c +++ b/libgfortran/io/write.c @@ -1886,7 +1886,7 @@ list_formatted_write_scalar (st_parameter_dt *dtp, bt type, void *p, int kind, gfc_charlen_type child_iomsg_len; int noiostat; int *child_iostat = NULL; - gfc_array_i4 vlist; + gfc_full_array_i4 vlist; GFC_DESCRIPTOR_DATA(&vlist) = NULL; GFC_DIMENSION_SET(vlist.dim[0],1, 0, 0); @@ -2211,7 +2211,7 @@ nml_write_obj (st_parameter_dt *dtp, namelist_info *obj, index_type offset, gfc_charlen_type child_iomsg_len; int noiostat; int *child_iostat = NULL; - gfc_array_i4 vlist; + gfc_full_array_i4 vlist; formatted_dtio dtio_ptr = (formatted_dtio)obj->dtio_sub; GFC_DIMENSION_SET(vlist.dim[0],1, 0, 0); diff --git a/libgfortran/libgfortran.h b/libgfortran/libgfortran.h index 3b1dc722f42..38e364f1012 100644 --- a/libgfortran/libgfortran.h +++ b/libgfortran/libgfortran.h @@ -339,51 +339,65 @@ typedef struct dtype_type } dtype_type; -#define GFC_ARRAY_DESCRIPTOR(r, type) \ +#define GFC_ARRAY_DESCRIPTOR(type) \ struct {\ type *base_addr;\ size_t offset;\ dtype_type dtype;\ index_type span;\ - descriptor_dimension dim[r];\ + descriptor_dimension dim[];\ } /* Commonly used array descriptor types. */ -typedef GFC_ARRAY_DESCRIPTOR (GFC_MAX_DIMENSIONS, void) gfc_array_void; -typedef GFC_ARRAY_DESCRIPTOR (GFC_MAX_DIMENSIONS, char) gfc_array_char; -typedef GFC_ARRAY_DESCRIPTOR (GFC_MAX_DIMENSIONS, GFC_INTEGER_1) gfc_array_i1; -typedef GFC_ARRAY_DESCRIPTOR (GFC_MAX_DIMENSIONS, GFC_INTEGER_2) gfc_array_i2; -typedef GFC_ARRAY_DESCRIPTOR (GFC_MAX_DIMENSIONS, GFC_INTEGER_4) gfc_array_i4; -typedef GFC_ARRAY_DESCRIPTOR (GFC_MAX_DIMENSIONS, GFC_INTEGER_8) gfc_array_i8; +typedef GFC_ARRAY_DESCRIPTOR (void) gfc_array_void; +typedef GFC_ARRAY_DESCRIPTOR (char) gfc_array_char; +typedef GFC_ARRAY_DESCRIPTOR (GFC_INTEGER_1) gfc_array_i1; +typedef GFC_ARRAY_DESCRIPTOR (GFC_INTEGER_2) gfc_array_i2; +typedef GFC_ARRAY_DESCRIPTOR (GFC_INTEGER_4) gfc_array_i4; +typedef GFC_ARRAY_DESCRIPTOR (GFC_INTEGER_8) gfc_array_i8; #ifdef HAVE_GFC_INTEGER_16 -typedef GFC_ARRAY_DESCRIPTOR (GFC_MAX_DIMENSIONS, GFC_INTEGER_16) gfc_array_i16; +typedef GFC_ARRAY_DESCRIPTOR (GFC_INTEGER_16) gfc_array_i16; #endif -typedef GFC_ARRAY_DESCRIPTOR (GFC_MAX_DIMENSIONS, GFC_REAL_4) gfc_array_r4; -typedef GFC_ARRAY_DESCRIPTOR (GFC_MAX_DIMENSIONS, GFC_REAL_8) gfc_array_r8; +typedef GFC_ARRAY_DESCRIPTOR (GFC_REAL_4) gfc_array_r4; +typedef GFC_ARRAY_DESCRIPTOR (GFC_REAL_8) gfc_array_r8; #ifdef HAVE_GFC_REAL_10 -typedef GFC_ARRAY_DESCRIPTOR (GFC_MAX_DIMENSIONS, GFC_REAL_10) gfc_array_r10; +typedef GFC_ARRAY_DESCRIPTOR (GFC_REAL_10) gfc_array_r10; #endif #ifdef HAVE_GFC_REAL_16 -typedef GFC_ARRAY_DESCRIPTOR (GFC_MAX_DIMENSIONS, GFC_REAL_16) gfc_array_r16; +typedef GFC_ARRAY_DESCRIPTOR (GFC_REAL_16) gfc_array_r16; #endif -typedef GFC_ARRAY_DESCRIPTOR (GFC_MAX_DIMENSIONS, GFC_COMPLEX_4) gfc_array_c4; -typedef GFC_ARRAY_DESCRIPTOR (GFC_MAX_DIMENSIONS, GFC_COMPLEX_8) gfc_array_c8; +typedef GFC_ARRAY_DESCRIPTOR (GFC_COMPLEX_4) gfc_array_c4; +typedef GFC_ARRAY_DESCRIPTOR (GFC_COMPLEX_8) gfc_array_c8; #ifdef HAVE_GFC_COMPLEX_10 -typedef GFC_ARRAY_DESCRIPTOR (GFC_MAX_DIMENSIONS, GFC_COMPLEX_10) gfc_array_c10; +typedef GFC_ARRAY_DESCRIPTOR (GFC_COMPLEX_10) gfc_array_c10; #endif #ifdef HAVE_GFC_COMPLEX_16 -typedef GFC_ARRAY_DESCRIPTOR (GFC_MAX_DIMENSIONS, GFC_COMPLEX_16) gfc_array_c16; +typedef GFC_ARRAY_DESCRIPTOR (GFC_COMPLEX_16) gfc_array_c16; #endif -typedef GFC_ARRAY_DESCRIPTOR (GFC_MAX_DIMENSIONS, GFC_LOGICAL_1) gfc_array_l1; -typedef GFC_ARRAY_DESCRIPTOR (GFC_MAX_DIMENSIONS, GFC_LOGICAL_2) gfc_array_l2; -typedef GFC_ARRAY_DESCRIPTOR (GFC_MAX_DIMENSIONS, GFC_LOGICAL_4) gfc_array_l4; -typedef GFC_ARRAY_DESCRIPTOR (GFC_MAX_DIMENSIONS, GFC_LOGICAL_8) gfc_array_l8; +typedef GFC_ARRAY_DESCRIPTOR (GFC_LOGICAL_1) gfc_array_l1; +typedef GFC_ARRAY_DESCRIPTOR (GFC_LOGICAL_2) gfc_array_l2; +typedef GFC_ARRAY_DESCRIPTOR (GFC_LOGICAL_4) gfc_array_l4; +typedef GFC_ARRAY_DESCRIPTOR (GFC_LOGICAL_8) gfc_array_l8; #ifdef HAVE_GFC_LOGICAL_16 -typedef GFC_ARRAY_DESCRIPTOR (GFC_MAX_DIMENSIONS, GFC_LOGICAL_16) gfc_array_l16; +typedef GFC_ARRAY_DESCRIPTOR (GFC_LOGICAL_16) gfc_array_l16; #endif typedef gfc_array_i1 gfc_array_s1; typedef gfc_array_i4 gfc_array_s4; +/* These are for when you actually want to declare a descriptor, as + opposed to a pointer to it. */ + +#define GFC_FULL_ARRAY_DESCRIPTOR(r, type) \ +struct {\ + type *base_addr;\ + size_t offset;\ + dtype_type dtype;\ + index_type span;\ + descriptor_dimension dim[r];\ +} + +typedef GFC_FULL_ARRAY_DESCRIPTOR (GFC_MAX_DIMENSIONS, GFC_INTEGER_4) gfc_full_array_i4; + #define GFC_DESCRIPTOR_RANK(desc) ((desc)->dtype.rank) #define GFC_DESCRIPTOR_TYPE(desc) ((desc)->dtype.type) #define GFC_DESCRIPTOR_SIZE(desc) ((desc)->dtype.elem_len) @@ -1345,7 +1359,7 @@ iexport_proto(random_seed_i8); /* size.c */ -typedef GFC_ARRAY_DESCRIPTOR (GFC_MAX_DIMENSIONS, void) array_t; +typedef GFC_ARRAY_DESCRIPTOR (void) array_t; extern index_type size0 (const array_t * array); iexport_proto(size0); diff --git a/libgfortran/m4/reshape.m4 b/libgfortran/m4/reshape.m4 index 108911685de..c96ad9f35a3 100644 --- a/libgfortran/m4/reshape.m4 +++ b/libgfortran/m4/reshape.m4 @@ -29,7 +29,7 @@ include(iparm.m4)dnl `#if defined (HAVE_'rtype_name`) -typedef GFC_ARRAY_DESCRIPTOR(1, 'index_type`) 'shape_type`;' +typedef GFC_FULL_ARRAY_DESCRIPTOR(1, 'index_type`) 'shape_type`;' dnl For integer routines, only the kind (ie size) is used to name the dnl function. The same function will be used for integer and logical