From a4d3bfc0851ac1b489c4dea5b57dcc08adb20457 Mon Sep 17 00:00:00 2001 From: David Malcolm Date: Tue, 4 Feb 2020 16:23:27 -0500 Subject: [PATCH] analyzer: add enode status and revamp __analyzer_dump_exploded_nodes The analyzer recognizes __analyzer_dump_exploded_nodes as a "magic" function for use in DejaGnu tests: at the end of the pass, it issues a warning at each such call, dumping the count of exploded nodes seen at the call, which can be checked in test cases via dg-warning directives, along with the IDs of the enodes (which is helpful when debugging). My intent was to give a way of testing the results of the state-merging code. The state-merging code can generate duplicate exploded nodes at a point when state merging occurs, taking a pair of enodes from the worklist that share a program_point and sufficiently similar state. For these cases it generates a merged state, and adds edges from those enodes to the merged-state enode (potentially a new or a pre-existing enode); the input enodes don't have process_node called on them. This means that at a CFG join point there can be an unpredictable number of enodes that we don't care about, where the precise number depends on the details of the state-merger code, immediately followed by a more predictable number that we do care about. I've been papering over this in the analyzer DejaGnu tests somewhat by adding pairs of __analyzer_dump_exploded_nodes calls at CFG join points, where the output at the first call is somewhat arbitrary, and the second has the number we care about; the first number tends to change "at random" as I tweak the state merging code, in ways that aren't interesting, but require the tests to be updated. See e.g. gcc.dg/analyzer/paths-6.c which had: __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 exploded nodes" } */ // FIXME: the above can vary between 2 and 3 exploded nodes __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 exploded node" } */ This patch remedies this situation by tracking which enodes are processed, and which are merely "merger" enodes. It updates the output for __analyzer_dump_exploded_nodes so that count of enodes only includes the *processed* enodes, and that the IDs are split into "processed" and "merger" enodes. The patch simplifies the testsuite by eliminating the redundant calls described above; the example above becomes: __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */ where the output in question is now: warning: 1 processed enode: [EN: 94] merger(s): [EN: 93] The patch also adds various checks on the status of enodes, to ensure e.g. that each enode is processed at most once. gcc/analyzer/ChangeLog: * engine.cc (exploded_node::dump_dot): Show merger enodes. (worklist::add_node): Assert that the node's m_status is STATUS_WORKLIST. (exploded_graph::process_worklist): Likewise for nodes from the worklist. Set status of merged nodes to STATUS_MERGER. (exploded_graph::process_node): Set status of node to STATUS_PROCESSED. (exploded_graph::dump_exploded_nodes): Rework handling of "__analyzer_dump_exploded_nodes", splitting enodes by status into "processed" and "merger", showing the count of just the processed enodes at the call, rather than the count of all enodes. * exploded-graph.h (exploded_node::status): New enum. (exploded_node::exploded_node): Initialize m_status to STATUS_WORKLIST. (exploded_node::get_status): New getter. (exploded_node::set_status): New setter. (exploded_node::m_status): New field. gcc/ChangeLog: * doc/analyzer.texi (Special Functions for Debugging the Analyzer): Update description of __analyzer_dump_exploded_nodes. gcc/testsuite/ChangeLog: * gcc.dg/analyzer/data-model-1.c: Update for changed output to __analyzer_dump_exploded_nodes, dropping redundant call at merger. * gcc.dg/analyzer/data-model-7.c: Likewise. * gcc.dg/analyzer/loop-2.c: Update for changed output format. * gcc.dg/analyzer/loop-2a.c: Likewise. * gcc.dg/analyzer/loop-4.c: Likewise. * gcc.dg/analyzer/loop.c: Likewise. * gcc.dg/analyzer/malloc-paths-10.c: Likewise; drop redundant call at merger. * gcc.dg/analyzer/malloc-vs-local-1a.c: Likewise. * gcc.dg/analyzer/malloc-vs-local-1b.c: Likewise. * gcc.dg/analyzer/malloc-vs-local-2.c: Likewise. * gcc.dg/analyzer/malloc-vs-local-3.c: Likewise. * gcc.dg/analyzer/paths-1.c: Likewise. * gcc.dg/analyzer/paths-1a.c: Likewise. * gcc.dg/analyzer/paths-2.c: Likewise. * gcc.dg/analyzer/paths-3.c: Likewise. * gcc.dg/analyzer/paths-4.c: Update for changed output format. * gcc.dg/analyzer/paths-5.c: Likewise. * gcc.dg/analyzer/paths-6.c: Likewise; drop redundant calls at merger. * gcc.dg/analyzer/paths-7.c: Likewise. * gcc.dg/analyzer/torture/conditionals-2.c: Update for changed output format. * gcc.dg/analyzer/zlib-1.c: Likewise; drop redundant calls. * gcc.dg/analyzer/zlib-5.c: Update for changed output format. --- gcc/ChangeLog | 6 ++ gcc/analyzer/ChangeLog | 19 +++++ gcc/analyzer/engine.cc | 69 +++++++++++++++---- gcc/analyzer/exploded-graph.h | 28 +++++++- gcc/doc/analyzer.texi | 16 +++-- gcc/testsuite/ChangeLog | 29 ++++++++ gcc/testsuite/gcc.dg/analyzer/data-model-1.c | 3 +- gcc/testsuite/gcc.dg/analyzer/data-model-7.c | 3 +- gcc/testsuite/gcc.dg/analyzer/loop-2.c | 6 +- gcc/testsuite/gcc.dg/analyzer/loop-2a.c | 6 +- gcc/testsuite/gcc.dg/analyzer/loop-4.c | 8 +-- gcc/testsuite/gcc.dg/analyzer/loop.c | 6 +- .../gcc.dg/analyzer/malloc-paths-10.c | 3 +- .../gcc.dg/analyzer/malloc-vs-local-1a.c | 26 ++++--- .../gcc.dg/analyzer/malloc-vs-local-1b.c | 25 +++---- .../gcc.dg/analyzer/malloc-vs-local-2.c | 24 +++---- .../gcc.dg/analyzer/malloc-vs-local-3.c | 9 ++- gcc/testsuite/gcc.dg/analyzer/paths-1.c | 3 +- gcc/testsuite/gcc.dg/analyzer/paths-1a.c | 3 +- gcc/testsuite/gcc.dg/analyzer/paths-2.c | 8 +-- gcc/testsuite/gcc.dg/analyzer/paths-3.c | 10 ++- gcc/testsuite/gcc.dg/analyzer/paths-4.c | 24 ++++--- gcc/testsuite/gcc.dg/analyzer/paths-5.c | 4 +- gcc/testsuite/gcc.dg/analyzer/paths-6.c | 13 ++-- gcc/testsuite/gcc.dg/analyzer/paths-7.c | 13 ++-- .../gcc.dg/analyzer/torture/conditionals-2.c | 4 +- gcc/testsuite/gcc.dg/analyzer/zlib-1.c | 21 +++--- gcc/testsuite/gcc.dg/analyzer/zlib-5.c | 2 +- 28 files changed, 246 insertions(+), 145 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a5ae52acbb6..1b0dd3ce7e9 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2020-02-05 David Malcolm + + * doc/analyzer.texi + (Special Functions for Debugging the Analyzer): Update description + of __analyzer_dump_exploded_nodes. + 2020-02-05 Jakub Jelinek PR target/92190 diff --git a/gcc/analyzer/ChangeLog b/gcc/analyzer/ChangeLog index 80892807641..0666d0028c6 100644 --- a/gcc/analyzer/ChangeLog +++ b/gcc/analyzer/ChangeLog @@ -1,3 +1,22 @@ +2020-02-05 David Malcolm + + * engine.cc (exploded_node::dump_dot): Show merger enodes. + (worklist::add_node): Assert that the node's m_status is + STATUS_WORKLIST. + (exploded_graph::process_worklist): Likewise for nodes from the + worklist. Set status of merged nodes to STATUS_MERGER. + (exploded_graph::process_node): Set status of node to + STATUS_PROCESSED. + (exploded_graph::dump_exploded_nodes): Rework handling of + "__analyzer_dump_exploded_nodes", splitting enodes by status into + "processed" and "merger", showing the count of just the processed + enodes at the call, rather than the count of all enodes. + * exploded-graph.h (exploded_node::status): New enum. + (exploded_node::exploded_node): Initialize m_status to + STATUS_WORKLIST. + (exploded_node::get_status): New getter. + (exploded_node::set_status): New setter. + 2020-02-04 David Malcolm PR analyzer/93543 diff --git a/gcc/analyzer/engine.cc b/gcc/analyzer/engine.cc index 81b8a76c5eb..63579da953a 100644 --- a/gcc/analyzer/engine.cc +++ b/gcc/analyzer/engine.cc @@ -827,6 +827,8 @@ exploded_node::dump_dot (graphviz_out *gv, const dump_args_t &args) const pp_write_text_to_stream (pp); pp_printf (pp, "EN: %i", m_index); + if (m_status == STATUS_MERGER) + pp_string (pp, " (merger)"); pp_newline (pp); format f (true); @@ -1638,6 +1640,7 @@ worklist::peek_next () void worklist::add_node (exploded_node *enode) { + gcc_assert (enode->get_status () == exploded_node::STATUS_WORKLIST); m_queue.insert (key_t (*this, enode), enode); } @@ -2124,6 +2127,7 @@ exploded_graph::process_worklist () while (m_worklist.length () > 0) { exploded_node *node = m_worklist.take_next (); + gcc_assert (node->get_status () == exploded_node::STATUS_WORKLIST); gcc_assert (node->m_succs.length () == 0 || node == m_origin); @@ -2136,6 +2140,8 @@ exploded_graph::process_worklist () if (flag_analyzer_state_merge && node != m_origin) if (exploded_node *node_2 = m_worklist.peek_next ()) { + gcc_assert (node_2->get_status () + == exploded_node::STATUS_WORKLIST); gcc_assert (node->m_succs.length () == 0); gcc_assert (node_2->m_succs.length () == 0); @@ -2181,6 +2187,7 @@ exploded_graph::process_worklist () /* Remove node_2 from the worklist. */ m_worklist.take_next (); + node_2->set_status (exploded_node::STATUS_MERGER); /* Continue processing "node" below. */ } @@ -2190,6 +2197,7 @@ exploded_graph::process_worklist () in the worklist, to be processed on the next iteration. */ add_edge (node, node_2, NULL, change); + node->set_status (exploded_node::STATUS_MERGER); continue; } else @@ -2232,12 +2240,18 @@ exploded_graph::process_worklist () if (merged_enode == node) m_worklist.add_node (merged_enode); else - add_edge (node, merged_enode, NULL, change); + { + add_edge (node, merged_enode, NULL, change); + node->set_status (exploded_node::STATUS_MERGER); + } if (merged_enode == node_2) m_worklist.add_node (merged_enode); else - add_edge (node_2, merged_enode, NULL, change); + { + add_edge (node_2, merged_enode, NULL, change); + node_2->set_status (exploded_node::STATUS_MERGER); + } continue; } @@ -2320,6 +2334,8 @@ exploded_graph::process_node (exploded_node *node) logger * const logger = get_logger (); LOG_FUNC_1 (logger, "EN: %i", node->m_index); + node->set_status (exploded_node::STATUS_PROCESSED); + const program_point &point = node->get_point (); /* Update cfun and input_location in case of an ICE: make it easier to @@ -3180,8 +3196,16 @@ exploded_graph::dump_exploded_nodes () const } /* Emit a warning at any call to "__analyzer_dump_exploded_nodes", - giving the number of exploded nodes for "before-stmt", and their - IDs. */ + giving the number of processed exploded nodes for "before-stmt", + and the IDs of processed and merger enodes. + + We highlight the count of *processed* enodes since this is of most + interest in DejaGnu tests for ensuring that state merger has + happened. + + We don't show the count of merger enodes, as this is more of an + implementation detail of the merging that we don't want to bake + into our expected DejaGnu messages. */ unsigned i; exploded_node *enode; @@ -3199,25 +3223,43 @@ exploded_graph::dump_exploded_nodes () const if (seen.contains (stmt)) continue; + auto_vec processed_enodes; + auto_vec merger_enodes; /* This is O(N^2). */ unsigned j; - auto_vec enodes; exploded_node *other_enode; FOR_EACH_VEC_ELT (m_nodes, j, other_enode) { if (other_enode->get_point ().get_kind () != PK_BEFORE_STMT) continue; if (other_enode->get_stmt () == stmt) - enodes.safe_push (other_enode); + switch (other_enode->get_status ()) + { + default: + gcc_unreachable (); + case exploded_node::STATUS_PROCESSED: + processed_enodes.safe_push (other_enode); + break; + case exploded_node::STATUS_MERGER: + merger_enodes.safe_push (other_enode); + break; + } } pretty_printer pp; - print_enode_indices (&pp, enodes); + pp_character (&pp, '['); + print_enode_indices (&pp, processed_enodes); + if (merger_enodes.length () > 0) + { + pp_string (&pp, "] merger(s): ["); + print_enode_indices (&pp, merger_enodes); + } + pp_character (&pp, ']'); - warning_n (stmt->location, 0, enodes.length (), - "%i exploded node: %s", - "%i exploded nodes: %s", - enodes.length (), pp_formatted_text (&pp)); + warning_n (stmt->location, 0, processed_enodes.length (), + "%i processed enode: %s", + "%i processed enodes: %s", + processed_enodes.length (), pp_formatted_text (&pp)); seen.add (stmt); /* If the argument is non-zero, then print all of the states @@ -3233,10 +3275,11 @@ exploded_graph::dump_exploded_nodes () const if (i_arg) { exploded_node *other_enode; - FOR_EACH_VEC_ELT (enodes, j, other_enode) + FOR_EACH_VEC_ELT (processed_enodes, j, other_enode) { fprintf (stderr, "%i of %i: EN %i:\n", - j + 1, enodes.length (), other_enode->m_index); + j + 1, processed_enodes.length (), + other_enode->m_index); other_enode->dump_succs_and_preds (stderr); /* Dump state. */ other_enode->get_state ().dump (m_ext_state, false); diff --git a/gcc/analyzer/exploded-graph.h b/gcc/analyzer/exploded-graph.h index 6a1b9b20277..e47816a5b6e 100644 --- a/gcc/analyzer/exploded-graph.h +++ b/gcc/analyzer/exploded-graph.h @@ -151,9 +151,26 @@ struct eg_traits class exploded_node : public dnode { public: + /* Has this enode had exploded_graph::process_node called on it? + This allows us to distinguish enodes that were merged during + worklist-handling, and thus never had process_node called on them + (in favor of processing the merged node). */ + enum status + { + /* Node is in the worklist. */ + STATUS_WORKLIST, + + /* Node has had exploded_graph::process_node called on it. */ + STATUS_PROCESSED, + + /* Node was left unprocessed due to merger; it won't have had + exploded_graph::process_node called on it. */ + STATUS_MERGER + }; + exploded_node (point_and_state ps, int index) - : m_ps (ps), m_index (index) + : m_ps (ps), m_status (STATUS_WORKLIST), m_index (index) { gcc_checking_assert (ps.get_state ().m_region_model->canonicalized_p ()); } @@ -240,6 +257,13 @@ class exploded_node : public dnode void dump_succs_and_preds (FILE *outf) const; + enum status get_status () const { return m_status; } + void set_status (enum status status) + { + gcc_assert (m_status == STATUS_WORKLIST); + m_status = status; + } + private: DISABLE_COPY_AND_ASSIGN (exploded_node); @@ -249,6 +273,8 @@ private: is immutable once the exploded_node has been created. */ const point_and_state m_ps; + enum status m_status; + public: /* The index of this exploded_node. */ const int m_index; diff --git a/gcc/doc/analyzer.texi b/gcc/doc/analyzer.texi index 1fe4bcefd1b..4bd1c59d8b6 100644 --- a/gcc/doc/analyzer.texi +++ b/gcc/doc/analyzer.texi @@ -469,20 +469,28 @@ __analyzer_dump_path (); will emit a placeholder ``note'' diagnostic with a path to that call site, if the analyzer finds a feasible path to it. -The builtin @code{__analyzer_dump_exploded_nodes} will dump information -after analysis on all of the exploded nodes at that program point: +The builtin @code{__analyzer_dump_exploded_nodes} will emit a warning +after analysis containing information on all of the exploded nodes at that +program point: @smallexample __analyzer_dump_exploded_nodes (0); @end smallexample -will dump just the number of nodes, and their IDs. +will output the number of ``processed'' nodes, and the IDs of +both ``processed'' and ``merger'' nodes, such as: + +@smallexample +warning: 2 processed enodes: [EN: 56, EN: 58] merger(s): [EN: 54-55, EN: 57, EN: 59] +@end smallexample + +With a non-zero argument @smallexample __analyzer_dump_exploded_nodes (1); @end smallexample -will also dump all of the states within those nodes. +it will also dump all of the states within the ``processed'' nodes. @smallexample __analyzer_dump_region_model (); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ff47b94fc38..f6291df9795 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,32 @@ +2020-02-05 David Malcolm + + * gcc.dg/analyzer/data-model-1.c: Update for changed output to + __analyzer_dump_exploded_nodes, dropping redundant call at merger. + * gcc.dg/analyzer/data-model-7.c: Likewise. + * gcc.dg/analyzer/loop-2.c: Update for changed output format. + * gcc.dg/analyzer/loop-2a.c: Likewise. + * gcc.dg/analyzer/loop-4.c: Likewise. + * gcc.dg/analyzer/loop.c: Likewise. + * gcc.dg/analyzer/malloc-paths-10.c: Likewise; drop redundant + call at merger. + * gcc.dg/analyzer/malloc-vs-local-1a.c: Likewise. + * gcc.dg/analyzer/malloc-vs-local-1b.c: Likewise. + * gcc.dg/analyzer/malloc-vs-local-2.c: Likewise. + * gcc.dg/analyzer/malloc-vs-local-3.c: Likewise. + * gcc.dg/analyzer/paths-1.c: Likewise. + * gcc.dg/analyzer/paths-1a.c: Likewise. + * gcc.dg/analyzer/paths-2.c: Likewise. + * gcc.dg/analyzer/paths-3.c: Likewise. + * gcc.dg/analyzer/paths-4.c: Update for changed output format. + * gcc.dg/analyzer/paths-5.c: Likewise. + * gcc.dg/analyzer/paths-6.c: Likewise; drop redundant calls + at merger. + * gcc.dg/analyzer/paths-7.c: Likewise. + * gcc.dg/analyzer/torture/conditionals-2.c: Update for changed + output format. + * gcc.dg/analyzer/zlib-1.c: Likewise; drop redundant calls. + * gcc.dg/analyzer/zlib-5.c: Update for changed output format. + 2020-02-05 Jakub Jelinek PR target/92190 diff --git a/gcc/testsuite/gcc.dg/analyzer/data-model-1.c b/gcc/testsuite/gcc.dg/analyzer/data-model-1.c index d75b9fa1db3..e2bd1f9cd36 100644 --- a/gcc/testsuite/gcc.dg/analyzer/data-model-1.c +++ b/gcc/testsuite/gcc.dg/analyzer/data-model-1.c @@ -895,8 +895,7 @@ int test_40 (int flag) i = 17; /* With state-merging, we lose the relationship between 'flag' and 'i'. */ - __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 exploded nodes" } */ - __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 exploded node" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */ if (flag) __analyzer_eval (i == 43); /* { dg-warning "UNKNOWN" } */ diff --git a/gcc/testsuite/gcc.dg/analyzer/data-model-7.c b/gcc/testsuite/gcc.dg/analyzer/data-model-7.c index 67a681be607..cb0b33e66c8 100644 --- a/gcc/testsuite/gcc.dg/analyzer/data-model-7.c +++ b/gcc/testsuite/gcc.dg/analyzer/data-model-7.c @@ -10,8 +10,7 @@ int test_40 (int flag) i = 17; /* Without state-merging, we retain the relationship between 'flag' and 'i'. */ - __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 exploded nodes" } */ - __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 exploded nodes" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 processed enodes" } */ if (flag) __analyzer_eval (i == 43); /* { dg-warning "TRUE" } */ diff --git a/gcc/testsuite/gcc.dg/analyzer/loop-2.c b/gcc/testsuite/gcc.dg/analyzer/loop-2.c index 20728cb6dd3..f106722c247 100644 --- a/gcc/testsuite/gcc.dg/analyzer/loop-2.c +++ b/gcc/testsuite/gcc.dg/analyzer/loop-2.c @@ -10,14 +10,14 @@ void test(void) { struct s s; - __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 exploded node" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */ for (s.i=0; s.i<256; s.i++) { __analyzer_eval (s.i < 256); /* { dg-warning "TRUE" } */ /* (should report TRUE twice). */ - __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 exploded nodes" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 processed enodes" } */ //__analyzer_eval (s.i == 0); /* { d-todo-g-warning "UNKNOWN" "" { xfail *-*-* } } */ /* { d-todo-g-warning "TRUE" "" { target *-*-* } .-1 } */ @@ -33,5 +33,5 @@ void test(void) /* { dg-warning "UNKNOWN" "status quo" { target *-*-* } .-1 } */ /* TODO(xfail^^^): ideally it should figure out i == 256 at exit. */ - __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 exploded node" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */ } diff --git a/gcc/testsuite/gcc.dg/analyzer/loop-2a.c b/gcc/testsuite/gcc.dg/analyzer/loop-2a.c index 0b1de203f12..a392ffc1a63 100644 --- a/gcc/testsuite/gcc.dg/analyzer/loop-2a.c +++ b/gcc/testsuite/gcc.dg/analyzer/loop-2a.c @@ -10,7 +10,7 @@ void test(void) { union u u; - __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 exploded node" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */ for (u.i=0; u.i<256; u.i++) { @@ -19,7 +19,7 @@ void test(void) /* { dg-bogus "UNKNOWN" "status quo" { xfail *-*-* } .-2 } */ /* (should report TRUE twice). */ - __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 exploded nodes" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 processed enodes" } */ //__analyzer_eval (u.i == 0); /* { d-todo-g-warning "UNKNOWN" "" { xfail *-*-* } } */ /* { d-todo-g-warning "TRUE" "" { target *-*-* } .-1 } */ @@ -36,5 +36,5 @@ void test(void) /* { dg-warning "UNKNOWN" "status quo" { target *-*-* } .-1 } */ /* TODO(xfail^^^): ideally it should figure out i == 256 at exit. */ - __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 exploded node" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */ } diff --git a/gcc/testsuite/gcc.dg/analyzer/loop-4.c b/gcc/testsuite/gcc.dg/analyzer/loop-4.c index 2ea44f5d18d..e5767de1f96 100644 --- a/gcc/testsuite/gcc.dg/analyzer/loop-4.c +++ b/gcc/testsuite/gcc.dg/analyzer/loop-4.c @@ -9,7 +9,7 @@ void test(void) { int i, j, k; - __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 exploded node" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */ for (i=0; i<256; i++) { @@ -25,7 +25,7 @@ void test(void) __analyzer_eval (j < 256); /* { dg-warning "TRUE" } */ - __analyzer_dump_exploded_nodes (0); /* { dg-warning "3 exploded nodes" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "3 processed enodes" } */ for (k=0; k<256; k++) { @@ -34,10 +34,10 @@ void test(void) __analyzer_eval (k < 256); /* { dg-warning "TRUE" } */ - __analyzer_dump_exploded_nodes (0); /* { dg-warning "4 exploded nodes" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "4 processed enodes" } */ } } } - __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 exploded node" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */ } diff --git a/gcc/testsuite/gcc.dg/analyzer/loop.c b/gcc/testsuite/gcc.dg/analyzer/loop.c index 0fcc39316c4..37b757bf8f4 100644 --- a/gcc/testsuite/gcc.dg/analyzer/loop.c +++ b/gcc/testsuite/gcc.dg/analyzer/loop.c @@ -6,7 +6,7 @@ void test(void) { int i; - __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 exploded node" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */ for (i=0; i<256; i++) { __analyzer_eval (i < 256); /* { dg-warning "TRUE" } */ @@ -22,7 +22,7 @@ void test(void) /* { dg-warning "UNKNOWN" "status quo" { target *-*-* } .-2 } */ /* TODO(xfail^^^): ideally we ought to figure out i >= 0 for all iterations. */ - __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 exploded nodes" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 processed enodes" } */ } __analyzer_eval (i >= 256); /* { dg-warning "TRUE" } */ @@ -31,5 +31,5 @@ void test(void) /* { dg-warning "UNKNOWN" "status quo" { target *-*-* } .-1 } */ /* TODO(xfail^^^): it only figures out i >= 256, rather than i == 256. */ - __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 exploded node" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */ } diff --git a/gcc/testsuite/gcc.dg/analyzer/malloc-paths-10.c b/gcc/testsuite/gcc.dg/analyzer/malloc-paths-10.c index 2a2937ed043..ef88388267b 100644 --- a/gcc/testsuite/gcc.dg/analyzer/malloc-paths-10.c +++ b/gcc/testsuite/gcc.dg/analyzer/malloc-paths-10.c @@ -10,8 +10,7 @@ int test (int flag) other_flag = 0; /* With state-merging, we lose the relationship between 'flag' and 'other_flag'. */ - __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 exploded nodes" } */ - __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 exploded node" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */ if (other_flag) __analyzer_eval (flag); /* { dg-warning "UNKNOWN" } */ diff --git a/gcc/testsuite/gcc.dg/analyzer/malloc-vs-local-1a.c b/gcc/testsuite/gcc.dg/analyzer/malloc-vs-local-1a.c index 72360c2f9fa..d47dfa8b2c0 100644 --- a/gcc/testsuite/gcc.dg/analyzer/malloc-vs-local-1a.c +++ b/gcc/testsuite/gcc.dg/analyzer/malloc-vs-local-1a.c @@ -44,14 +44,13 @@ int test_repeated_predicate_1 (int n) else ptr = buf; - __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 exploded nodes" } */ - __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 exploded nodes" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 processed enodes" } */ result = do_stuff (ptr, n); - __analyzer_dump_exploded_nodes (0); /* { dg-warning "3 exploded nodes" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "3 processed enodes" } */ // FIXME: why 3 here? - __analyzer_dump_exploded_nodes (0); /* { dg-warning "3 exploded nodes" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "3 processed enodes" } */ // FIXME: why 3 here? if (n > 10) @@ -73,11 +72,11 @@ int test_repeated_predicate_2 (int n) else ptr = buf; - __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 exploded nodes" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 processed enodes" } */ result = do_stuff_2 (ptr, n); - __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 exploded nodes" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 processed enodes" } */ if (n > 10) free (ptr); /* { dg-bogus "not on the heap" } */ @@ -102,11 +101,11 @@ int test_explicit_flag (int n) else ptr = buf; - __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 exploded nodes" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 processed enodes" } */ result = do_stuff (ptr, n); - __analyzer_dump_exploded_nodes (0); /* { dg-warning "3 exploded nodes" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "3 processed enodes" } */ // FIXME: why 3 here? if (need_to_free) @@ -128,11 +127,11 @@ int test_pointer_comparison (int n) else ptr = buf; - __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 exploded nodes" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 processed enodes" } */ result = do_stuff (ptr, n); - __analyzer_dump_exploded_nodes (0); /* { dg-warning "3 exploded nodes" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "3 processed enodes" } */ // FIXME: why 3 here? if (ptr != buf) @@ -159,19 +158,18 @@ int test_initial_flag (int n) /* Due to state-merging, we lose the relationship between 'n > 10' and 'on_heap' here; we have to rely on feasibility-checking in the diagnostic_manager to reject the false warnings. */ - __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 exploded nodes" } */ - __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 exploded node" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */ if (on_heap) ptr = (int *)malloc (sizeof (int) * n); else ptr = buf; - __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 exploded nodes" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 processed enodes" } */ result = do_stuff (ptr, n); - __analyzer_dump_exploded_nodes (0); /* { dg-warning "5 exploded nodes" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "5 processed enodes" } */ // FIXME: why 5 here? if (n > 10) diff --git a/gcc/testsuite/gcc.dg/analyzer/malloc-vs-local-1b.c b/gcc/testsuite/gcc.dg/analyzer/malloc-vs-local-1b.c index 1997bb7adb4..a30b8c0e080 100644 --- a/gcc/testsuite/gcc.dg/analyzer/malloc-vs-local-1b.c +++ b/gcc/testsuite/gcc.dg/analyzer/malloc-vs-local-1b.c @@ -44,13 +44,11 @@ int test_repeated_predicate_1 (int n) else ptr = buf; - __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 exploded nodes" } */ - __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 exploded nodes" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 processed enodes" } */ result = do_stuff (ptr, n); - __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 exploded nodes" } */ - __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 exploded nodes" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 processed enodes" } */ if (n > 10) free (ptr); /* { dg-bogus "not on the heap" } */ @@ -71,11 +69,11 @@ int test_repeated_predicate_2 (int n) else ptr = buf; - __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 exploded nodes" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 processed enodes" } */ result = do_stuff_2 (ptr, n); - __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 exploded nodes" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 processed enodes" } */ if (n > 10) free (ptr); /* { dg-bogus "not on the heap" } */ @@ -100,11 +98,11 @@ int test_explicit_flag (int n) else ptr = buf; - __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 exploded nodes" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 processed enodes" } */ result = do_stuff (ptr, n); - __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 exploded nodes" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 processed enodes" } */ if (need_to_free) free (ptr); /* { dg-bogus "not on the heap" } */ @@ -125,11 +123,11 @@ int test_pointer_comparison (int n) else ptr = buf; - __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 exploded nodes" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 processed enodes" } */ result = do_stuff (ptr, n); - __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 exploded nodes" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 processed enodes" } */ if (ptr != buf) free (ptr); /* { dg-bogus "not on the heap" } */ @@ -155,19 +153,18 @@ int test_initial_flag (int n) /* Due to state-merging, we lose the relationship between 'n > 10' and 'on_heap' here; we have to rely on feasibility-checking in the diagnostic_manager to reject the false warnings. */ - __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 exploded nodes" } */ - __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 exploded node" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */ if (on_heap) ptr = (int *)malloc (sizeof (int) * n); else ptr = buf; - __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 exploded nodes" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 processed enodes" } */ result = do_stuff (ptr, n); - __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 exploded nodes" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 processed enodes" } */ if (n > 10) free (ptr); /* { dg-bogus "not on the heap" } */ diff --git a/gcc/testsuite/gcc.dg/analyzer/malloc-vs-local-2.c b/gcc/testsuite/gcc.dg/analyzer/malloc-vs-local-2.c index 74d9687b960..89bd511549f 100644 --- a/gcc/testsuite/gcc.dg/analyzer/malloc-vs-local-2.c +++ b/gcc/testsuite/gcc.dg/analyzer/malloc-vs-local-2.c @@ -24,8 +24,7 @@ int test_repeated_predicate_1 (int n) else ptr = buf; - __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 exploded nodes" } */ - __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 exploded nodes" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 processed enodes" } */ { int *p = ptr; @@ -38,8 +37,7 @@ int test_repeated_predicate_1 (int n) result = sum; } - __analyzer_dump_exploded_nodes (0); /* { dg-warning "3 exploded nodes" } */ - __analyzer_dump_exploded_nodes (0); /* { dg-warning "3 exploded nodes" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "3 processed enodes" } */ if (n > 10) free (ptr); /* { dg-bogus "not on the heap" } */ @@ -60,8 +58,7 @@ int test_repeated_predicate_1a (int n) else ptr = buf; - __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 exploded nodes" } */ - __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 exploded nodes" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 processed enodes" } */ { int *p = ptr; @@ -72,8 +69,7 @@ int test_repeated_predicate_1a (int n) result = sum; } - __analyzer_dump_exploded_nodes (0); /* { dg-warning "3 exploded nodes" } */ - __analyzer_dump_exploded_nodes (0); /* { dg-warning "3 exploded nodes" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "3 processed enodes" } */ if (n > 10) free (ptr); /* { dg-bogus "not on the heap" } */ @@ -94,11 +90,11 @@ int test_repeated_predicate_2 (int n) else ptr = buf; - __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 exploded nodes" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 processed enodes" } */ result = do_stuff_2 (ptr, n); - __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 exploded nodes" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 processed enodes" } */ if (n > 10) free (ptr); /* { dg-bogus "not on the heap" } */ @@ -123,7 +119,7 @@ int test_explicit_flag (int n) else ptr = buf; - __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 exploded nodes" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 processed enodes" } */ { int *p = ptr; @@ -136,7 +132,7 @@ int test_explicit_flag (int n) result = sum; } - __analyzer_dump_exploded_nodes (0); /* { dg-warning "3 exploded nodes" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "3 processed enodes" } */ if (need_to_free) free (ptr); /* { dg-bogus "not on the heap" } */ @@ -157,7 +153,7 @@ int test_pointer_comparison (int n) else ptr = buf; - __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 exploded nodes" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 processed enodes" } */ { int *p = ptr; @@ -170,7 +166,7 @@ int test_pointer_comparison (int n) result = sum; } - __analyzer_dump_exploded_nodes (0); /* { dg-warning "3 exploded nodes" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "3 processed enodes" } */ if (ptr != buf) free (ptr); /* { dg-bogus "not on the heap" } */ diff --git a/gcc/testsuite/gcc.dg/analyzer/malloc-vs-local-3.c b/gcc/testsuite/gcc.dg/analyzer/malloc-vs-local-3.c index fe9b240be5b..d20a2753bb8 100644 --- a/gcc/testsuite/gcc.dg/analyzer/malloc-vs-local-3.c +++ b/gcc/testsuite/gcc.dg/analyzer/malloc-vs-local-3.c @@ -23,8 +23,7 @@ int test_1 (int n) else ptr = buf; - __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 exploded nodes" } */ - __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 exploded nodes" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 processed enodes" } */ { int *p = ptr; @@ -37,7 +36,7 @@ int test_1 (int n) result = sum; } - __analyzer_dump_exploded_nodes (0); /* { dg-warning "3 exploded nodes" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "3 processed enodes" } */ return result; /* { dg-message "leak of 'p'" } */ /* FIXME: should this be 'ptr'? */ @@ -56,11 +55,11 @@ int test_2 (int n) else ptr = buf; - __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 exploded nodes" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 processed enodes" } */ result = do_stuff_2 (ptr, n); - __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 exploded nodes" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 processed enodes" } */ return result; /* { dg-message "leak of 'ptr'" } */ } diff --git a/gcc/testsuite/gcc.dg/analyzer/paths-1.c b/gcc/testsuite/gcc.dg/analyzer/paths-1.c index 06468774472..df5b3a66084 100644 --- a/gcc/testsuite/gcc.dg/analyzer/paths-1.c +++ b/gcc/testsuite/gcc.dg/analyzer/paths-1.c @@ -13,6 +13,5 @@ void test (struct foo *pf) bar (0); else bar (1); - __analyzer_dump_exploded_nodes (0); /* { dg-warning "3 exploded nodes" } */ - __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 exploded node" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */ } diff --git a/gcc/testsuite/gcc.dg/analyzer/paths-1a.c b/gcc/testsuite/gcc.dg/analyzer/paths-1a.c index 8760de93499..a1b842ff54f 100644 --- a/gcc/testsuite/gcc.dg/analyzer/paths-1a.c +++ b/gcc/testsuite/gcc.dg/analyzer/paths-1a.c @@ -13,6 +13,5 @@ void test (union foo *pf) bar (0); else bar (1); - __analyzer_dump_exploded_nodes (0); /* { dg-warning "3 exploded nodes" } */ - __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 exploded node" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */ } diff --git a/gcc/testsuite/gcc.dg/analyzer/paths-2.c b/gcc/testsuite/gcc.dg/analyzer/paths-2.c index c48a2d7758c..3efc053ade1 100644 --- a/gcc/testsuite/gcc.dg/analyzer/paths-2.c +++ b/gcc/testsuite/gcc.dg/analyzer/paths-2.c @@ -6,9 +6,7 @@ int test (int a) return (-2); } - __analyzer_dump_exploded_nodes (0); /* { dg-warning "3 exploded nodes" } */ - - __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 exploded node" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */ return 0; } @@ -19,9 +17,7 @@ int test_2 (int a) return (-2); } - __analyzer_dump_exploded_nodes (0); /* { dg-warning "4 exploded nodes" } */ - - __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 exploded node" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */ return 0; } diff --git a/gcc/testsuite/gcc.dg/analyzer/paths-3.c b/gcc/testsuite/gcc.dg/analyzer/paths-3.c index 440213b7991..9bd30301690 100644 --- a/gcc/testsuite/gcc.dg/analyzer/paths-3.c +++ b/gcc/testsuite/gcc.dg/analyzer/paths-3.c @@ -13,13 +13,12 @@ int test_1 (int a, int b) else p = malloc (32); - __analyzer_dump_exploded_nodes (0); /* { dg-warning "4 exploded nodes" } */ - __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 exploded nodes" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 processed enodes" } */ if (a > 5) { free (p); - __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 exploded node" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */ } return 0; /* { dg-bogus "leak" } */ @@ -35,13 +34,12 @@ int test_2 (int a, int b) else p = malloc (32); - __analyzer_dump_exploded_nodes (0); /* { dg-warning "4 exploded nodes" } */ - __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 exploded nodes" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 processed enodes" } */ if (a > 6) /* different condition */ { free (p); - __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 exploded node" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */ } return 0; /* { dg-warning "leak of 'p'" } */ diff --git a/gcc/testsuite/gcc.dg/analyzer/paths-4.c b/gcc/testsuite/gcc.dg/analyzer/paths-4.c index 34bd09eee05..2f58763886c 100644 --- a/gcc/testsuite/gcc.dg/analyzer/paths-4.c +++ b/gcc/testsuite/gcc.dg/analyzer/paths-4.c @@ -10,41 +10,43 @@ extern void do_stuff (struct state *, int); int test_1 (struct state *s) { - __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 exploded node" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */ while (1) { - __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 exploded nodes" } */ - __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 exploded node" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 processed enodes" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */ + /* TODO: why does the above need an extra stmt to merge state? */ do_stuff (s, s->mode); } } int test_2 (struct state *s) { - __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 exploded node" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */ while (1) { - __analyzer_dump_exploded_nodes (0); /* { dg-warning "3 exploded nodes" } */ - __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 exploded node" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "3 processed enodes" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */ + /* TODO: why does the above need an extra stmt to merge state? */ switch (s->mode) { case 0: - __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 exploded node" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */ do_stuff (s, 0); break; case 1: - __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 exploded node" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */ do_stuff (s, 17); break; case 2: - __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 exploded node" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */ do_stuff (s, 5); break; case 3: - __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 exploded node" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */ return 42; case 4: - __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 exploded node" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */ return -3; } } diff --git a/gcc/testsuite/gcc.dg/analyzer/paths-5.c b/gcc/testsuite/gcc.dg/analyzer/paths-5.c index f96169d9d2b..21aa23067c1 100644 --- a/gcc/testsuite/gcc.dg/analyzer/paths-5.c +++ b/gcc/testsuite/gcc.dg/analyzer/paths-5.c @@ -3,10 +3,10 @@ void test (int *p, int n) { int i; - __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 exploded node" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */ for (i = 0; i < n; i++) { p[i] = i; /* { dg-bogus "uninitialized" } */ - __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 exploded nodes" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 processed enodes" } */ } } diff --git a/gcc/testsuite/gcc.dg/analyzer/paths-6.c b/gcc/testsuite/gcc.dg/analyzer/paths-6.c index 7a1a94228dd..8220b8eff82 100644 --- a/gcc/testsuite/gcc.dg/analyzer/paths-6.c +++ b/gcc/testsuite/gcc.dg/analyzer/paths-6.c @@ -19,9 +19,7 @@ void test_1 (int flag) a = 3; } - __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 exploded nodes" } */ - // FIXME: the above can vary between 2 and 3 exploded nodes - __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 exploded node" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */ __analyzer_eval (a == 3); /* { dg-warning "TRUE" } */ __analyzer_eval (b == 4); /* { dg-warning "TRUE" } */ } @@ -42,8 +40,7 @@ void test_2 (int flag) f = 3; } - __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 exploded nodes" } */ - __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 exploded node" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */ __analyzer_eval (f == 3); /* { dg-warning "TRUE" } */ __analyzer_eval (g == 4); /* { dg-warning "TRUE" } */ } @@ -92,8 +89,7 @@ void test_3 (int i) break; } - __analyzer_dump_exploded_nodes (0); /* { dg-warning "6 exploded nodes" } */ - __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 exploded node" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 processed enode" } */ __analyzer_eval (f == 3); /* { dg-warning "TRUE" } */ __analyzer_eval (g == 4); /* { dg-warning "TRUE" } */ __analyzer_eval (h == 5); /* { dg-warning "TRUE" } */ @@ -112,8 +108,7 @@ void test_4 (int flag) q = malloc (256); p = malloc (256); } - __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 exploded nodes" } */ - __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 exploded node" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */ free (p); free (q); } diff --git a/gcc/testsuite/gcc.dg/analyzer/paths-7.c b/gcc/testsuite/gcc.dg/analyzer/paths-7.c index 6a99e64439f..243b9635364 100644 --- a/gcc/testsuite/gcc.dg/analyzer/paths-7.c +++ b/gcc/testsuite/gcc.dg/analyzer/paths-7.c @@ -9,12 +9,12 @@ int test (int flag, void *ptr, int *p, int n) int sum = 0; int i; - __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 exploded node" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */ if (flag) free (ptr); - __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 exploded nodes" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 processed enodes" } */ for (i = 0; i < n; i++) p[i] = i; @@ -22,7 +22,7 @@ int test (int flag, void *ptr, int *p, int n) sum += foo (p[i]); /* { dg-bogus "uninitialized" } */ result = sum; - __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 exploded nodes" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 processed enodes" } */ if (flag) free (ptr); /* { dg-warning "double-'free' of 'ptr'" } */ @@ -37,12 +37,12 @@ int test_2 (int flag, int *p, int n) void *ptr = malloc (16); - __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 exploded node" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */ if (flag) free (ptr); - __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 exploded nodes" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 processed enodes" } */ for (i = 0; i < n; i++) p[i] = i; @@ -50,8 +50,7 @@ int test_2 (int flag, int *p, int n) sum += foo (p[i]); /* { dg-bogus "uninitialized" } */ result = sum; - __analyzer_dump_exploded_nodes (0); /* { dg-warning "5 exploded nodes" } */ - __analyzer_dump_exploded_nodes (0); /* { dg-warning "5 exploded nodes" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "5 processed enodes" } */ // FIXME: why 5 here? free (ptr); /* { dg-warning "double-'free' of 'ptr'" } */ diff --git a/gcc/testsuite/gcc.dg/analyzer/torture/conditionals-2.c b/gcc/testsuite/gcc.dg/analyzer/torture/conditionals-2.c index 5580d22ab92..35b0a05f649 100644 --- a/gcc/testsuite/gcc.dg/analyzer/torture/conditionals-2.c +++ b/gcc/testsuite/gcc.dg/analyzer/torture/conditionals-2.c @@ -7,7 +7,7 @@ static void __attribute__((noinline)) test_1_callee (void *p, void *q) { - __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 exploded node" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */ __analyzer_eval (p == Z_NULL); /* { dg-warning "FALSE" } */ __analyzer_eval (p != Z_NULL); /* { dg-warning "TRUE" } */ @@ -27,7 +27,7 @@ void test_1 (void *p, void *q) static void __attribute__((noinline)) test_2_callee (void *p, void *q) { - __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 exploded node" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */ __analyzer_eval (p == Z_NULL); /* { dg-warning "FALSE" } */ __analyzer_eval (p != Z_NULL); /* { dg-warning "TRUE" } */ diff --git a/gcc/testsuite/gcc.dg/analyzer/zlib-1.c b/gcc/testsuite/gcc.dg/analyzer/zlib-1.c index 5537c984e1a..171af3d6852 100644 --- a/gcc/testsuite/gcc.dg/analyzer/zlib-1.c +++ b/gcc/testsuite/gcc.dg/analyzer/zlib-1.c @@ -21,49 +21,44 @@ int deflateEnd(z_stream *strm) { int status; - __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 exploded node" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */ if (strm == 0 || strm->state == 0) return (-2); - __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 exploded node" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */ status = strm->state->status; if (status != 42 && status != 113 && status != 666) { return (-2); } - __analyzer_dump_exploded_nodes (0); /* { dg-warning "4 exploded nodes" } */ - __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 exploded node" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */ if (strm->state->pending_buf) (*(strm->zfree))(strm->opaque, (void *)(strm->state->pending_buf)); - __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 exploded nodes" } */ - __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 exploded node" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */ if (strm->state->head) (*(strm->zfree))(strm->opaque, (void *)(strm->state->head)); - __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 exploded nodes" } */ - __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 exploded node" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */ if (strm->state->prev) (*(strm->zfree))(strm->opaque, (void *)(strm->state->prev)); - __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 exploded nodes" } */ - __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 exploded node" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */ if (strm->state->window) (*(strm->zfree))(strm->opaque, (void *)(strm->state->window)); - __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 exploded nodes" } */ - __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 exploded node" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */ (*(strm->zfree))(strm->opaque, (void *)(strm->state)); strm->state = 0; - __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 exploded node" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */ return status == 113 ? (-3) : 0; } diff --git a/gcc/testsuite/gcc.dg/analyzer/zlib-5.c b/gcc/testsuite/gcc.dg/analyzer/zlib-5.c index 715604dbe77..afb61023330 100644 --- a/gcc/testsuite/gcc.dg/analyzer/zlib-5.c +++ b/gcc/testsuite/gcc.dg/analyzer/zlib-5.c @@ -42,7 +42,7 @@ int main(int argc, char *argv[]) { if (compr == 0 || uncompr == 0) exit(1); - __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 exploded node" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */ test_compress(compr, comprLen, uncompr, uncomprLen); -- 2.30.2