Skip to content

Commit 87e8ab1

Browse files
author
klaas
committed
Disambiguates two exprts with the same ID.
This commit resolves an issue where ID_dynamic_object was used to label two semantically distinct exprts. One, with a single operand, was a boolean expression meaning that the operand is a pointer to a dynamic object. This has been renamed to ID_is_dynamic_object. The second, with two operands, is an exprt representing a dynamic object itself. This has stayed ID_dynamic_object. Disambiguating which meaning was intended in each case was relatively easy, as uses of these exprts frequently come with assertions about the number of operands, and so this was used to inform which instances of ID_dynamic_object should be changed and which should be left the same.
1 parent 7c56091 commit 87e8ab1

File tree

11 files changed

+19
-18
lines changed

11 files changed

+19
-18
lines changed

regression/goto-instrument/slice19/test.desc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
KNOWNBUG
1+
CORE
22
main.c
33
--full-slice
44
^EXIT=0$

src/ansi-c/c_typecheck_expr.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2141,7 +2141,7 @@ exprt c_typecheck_baset::do_special_functions(
21412141
throw 0;
21422142
}
21432143

2144-
exprt dynamic_object_expr=exprt(ID_dynamic_object, expr.type());
2144+
exprt dynamic_object_expr=exprt(ID_is_dynamic_object, expr.type());
21452145
dynamic_object_expr.operands()=expr.arguments();
21462146
dynamic_object_expr.add_source_location()=source_location;
21472147

src/ansi-c/expr2c.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3574,7 +3574,7 @@ std::string expr2ct::convert_with_precedence(
35743574
else if(src.id()==ID_invalid_pointer)
35753575
return convert_function(src, "__CPROVER_invalid_pointer", precedence=16);
35763576

3577-
else if(src.id()==ID_dynamic_object)
3577+
else if(src.id()==ID_is_dynamic_object)
35783578
return convert_function(src, "DYNAMIC_OBJECT", precedence=16);
35793579

35803580
else if(src.id()=="is_zero_string")

src/solvers/flattening/bv_pointers.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ literalt bv_pointerst::convert_rest(const exprt &expr)
4545
}
4646
}
4747
}
48-
else if(expr.id()==ID_dynamic_object)
48+
else if(expr.id()==ID_is_dynamic_object)
4949
{
5050
if(operands.size()==1 &&
5151
operands[0].type().id()==ID_pointer)
@@ -735,7 +735,7 @@ void bv_pointerst::add_addr(const exprt &expr, bvt &bv)
735735
void bv_pointerst::do_postponed(
736736
const postponedt &postponed)
737737
{
738-
if(postponed.expr.id()==ID_dynamic_object)
738+
if(postponed.expr.id()==ID_is_dynamic_object)
739739
{
740740
const pointer_logict::objectst &objects=
741741
pointer_logic.objects;

src/solvers/smt2/smt2_conv.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1367,7 +1367,7 @@ void smt2_convt::convert_expr(const exprt &expr)
13671367
if(ext>0)
13681368
out << ")"; // zero_extend
13691369
}
1370-
else if(expr.id()==ID_dynamic_object)
1370+
else if(expr.id()==ID_is_dynamic_object)
13711371
{
13721372
convert_is_dynamic_object(expr);
13731373
}

src/util/irep_ids.def

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -447,6 +447,7 @@ IREP_ID_TWO(overflow_minus, overflow--)
447447
IREP_ID_TWO(overflow_mult, overflow-*)
448448
IREP_ID_TWO(overflow_unary_minus, overflow-unary-)
449449
IREP_ID_ONE(object_descriptor)
450+
IREP_ID_ONE(is_dynamic_object)
450451
IREP_ID_ONE(dynamic_object)
451452
IREP_ID_TWO(C_dynamic, #dynamic)
452453
IREP_ID_ONE(object_size)

src/util/pointer_predicates.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ exprt dynamic_size(const namespacet &ns)
7070

7171
exprt dynamic_object(const exprt &pointer)
7272
{
73-
exprt dynamic_expr(ID_dynamic_object, bool_typet());
73+
exprt dynamic_expr(ID_is_dynamic_object, bool_typet());
7474
dynamic_expr.copy_to_operands(pointer);
7575
return dynamic_expr;
7676
}

src/util/simplify_expr.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2266,8 +2266,8 @@ bool simplify_exprt::simplify_node(exprt &expr)
22662266
result=simplify_byte_extract(to_byte_extract_expr(expr)) && result;
22672267
else if(expr.id()==ID_pointer_object)
22682268
result=simplify_pointer_object(expr) && result;
2269-
else if(expr.id()==ID_dynamic_object)
2270-
result=simplify_dynamic_object(expr) && result;
2269+
else if(expr.id()==ID_is_dynamic_object)
2270+
result=simplify_is_dynamic_object(expr) && result;
22712271
else if(expr.id()==ID_invalid_pointer)
22722272
result=simplify_invalid_pointer(expr) && result;
22732273
else if(expr.id()==ID_object_size)

src/util/simplify_expr_class.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ class simplify_exprt
9696
bool simplify_pointer_object(exprt &expr);
9797
bool simplify_object_size(exprt &expr);
9898
bool simplify_dynamic_size(exprt &expr);
99-
bool simplify_dynamic_object(exprt &expr);
99+
bool simplify_is_dynamic_object(exprt &expr);
100100
bool simplify_invalid_pointer(exprt &expr);
101101
bool simplify_same_object(exprt &expr);
102102
bool simplify_good_pointer(exprt &expr);

src/util/simplify_expr_int.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1699,7 +1699,7 @@ bool simplify_exprt::simplify_inequality_constant(exprt &expr)
16991699
expr.op0().operands().size()==1)
17001700
{
17011701
if(expr.op0().op0().id()==ID_symbol ||
1702-
expr.op0().op0().id()==ID_dynamic_object ||
1702+
expr.op0().op0().id()==ID_is_dynamic_object ||
17031703
expr.op0().op0().id()==ID_member ||
17041704
expr.op0().op0().id()==ID_index ||
17051705
expr.op0().op0().id()==ID_string_constant)
@@ -1715,7 +1715,7 @@ bool simplify_exprt::simplify_inequality_constant(exprt &expr)
17151715
expr.op0().op0().operands().size()==1)
17161716
{
17171717
if(expr.op0().op0().op0().id()==ID_symbol ||
1718-
expr.op0().op0().op0().id()==ID_dynamic_object ||
1718+
expr.op0().op0().op0().id()==ID_is_dynamic_object ||
17191719
expr.op0().op0().op0().id()==ID_member ||
17201720
expr.op0().op0().op0().id()==ID_index ||
17211721
expr.op0().op0().op0().id()==ID_string_constant)

src/util/simplify_expr_pointer.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -464,7 +464,7 @@ bool simplify_exprt::simplify_inequality_pointer_object(exprt &expr)
464464
{
465465
if(op.operands().size()!=1 ||
466466
(op.op0().id()!=ID_symbol &&
467-
op.op0().id()!=ID_dynamic_object &&
467+
op.op0().id()!=ID_is_dynamic_object &&
468468
op.op0().id()!=ID_string_constant))
469469
return true;
470470
}
@@ -508,18 +508,18 @@ bool simplify_exprt::simplify_pointer_object(exprt &expr)
508508
return result;
509509
}
510510

511-
bool simplify_exprt::simplify_dynamic_object(exprt &expr)
511+
bool simplify_exprt::simplify_is_dynamic_object(exprt &expr)
512512
{
513-
if(expr.operands().size()!=1)
514-
return true;
513+
// This should hold as a result of the expr ID being is_dynamic_object.
514+
PRECONDITION(expr.operands().size() == 1);
515515

516516
exprt &op=expr.op0();
517517

518518
if(op.id()==ID_if && op.operands().size()==3)
519519
{
520520
if_exprt if_expr=lift_if(expr, 0);
521-
simplify_dynamic_object(if_expr.true_case());
522-
simplify_dynamic_object(if_expr.false_case());
521+
simplify_is_dynamic_object(if_expr.true_case());
522+
simplify_is_dynamic_object(if_expr.false_case());
523523
simplify_if(if_expr);
524524
expr.swap(if_expr);
525525

0 commit comments

Comments
 (0)