Skip to content

Commit 03f5c16

Browse files
Make set_indices a template
This makes the interface of goto_symex_statet simpler and can simplify code of function templates using set_indices
1 parent 683495f commit 03f5c16

File tree

2 files changed

+20
-22
lines changed

2 files changed

+20
-22
lines changed

src/goto-symex/goto_symex_state.cpp

+17-14
Original file line numberDiff line numberDiff line change
@@ -156,20 +156,23 @@ class goto_symex_is_constantt : public is_constantt
156156
}
157157
};
158158

159+
template <>
159160
renamedt<ssa_exprt, L0>
160-
goto_symex_statet::set_l0_indices(ssa_exprt ssa_expr, const namespacet &ns)
161+
goto_symex_statet::set_indices<L0>(ssa_exprt ssa_expr, const namespacet &ns)
161162
{
162163
return level0(std::move(ssa_expr), ns, source.thread_nr);
163164
}
164165

166+
template <>
165167
renamedt<ssa_exprt, L1>
166-
goto_symex_statet::set_l1_indices(ssa_exprt ssa_expr, const namespacet &ns)
168+
goto_symex_statet::set_indices<L1>(ssa_exprt ssa_expr, const namespacet &ns)
167169
{
168170
return level1(level0(std::move(ssa_expr), ns, source.thread_nr));
169171
}
170172

173+
template <>
171174
renamedt<ssa_exprt, L2>
172-
goto_symex_statet::set_l2_indices(ssa_exprt ssa_expr, const namespacet &ns)
175+
goto_symex_statet::set_indices<L2>(ssa_exprt ssa_expr, const namespacet &ns)
173176
{
174177
return level2(level1(level0(std::move(ssa_expr), ns, source.thread_nr)));
175178
}
@@ -206,7 +209,7 @@ void goto_symex_statet::assignment(
206209
const auto level2_it =
207210
level2.current_names.emplace(l1_identifier, std::make_pair(lhs, 0)).first;
208211
symex_renaming_levelt::increase_counter(level2_it);
209-
lhs = set_l2_indices(std::move(lhs), ns).get();
212+
lhs = set_indices<L2>(std::move(lhs), ns).get();
210213

211214
// in case we happen to be multi-threaded, record the memory access
212215
bool is_shared=l2_thread_write_encoding(lhs, ns);
@@ -260,9 +263,9 @@ ssa_exprt goto_symex_statet::rename_ssa(ssa_exprt ssa, const namespacet &ns)
260263
level == L0 || level == L1,
261264
"rename_ssa can only be used for levels L0 and L1");
262265
if(level == L0)
263-
ssa = set_l0_indices(std::move(ssa), ns).get();
266+
ssa = set_indices<L0>(std::move(ssa), ns).get();
264267
else if(level == L1)
265-
ssa = set_l1_indices(std::move(ssa), ns).get();
268+
ssa = set_indices<L1>(std::move(ssa), ns).get();
266269
else
267270
UNREACHABLE;
268271

@@ -297,7 +300,7 @@ exprt goto_symex_statet::rename(exprt expr, const namespacet &ns)
297300
}
298301
else if(level==L2)
299302
{
300-
ssa = set_l1_indices(std::move(ssa), ns).get();
303+
ssa = set_indices<L1>(std::move(ssa), ns).get();
301304
rename<level>(expr.type(), ssa.get_identifier(), ns);
302305
ssa.update_type();
303306

@@ -318,7 +321,7 @@ exprt goto_symex_statet::rename(exprt expr, const namespacet &ns)
318321
if(p_it != propagation.end())
319322
expr=p_it->second; // already L2
320323
else
321-
ssa = set_l2_indices(std::move(ssa), ns).get();
324+
ssa = set_indices<L2>(std::move(ssa), ns).get();
322325
}
323326
}
324327
}
@@ -432,7 +435,7 @@ bool goto_symex_statet::l2_thread_read_encoding(
432435
if(!no_write.op().is_false())
433436
cond |= guardt{no_write.op()};
434437

435-
const renamedt<ssa_exprt, L2> l2_true_case = set_l2_indices(ssa_l1, ns);
438+
const renamedt<ssa_exprt, L2> l2_true_case = set_indices<L2>(ssa_l1, ns);
436439

437440
if(a_s_read.second.empty())
438441
{
@@ -442,7 +445,7 @@ bool goto_symex_statet::l2_thread_read_encoding(
442445
symex_renaming_levelt::increase_counter(level2_it);
443446
a_s_read.first=level2.current_count(l1_identifier);
444447
}
445-
const renamedt<ssa_exprt, L2> l2_false_case = set_l2_indices(ssa_l1, ns);
448+
const renamedt<ssa_exprt, L2> l2_false_case = set_indices<L2>(ssa_l1, ns);
446449

447450
exprt tmp;
448451
if(cond.is_false())
@@ -464,7 +467,7 @@ bool goto_symex_statet::l2_thread_read_encoding(
464467
source,
465468
symex_targett::assignment_typet::PHI);
466469

467-
expr = set_l2_indices(std::move(ssa_l1), ns).get();
470+
expr = set_indices<L2>(std::move(ssa_l1), ns).get();
468471

469472
a_s_read.second.push_back(guard);
470473
if(!no_write.op().is_false())
@@ -480,13 +483,13 @@ bool goto_symex_statet::l2_thread_read_encoding(
480483
// No event and no fresh index, but avoid constant propagation
481484
if(!record_events)
482485
{
483-
expr = set_l2_indices(std::move(ssa_l1), ns).get();
486+
expr = set_indices<L2>(std::move(ssa_l1), ns).get();
484487
return true;
485488
}
486489

487490
// produce a fresh L2 name
488491
symex_renaming_levelt::increase_counter(level2_it);
489-
expr = set_l2_indices(std::move(ssa_l1), ns).get();
492+
expr = set_indices<L2>(std::move(ssa_l1), ns).get();
490493

491494
// and record that
492495
INVARIANT_STRUCTURED(
@@ -543,7 +546,7 @@ void goto_symex_statet::rename_address(exprt &expr, const namespacet &ns)
543546
ssa_exprt &ssa=to_ssa_expr(expr);
544547

545548
// only do L1!
546-
ssa = set_l1_indices(std::move(ssa), ns).get();
549+
ssa = set_indices<L1>(std::move(ssa), ns).get();
547550

548551
rename<level>(expr.type(), ssa.get_identifier(), ns);
549552
ssa.update_type();

src/goto-symex/goto_symex_state.h

+3-8
Original file line numberDiff line numberDiff line change
@@ -113,14 +113,9 @@ class goto_symex_statet final : public goto_statet
113113
template <levelt>
114114
void rename_address(exprt &expr, const namespacet &ns);
115115

116-
/// Update level 0 values.
117-
renamedt<ssa_exprt, L0> set_l0_indices(ssa_exprt expr, const namespacet &ns);
118-
119-
/// Update level 0 and 1 values.
120-
renamedt<ssa_exprt, L1> set_l1_indices(ssa_exprt expr, const namespacet &ns);
121-
122-
/// Update level 0, 1 and 2 values.
123-
renamedt<ssa_exprt, L2> set_l2_indices(ssa_exprt expr, const namespacet &ns);
116+
/// Update values up to \c level.
117+
template <levelt level>
118+
renamedt<ssa_exprt, level> set_indices(ssa_exprt expr, const namespacet &ns);
124119

125120
// this maps L1 names to (L2) types
126121
typedef std::unordered_map<irep_idt, typet> l1_typest;

0 commit comments

Comments
 (0)