https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87843

--- Comment #13 from Richard Biener <rguenth at gcc dot gnu.org> ---
So the alias machinery disambiguates them at

static bool
indirect_refs_may_alias_p (tree ref1 ATTRIBUTE_UNUSED, tree base1,
                           poly_int64 offset1, poly_int64 max_size1,
...
  /* Do type-based disambiguation.  */
  if (base1_alias_set != base2_alias_set
      && !alias_sets_conflict_p (base1_alias_set, base2_alias_set))
    return false;

where base2_alias_set == ref2_alias_set from *p_11 and
ref1_alias_set == ref2_alias_set but base1_alias_set == 22 (from v_16->locs).

And somehow the alias-set for *v_16 doesn't have v_16->locs as child
(well, it probably has the pointer-to-complete one as child since we built
the alias-set for *v_16 _before_ adjusting the FIELD_DECLs type!?)

Reply via email to