This commit is contained in:
parent
efa53189ea
commit
bef5c1f475
|
|
@ -5008,6 +5008,14 @@ class LinkDotResolveVisitor final : public VNVisitor {
|
||||||
// symbols
|
// symbols
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (AstClass* const targetClassp = VN_CAST(dotSymp->nodep(), Class)) {
|
||||||
|
if (m_extendsParam.count(targetClassp)) {
|
||||||
|
// Target class has parameterized extends not yet resolved.
|
||||||
|
// Its inherited symbols (e.g. static functions from the base class)
|
||||||
|
// aren't imported yet - defer to linkDotParamed.
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
VSymEnt* const foundp
|
VSymEnt* const foundp
|
||||||
= m_statep->findSymPrefixed(dotSymp, nodep->name(), baddot, first);
|
= m_statep->findSymPrefixed(dotSymp, nodep->name(), baddot, first);
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,18 @@
|
||||||
|
#!/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: 2026 Wilson Snyder
|
||||||
|
# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
||||||
|
|
||||||
|
import vltest_bootstrap
|
||||||
|
|
||||||
|
test.scenarios('simulator')
|
||||||
|
|
||||||
|
test.compile(verilator_flags2=["--binary"])
|
||||||
|
|
||||||
|
test.execute()
|
||||||
|
|
||||||
|
test.passes()
|
||||||
|
|
@ -0,0 +1,50 @@
|
||||||
|
// DESCRIPTION: Verilator: Static function call on class with parameterized extends
|
||||||
|
//
|
||||||
|
// 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: 2026 Wilson Snyder
|
||||||
|
// SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
||||||
|
|
||||||
|
// verilog_format: off
|
||||||
|
`define stop $stop
|
||||||
|
`define checkd(gotv,expv) do if ((gotv) !== (expv)) begin $write("%%Error: %s:%0d: got=%0d exp=%0d (%s !== %s)\n", `__FILE__,`__LINE__, (gotv), (expv), `"gotv`", `"expv`"); `stop; end while(0);
|
||||||
|
// verilog_format: on
|
||||||
|
|
||||||
|
package uvm_pkg;
|
||||||
|
|
||||||
|
class uvm_tlm_extension #(
|
||||||
|
type T = int
|
||||||
|
);
|
||||||
|
static function int ID();
|
||||||
|
return 42;
|
||||||
|
endfunction
|
||||||
|
endclass
|
||||||
|
endpackage
|
||||||
|
|
||||||
|
import uvm_pkg::*;
|
||||||
|
|
||||||
|
module t;
|
||||||
|
class ext1 extends uvm_tlm_extension #(ext1);
|
||||||
|
endclass
|
||||||
|
class ext2 extends uvm_tlm_extension;
|
||||||
|
endclass
|
||||||
|
|
||||||
|
class test;
|
||||||
|
task run_phase();
|
||||||
|
int i, j;
|
||||||
|
i = ext2::ID();
|
||||||
|
`checkd(i, 42);
|
||||||
|
j = ext1::ID();
|
||||||
|
`checkd(j, 42);
|
||||||
|
endtask
|
||||||
|
endclass
|
||||||
|
|
||||||
|
initial begin
|
||||||
|
test tst;
|
||||||
|
tst = new;
|
||||||
|
tst.run_phase;
|
||||||
|
$write("*-* All Finished *-*\n");
|
||||||
|
$finish;
|
||||||
|
end
|
||||||
|
endmodule
|
||||||
Loading…
Reference in New Issue