FWIW, I'm still looking at this on and off. I beleive the pure function was a red herring, as this example also does the wrong thing:
extern int z; int foo(int *y) { z = 1; *y = 0; return z; // returns 1, even though y could point to z :( }Not much joy tracking it down as yet. I've attached the alias information tree dump in case anyone fancies a look. It looks ok to me, but I don't really understand it fully.
As a reminder: this bug is fixed from r119502 on trunk. I'd like to fix it on 4.2.x.
Ned. --
bbb.c.030t.alias1
Description: Binary data