https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90450
--- Comment #3 from rguenther at suse dot de <rguenther at suse dot de> --- On Mon, 13 May 2019, marxin at gcc dot gnu.org wrote: > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90450 > > --- Comment #2 from Martin Liška <marxin at gcc dot gnu.org> --- > (In reply to Richard Biener from comment #1) > > Not exactly sure what happens, need to investigate. The testcase looks > > innocous enough at least ... > > It's about 'd[f]' and 'd[0]' references. The former one is hashed in else > branch and the later > in true branch. These are then equal in mem_ref_hasher::equal as > operand_equal_p can return true > for these 2 array references. Huh? Would have to debug this. The equality function probably should start with if (mem1->mem.max_size_known_p () != obj2->max_size_known_p ()) return false; which may fix the issue. As said, need to reproduce locally.