Skip to content

Commit 02c7e5b

Browse files
Make get_failed_symbol return optional symbol_exprt
This is more precise on the type of object returned.
1 parent c73bfea commit 02c7e5b

File tree

5 files changed

+20
-31
lines changed

5 files changed

+20
-31
lines changed

src/goto-symex/symex_dead.cpp

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -32,14 +32,11 @@ void goto_symext::symex_dead(statet &state)
3232
// in case of pointers, put something into the value set
3333
if(code.symbol().type().id() == ID_pointer)
3434
{
35-
exprt failed = get_failed_symbol(to_symbol_expr(code.symbol()), ns);
36-
37-
exprt rhs;
38-
39-
if(failed.is_not_nil())
40-
rhs = address_of_exprt(failed, to_pointer_type(code.symbol().type()));
41-
else
42-
rhs=exprt(ID_invalid);
35+
exprt rhs = [&]() -> exprt {
36+
if(auto failed = get_failed_symbol(code.symbol(), ns))
37+
return address_of_exprt(*failed, to_pointer_type(code.symbol().type()));
38+
return exprt(ID_invalid);
39+
}();
4340

4441
state.rename(rhs, ns, goto_symex_statet::L1);
4542
state.value_set.assign(ssa, rhs, ns, true, false);

src/goto-symex/symex_decl.cpp

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -48,15 +48,11 @@ void goto_symext::symex_decl(statet &state, const symbol_exprt &expr)
4848
// in case of pointers, put something into the value set
4949
if(expr.type().id() == ID_pointer)
5050
{
51-
exprt failed=
52-
get_failed_symbol(expr, ns);
53-
54-
exprt rhs;
55-
56-
if(failed.is_not_nil())
57-
rhs=address_of_exprt(failed, to_pointer_type(expr.type()));
58-
else
59-
rhs=exprt(ID_invalid);
51+
exprt rhs = [&]() -> exprt {
52+
if(auto failed = get_failed_symbol(expr, ns))
53+
return address_of_exprt(*failed, to_pointer_type(expr.type()));
54+
return exprt(ID_invalid);
55+
}();
6056

6157
state.rename(rhs, ns, goto_symex_statet::L1);
6258
state.value_set.assign(ssa, rhs, ns, true, false);

src/pointer-analysis/add_failed_symbols.cpp

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -89,17 +89,16 @@ void add_failed_symbols(symbol_table_baset &symbol_table)
8989
/// Get the failed-dereference symbol for the given symbol
9090
/// \param expr: symbol expression to get a failed symbol for
9191
/// \param ns: global namespace
92-
/// \return symbol expression for the failed-dereference symbol, or nil_exprt
93-
/// if none exists.
94-
exprt get_failed_symbol(
95-
const symbol_exprt &expr,
96-
const namespacet &ns)
92+
/// \return symbol expression for the failed-dereference symbol, or an empty
93+
/// optional if none exists.
94+
optionalt<symbol_exprt>
95+
get_failed_symbol(const symbol_exprt &expr, const namespacet &ns)
9796
{
9897
const symbolt &symbol=ns.lookup(expr);
9998
irep_idt failed_symbol_id=symbol.type.get(ID_C_failed_symbol);
10099

101100
if(failed_symbol_id.empty())
102-
return nil_exprt();
101+
return {};
103102

104103
const symbolt &failed_symbol=ns.lookup(failed_symbol_id);
105104

src/pointer-analysis/add_failed_symbols.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ Author: Daniel Kroening, [email protected]
1313
#define CPROVER_POINTER_ANALYSIS_ADD_FAILED_SYMBOLS_H
1414

1515
#include <util/irep.h>
16+
#include <util/optional.h>
1617

1718
class symbol_table_baset;
1819
class symbolt;
@@ -27,8 +28,7 @@ void add_failed_symbol_if_needed(
2728

2829
irep_idt failed_symbol_id(const irep_idt &identifier);
2930

30-
exprt get_failed_symbol(
31-
const symbol_exprt &expr,
32-
const namespacet &ns);
31+
optionalt<symbol_exprt>
32+
get_failed_symbol(const symbol_exprt &expr, const namespacet &ns);
3333

3434
#endif // CPROVER_POINTER_ANALYSIS_ADD_FAILED_SYMBOLS_H

src/pointer-analysis/value_set.cpp

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1469,12 +1469,9 @@ void value_sett::apply_code_rec(
14691469
(lhs_type.id() == ID_array && lhs_type.subtype().id() == ID_pointer))
14701470
{
14711471
// assign the address of the failed object
1472-
exprt failed=get_failed_symbol(to_symbol_expr(lhs), ns);
1473-
1474-
if(failed.is_not_nil())
1472+
if(auto failed = get_failed_symbol(to_symbol_expr(lhs), ns))
14751473
{
1476-
address_of_exprt address_of_expr(
1477-
failed, to_pointer_type(lhs.type()));
1474+
address_of_exprt address_of_expr(*failed, to_pointer_type(lhs.type()));
14781475
assign(lhs, address_of_expr, ns, false, false);
14791476
}
14801477
else

0 commit comments

Comments
 (0)