https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63679
--- Comment #38 from rguenther at suse dot de <rguenther at suse dot de> --- On Mon, 3 Aug 2015, alalaw01 at gcc dot gnu.org wrote: > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63679 > > --- Comment #37 from alalaw01 at gcc dot gnu.org --- > Hmmm, no it's not the hashing - that pretty much ignores all types. It's the > comparison in hashable_expr_equal_p, which just uses operand_equal_p, > specifically this part (in fold-const.c): > > case MEM_REF: > /* Require equal access sizes, and similar pointer types. > We can have incomplete types for array references of > variable-sized arrays from the Fortran frontend > though. Also verify the types are compatible. */ > if (!((TYPE_SIZE (TREE_TYPE (arg0)) == TYPE_SIZE (TREE_TYPE (arg1)) > || (TYPE_SIZE (TREE_TYPE (arg0)) > && TYPE_SIZE (TREE_TYPE (arg1)) > && operand_equal_p (TYPE_SIZE (TREE_TYPE (arg0)), > TYPE_SIZE (TREE_TYPE (arg1)), > flags))) > && types_compatible_p (TREE_TYPE (arg0), TREE_TYPE (arg1)) > && ((flags & OEP_ADDRESS_OF) > || (alias_ptr_types_compatible_p > (TREE_TYPE (TREE_OPERAND (arg0, 1)), > TREE_TYPE (TREE_OPERAND (arg1, 1))) > && (MR_DEPENDENCE_CLIQUE (arg0) > == MR_DEPENDENCE_CLIQUE (arg1)) > && (MR_DEPENDENCE_BASE (arg0) > == MR_DEPENDENCE_BASE (arg1)) > && (TYPE_ALIGN (TREE_TYPE (arg0)) > == TYPE_ALIGN (TREE_TYPE (arg1))))))) > > specifically, a pointer to int, and a pointer to an array of int, are not > alias_ptr_types_compatible_p. (I'm not clear that they should be, either!?) As said neither the hashing nor operand_equal_p are perfect fits for the constraints on equality DOM needs to put on memory references.