diff --git a/src/V3Width.cpp b/src/V3Width.cpp index b97837a48..3147147f1 100644 --- a/src/V3Width.cpp +++ b/src/V3Width.cpp @@ -3837,9 +3837,8 @@ class WidthVisitor final : public VNVisitor { // instance pointer), not a static instance. Mark the // dtype virtual so a method call on it dispatches per // instance instead of inlining to one fixed scope. - AstIfaceRefDType* const subRefp - = VN_CAST(subDtypep->skipRefp(), IfaceRefDType); - if (subRefp) { + if (AstIfaceRefDType* const subRefp + = VN_CAST(subDtypep->skipRefp(), IfaceRefDType)) { AstIfaceRefDType* const newDtypep = new AstIfaceRefDType{ nodep->fileline(), subRefp->cellName(), subRefp->ifaceName()}; newDtypep->ifacep(subRefp->ifacep()); diff --git a/test_regress/t/t_interface_virtual_sub_iface_method.v b/test_regress/t/t_interface_virtual_sub_iface_method.v index 709e99c9f..6cf486f5b 100644 --- a/test_regress/t/t_interface_virtual_sub_iface_method.v +++ b/test_regress/t/t_interface_virtual_sub_iface_method.v @@ -62,6 +62,9 @@ module t; `checkd(oif.m.sub.cnt, 8'd1) `checkd(drv.read_a(), 8'd1) `checkd(oif.d.val, 8'd99) + // Direct (non-virtual) sub-interface method call: covers the non-virtual dtype path. + oif.a.bump(); + `checkd(oif.a.cnt, 8'd2) $write("*-* All Finished *-*\n"); $finish; end