https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113514
--- Comment #5 from Siddhesh Poyarekar <siddhesh at gcc dot gnu.org> --- What seems to be happening is that early_objsz bails out since the subobject size at that point is not a constant; I remember concluding that it's safest to stick to constant sizes here, but I can't remember why I came to that conclusion. Then in constant propagation (literally the next pass in -O2), the reference gets folded into a MEM_REF and we have the classic case of the subobject reference being lost, due to which we see the whole object size there instead of the subobject size. I need to try and remember why I decided against generating expressions in early_objsz.