------- Comment #4 from rguenth at gcc dot gnu dot org 2009-02-03 09:17 ------- Yes, but as the store to y is via *x and x points to { ANYTHING } (via the non-pointer (int ***)q) only (as x already includes ANYTHING we do not add a for the second constraint), so for *x = &i we fail to add a to y.
For reference, here are the constraints: a = &y p_4 = &ANYTHING p_1 = p_4 p_1 = &a x_6 = *p_1 derefaddrtmp.9 = &i *x_6 = derefaddrtmp.9 y.0_7 = y and the solutions: a = { y } y = same as y.0_7 p_4 = { ANYTHING } p_1 = { ANYTHING a } x_6 = { ANYTHING } i = { } derefaddrtmp.9 = { i } y.0_7 = { } while correct would be if everything would point to at least i (through the effective *ANYTHING = &i constraint) -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=39074