This assert looks to me like a "can this ever happen" sort of check.
It quite apparently can.

Although I'm a bit curious about the reasons we got to this point
in the 55403 instance (unaligned TCmode memory, extracting a TFmode
value), it's clear that one could intentionally write such a thing,
rather than have it happen by accident, and that it should work.

The following fills in what appears to be a blank.  I assume this
is the sort of thing you'd have intended?

I'm just doing another round of testing now...


r~
        * emit-rtl.c (adjust_address_1): Handle adjust_object for size_known_p
        instead of asserting it isn't set.


diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c
index 27464da..dd3339c 100644
--- a/gcc/emit-rtl.c
+++ b/gcc/emit-rtl.c
@@ -2177,7 +2177,11 @@ adjust_address_1 (rtx memref, enum machine_mode mode, 
HOST_WIDE_INT offset,
     }
   else if (attrs.size_known_p)
     {
-      gcc_assert (!adjust_object);
+      if (adjust_object)
+       {
+         attrs.expr = NULL_TREE;
+         attrs.alias = 0;
+       }
       attrs.size -= offset;
       /* ??? The store_by_pieces machinery generates negative sizes,
         so don't assert for that here.  */

Reply via email to