Merge pull request #1415 from larsclausen/aa-pattern-terms
Detect automatic terms in assignment patterns
This commit is contained in:
commit
d01efc910b
10
PExpr.cc
10
PExpr.cc
|
|
@ -108,6 +108,16 @@ PEAssignPattern::~PEAssignPattern()
|
|||
{
|
||||
}
|
||||
|
||||
bool PEAssignPattern::has_aa_term(Design*des, NetScope*scope) const
|
||||
{
|
||||
bool flag = false;
|
||||
for (const auto *parm : parms_) {
|
||||
if (parm)
|
||||
flag = parm->has_aa_term(des, scope) || flag;
|
||||
}
|
||||
return flag;
|
||||
}
|
||||
|
||||
PEBinary::PEBinary(char op, PExpr*l, PExpr*r)
|
||||
: op_(op), left_(l), right_(r)
|
||||
{
|
||||
|
|
|
|||
2
PExpr.h
2
PExpr.h
|
|
@ -208,6 +208,8 @@ class PEAssignPattern : public PExpr {
|
|||
|
||||
void dump(std::ostream&) const override;
|
||||
|
||||
virtual bool has_aa_term(Design*des, NetScope*scope) const override;
|
||||
|
||||
virtual unsigned test_width(Design*des, NetScope*scope, width_mode_t&mode) override;
|
||||
virtual NetExpr*elaborate_expr(Design*des, NetScope*scope,
|
||||
ivl_type_t type, unsigned flags) const override;
|
||||
|
|
|
|||
|
|
@ -0,0 +1,19 @@
|
|||
// Check that assignment patterns cannot reference automatic variables in
|
||||
// procedural force statements.
|
||||
|
||||
module test;
|
||||
|
||||
reg [3:0] result;
|
||||
|
||||
task automatic t;
|
||||
input [3:0] value;
|
||||
begin
|
||||
force result = '{value[3], value[2], value[1], value[0]};
|
||||
end
|
||||
endtask
|
||||
|
||||
initial begin
|
||||
t(4'ha);
|
||||
end
|
||||
|
||||
endmodule
|
||||
|
|
@ -260,6 +260,7 @@ sv_array_cassign9 vvp_tests/sv_array_cassign9.json
|
|||
sv_array_cassign10 vvp_tests/sv_array_cassign10.json
|
||||
sv_array_cassign_single vvp_tests/sv_array_cassign_single.json
|
||||
sv_array_cassign_single_fail1 vvp_tests/sv_array_cassign_single_fail1.json
|
||||
sv_assign_pattern_auto_force_fail vvp_tests/sv_assign_pattern_auto_force_fail.json
|
||||
sv_automatic_2state vvp_tests/sv_automatic_2state.json
|
||||
sv_bad_member_lval_proc_fail vvp_tests/sv_bad_member_lval_proc_fail.json
|
||||
sv_byte_array_string1 vvp_tests/sv_byte_array_string1.json
|
||||
|
|
|
|||
|
|
@ -0,0 +1,5 @@
|
|||
{
|
||||
"type" : "CE",
|
||||
"source" : "sv_assign_pattern_auto_force_fail.v",
|
||||
"iverilog-args" : [ "-g2005-sv" ]
|
||||
}
|
||||
Loading…
Reference in New Issue