diff options
author | David Malcolm <dmalcolm@redhat.com> | 2020-10-22 06:12:31 -0400 |
---|---|---|
committer | David Malcolm <dmalcolm@redhat.com> | 2020-10-22 06:12:31 -0400 |
commit | b7f2cfbf0fc7bcd5c1e60fca354de8bf60f9acfa (patch) | |
tree | 13d40d31c63354cf23256981da8f5631408030c9 /gcc | |
parent | 56ddd5e23af0906573e7d50348beb42d3dae82a9 (diff) | |
download | gcc-b7f2cfbf0fc7bcd5c1e60fca354de8bf60f9acfa.zip gcc-b7f2cfbf0fc7bcd5c1e60fca354de8bf60f9acfa.tar.gz gcc-b7f2cfbf0fc7bcd5c1e60fca354de8bf60f9acfa.tar.bz2 |
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.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/analyzer/engine.cc | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/analyzer/pr97489.C | 6 |
2 files changed, 11 insertions, 0 deletions
diff --git a/gcc/analyzer/engine.cc b/gcc/analyzer/engine.cc index 65d7495..b1c877e 100644 --- a/gcc/analyzer/engine.cc +++ b/gcc/analyzer/engine.cc @@ -1937,6 +1937,8 @@ exploded_graph::~exploded_graph () exploded_node * exploded_graph::add_function_entry (function *fun) { + gcc_assert (gimple_has_body_p (fun->decl)); + /* Be idempotent. */ if (m_functions_with_enodes.contains (fun)) { @@ -3982,6 +3984,9 @@ exploded_graph::on_escaped_function (tree fndecl) if (!fun) return; + if (!gimple_has_body_p (fndecl)) + return; + exploded_node *enode = add_function_entry (fun); if (logger) { diff --git a/gcc/testsuite/g++.dg/analyzer/pr97489.C b/gcc/testsuite/g++.dg/analyzer/pr97489.C new file mode 100644 index 0000000..9322e72 --- /dev/null +++ b/gcc/testsuite/g++.dg/analyzer/pr97489.C @@ -0,0 +1,6 @@ +struct X { + virtual ~X() {} + virtual void key_function(); +}; + +void X::key_function() {} |