On Mon, Jan 13, 2014 at 05:32:26PM +0100, Marek Polacek wrote: > This doesn't really fix the PR, but solves a related issue, where we > have e.g. > struct U {}; > static struct U b[6]; > > int foo (struct U *p, struct U *q) > { > return q - p; > } > int main() > { > return foo (&b[0], &b[4]); > } > Such a program SIGFPEs at runtime. But subtraction of pointers to empty > structures/unions doesn't really make sense and this patch forbids that. > Note that GCC permits a structure/union to have no members, but it's only > an extension, in C11 it's undefined behavior. > > Regtested/bootstrapped on x86_64, ok for trunk?
The patch will need some tweaking, I realized that e.g. for struct S { union {}; }; it doesn't do the right thing... Marek