On Thu, 24 Oct 2013 12:18:43, Richard Biener wrote:
>
> On Thu, Oct 24, 2013 at 10:48 AM, Eric Botcazou <[email protected]> wrote:
>>> I think that is common practice to write array[1]; at the end of the
>>> structure, and use it as a flexible array. The compute_record_mode has no
>>> way to decide if that is going to be a flexible array or not.
>>>
>>> Sorry Eric, but now I have no other choice than to go back to my previous
>>> version of part 2:
>>>
>>> http://gcc.gnu.org/ml/gcc-patches/2013-10/msg00222.html
>>
>> Why? Just set BLKmode in this case as well.
>
> Works for me if it works ABI-wise (which you say it should unless the
> backend is buggy). Note that means mode_for_array should unconditionally
> return BLKmode.
Did you just propose:
--- stor-layout.c.orig 2013-10-22 10:46:49.233261818 +0200
+++ stor-layout.c 2013-10-24 14:54:00.425259062 +0200
@@ -471,27 +471,7 @@
static enum machine_mode
mode_for_array (tree elem_type, tree size)
{
- tree elem_size;
- unsigned HOST_WIDE_INT int_size, int_elem_size;
- bool limit_p;
-
- /* One-element arrays get the component type's mode. */
- elem_size = TYPE_SIZE (elem_type);
- if (simple_cst_equal (size, elem_size))
- return TYPE_MODE (elem_type);
-
- limit_p = true;
- if (host_integerp (size, 1) && host_integerp (elem_size, 1))
- {
- int_size = tree_low_cst (size, 1);
- int_elem_size = tree_low_cst (elem_size, 1);
- if (int_elem_size> 0
- && int_size % int_elem_size == 0
- && targetm.array_mode_supported_p (TYPE_MODE (elem_type),
- int_size / int_elem_size))
- limit_p = false;
- }
- return mode_for_size_tree (size, MODE_INT, limit_p);
+ return BLKmode;
}
???
> Richard.
>
>> --
>> Eric Botcazou