Skip to content

Commit 1c7277f

Browse files
authored
Merge pull request #1247 from diffblue/past5-fix
`$past` now supports array and struct types
2 parents 9a62e91 + 4bf710f commit 1c7277f

File tree

5 files changed

+32
-9
lines changed

5 files changed

+32
-9
lines changed
Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
1-
KNOWNBUG
1+
CORE
22
past5.sv
33

4-
^EXIT=0$
4+
^EXIT=10$
55
^SIGNAL=0$
66
--
77
^warning: ignoring
88
--
9-
$past doesn't support the array.

regression/verilog/system-functions/past5.sv

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,6 @@ module main;
22

33
logic [31:0] mem[123];
44

5-
assert property (##1 mem == $past(mem));
5+
assert property (mem == $past(mem));
66

77
endmodule
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
CORE
2+
past6.sv
3+
4+
^EXIT=10$
5+
^SIGNAL=0$
6+
--
7+
^warning: ignoring
8+
--
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
module main;
2+
3+
typedef struct {
4+
bit some_bit;
5+
} inner_struct;
6+
7+
typedef struct {
8+
bit [31:0] array [123];
9+
bit other_bit;
10+
inner_struct inner;
11+
} my_struct;
12+
13+
my_struct s;
14+
15+
assert property (s == $past(s));
16+
17+
endmodule

src/verilog/verilog_expr.cpp

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ Author: Daniel Kroening, [email protected]
1515
#include <util/mathematical_types.h>
1616
#include <util/prefix.h>
1717

18+
#include "verilog_initializer.h"
1819
#include "verilog_typecheck_base.h"
1920
#include "verilog_types.h"
2021

@@ -535,9 +536,7 @@ exprt verilog_inside_exprt::lower() const
535536

536537
exprt verilog_past_exprt::default_value() const
537538
{
538-
auto zero = from_integer(0, type());
539-
if(zero.is_nil())
540-
throw "failed to create $past default value";
541-
else
542-
return std::move(zero);
539+
auto value_opt = verilog_default_initializer(type());
540+
CHECK_RETURN(value_opt.has_value());
541+
return *value_opt;
543542
}

0 commit comments

Comments
 (0)