On Thu, 24 Oct 2013 12:18:43, Richard Biener wrote:
>
> On Thu, Oct 24, 2013 at 10:48 AM, Eric Botcazou <ebotca...@adacore.com> 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                                          

Reply via email to