Skip to content

Commit

Permalink
Merge pull request #518 from diffblue/trans-trace-macros
Browse files Browse the repository at this point in the history
BMC: include macros in trace
  • Loading branch information
kroening committed May 22, 2024
2 parents bb26c46 + efc1e22 commit de8cc6a
Show file tree
Hide file tree
Showing 3 changed files with 56 additions and 14 deletions.
15 changes: 15 additions & 0 deletions regression/ebmc/traces/verilog1.desc
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
CORE
verilog1.v
--bound 9 --numbered-trace
^\[.*\] .* REFUTED$
^Counterexample with 10 states:$
^main\.P@0 = 123$
^main\.Q@0 = 124$
^main\.data@0 = 1$
^main\.P@9 = 123$
^main\.Q@9 = 124$
^main\.data@9 = 10$
^EXIT=10$
^SIGNAL=0$
--
^warning: ignoring
14 changes: 14 additions & 0 deletions regression/ebmc/traces/verilog1.v
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
module main(input clk);

parameter P = 123;
parameter Q = P + 1;

reg [31:0] data;
initial data = 1;

always @(posedge clk)
data = data + 1;

always assert p1: data != 10;

endmodule
41 changes: 27 additions & 14 deletions src/trans-word-level/trans_trace_word_level.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -58,20 +58,33 @@ trans_tracet compute_trans_trace(
symbol.type.id()!=ID_module &&
symbol.type.id()!=ID_module_instance)
{
exprt indexed_symbol_expr(ID_symbol, symbol.type);

indexed_symbol_expr.set(ID_identifier,
timeframe_identifier(t, symbol.name));

exprt value_expr=decision_procedure.get(indexed_symbol_expr);
if(value_expr==indexed_symbol_expr)
value_expr=nil_exprt();

trans_tracet::statet::assignmentt assignment;
assignment.rhs.swap(value_expr);
assignment.lhs=symbol.symbol_expr();

state.assignments.push_back(assignment);
if(symbol.is_macro)
{
if(symbol.value.is_constant())
{
trans_tracet::statet::assignmentt assignment;
assignment.rhs = symbol.value;
assignment.lhs = symbol.symbol_expr();
state.assignments.push_back(assignment);
}
}
else
{
exprt indexed_symbol_expr(ID_symbol, symbol.type);

indexed_symbol_expr.set(
ID_identifier, timeframe_identifier(t, symbol.name));

exprt value_expr = decision_procedure.get(indexed_symbol_expr);
if(value_expr == indexed_symbol_expr)
value_expr = nil_exprt();

trans_tracet::statet::assignmentt assignment;
assignment.rhs.swap(value_expr);
assignment.lhs = symbol.symbol_expr();

state.assignments.push_back(assignment);
}
}
}
}
Expand Down

0 comments on commit de8cc6a

Please sign in to comment.