Index: libgfortran.h =================================================================== --- libgfortran.h (Revision 257347) +++ libgfortran.h (Arbeitskopie) @@ -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); Index: intrinsics/date_and_time.c =================================================================== --- intrinsics/date_and_time.c (Revision 257347) +++ intrinsics/date_and_time.c (Arbeitskopie) @@ -268,7 +268,7 @@ secnds (GFC_REAL_4 *x) 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)); + gfc_array_i4 *avalues = xmalloc (sizeof (gfc_full_array_i4)); avalues->base_addr = &values[0]; GFC_DESCRIPTOR_DTYPE (avalues).type = BT_REAL; GFC_DESCRIPTOR_DTYPE (avalues).elem_len = 4; Index: intrinsics/reshape_generic.c =================================================================== --- intrinsics/reshape_generic.c (Revision 257347) +++ intrinsics/reshape_generic.c (Arbeitskopie) @@ -26,8 +26,8 @@ see the files COPYING3 and COPYING.RUNTIME respect #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, Index: io/format.c =================================================================== --- io/format.c (Revision 257347) +++ io/format.c (Arbeitskopie) @@ -1025,7 +1025,7 @@ parse_format_list (st_parameter_dt *dtp, bool *see t = format_lex (fmt); /* Initialize the vlist to a zero size array. */ - tail->u.udf.vlist= xmalloc (sizeof(gfc_array_i4)); + tail->u.udf.vlist= xmalloc (sizeof(gfc_full_array_i4)); GFC_DESCRIPTOR_DATA(tail->u.udf.vlist) = NULL; GFC_DIMENSION_SET(tail->u.udf.vlist->dim[0],1, 0, 0); Index: io/list_read.c =================================================================== --- io/list_read.c (Revision 257347) +++ io/list_read.c (Arbeitskopie) @@ -2198,7 +2198,7 @@ list_formatted_read_scalar (st_parameter_dt *dtp, 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 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; Index: io/write.c =================================================================== --- io/write.c (Revision 257347) +++ io/write.c (Arbeitskopie) @@ -1886,7 +1886,7 @@ list_formatted_write_scalar (st_parameter_dt *dtp, 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 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); Index: m4/reshape.m4 =================================================================== --- m4/reshape.m4 (Revision 257347) +++ m4/reshape.m4 (Arbeitskopie) @@ -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 Index: generated/reshape_c10.c =================================================================== --- generated/reshape_c10.c (Revision 257347) +++ generated/reshape_c10.c (Arbeitskopie) @@ -28,7 +28,7 @@ see the files COPYING3 and COPYING.RUNTIME respect #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, Index: generated/reshape_c16.c =================================================================== --- generated/reshape_c16.c (Revision 257347) +++ generated/reshape_c16.c (Arbeitskopie) @@ -28,7 +28,7 @@ see the files COPYING3 and COPYING.RUNTIME respect #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, Index: generated/reshape_c4.c =================================================================== --- generated/reshape_c4.c (Revision 257347) +++ generated/reshape_c4.c (Arbeitskopie) @@ -28,7 +28,7 @@ see the files COPYING3 and COPYING.RUNTIME respect #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, Index: generated/reshape_c8.c =================================================================== --- generated/reshape_c8.c (Revision 257347) +++ generated/reshape_c8.c (Arbeitskopie) @@ -28,7 +28,7 @@ see the files COPYING3 and COPYING.RUNTIME respect #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, Index: generated/reshape_i16.c =================================================================== --- generated/reshape_i16.c (Revision 257347) +++ generated/reshape_i16.c (Arbeitskopie) @@ -28,7 +28,7 @@ see the files COPYING3 and COPYING.RUNTIME respect #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, Index: generated/reshape_i4.c =================================================================== --- generated/reshape_i4.c (Revision 257347) +++ generated/reshape_i4.c (Arbeitskopie) @@ -28,7 +28,7 @@ see the files COPYING3 and COPYING.RUNTIME respect #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, Index: generated/reshape_i8.c =================================================================== --- generated/reshape_i8.c (Revision 257347) +++ generated/reshape_i8.c (Arbeitskopie) @@ -28,7 +28,7 @@ see the files COPYING3 and COPYING.RUNTIME respect #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, Index: generated/reshape_r10.c =================================================================== --- generated/reshape_r10.c (Revision 257347) +++ generated/reshape_r10.c (Arbeitskopie) @@ -28,7 +28,7 @@ see the files COPYING3 and COPYING.RUNTIME respect #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, Index: generated/reshape_r16.c =================================================================== --- generated/reshape_r16.c (Revision 257347) +++ generated/reshape_r16.c (Arbeitskopie) @@ -28,7 +28,7 @@ see the files COPYING3 and COPYING.RUNTIME respect #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, Index: generated/reshape_r4.c =================================================================== --- generated/reshape_r4.c (Revision 257347) +++ generated/reshape_r4.c (Arbeitskopie) @@ -28,7 +28,7 @@ see the files COPYING3 and COPYING.RUNTIME respect #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, Index: generated/reshape_r8.c =================================================================== --- generated/reshape_r8.c (Revision 257347) +++ generated/reshape_r8.c (Arbeitskopie) @@ -28,7 +28,7 @@ see the files COPYING3 and COPYING.RUNTIME respect #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,