analyzer: fix ICE on dtor [PR97489]
gcc/analyzer/ChangeLog: PR analyzer/97489 * engine.cc (exploded_graph::add_function_entry): Assert that we have a function body. (exploded_graph::on_escaped_function): Reject fndecls that don't have a function body. gcc/testsuite/ChangeLog: PR analyzer/97489 * g++.dg/analyzer/pr97489.C: New test.
This commit is contained in:
parent
56ddd5e23a
commit
b7f2cfbf0f
@ -1937,6 +1937,8 @@ exploded_graph::~exploded_graph ()
|
|||||||
exploded_node *
|
exploded_node *
|
||||||
exploded_graph::add_function_entry (function *fun)
|
exploded_graph::add_function_entry (function *fun)
|
||||||
{
|
{
|
||||||
|
gcc_assert (gimple_has_body_p (fun->decl));
|
||||||
|
|
||||||
/* Be idempotent. */
|
/* Be idempotent. */
|
||||||
if (m_functions_with_enodes.contains (fun))
|
if (m_functions_with_enodes.contains (fun))
|
||||||
{
|
{
|
||||||
@ -3982,6 +3984,9 @@ exploded_graph::on_escaped_function (tree fndecl)
|
|||||||
if (!fun)
|
if (!fun)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if (!gimple_has_body_p (fndecl))
|
||||||
|
return;
|
||||||
|
|
||||||
exploded_node *enode = add_function_entry (fun);
|
exploded_node *enode = add_function_entry (fun);
|
||||||
if (logger)
|
if (logger)
|
||||||
{
|
{
|
||||||
|
6
gcc/testsuite/g++.dg/analyzer/pr97489.C
Normal file
6
gcc/testsuite/g++.dg/analyzer/pr97489.C
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
struct X {
|
||||||
|
virtual ~X() {}
|
||||||
|
virtual void key_function();
|
||||||
|
};
|
||||||
|
|
||||||
|
void X::key_function() {}
|
Loading…
Reference in New Issue
Block a user