Fix crash on dotted references into dead modules, bug583.

This commit is contained in:
Wilson Snyder 2012-11-30 06:57:36 -05:00
parent c7a088faa5
commit f607b32938
4 changed files with 57 additions and 0 deletions

View File

@ -9,6 +9,8 @@ indicates the contributor was also the author of the fix; Thanks!
**** Fix mis-optimized identical submodule subtract, bug581. [Charlie Brej]
**** Fix crash on dotted references into dead modules, bug583. [Jeremy Bennett]
**** Fix compile issues on MSVCC, bug571, bug577. [Amir Gonnen]
**** Fix --debug overriding preceding --dump-treei, bug580. [Jeremy Bennett]

View File

@ -1484,6 +1484,7 @@ private:
}
nodep->fromp()->iterateAndNext(*this);
nodep->bitp()->iterateAndNext(*this);
nodep->attrp()->iterateAndNext(*this);
}
virtual void visit(AstBegin* nodep, AstNUser*) {
UINFO(5," "<<nodep<<endl);

View File

@ -0,0 +1,15 @@
#!/usr/bin/perl
if (!$::Driver) { use FindBin; exec("$FindBin::Bin/bootstrap.pl", @ARGV, $0); die; }
# DESCRIPTION: Verilator: Verilog Test driver/expect definition
#
# Copyright 2003 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 only test.
compile (
);
ok(1);
1;

View File

@ -0,0 +1,39 @@
// DESCRIPTION: Verilator: Verilog Test module
//
// A test case for parameterized module.
//
// When a module is instantiatied with parameter, there will be two modules in
// the tree and eventually one will be removed after param and deadifyModules.
//
// This test is to check that the removal of dead module will not cause
// compilation error. Possible error was/is seen as:
//
// pure virtual method called
// terminate called without an active exception
// %Error: Verilator aborted. Consider trying --debug --gdbbt
//
// This file ONLY is placed into the Public Domain, for any use,
// without warranty, 2012 by Jie Xu.
module t (/*AUTOARG*/
// Inputs
clk
);
input clk;
wire [71:0] ctrl;
memory #(.words(72)) i_memory (.clk (clk));
assign ctrl = i_memory.mem[0];
endmodule
// memory module, which is used with parameter
module memory (clk);
input clk;
parameter words = 16384, bits = 72;
reg [bits-1 :0] mem[words-1 : 0];
endmodule