http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58958
Bug ID: 58958 Summary: [4.9 Regression] Wrong aliasing info for variable index Product: gcc Version: 4.9.0 Status: UNCONFIRMED Keywords: wrong-code Severity: normal Priority: P3 Component: tree-optimization Assignee: unassigned at gcc dot gnu.org Reporter: glisse at gcc dot gnu.org double a[10]; bool f(int n){ a[3]=42; __builtin_memset(&a[n],3,sizeof(double)); return a[3]==42; } is optimized to: bool f(int) (int n) { double * _4; <bb 2>: a[3] = 4.2e+1; _4 = &a[n_3(D)]; __builtin_memset (_4, 3, 8); return 1; } This is the issue described here: http://gcc.gnu.org/ml/gcc-patches/2013-10/msg02558.html ao_ref_init_from_ptr_and_size makes an unsafe use of get_ref_base_and_extent. Maybe relying on get_addr_base_and_unit_offset would be better? The testcase is a regression, although the issue preexisted.