Skip to content

Commit 7b5d5e5

Browse files
committed
Remove unused value_sett::do_free
It appears to be impossible to create a free statement (as opposed to a call to stdlib's free); therefore this path can't be exercised. All the better, since updating everyone's pointers (rather than tracking allocated / deallocated status with the object itself) is surely a mistake in any case.
1 parent 48e1e6c commit 7b5d5e5

File tree

2 files changed

+0
-96
lines changed

2 files changed

+0
-96
lines changed

src/pointer-analysis/value_set.cpp

Lines changed: 0 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -1272,86 +1272,6 @@ void value_sett::assign(
12721272
}
12731273
}
12741274

1275-
void value_sett::do_free(
1276-
const exprt &op,
1277-
const namespacet &ns)
1278-
{
1279-
// op must be a pointer
1280-
if(op.type().id()!=ID_pointer)
1281-
throw "free expected to have pointer-type operand";
1282-
1283-
// find out what it points to
1284-
object_mapt value_set;
1285-
get_value_set(op, value_set, ns, false);
1286-
1287-
const object_map_dt &object_map=value_set.read();
1288-
1289-
// find out which *instances* interest us
1290-
dynamic_object_id_sett to_mark;
1291-
1292-
for(object_map_dt::const_iterator
1293-
it=object_map.begin();
1294-
it!=object_map.end();
1295-
it++)
1296-
{
1297-
const exprt &object=object_numbering[it->first];
1298-
1299-
if(object.id()==ID_dynamic_object)
1300-
{
1301-
const dynamic_object_exprt &dynamic_object=
1302-
to_dynamic_object_expr(object);
1303-
1304-
if(dynamic_object.valid().is_true())
1305-
to_mark.insert(dynamic_object.get_instance());
1306-
}
1307-
}
1308-
1309-
// mark these as 'may be invalid'
1310-
// this, unfortunately, destroys the sharing
1311-
for(valuest::iterator v_it=values.begin();
1312-
v_it!=values.end();
1313-
v_it++)
1314-
{
1315-
object_mapt new_object_map;
1316-
1317-
const object_map_dt &old_object_map=
1318-
v_it->second.object_map.read();
1319-
1320-
bool changed=false;
1321-
1322-
for(object_map_dt::const_iterator
1323-
o_it=old_object_map.begin();
1324-
o_it!=old_object_map.end();
1325-
o_it++)
1326-
{
1327-
const exprt &object=object_numbering[o_it->first];
1328-
1329-
if(object.id()==ID_dynamic_object)
1330-
{
1331-
const dynamic_object_exprt &dynamic_object=
1332-
to_dynamic_object_expr(object);
1333-
1334-
if(to_mark.count(dynamic_object.get_instance())==0)
1335-
set(new_object_map, *o_it);
1336-
else
1337-
{
1338-
// adjust
1339-
offsett o = o_it->second;
1340-
exprt tmp(object);
1341-
to_dynamic_object_expr(tmp).valid()=exprt(ID_unknown);
1342-
insert(new_object_map, tmp, o);
1343-
changed=true;
1344-
}
1345-
}
1346-
else
1347-
set(new_object_map, *o_it);
1348-
}
1349-
1350-
if(changed)
1351-
v_it->second.object_map=new_object_map;
1352-
}
1353-
}
1354-
13551275
void value_sett::assign_rec(
13561276
const exprt &lhs,
13571277
const object_mapt &values_rhs,
@@ -1608,15 +1528,6 @@ void value_sett::apply_code_rec(
16081528
{
16091529
// does nothing
16101530
}
1611-
else if(statement==ID_free)
1612-
{
1613-
// this may kill a valid bit
1614-
1615-
if(code.operands().size()!=1)
1616-
throw "free expected to have one operand";
1617-
1618-
do_free(code.op0(), ns);
1619-
}
16201531
else if(statement=="lock" || statement=="unlock")
16211532
{
16221533
// ignore for now

src/pointer-analysis/value_set.h

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -493,13 +493,6 @@ class value_sett
493493
const exprt &src,
494494
exprt &dest) const;
495495

496-
/// Marks objects that may be pointed to by `op` as maybe-invalid
497-
/// \param op: pointer to invalidate
498-
/// \param ns: global namespace
499-
void do_free(
500-
const exprt &op,
501-
const namespacet &ns);
502-
503496
/// Extracts a member from a struct- or union-typed expression.
504497
/// Usually that means making a `member_exprt`, but this can shortcut
505498
/// extracting members from constants or with-expressions.

0 commit comments

Comments
 (0)