On 2025-06-27 08:05, Jakub Jelinek wrote:
On Fri, Jun 27, 2025 at 02:00:26PM +0200, Richard Biener wrote:
+  gcc_assert (RECORD_OR_UNION_TYPE_P (container));
+
+  for (tree t = TYPE_FIELDS (container); t; t = DECL_CHAIN (t))
+    {
+      if (TREE_CODE (t) != FIELD_DECL)
+    continue;
+
+      tree byte_offset = DECL_FIELD_OFFSET (t);
+      if (TREE_CODE (byte_offset) != INTEGER_CST
+      || tree_int_cst_lt (offset, byte_offset))
+    return false;
+
+      tree bit_offset = size_int (tree_to_uhwi (DECL_FIELD_BIT_OFFSET (t))
+                  / BITS_PER_UNIT);

That math seems to be wrong for actual bit offsets.  I’d suggest to skip the 
field if it isn’t a multiple of BITS_PER_UNIT

+      byte_offset = size_binop (PLUS_EXPR, byte_offset, bit_offset);

it would be nice to avoid tree arithmetic here as well by using wide_int.

Or just use byte_position?  That doesn't avoid tree arith, on the other side
is used everywhere.

Sent v2 using byte_position.

Thanks,
Sid

Reply via email to