diff options
author | David Malcolm <dmalcolm@redhat.com> | 2020-09-15 14:25:52 -0400 |
---|---|---|
committer | David Malcolm <dmalcolm@redhat.com> | 2020-09-16 19:00:41 -0400 |
commit | b9b5fc0c2175b34131d9fd0805b1b307f754f4f0 (patch) | |
tree | 70e496d98dccdbfea0cccc8b6ae281e869dc28f8 /gcc/analyzer/program-point.cc | |
parent | 6dd96e24ea3cb9919fedd4da35fbfd36ed98b0ea (diff) | |
download | gcc-b9b5fc0c2175b34131d9fd0805b1b307f754f4f0.zip gcc-b9b5fc0c2175b34131d9fd0805b1b307f754f4f0.tar.gz gcc-b9b5fc0c2175b34131d9fd0805b1b307f754f4f0.tar.bz2 |
analyzer: add program_point::get_next
Avoid some future copy-and-paste by introducing a function.
gcc/analyzer/ChangeLog:
* engine.cc
(exploded_graph::process_node) <case PK_BEFORE_SUPERNODE>:
Simplify by using program_point::get_next.
* program-point.cc (program_point::get_next): New.
* program-point.h (program_point::get_next): New decl.
Diffstat (limited to 'gcc/analyzer/program-point.cc')
-rw-r--r-- | gcc/analyzer/program-point.cc | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/gcc/analyzer/program-point.cc b/gcc/analyzer/program-point.cc index 2c0a4c4..ef19e6e 100644 --- a/gcc/analyzer/program-point.cc +++ b/gcc/analyzer/program-point.cc @@ -529,6 +529,35 @@ function_point::next_stmt () } } +/* For those program points for which there is a uniquely-defined + successor, return it. */ + +program_point +program_point::get_next () const +{ + switch (m_function_point.get_kind ()) + { + default: + gcc_unreachable (); + case PK_ORIGIN: + case PK_AFTER_SUPERNODE: + gcc_unreachable (); /* Not uniquely defined. */ + case PK_BEFORE_SUPERNODE: + if (get_supernode ()->m_stmts.length () > 0) + return before_stmt (get_supernode (), 0, get_call_string ()); + else + return after_supernode (get_supernode (), get_call_string ()); + case PK_BEFORE_STMT: + { + unsigned next_idx = get_stmt_idx (); + if (next_idx < get_supernode ()->m_stmts.length ()) + return before_stmt (get_supernode (), next_idx, get_call_string ()); + else + return after_supernode (get_supernode (), get_call_string ()); + } + } +} + #if CHECKING_P namespace selftest { |