On Thu, Aug 02, 2018 at 11:00:32AM -0600, Martin Sebor wrote: > As an alternate approach I have been thinking about, if > there is a strong feeling that allowing strlen to iterate > past the subobject boundary is necessary (I don't believe > it is.) > > Rather than indiscriminately expanding the provenance of > the subobject regardless of what members follow it in > the enclosing structure, only consider doing that if > the next member is an array of the same type. E.g., > > struct S { char a[4], b[3], c[2], d; }; > extern struct S *p; > > strlen (p->a); // consider p->a's bounds to be char[9]
See the mail with testcases where the middle-end doesn't distinguish between p->a and (char *) p, unless you want to warn or optimize in the FEs or extremely early in the lowering passes, that isn't going to work. Jakub