On Sun, Feb 4, 2018 at 9:49 PM, Thomas Koenig <[email protected]> wrote:
> Hello world,
>
> in the attached patch, I have used flexible array members for
> using the different descriptor types (following Richi's advice).
> This does not change the binary ABI, but the library code
> maches what we are actually doing in the front end. I have
> not yet given up hope of enabling LTO for the library :-)
> and this, I think, will be a prerequisite.
>
> OK for trunk?
Given that Jakub and Richi apparently weren't yet unanimous in their
recommendations on the best path forward, maybe wait a bit for the
smoke to clear?
In the meantime, a few comments:
1) Is there some particular benefit to all those macroized
descriptors, given that the only thing different is the type of the
base_addr pointer? Wouldn't it be simpler to just have a single
descriptor type with base_addr a void pointer, then typecast that
pointer to whatever type is needed?
2)
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));
Since date_and_time requires the values array to always be rank 1,
can't this be "xmalloc (sizeof (gfc_array_i4) +
sizeof(dimension_data))" ?
(The GFC_FULL_DESCRIPTOR stuff is useful for stack allocated
descriptors to avoid VLA's / alloca(), but for heap allocated ones we
can allocate only the needed size, I think)
3)
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);
And same here?
--
Janne Blomqvist