https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102238
--- Comment #4 from Andrew Pinski <pinskia at gcc dot gnu.org> --- (In reply to Andrew Pinski from comment #3) > (In reply to Martin Sebor from comment #2) > > The source and the destination arrays in the test case do not overlap so > > there is no warning. The preprocessed output makes it easier to see than > > the original (the destination of the call is the a member of the object > > pointed to by the function argument s3 and the %s argument the local array > > 'a'): > > Silly mistake on my part, it is still buggy: You can add _Static_assert (offsetof(struct S3, s2_2.s_1.a) == 40); To see that 40 is the offiset of s2_2.s_1.a.