http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52406
--- Comment #5 from Richard Guenther <rguenth at gcc dot gnu.org> 2012-02-28 11:06:16 UTC --- We have Creating dr for MEM[(int *)&a + 4B] base_address: &a offset from base address: 0 constant offset from base address: 4 step: 0 aligned to: 128 base_object: MEM[(int *)&a + 4B] Creating dr for a[1].f1 base_address: &a offset from base address: 0 constant offset from base address: 4 step: 0 aligned to: 128 base_object: a[0].f1 Access function 0: 1 thus we have an access function for a[1].f1 but no access function for MEM[(int *)&a + 4B]. That should cause it to conflict. (compute_affine_dependence (stmt_a = MEM[(int *)&a + 4B] = 1; ) (stmt_b = D.1724_6 = a[1].f1; ) (Data Dep: #(Data Ref: # bb: 5 # stmt: MEM[(int *)&a + 4B] = 1; # ref: MEM[(int *)&a + 4B]; # base_object: MEM[(int *)&a + 4B]; #) #(Data Ref: # bb: 5 # stmt: D.1724_6 = a[1].f1; # ref: a[1].f1; # base_object: a[0].f1; # Access function 0: 1 #) (no dependence) ) hmpf. dr_may_alias_p returns false because it feeds the oracle with the base objects!