https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69336
--- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> --- Not fixed with r232508. Fixed with the suggested Index: gcc/tree-ssa-scopedtables.c =================================================================== --- gcc/tree-ssa-scopedtables.c (revision 232508) +++ gcc/tree-ssa-scopedtables.c (working copy) @@ -214,7 +214,7 @@ avail_expr_hash (class expr_hash_elt *p) { /* T could potentially be a switch index or a goto dest. */ tree t = expr->ops.single.rhs; - if (TREE_CODE (t) == MEM_REF || TREE_CODE (t) == ARRAY_REF) + if (TREE_CODE (t) == MEM_REF || handled_component_p (t)) { /* Make equivalent statements of both these kinds hash together. Dealing with both MEM_REF and ARRAY_REF allows us not to care @@ -251,9 +251,9 @@ avail_expr_hash (class expr_hash_elt *p) static bool equal_mem_array_ref_p (tree t0, tree t1) { - if (TREE_CODE (t0) != MEM_REF && TREE_CODE (t0) != ARRAY_REF) + if (TREE_CODE (t0) != MEM_REF && ! handled_component_p (t0)) return false; - if (TREE_CODE (t1) != MEM_REF && TREE_CODE (t1) != ARRAY_REF) + if (TREE_CODE (t1) != MEM_REF && ! handled_component_p (t1)) return false; if (!types_compatible_p (TREE_TYPE (t0), TREE_TYPE (t1)))