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. */