diff --git a/src/V3LinkDot.cpp b/src/V3LinkDot.cpp index 5ddf96eb6..a0cb84763 100644 --- a/src/V3LinkDot.cpp +++ b/src/V3LinkDot.cpp @@ -2024,7 +2024,7 @@ private: if (VN_IS(nodep->lhsp(), ParseRef) && nodep->lhsp()->name() == "this") { VSymEnt* classSymp = m_ds.m_dotSymp; do { - classSymp = classSymp->fallbackp(); + classSymp = classSymp->parentp(); } while (classSymp && !VN_IS(classSymp->nodep(), Class)); m_ds.m_dotSymp = classSymp; if (!classSymp) { diff --git a/test_regress/t/t_class_uses_this.v b/test_regress/t/t_class_uses_this.v index d1a30b01a..531c6e1cb 100644 --- a/test_regress/t/t_class_uses_this.v +++ b/test_regress/t/t_class_uses_this.v @@ -4,31 +4,39 @@ // any use, without warranty, 2020 Rafal Kapuscik // SPDX-License-Identifier: CC0-1.0 // -class foo; +class Cls; bit [3:0] addr; - function void set (bit [3:0] addr); + function void set(bit [3:0] addr); begin : body this.addr = addr; end : body endfunction + extern function void setext(bit [3:0] addr); endclass +function void Cls::setext(bit [3:0] addr); + this.addr = addr; +endfunction + module t(/*AUTOARG*/ // Inputs clk ); input clk; - foo bar; - foo baz; + Cls bar; + Cls baz; initial begin - bar = new(); - baz = new(); - bar.set(4); + bar = new(); + baz = new(); + bar.set(4); `ifdef TEST_VERBOSE - $display(bar.addr); - $display(baz.addr); + $display(bar.addr); + $display(baz.addr); `endif - $write("*-* All Finished *-*\n"); - $finish; + if (bar.addr != 4) $stop; + bar.setext(2); + if (bar.addr != 2) $stop; + $write("*-* All Finished *-*\n"); + $finish; end endmodule