https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88739
--- Comment #43 from Richard Biener <rguenth at gcc dot gnu.org> --- So to get back to this - my thinking was that for a reference REF I can do base = get_inner_reference (ref, &bitsize, &bitpos, &offset, &mode, &unsignedp, &reversep, &volatilep); and get the semantically same REF building REF' = BIT_FIELD_REF<*(&base + offset), bitsize, bitpos> (plus setting REF_REVERSE_STORAGE_ORDER and TREE_THIS_VOLATILE on REF'). This appearantly breaks down (similarly for get_ref_base_and_extent) for bigendian and DECL_BIT_FIELD outer COMPONENT_REFs. And maybe for more? Is my expectation that the above "works" flawed? So "bit position" and "position of the first referenced bit" are two separate things? get_inner_reference will basically simply funnel through arguments so any fix to get_inner_reference/get_ref_base_and_extent will be broken since we'll apply it "recursively" when iterating the above BIT_FIELD_REF building. This means it is RTL expansion that is wrong which means my comment#31 fix is correct? Because the issue is not the bit position but how we interpret the underlying object?