https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96900
--- Comment #2 from Martin Sebor <msebor at gcc dot gnu.org> --- The underlying cause is fold_nonarray_ctor_reference() returning a scalar zero for apparently out-of-bounds references when determining the initializer for s.a from &s.a[sizeof s.a]. Its caller, constant_byte_string(), then interprets that as an array of single element initialized to zero, but it incorrectly returns the offset from the beginning of s (i.e., 4 rather than 3 minus 3 for sizeof s.a). Its caller, c_strlen(), then uses the size of the one-element initializer (for "") and the offset (positive 1) as the basis for issuing the warning.