Skip to content

Commit 02e7b4a

Browse files
authored
Merge pull request diffblue#1499 from smowton/smowton/feature/vsa_take_two
Templatize value-set analysis
2 parents 386a3bc + 6ebceca commit 02e7b4a

12 files changed

+707
-60
lines changed

src/pointer-analysis/Makefile

-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ SRC = add_failed_symbols.cpp \
1111
value_set_analysis_fivr.cpp \
1212
value_set_analysis_fivrns.cpp \
1313
value_set_dereference.cpp \
14-
value_set_domain.cpp \
1514
value_set_domain_fi.cpp \
1615
value_set_domain_fivr.cpp \
1716
value_set_domain_fivrns.cpp \

src/pointer-analysis/show_value_sets.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,10 @@ Author: Daniel Kroening, [email protected]
1212
#ifndef CPROVER_POINTER_ANALYSIS_SHOW_VALUE_SETS_H
1313
#define CPROVER_POINTER_ANALYSIS_SHOW_VALUE_SETS_H
1414

15+
#include <pointer-analysis/value_set_analysis.h>
1516
#include <util/ui_message.h>
1617

1718
class goto_modelt;
18-
class value_set_analysist;
1919

2020
void show_value_sets(
2121
ui_message_handlert::uit,

src/pointer-analysis/value_set.cpp

+15-2
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@ Author: Daniel Kroening, [email protected]
3333

3434
#include "add_failed_symbols.h"
3535

36+
// Due to a large number of functions defined inline, `value_sett` and
37+
// associated types are documented in its header file, `value_set.h`.
38+
3639
const value_sett::object_map_dt value_sett::object_map_dt::blank{};
3740
object_numberingt value_sett::object_numbering;
3841

@@ -1205,6 +1208,12 @@ void value_sett::assign(
12051208
object_mapt values_rhs;
12061209
get_value_set(rhs, values_rhs, ns, is_simplified);
12071210

1211+
// Permit custom subclass to alter the read values prior to write:
1212+
adjust_assign_rhs_values(rhs, ns, values_rhs);
1213+
1214+
// Permit custom subclass to perform global side-effects prior to write:
1215+
apply_assign_side_effects(lhs, rhs, ns);
1216+
12081217
assign_rec(lhs, values_rhs, "", ns, add_to_sets);
12091218
}
12101219
}
@@ -1484,7 +1493,7 @@ void value_sett::do_end_function(
14841493
assign(lhs, rhs, ns, false, false);
14851494
}
14861495

1487-
void value_sett::apply_code(
1496+
void value_sett::apply_code_rec(
14881497
const codet &code,
14891498
const namespacet &ns)
14901499
{
@@ -1493,7 +1502,7 @@ void value_sett::apply_code(
14931502
if(statement==ID_block)
14941503
{
14951504
forall_operands(it, code)
1496-
apply_code(to_code(*it), ns);
1505+
apply_code_rec(to_code(*it), ns);
14971506
}
14981507
else if(statement==ID_function_call)
14991508
{
@@ -1611,6 +1620,10 @@ void value_sett::apply_code(
16111620
{
16121621
// doesn't do anything
16131622
}
1623+
else if(statement==ID_dead)
1624+
{
1625+
// Ignore by default; could prune the value set.
1626+
}
16141627
else
16151628
{
16161629
// std::cerr << code.pretty() << '\n';

0 commit comments

Comments
 (0)