Commit 3ebd8e62 by Martin Liska

Fix (PR middle-end/79931)

2017-04-24  Jan Hubicka  <hubicka@ucw.cz>

	PR middle-end/79931
	* ipa-devirt.c (dump_possible_polymorphic_call_targets): Fix ICE.
2017-04-24  Martin Liska  <mliska@suse.cz>

	PR middle-end/79931
	* g++.dg/ipa/pr79931.C: New test.

From-SVN: r247097
parent f30a1190
2017-04-24 Jan Hubicka <hubicka@ucw.cz>
PR middle-end/79931
* ipa-devirt.c (dump_possible_polymorphic_call_targets): Fix ICE.
2017-04-24 Richard Biener <rguenther@suse.de> 2017-04-24 Richard Biener <rguenther@suse.de>
PR tree-optimization/80494 PR tree-optimization/80494
......
...@@ -3367,7 +3367,13 @@ dump_possible_polymorphic_call_targets (FILE *f, ...@@ -3367,7 +3367,13 @@ dump_possible_polymorphic_call_targets (FILE *f,
fprintf (f, " Speculative targets:"); fprintf (f, " Speculative targets:");
dump_targets (f, targets); dump_targets (f, targets);
} }
gcc_assert (targets.length () <= len); /* Ugly: during callgraph construction the target cache may get populated
before all targets are found. While this is harmless (because all local
types are discovered and only in those case we devirtualize fully and we
don't do speculative devirtualization before IPA stage) it triggers
assert here when dumping at that stage also populates the case with
speculative targets. Quietly ignore this. */
gcc_assert (symtab->state < IPA_SSA || targets.length () <= len);
fprintf (f, "\n"); fprintf (f, "\n");
} }
......
2017-04-24 Martin Liska <mliska@suse.cz>
PR middle-end/79931
* g++.dg/ipa/pr79931.C: New test.
2017-04-24 Richard Biener <rguenther@suse.de> 2017-04-24 Richard Biener <rguenther@suse.de>
PR tree-optimization/80494 PR tree-optimization/80494
......
/* { dg-do compile } */
/* { dg-options "-O2 -fdump-ipa-all" } */
class DocumentImpl;
struct NodeImpl
{
virtual DocumentImpl * getOwnerDocument();
virtual NodeImpl * getParentNode();
virtual NodeImpl * removeChild(NodeImpl *oldChild);
};
struct AttrImpl : NodeImpl
{
NodeImpl *insertBefore(NodeImpl *newChild, NodeImpl *refChild);
};
struct DocumentImpl : NodeImpl
{
virtual NodeImpl *removeChild(NodeImpl *oldChild);
virtual int* getRanges();
};
NodeImpl *AttrImpl::insertBefore(NodeImpl *newChild, NodeImpl *refChild) {
NodeImpl *oldparent = newChild->getParentNode();
oldparent->removeChild(newChild);
this->getOwnerDocument()->getRanges();
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment