[PATCH, PR 59176] Mark "zombie" call graph nodes to remove verifier false positive
Jakub Jelinek
jakub@redhat.com
Thu Mar 20 18:47:00 GMT 2014
On Thu, Mar 20, 2014 at 05:07:32PM +0100, Martin Jambor wrote:
> in the PR, verifier claims an edge is pointing to a wrong declaration
> even though it has successfully verified the edge multiple times
> before. The reason is that symtab_remove_unreachable_nodes decides to
> "remove the body" of a node and also clear any information that it is
> an alias of another in the process (more detailed analysis in comment
> #9 of the bug).
>
> In bugzilla Honza wrote that "silencing the verifier" is the way to
> go. Either we can dedicate a new flag in each cgraph_node or
> symtab_node just for the purpose of verification or do something more
> hackish like the patch below which re-uses the former_clone_of field
> for this purpose. Since clones are always private nodes, they should
> always either survive removal of unreachable nodes or be completely
> killed by it and should never enter the in_border zombie state.
> Therefore their former_clone_of must always be NULL. So I added a new
> special value, error_mark_node, to mark this zombie state and taught
> the verifier to be happy with such nodes.
>
> Bootstrapped and tested on x86_64-linux. What do you think?
Don't we have like 22 spare bits in cgraph_node and 20 spare bits in
symtab_node? I'd find it clearer if you just used a new flag to mark the
zombie nodes. Though, I'll let Richard or Honza to decide, don't feel
strongly about it.
Jakub
More information about the Gcc-patches
mailing list