restore the assert type warning
This commit is contained in:
parent
e91d8d4f8d
commit
350e718f3a
|
|
@ -1005,6 +1005,22 @@ class AssertVisitor final : public VNVisitor {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// When assertion_type is a compile-time constant, reject values that cannot be
|
||||||
|
// filtered at runtime because unique/priority violations use bare assertOn() rather
|
||||||
|
// than a per-type assertOnGet() call (IEEE 1800-2023 Table 20-6).
|
||||||
|
if (nodep->assertTypesp()) {
|
||||||
|
if (const AstConst* const typecp = VN_CAST(nodep->assertTypesp(), Const)) {
|
||||||
|
if (typecp->toUInt()
|
||||||
|
& (VAssertType::EXPECT | VAssertType::UNIQUE | VAssertType::UNIQUE0
|
||||||
|
| VAssertType::PRIORITY)) {
|
||||||
|
nodep->unlinkFrBack();
|
||||||
|
nodep->v3warn(E_UNSUPPORTED, "Unsupported: assert control assertion_type");
|
||||||
|
VL_DO_DANGLING(pushDeletep(nodep), nodep);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
UINFO(9, "Generating assertctl in module: " << m_modp);
|
UINFO(9, "Generating assertctl in module: " << m_modp);
|
||||||
AstCStmt* const callp = new AstCStmt{fl, "vlSymsp->_vm_contextp__->assertCtl("};
|
AstCStmt* const callp = new AstCStmt{fl, "vlSymsp->_vm_contextp__->assertCtl("};
|
||||||
callp->add(nodep->controlTypep()->unlinkFrBack());
|
callp->add(nodep->controlTypep()->unlinkFrBack());
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
%Error-UNSUPPORTED: t/t_assert_ctl_arg_unsup.v:15:5: Unsupported: assert control assertion_type
|
||||||
|
15 | $assertcontrol(OFF, EXPECT);
|
||||||
|
| ^~~~~~~~~~~~~~
|
||||||
|
... For error description see https://verilator.org/warn/UNSUPPORTED?v=latest
|
||||||
|
%Error-UNSUPPORTED: t/t_assert_ctl_arg_unsup.v:16:5: Unsupported: assert control assertion_type
|
||||||
|
16 | $assertcontrol(OFF, UNIQUE);
|
||||||
|
| ^~~~~~~~~~~~~~
|
||||||
|
%Error-UNSUPPORTED: t/t_assert_ctl_arg_unsup.v:17:5: Unsupported: assert control assertion_type
|
||||||
|
17 | $assertcontrol(OFF, UNIQUE0);
|
||||||
|
| ^~~~~~~~~~~~~~
|
||||||
|
%Error-UNSUPPORTED: t/t_assert_ctl_arg_unsup.v:18:5: Unsupported: assert control assertion_type
|
||||||
|
18 | $assertcontrol(OFF, PRIORITY);
|
||||||
|
| ^~~~~~~~~~~~~~
|
||||||
|
%Error: Exiting due to
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
# DESCRIPTION: Verilator: Verilog Test driver/expect definition
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify it
|
||||||
|
# under the terms of either the GNU Lesser General Public License Version 3
|
||||||
|
# or the Perl Artistic License Version 2.0.
|
||||||
|
# SPDX-FileCopyrightText: 2024 Wilson Snyder
|
||||||
|
# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
||||||
|
|
||||||
|
import vltest_bootstrap
|
||||||
|
|
||||||
|
test.scenarios('vlt')
|
||||||
|
|
||||||
|
test.lint(fails=True, expect_filename=test.golden_filename)
|
||||||
|
|
||||||
|
test.passes()
|
||||||
|
|
@ -0,0 +1,20 @@
|
||||||
|
// DESCRIPTION: Verilator: Verilog Test module
|
||||||
|
//
|
||||||
|
// This file ONLY is placed under the Creative Commons Public Domain
|
||||||
|
// SPDX-FileCopyrightText: 2024 Antmicro
|
||||||
|
// SPDX-License-Identifier: CC0-1.0
|
||||||
|
|
||||||
|
module t;
|
||||||
|
let OFF = 4;
|
||||||
|
let EXPECT = 16;
|
||||||
|
let UNIQUE = 32;
|
||||||
|
let UNIQUE0 = 64;
|
||||||
|
let PRIORITY = 128;
|
||||||
|
|
||||||
|
initial begin
|
||||||
|
$assertcontrol(OFF, EXPECT);
|
||||||
|
$assertcontrol(OFF, UNIQUE);
|
||||||
|
$assertcontrol(OFF, UNIQUE0);
|
||||||
|
$assertcontrol(OFF, PRIORITY);
|
||||||
|
end
|
||||||
|
endmodule
|
||||||
Loading…
Reference in New Issue