forked from github/verilator
Fix error on bad interface name, bug1097.
This commit is contained in:
parent
d933f33bdb
commit
f093c3d78b
2
Changes
2
Changes
@ -5,6 +5,8 @@ The contributors that suggested a given feature are shown in []. Thanks!
|
||||
|
||||
* Verilator 3.889 devel
|
||||
|
||||
**** Fix error on bad interface name, bug1097. [Todd Strader]
|
||||
|
||||
|
||||
* Verilator 3.888 2016-10-14
|
||||
|
||||
|
@ -391,6 +391,9 @@ public:
|
||||
} else {
|
||||
ifacerefp->v3fatalSrc("Unlinked interface");
|
||||
}
|
||||
} else if (ifacerefp->ifaceViaCellp()->dead()) {
|
||||
ifacerefp->v3error("Parent cell's interface is not found: "<<AstNode::prettyName(ifacerefp->ifaceName()));
|
||||
continue;
|
||||
}
|
||||
VSymEnt* ifaceSymp = getNodeSym(ifacerefp->ifaceViaCellp());
|
||||
VSymEnt* ifOrPortSymp = ifaceSymp;
|
||||
@ -740,6 +743,7 @@ class LinkDotFindVisitor : public AstNVisitor {
|
||||
m_scope = m_scope+"."+nodep->name();
|
||||
m_curSymp = m_modSymp = m_statep->insertCell(aboveSymp, m_modSymp, nodep, m_scope);
|
||||
m_beginp = NULL;
|
||||
// We don't report NotFoundModule, as may be a unused module in a generate
|
||||
if (nodep->modp()) nodep->modp()->accept(*this);
|
||||
}
|
||||
m_scope = oldscope;
|
||||
|
25
test_regress/t/t_interface_typo_bad.pl
Executable file
25
test_regress/t/t_interface_typo_bad.pl
Executable file
@ -0,0 +1,25 @@
|
||||
#!/usr/bin/perl
|
||||
if (!$::Driver) { use FindBin; exec("$FindBin::Bin/bootstrap.pl", @ARGV, $0); die; }
|
||||
# DESCRIPTION: Verilator: Verilog Test driver/expect definition
|
||||
#
|
||||
# Copyright 2005 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.
|
||||
|
||||
compile (
|
||||
verilator_flags2 => ["--lint-only"],
|
||||
verilator_make_gcc => 0,
|
||||
make_top_shell => 0,
|
||||
make_main => 0,
|
||||
fails => 1,
|
||||
# Used to be %Error: t/t_order_wireloop.v:\d+: Wire inputs its own output, creating circular logic .wire x=x.
|
||||
# However we no longer gate optimize this
|
||||
expect=>
|
||||
q{%Error: t/t_interface_typo_bad.v:\d+: Parent cell's interface is not found: foo_intf
|
||||
%Warning-IMPLICIT: t/t_interface_typo_bad.v:\d+: Signal definition not found, creating implicitly: the_foo
|
||||
.*},
|
||||
);
|
||||
|
||||
ok(1);
|
||||
1;
|
29
test_regress/t/t_interface_typo_bad.v
Normal file
29
test_regress/t/t_interface_typo_bad.v
Normal file
@ -0,0 +1,29 @@
|
||||
// DESCRIPTION: Verilator: Verilog Test module
|
||||
//
|
||||
// This file ONLY is placed into the Public Domain, for any use,
|
||||
// without warranty, 2016 by Todd Strader.
|
||||
|
||||
//bug1097
|
||||
|
||||
interface foo_intf;
|
||||
endinterface
|
||||
|
||||
module submod
|
||||
(
|
||||
foo_intf foo
|
||||
);
|
||||
|
||||
endmodule
|
||||
|
||||
module t (/*AUTOARG*/);
|
||||
// Intentional typo, compiler should point this out, or that fo_intf does
|
||||
// not match foo_intf on the submod port map
|
||||
fo_intf the_foo;
|
||||
|
||||
submod
|
||||
submod_inst
|
||||
(
|
||||
.foo (the_foo)
|
||||
);
|
||||
|
||||
endmodule
|
Loading…
Reference in New Issue
Block a user