* cselib.c (new_elt_loc_list): When moving locs from one
cselib_val to its new canonical_cselib_val and the
cselib_val was in first_containing_mem chain, but
the canonical_cselib_val was not, add the latter into the
chain.
(cselib_invalidate_mem): Compare canonical_cselib_val of
addr_list chain elt with v.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@182858
138bc75d-0d04-0410-961f-
82ee72b054a4
2012-01-03 Jakub Jelinek <jakub@redhat.com>
+ PR bootstrap/51725
+ * cselib.c (new_elt_loc_list): When moving locs from one
+ cselib_val to its new canonical_cselib_val and the
+ cselib_val was in first_containing_mem chain, but
+ the canonical_cselib_val was not, add the latter into the
+ chain.
+ (cselib_invalidate_mem): Compare canonical_cselib_val of
+ addr_list chain elt with v.
+
PR pch/51722
* dwarf2out.c (dwarf2out_start_source_file, dwarf2out_define,
dwarf2out_undef): Allocate e.info using ggc_strdup instead
}
el->next = val->locs;
next = val->locs = CSELIB_VAL_PTR (loc)->locs;
+ if (CSELIB_VAL_PTR (loc)->next_containing_mem != NULL
+ && val->next_containing_mem == NULL)
+ {
+ val->next_containing_mem = first_containing_mem;
+ first_containing_mem = val;
+ }
}
/* Chain LOC back to VAL. */
mem_chain = &addr->addr_list;
for (;;)
{
- if ((*mem_chain)->elt == v)
+ if (canonical_cselib_val ((*mem_chain)->elt) == v)
{
unchain_one_elt_list (mem_chain);
break;