Skip to content

Commit 1036d4c

Browse files
Merge pull request diffblue#213 from hannes-steffenhagen-diffblue/feature-domain_summary-28
Feature domain summary 28
2 parents ade2820 + 9e2b42b commit 1036d4c

19 files changed

+160
-2
lines changed

src/analyses/variable-sensitivity/abstract_enviroment.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
#include <stack>
1010
#include <map>
1111
#include <ostream>
12+
#include <algorithm>
1213

1314
#include <analyses/variable-sensitivity/abstract_object.h>
1415
#include <analyses/variable-sensitivity/constant_abstract_value.h>
@@ -739,10 +740,21 @@ std::vector<symbol_exprt> abstract_environmentt::modified_symbols(
739740
return symbols_diff;
740741
}
741742

743+
static std::size_t count_globals(const namespacet &ns)
744+
{
745+
auto const& symtab = ns.get_symbol_table();
746+
auto val = std::count_if(symtab.begin(), symtab.end(),
747+
[](const symbol_table_baset::const_iteratort::value_type& sym) {
748+
return sym.second.is_lvalue && sym.second.is_static_lifetime;
749+
});
750+
return val;
751+
}
752+
742753
abstract_object_statisticst
743754
abstract_environmentt::gather_statistics(const namespacet &ns) const
744755
{
745756
abstract_object_statisticst statistics = {};
757+
statistics.number_of_globals = count_globals(ns);
746758
decltype(map)::viewt view;
747759
map.get_view(view);
748760
abstract_object_visitedt visited;

src/analyses/variable-sensitivity/abstract_object_statistics.h

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,18 @@
33

44
#include <cstddef>
55

6+
#include <util/memory_units.h>
67
struct abstract_object_statisticst
78
{
8-
std::size_t number_of_interval_abstract_objects;
9-
std::size_t number_of_single_value_intervals;
9+
std::size_t number_of_interval_abstract_objects = 0;
10+
std::size_t number_of_single_value_intervals = 0;
11+
std::size_t number_of_structs = 0;
12+
std::size_t number_of_arrays = 0;
13+
std::size_t number_of_pointers = 0;
14+
std::size_t number_of_constants = 0;
15+
std::size_t number_of_globals = 0;
16+
/// An underestimation of the memory usage of the abstract objects
17+
memory_sizet objects_memory_usage;
1018
};
1119

1220
#endif // CPROVER_ANALYSES_VARIABLE_SENSITIVITY_ABSTRACT_OBJECT_STATISTICS_H

src/analyses/variable-sensitivity/array_abstract_object.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,3 +199,9 @@ sharing_ptrt<array_abstract_objectt> array_abstract_objectt::write_index(
199199
new array_abstract_objectt(type(), true, false));
200200
}
201201
}
202+
203+
void array_abstract_objectt::get_statistics(abstract_object_statisticst &statistics, abstract_object_visitedt &visited,
204+
const abstract_environmentt &env, const namespacet &ns) const {
205+
abstract_objectt::get_statistics(statistics, visited, env, ns);
206+
++statistics.number_of_arrays;
207+
}

src/analyses/variable-sensitivity/array_abstract_object.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,9 @@ class array_abstract_objectt:public abstract_objectt
3939
const abstract_object_pointert value,
4040
bool merging_write) const override;
4141

42+
void get_statistics(abstract_object_statisticst &statistics, abstract_object_visitedt &visited,
43+
const abstract_environmentt &env, const namespacet &ns) const override;
44+
4245
protected:
4346
CLONE
4447

src/analyses/variable-sensitivity/constant_abstract_value.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,3 +231,13 @@ abstract_object_pointert constant_abstract_valuet::merge_constant_constant(
231231
}
232232
}
233233
}
234+
235+
void constant_abstract_valuet::get_statistics(abstract_object_statisticst &statistics,
236+
abstract_object_visitedt &visited,
237+
const abstract_environmentt &env,
238+
const namespacet& ns) const
239+
{
240+
abstract_valuet::get_statistics(statistics, visited, env, ns);
241+
++statistics.number_of_constants;
242+
statistics.objects_memory_usage += memory_sizet::from_bytes(sizeof(*this));
243+
}

src/analyses/variable-sensitivity/constant_abstract_value.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,11 @@ class constant_abstract_valuet:public abstract_valuet
4242
const class ai_baset &ai,
4343
const class namespacet &ns) const override;
4444

45+
void get_statistics(abstract_object_statisticst &statistics,
46+
abstract_object_visitedt &visited,
47+
const abstract_environmentt &env,
48+
const namespacet& ns) const override;
49+
4550
protected:
4651
CLONE
4752
virtual abstract_object_pointert merge(

src/analyses/variable-sensitivity/constant_array_abstract_object.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -549,4 +549,5 @@ void constant_array_abstract_objectt::get_statistics(
549549
object.second->get_statistics(statistics, visited, env, ns);
550550
}
551551
}
552+
statistics.objects_memory_usage += memory_sizet::from_bytes(sizeof(*this));
552553
}

src/analyses/variable-sensitivity/constant_pointer_abstract_object.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -373,4 +373,5 @@ void constant_pointer_abstract_objectt::get_statistics(
373373
{
374374
read_dereference(env, ns)->get_statistics(statistics, visited, env, ns);
375375
}
376+
statistics.objects_memory_usage += memory_sizet::from_bytes(sizeof(*this));
376377
}

src/analyses/variable-sensitivity/context_abstract_object.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,4 +180,5 @@ void context_abstract_objectt::get_statistics(
180180
{
181181
child_abstract_object->get_statistics(statistics, visited, env, ns);
182182
}
183+
statistics.objects_memory_usage += memory_sizet::from_bytes(sizeof(*this));
183184
}

src/analyses/variable-sensitivity/full_struct_abstract_object.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -496,4 +496,5 @@ void full_struct_abstract_objectt::get_statistics(
496496
object.second->get_statistics(statistics, visited, env, ns);
497497
}
498498
}
499+
statistics.objects_memory_usage += memory_sizet::from_bytes(sizeof(*this));
499500
}

0 commit comments

Comments
 (0)