aboutsummaryrefslogtreecommitdiff
path: root/gcc/analyzer/program-point.cc
diff options
context:
space:
mode:
authorDavid Malcolm <dmalcolm@redhat.com>2020-09-15 14:25:52 -0400
committerDavid Malcolm <dmalcolm@redhat.com>2020-09-16 19:00:41 -0400
commitb9b5fc0c2175b34131d9fd0805b1b307f754f4f0 (patch)
tree70e496d98dccdbfea0cccc8b6ae281e869dc28f8 /gcc/analyzer/program-point.cc
parent6dd96e24ea3cb9919fedd4da35fbfd36ed98b0ea (diff)
downloadgcc-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.cc29
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 {