+2019-03-07 Martin Liska <mliska@suse.cz>
+
+ * cgraph.c (cgraph_node::verify_node): Verify with a neighbour
+ which is equivalent to searching for this in clones chain.
+ * symtab.c (symtab_node::verify_base): Similarly compare ASM
+ names with a neighbour and special case first node in a chain.
+
2019-01-25 Jason Merrill <jason@redhat.com>
PR c++/80916 - spurious "static but not defined" warning.
if (clone_of)
{
- cgraph_node *n;
- for (n = clone_of->clones; n; n = n->next_sibling_clone)
- if (n == this)
- break;
- if (!n)
+ cgraph_node *first_clone = clone_of->clones;
+ if (first_clone != this)
{
- error ("cgraph_node has wrong clone_of");
- error_found = true;
+ if (prev_sibling_clone->clone_of != clone_of)
+ {
+ error ("cgraph_node has wrong clone_of");
+ error_found = true;
+ }
}
}
if (clones)
if (symtab->assembler_name_hash)
{
hashed_node = symtab_node::get_for_asmname (DECL_ASSEMBLER_NAME (decl));
- if (hashed_node && hashed_node->previous_sharing_asm_name)
+ if (hashed_node)
{
- error ("assembler name hash list corrupted");
- error_found = true;
- }
- while (hashed_node)
- {
- if (hashed_node == this)
- break;
- hashed_node = hashed_node->next_sharing_asm_name;
- }
- if (!hashed_node
- && !(is_a <varpool_node *> (this)
- && DECL_HARD_REGISTER (decl)))
- {
- error ("node not found in symtab assembler name hash");
- error_found = true;
+ if (hashed_node->previous_sharing_asm_name)
+ {
+ error ("assembler name hash list corrupted");
+ error_found = true;
+ }
+ else if (previous_sharing_asm_name == NULL)
+ {
+ if (hashed_node != this)
+ {
+ error ("assembler name hash list corrupted");
+ error_found = true;
+ }
+ }
+ else if (!(is_a <varpool_node *> (this) && DECL_HARD_REGISTER (decl)))
+ {
+ if (!asmname_hasher::equal (previous_sharing_asm_name,
+ DECL_ASSEMBLER_NAME (decl)))
+ {
+ error ("node not found in symtab assembler name hash");
+ error_found = true;
+ }
+ }
}
}
if (previous_sharing_asm_name