Add error on using :: with module

This commit is contained in:
Wilson Snyder 2020-11-12 19:45:12 -05:00
parent 6a58e67699
commit 7eac788306
4 changed files with 55 additions and 3 deletions

View File

@ -2807,9 +2807,12 @@ private:
nodep->packagep(cpackagerefp->packagep());
} else {
nodep->packagep(cpackagerefp->classOrPackagep());
// if (cpackagerefp->paramsp()) {
// nodep->v3warn(E_UNSUPPORTED, "Unsupported: parameterized packages");
// }
if (!VN_IS(nodep->packagep(), Class) && !VN_IS(nodep->packagep(), Package)) {
cpackagerefp->v3error(
"'::' expected to reference a class/package but referenced "
<< nodep->packagep()->prettyTypeName() << endl
<< cpackagerefp->warnMore() + "... Suggest '.' instead of '::'");
}
}
} else {
cpackagep->v3warn(E_UNSUPPORTED,

View File

@ -0,0 +1,5 @@
%Error: t/t_class_mod_bad.v:21:7: '::' expected to reference a class/package but referenced MODULE 'M'
: ... Suggest '.' instead of '::'
21 | M::Cls p;
| ^
%Error: Exiting due to

View File

@ -0,0 +1,19 @@
#!/usr/bin/env perl
if (!$::Driver) { use FindBin; exec("$FindBin::Bin/bootstrap.pl", @ARGV, $0); die; }
# DESCRIPTION: Verilator: Verilog Test driver/expect definition
#
# Copyright 2020 by Wilson Snyder. 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-License-Identifier: LGPL-3.0-only OR Artistic-2.0
scenarios(linter => 1);
lint(
fails => 1,
expect_filename => $Self->{golden_filename},
);
ok(1);
1;

View File

@ -0,0 +1,25 @@
// DESCRIPTION: Verilator: Verilog Test module
//
// This file ONLY is placed under the Creative Commons Public Domain, for
// any use, without warranty, 2020 by Wilson Snyder.
// SPDX-License-Identifier: CC0-1.0
// verilator lint_off MULTITOP
module M;
class Cls;
function string name;
return $sformatf("m %m");
endfunction
endclass
endmodule
module t (/*AUTOARG*/);
string s;
initial begin
M::Cls p;
$write("*-* All Finished *-*\n");
$finish;
end
endmodule