mirror of
https://github.com/verilator/verilator.git
synced 2026-10-06 10:03:44 +02:00
Fix wait() hang when interface with combinational logic using process calls and VIF function (#7342)
This commit is contained in:
+5
-1
@@ -892,7 +892,11 @@ class TimingControlVisitor final : public VNVisitor {
|
||||
m_underProcedure = true;
|
||||
// Workaround for killing `always` processes (doing that is pretty much UB)
|
||||
// TODO: Disallow killing `always` at runtime (throw an error)
|
||||
if (hasFlags(nodep, T_HAS_PROC)) addFlags(nodep, T_SUSPENDEE);
|
||||
// Skip for combinational blocks; if the body has timing controls
|
||||
// iterateChildren will add T_SUSPENDEE, otherwise it would spin.
|
||||
if (hasFlags(nodep, T_HAS_PROC)
|
||||
&& !(m_activep && m_activep->sentreep() && m_activep->sentreep()->hasCombo()))
|
||||
addFlags(nodep, T_SUSPENDEE);
|
||||
|
||||
iterateChildren(nodep);
|
||||
if (hasFlags(nodep, T_HAS_PROC)) nodep->setNeedProcess();
|
||||
|
||||
Reference in New Issue
Block a user