From c0f9608958245e4afd425fd14954bd43c8f78a4b Mon Sep 17 00:00:00 2001 From: David Malcolm Date: Thu, 9 Jul 2020 17:49:27 -0400 Subject: [PATCH 296/315] FIXME: merge m_called_unknown_fn --- gcc/analyzer/store2.cc | 3 +++ gcc/testsuite/gcc.dg/analyzer/paths-4.c | 10 +++++----- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/gcc/analyzer/store2.cc b/gcc/analyzer/store2.cc index 4f26e67b579..b4efe5a5a98 100644 --- a/gcc/analyzer/store2.cc +++ b/gcc/analyzer/store2.cc @@ -1573,6 +1573,9 @@ store2::can_merge_p (const store2 *store_a, const store2 *store_b, store2 *out_store, store2_manager *mgr, model2_merger *merger) { + if (store_a->m_called_unknown_fn || store_b->m_called_unknown_fn) + out_store->m_called_unknown_fn = true; + /* Get the union of all base regions for STORE_A and STORE_B. */ hash_set base_regions; for (cluster_map_t::iterator iter_a = store_a->m_cluster_map.begin (); diff --git a/gcc/testsuite/gcc.dg/analyzer/paths-4.c b/gcc/testsuite/gcc.dg/analyzer/paths-4.c index 527bad8e9d7..b72e658739e 100644 --- a/gcc/testsuite/gcc.dg/analyzer/paths-4.c +++ b/gcc/testsuite/gcc.dg/analyzer/paths-4.c @@ -13,8 +13,8 @@ int test_1 (struct state *s) __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */ while (1) { - __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */ - __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 processed enode" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 processed enode" } */ /* TODO: why does the above need an extra stmt to merge state? */ do_stuff (s, s->mode); } @@ -25,13 +25,13 @@ int test_2 (struct state *s) __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */ while (1) { - __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */ - __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 processed enode" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 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 processed enode" } */ + __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 processed enode" } */ do_stuff (s, 0); break; case 1: -- 2.26.2