Skip to content

Commit de8cc6a

Browse files
authored
Merge pull request #518 from diffblue/trans-trace-macros
BMC: include macros in trace
2 parents bb26c46 + efc1e22 commit de8cc6a

File tree

3 files changed

+56
-14
lines changed

3 files changed

+56
-14
lines changed

regression/ebmc/traces/verilog1.desc

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
CORE
2+
verilog1.v
3+
--bound 9 --numbered-trace
4+
^\[.*\] .* REFUTED$
5+
^Counterexample with 10 states:$
6+
^main\.P@0 = 123$
7+
^main\.Q@0 = 124$
8+
^main\.data@0 = 1$
9+
^main\.P@9 = 123$
10+
^main\.Q@9 = 124$
11+
^main\.data@9 = 10$
12+
^EXIT=10$
13+
^SIGNAL=0$
14+
--
15+
^warning: ignoring

regression/ebmc/traces/verilog1.v

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
module main(input clk);
2+
3+
parameter P = 123;
4+
parameter Q = P + 1;
5+
6+
reg [31:0] data;
7+
initial data = 1;
8+
9+
always @(posedge clk)
10+
data = data + 1;
11+
12+
always assert p1: data != 10;
13+
14+
endmodule

src/trans-word-level/trans_trace_word_level.cpp

Lines changed: 27 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -58,20 +58,33 @@ trans_tracet compute_trans_trace(
5858
symbol.type.id()!=ID_module &&
5959
symbol.type.id()!=ID_module_instance)
6060
{
61-
exprt indexed_symbol_expr(ID_symbol, symbol.type);
62-
63-
indexed_symbol_expr.set(ID_identifier,
64-
timeframe_identifier(t, symbol.name));
65-
66-
exprt value_expr=decision_procedure.get(indexed_symbol_expr);
67-
if(value_expr==indexed_symbol_expr)
68-
value_expr=nil_exprt();
69-
70-
trans_tracet::statet::assignmentt assignment;
71-
assignment.rhs.swap(value_expr);
72-
assignment.lhs=symbol.symbol_expr();
73-
74-
state.assignments.push_back(assignment);
61+
if(symbol.is_macro)
62+
{
63+
if(symbol.value.is_constant())
64+
{
65+
trans_tracet::statet::assignmentt assignment;
66+
assignment.rhs = symbol.value;
67+
assignment.lhs = symbol.symbol_expr();
68+
state.assignments.push_back(assignment);
69+
}
70+
}
71+
else
72+
{
73+
exprt indexed_symbol_expr(ID_symbol, symbol.type);
74+
75+
indexed_symbol_expr.set(
76+
ID_identifier, timeframe_identifier(t, symbol.name));
77+
78+
exprt value_expr = decision_procedure.get(indexed_symbol_expr);
79+
if(value_expr == indexed_symbol_expr)
80+
value_expr = nil_exprt();
81+
82+
trans_tracet::statet::assignmentt assignment;
83+
assignment.rhs.swap(value_expr);
84+
assignment.lhs = symbol.symbol_expr();
85+
86+
state.assignments.push_back(assignment);
87+
}
7588
}
7689
}
7790
}

0 commit comments

Comments
 (0)