Skip to content

Commit d93594a

Browse files
committed
Add switch to make pointer simplication changes VSD only
1 parent 98d22ae commit d93594a

File tree

6 files changed

+39
-14
lines changed

6 files changed

+39
-14
lines changed

scripts/expected_doxygen_warnings.txt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
1-
/home/runner/work/cbmc/cbmc/src/solvers/sat/satcheck_glucose.cpp:246: warning: no matching class member found for
1+
/home/runner/work/cbmc/cbmc/src/solvers/sat/satcheck_glucose.cpp:253: warning: no matching class member found for
22
template
33
satcheck_glucose_baset< Glucose::Solver >::~satcheck_glucose_baset()
44

5-
/home/runner/work/cbmc/cbmc/src/solvers/sat/satcheck_glucose.cpp:252: warning: no matching class member found for
5+
/home/runner/work/cbmc/cbmc/src/solvers/sat/satcheck_glucose.cpp:259: warning: no matching class member found for
66
template
77
satcheck_glucose_baset< Glucose::SimpSolver >::~satcheck_glucose_baset()
88

9-
/home/runner/work/cbmc/cbmc/src/solvers/sat/satcheck_minisat2.cpp:313: warning: no matching class member found for
9+
/home/runner/work/cbmc/cbmc/src/solvers/sat/satcheck_minisat2.cpp:316: warning: no matching class member found for
1010
template
1111
satcheck_minisat2_baset< Minisat::Solver >::~satcheck_minisat2_baset()
1212

13-
/home/runner/work/cbmc/cbmc/src/solvers/sat/satcheck_minisat2.cpp:319: warning: no matching class member found for
13+
/home/runner/work/cbmc/cbmc/src/solvers/sat/satcheck_minisat2.cpp:322: warning: no matching class member found for
1414
template
1515
satcheck_minisat2_baset< Minisat::SimpSolver >::~satcheck_minisat2_baset()
1616

@@ -94,7 +94,7 @@ warning: Included by graph for 'message.h' not generated, too many nodes (117),
9494
warning: Included by graph for 'namespace.h' not generated, too many nodes (109), threshold is 60. Consider increasing DOT_GRAPH_MAX_NODES.
9595
warning: Included by graph for 'pointer_expr.h' not generated, too many nodes (117), threshold is 60. Consider increasing DOT_GRAPH_MAX_NODES.
9696
warning: Included by graph for 'prefix.h' not generated, too many nodes (85), threshold is 60. Consider increasing DOT_GRAPH_MAX_NODES.
97-
warning: Included by graph for 'simplify_expr.h' not generated, too many nodes (77), threshold is 60. Consider increasing DOT_GRAPH_MAX_NODES.
97+
warning: Included by graph for 'simplify_expr.h' not generated, too many nodes (76), threshold is 60. Consider increasing DOT_GRAPH_MAX_NODES.
9898
warning: Included by graph for 'std_code.h' not generated, too many nodes (78), threshold is 60. Consider increasing DOT_GRAPH_MAX_NODES.
9999
warning: Included by graph for 'std_expr.h' not generated, too many nodes (243), threshold is 60. Consider increasing DOT_GRAPH_MAX_NODES.
100100
warning: Included by graph for 'std_types.h' not generated, too many nodes (117), threshold is 60. Consider increasing DOT_GRAPH_MAX_NODES.

src/analyses/variable-sensitivity/abstract_environment.cpp

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
#include <analyses/variable-sensitivity/variable_sensitivity_object_factory.h>
1818
#include <util/pointer_expr.h>
1919
#include <util/simplify_expr.h>
20+
#include <util/simplify_expr_class.h>
2021

2122
#include <algorithm>
2223
#include <functional>
@@ -33,14 +34,16 @@ std::vector<abstract_object_pointert> eval_operands(
3334
const abstract_environmentt &env,
3435
const namespacet &ns);
3536

37+
exprt simplify_vsd_expr(exprt src, const namespacet &ns);
38+
3639
abstract_object_pointert
3740
abstract_environmentt::eval(const exprt &expr, const namespacet &ns) const
3841
{
3942
if(bottom)
4043
return abstract_object_factory(expr.type(), ns, false, true);
4144

4245
// first try to canonicalise, including constant folding
43-
const exprt &simplified_expr = simplify_expr(expr, ns);
46+
const exprt &simplified_expr = simplify_vsd_expr(expr, ns);
4447

4548
const irep_idt simplified_id = simplified_expr.id();
4649
if(simplified_id == ID_symbol)
@@ -477,3 +480,18 @@ std::vector<abstract_object_pointert> eval_operands(
477480

478481
return operands;
479482
}
483+
484+
class simplify_vsd_exprt : public simplify_exprt
485+
{
486+
public:
487+
simplify_vsd_exprt(const namespacet &_ns) : simplify_exprt(_ns)
488+
{
489+
vsd_pointers = true;
490+
}
491+
};
492+
493+
exprt simplify_vsd_expr(exprt src, const namespacet &ns)
494+
{
495+
simplify_vsd_exprt(ns).simplify(src);
496+
return src;
497+
}

src/analyses/variable-sensitivity/abstract_environment.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@
2828
#include <util/sharing_map.h>
2929
#include <util/std_expr.h>
3030

31+
exprt simplify_vsd_expr(exprt src, const namespacet &ns);
32+
3133
class variable_sensitivity_object_factoryt;
3234
using variable_sensitivity_object_factory_ptrt =
3335
std::shared_ptr<variable_sensitivity_object_factoryt>;

src/analyses/variable-sensitivity/abstract_object.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ abstract_object_pointert abstract_objectt::expression_transform(
120120
op = const_op.is_nil() ? op : const_op;
121121
}
122122

123-
simplify(copy, ns);
123+
simplify_vsd_expr(copy, ns);
124124

125125
for(const exprt &op : copy.operands())
126126
{

src/util/simplify_expr_class.h

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -71,11 +71,13 @@ class with_exprt;
7171
class simplify_exprt
7272
{
7373
public:
74-
explicit simplify_exprt(const namespacet &_ns):
75-
do_simplify_if(true),
76-
ns(_ns)
74+
explicit simplify_exprt(const namespacet &_ns)
75+
: do_simplify_if(true),
76+
ns(_ns),
77+
vsd_pointers(false)
7778
#ifdef DEBUG_ON_DEMAND
78-
, debug_on(false)
79+
,
80+
debug_on(false)
7981
#endif
8082
{
8183
#ifdef DEBUG_ON_DEMAND
@@ -238,6 +240,8 @@ class simplify_exprt
238240

239241
protected:
240242
const namespacet &ns;
243+
bool vsd_pointers;
244+
241245
#ifdef DEBUG_ON_DEMAND
242246
bool debug_on;
243247
#endif

src/util/simplify_expr_int.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -455,8 +455,8 @@ simplify_exprt::resultt<> simplify_exprt::simplify_plus(const plus_exprt &expr)
455455

456456
// (T*)p+a - don't simplify any further
457457
if(
458-
expr.type().id() == ID_pointer && expr.operands().size() == 2 &&
459-
is_number(expr.op1().type()))
458+
vsd_pointers && expr.type().id() == ID_pointer &&
459+
expr.operands().size() == 2 && is_number(expr.op1().type()))
460460
{
461461
return unchanged(expr);
462462
}
@@ -599,7 +599,8 @@ simplify_exprt::simplify_minus(const minus_exprt &expr)
599599
if(operands[0]==operands[1])
600600
return from_integer(0, minus_expr.type());
601601

602-
return to_ptr_diff_expr(minus_expr);
602+
if(vsd_pointers)
603+
return to_ptr_diff_expr(minus_expr);
603604
}
604605

605606
return unchanged(expr);

0 commit comments

Comments
 (0)