Internal code coverage fixes

This commit is contained in:
Wilson Snyder 2020-05-29 19:35:54 -04:00
parent 4cfa3f879a
commit fbc814b54a
26 changed files with 403 additions and 52 deletions

View File

@ -42,6 +42,6 @@ remove_source("*examples/*");
# Would just be removed with remove_source in later step
remove_gcda_regexp(qr!test_regress/.*/(Vt_|Vtop_).*\.gcda!);
exclude_line_regexp(qr/(\bv3fatalSrc\b|\bfatalSrc\b|\bVL_UNCOVERABLE\b|\bVL_FATAL|\bUASSERT\bERROR_RSVD_WORD\bV3ERROR_NA)/);
exclude_line_regexp(qr/(\bv3fatalSrc\b|\bfatalSrc\b|\bVL_UNCOVERABLE\b|\bVL_FATAL|\bUASSERT|\bERROR_RSVD_WORD\bV3ERROR_NA)/);
1;

View File

@ -1154,10 +1154,10 @@ string AstNode::locationStr() const {
const AstNode* backp = this;
int itmax = 10000; // Max iterations before giving up on location search
while (backp) {
if (--itmax < 0) {
if (VL_UNCOVERABLE(--itmax < 0)) {
// Likely some circular back link, and V3Ast is trying to report a low-level error
UINFO(1, "Ran out of iterations finding locationStr on " << backp << endl);
return "";
return ""; // LCOV_EXCL_LINE
}
const AstScope* scopep;
if ((scopep = VN_CAST_CONST(backp, Scope))) {

View File

@ -192,7 +192,8 @@ private:
virtual void visit(AstVarRef* nodep) VL_OVERRIDE {
if (!VarFlags(nodep->varp()).m_notOpt) {
if (!m_cfuncp) { // Not in function, can't optimize
clearOptimizable(nodep->varp(), "BVnofunc");
// Perhaps impossible, but better safe
clearOptimizable(nodep->varp(), "BVnofunc"); // LCOV_EXCL_LINE
} else {
// If we're scoping down to it, it isn't really in the same block
if (!nodep->hierThis()) clearOptimizable(nodep->varp(), "HierRef");

View File

@ -2231,31 +2231,6 @@ V3Number& V3Number::opSelInto(const V3Number& lhs, int lsbval, int width) {
return *this;
}
V3Number& V3Number::opCond(const V3Number& lhs, const V3Number& if1s, const V3Number& if0s) {
NUM_ASSERT_OP_ARGS3(lhs, if1s, if0s);
NUM_ASSERT_LOGIC_ARGS1(lhs);
V3Number lhstrue(&lhs);
lhstrue.opRedOr(lhs);
if (lhstrue.bitIs0(0)) {
this->opAssign(if0s);
} else if (lhstrue.bitIs1(0)) {
this->opAssign(if1s);
} else { // select is "X/Z"
setZero();
NUM_ASSERT_LOGIC_ARGS2(if1s, if0s);
for (int bit = 0; bit < this->width(); bit++) {
if (if0s.bitIs1(bit) && if1s.bitIs1(bit)) {
setBit(bit, 1);
} else if (if0s.bitIs0(bit) && if1s.bitIs0(bit)) {
setBit(bit, 0);
} else {
setBit(bit, 'x');
}
}
}
return *this;
}
//======================================================================
// Ops - Floating point

View File

@ -334,7 +334,6 @@ public:
V3Number& opSelInto(const V3Number& lhs, int lsbval, int width);
V3Number& opToLowerN(const V3Number& lhs);
V3Number& opToUpperN(const V3Number& lhs);
V3Number& opCond(const V3Number& lhs, const V3Number& if1s, const V3Number& if0s);
V3Number& opCaseEq(const V3Number& lhs, const V3Number& rhs);
V3Number& opCaseNeq(const V3Number& lhs, const V3Number& rhs);
V3Number& opWildEq(const V3Number& lhs, const V3Number& rhs);

View File

@ -1532,14 +1532,16 @@ void OrderVisitor::processDomainsIterate(OrderEitherVertex* vertexp) {
} else if (domainp != fromVertexp->domainp()) {
// Make a domain that merges the two domains
bool ddebug = debug() >= 9;
if (ddebug) {
if (ddebug) { // LCOV_EXCL_START
cout << endl;
UINFO(0, " conflicting domain " << fromVertexp << endl);
UINFO(0, " dorig=" << domainp << endl);
domainp->dumpTree(cout);
UINFO(0, " d2 =" << fromVertexp->domainp() << endl);
fromVertexp->domainp()->dumpTree(cout);
}
} // LCOV_EXCL_STOP
AstSenTree* newtreep = domainp->cloneTree(false);
AstNodeSenItem* newtree2p = fromVertexp->domainp()->sensesp()->cloneTree(true);
UASSERT_OBJ(newtree2p, fromVertexp->domainp(),
@ -1549,13 +1551,13 @@ void OrderVisitor::processDomainsIterate(OrderEitherVertex* vertexp) {
V3Const::constifyExpensiveEdit(newtreep); // Remove duplicates
newtreep->multi(true); // Comment that it was made from 2 clock domains
domainp = m_finder.getSenTree(domainp->fileline(), newtreep);
if (ddebug) {
if (ddebug) { // LCOV_EXCL_START
UINFO(0, " dnew =" << newtreep << endl);
newtreep->dumpTree(cout);
UINFO(0, " find =" << domainp << endl);
domainp->dumpTree(cout);
cout << endl;
}
} // LCOV_EXCL_STOP
VL_DO_DANGLING(newtreep->deleteTree(), newtreep);
}
}

View File

@ -341,9 +341,10 @@ void V3Os::u_sleep(int64_t usec) {
int V3Os::system(const string& command) {
UINFO(1, "Running system: " << command << endl);
const int ret = ::system(command.c_str());
if (ret == -1) {
v3fatal("Failed to execute command:" << command << " " << strerror(errno));
return -1;
if (VL_UNCOVERABLE(ret == -1)) {
v3fatal("Failed to execute command:" // LCOV_EXCL_LINE
<< command << " " << strerror(errno));
return -1; // LCOV_EXCL_LINE
} else {
UASSERT(WIFEXITED(ret), "system(" << command << ") returned unexpected value of " << ret);
const int exit_code = WEXITSTATUS(ret);

View File

@ -227,7 +227,6 @@ public:
// Interactions with lexer
void lexNew();
void lexDestroy();
void statePop(); // Parser -> lexer communication
static int stateVerilogRecent(); // Parser -> lexer communication
int prevLexToken() { return m_prevLexToken; } // Parser -> lexer communication
size_t flexPpInputToLex(char* buf, size_t max_size) { return ppInputToLex(buf, max_size); }

View File

@ -43,7 +43,6 @@ public:
: V3LexerBase(NULL) {}
~V3Lexer() {}
// METHODS
void statePop() { yy_pop_state(); }
void unputString(const char* textp, size_t length) {
// Add characters to input stream in back-to-front order
const char* cp = textp;
@ -51,8 +50,6 @@ public:
}
};
void V3ParseImp::statePop() { parsep()->m_lexerp->statePop(); }
void V3ParseImp::unputString(const char* textp, size_t length) {
parsep()->m_lexerp->unputString(textp, length);
}

View File

@ -103,7 +103,7 @@ protected:
public:
static V3PreProc* createPreProc(FileLine* fl);
virtual ~V3PreProc() {}
virtual ~V3PreProc() {} // LCOV_EXCL_LINE // Persistent
};
#endif // Guard

View File

@ -74,8 +74,8 @@ public:
if (m_symPrefix != "") os << " symPrefix=" << m_symPrefix;
os << " n=" << nodep();
os << endl;
if (doneSymsr.find(this) != doneSymsr.end()) {
os << indent << "| ^ duplicate, so no children printed\n";
if (VL_UNCOVERABLE(doneSymsr.find(this) != doneSymsr.end())) {
os << indent << "| ^ duplicate, so no children printed\n"; // LCOV_EXCL_LINE
} else {
doneSymsr.insert(this);
for (IdNameMap::const_iterator it = m_idNameMap.begin(); it != m_idNameMap.end();

View File

@ -41,10 +41,10 @@ private:
m_dataSize *= 2;
// UINFO(9, "Realloc "<<allocSize()<<" for "<<point<<" "<<cvtToHex(m_datap)<<endl);
vluint64_t* newp = static_cast<vluint64_t*>(realloc(m_datap, allocSize()));
if (!newp) {
if (VL_UNCOVERABLE(!newp)) {
// cppcheck-suppress doubleFree // cppcheck 1.90 bug - realloc doesn't free on fail
free(m_datap);
v3fatal("Out of memory increasing buckets");
free(m_datap); // LCOV_EXCL_LINE
v3fatal("Out of memory increasing buckets"); // LCOV_EXCL_LINE
}
m_datap = newp;
for (vluint64_t i = oldsize; i < m_dataSize; i += 64) m_datap[i / 64] = 0;

View File

@ -49,9 +49,6 @@ extern void yyerrorf(const char* format, ...);
yyerrorf("Unsupported: " language " reserved word not implemented: '%s'", yytext); \
FL_BRK; } while(0)
// See V3Read.cpp
//void V3ParseImp::statePop() { yy_pop_state(); }
//======================================================================
void yyerror(const char* errmsg) {

View File

@ -52,7 +52,7 @@ hello, from a concatenated string.
hello, from a concatenated format string [0].
extra argument: 0
0 : pre argument after
[0] Embedded <#013> return
[0] Embedded tab ' ' and <#013> return
[0] Embedded
multiline
'23 23 23'

View File

@ -145,7 +145,7 @@ module t;
$write("hel", "lo, fr", "om a concatenated format string [%0t].\n", $time);
$display("extra argument: ", $time);
$display($time,, ": pre argument",, "after");
$write("[%0t] Embedded \r return\n", $time);
$write("[%0t] Embedded tab '\t' and \r return\n", $time);
$display("[%0t] Embedded\
multiline", $time);

View File

@ -13,6 +13,7 @@ module submodule ();
final begin
$write("d");
end
final ; // Empty test
endmodule
module t ();

View File

@ -0,0 +1,10 @@
%Error: t/t_func_return_bad.v:10:7: Return isn't underneath a task or function
10 | return;
| ^~~~~~
%Error: t/t_func_return_bad.v:11:7: continue isn't underneath a loop
11 | continue;
| ^~~~~~~~
%Error: t/t_func_return_bad.v:12:7: break isn't underneath a loop
12 | break;
| ^~~~~
%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 2011 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,14 @@
// DESCRIPTION: Verilator: Verilog Test module
//
// This file ONLY is placed under the Creative Commons Public Domain, for
// any use, without warranty, 2011 by Wilson Snyder.
// SPDX-License-Identifier: CC0-1.0
module t (/*AUTOARG*/);
initial begin
return; // Not under function
continue; // Not under loop
break; // Not under loop
end
endmodule

View File

@ -0,0 +1,4 @@
%Error: t/t_lint_restore_prag_bad.v:10:4: /*verilator lint_restore*/ without matching save.
10 | /*verilator lint_restore*/
| ^~~~~~~~~~~~~~~~~~~~~~~~~~
%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 2003-2009 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(vlt => 1);
lint(
fails => 1,
expect_filename => $Self->{golden_filename},
);
ok(1);
1;

View File

@ -0,0 +1,12 @@
// DESCRIPTION: Verilator: Verilog Test module
//
// This file ONLY is placed under the Creative Commons Public Domain, for
// any use, without warranty, 2007 by Wilson Snyder.
// SPDX-License-Identifier: CC0-1.0
module t ();
// No matching save
// verilator lint_restore
endmodule

View File

@ -51,6 +51,10 @@ module t (/*AUTOARG*/
if (5'd10 != 5'D10) $stop;
if (5'd10 != 5'H a) $stop;
if (5'd10 != 5 'O 12) $stop;
if (24'h29cbb8 != 24'o12345670) $stop;
if (6'b111xxx !== 6'o7x) $stop;
if (6'b111??? !== 6'o7?) $stop;
if (6'b111zzz !== 6'o7z) $stop;
//
if (r_wide0 !== {32'haa111111,32'hbb222222,32'hcc333333,32'hdd444444}) $stop;
if (r_wide1 !== {32'haa111111,32'hbb222222}) $stop;

View File

@ -0,0 +1,199 @@
%Error: t/t_vams_kwd_bad.v:12:8: Unsupported: AMS reserved word not implemented: 'above'
12 | int above;
| ^~~~~
%Error: t/t_vams_kwd_bad.v:12:13: syntax error, unexpected ';', expecting IDENTIFIER
12 | int above;
| ^
%Error: t/t_vams_kwd_bad.v:13:8: Unsupported: AMS reserved word not implemented: 'abs'
13 | int abs;
| ^~~
%Error: t/t_vams_kwd_bad.v:14:8: Unsupported: AMS reserved word not implemented: 'absdelay'
14 | int absdelay;
| ^~~~~~~~
%Error: t/t_vams_kwd_bad.v:15:8: Unsupported: AMS reserved word not implemented: 'abstol'
15 | int abstol;
| ^~~~~~
%Error: t/t_vams_kwd_bad.v:16:8: Unsupported: AMS reserved word not implemented: 'ac_stim'
16 | int ac_stim;
| ^~~~~~~
%Error: t/t_vams_kwd_bad.v:17:8: Unsupported: AMS reserved word not implemented: 'access'
17 | int access;
| ^~~~~~
%Error: t/t_vams_kwd_bad.v:18:8: Unsupported: AMS reserved word not implemented: 'acos'
18 | int acos;
| ^~~~
%Error: t/t_vams_kwd_bad.v:19:8: Unsupported: AMS reserved word not implemented: 'acosh'
19 | int acosh;
| ^~~~~
%Error: t/t_vams_kwd_bad.v:20:8: Unsupported: AMS reserved word not implemented: 'aliasparam'
20 | int aliasparam;
| ^~~~~~~~~~
%Error: t/t_vams_kwd_bad.v:21:8: Unsupported: AMS reserved word not implemented: 'analog'
21 | int analog;
| ^~~~~~
%Error: t/t_vams_kwd_bad.v:22:8: Unsupported: AMS reserved word not implemented: 'analysis'
22 | int analysis;
| ^~~~~~~~
%Error: t/t_vams_kwd_bad.v:23:8: Unsupported: AMS reserved word not implemented: 'assert'
23 | int assert;
| ^~~~~~
%Error: t/t_vams_kwd_bad.v:24:8: Unsupported: AMS reserved word not implemented: 'branch'
24 | int branch;
| ^~~~~~
%Error: t/t_vams_kwd_bad.v:25:8: Unsupported: AMS reserved word not implemented: 'connect'
25 | int connect;
| ^~~~~~~
%Error: t/t_vams_kwd_bad.v:26:8: Unsupported: AMS reserved word not implemented: 'connectmodule'
26 | int connectmodule;
| ^~~~~~~~~~~~~
%Error: t/t_vams_kwd_bad.v:27:8: Unsupported: AMS reserved word not implemented: 'connectrules'
27 | int connectrules;
| ^~~~~~~~~~~~
%Error: t/t_vams_kwd_bad.v:28:8: Unsupported: AMS reserved word not implemented: 'continuous'
28 | int continuous;
| ^~~~~~~~~~
%Error: t/t_vams_kwd_bad.v:29:8: Unsupported: AMS reserved word not implemented: 'cross'
29 | int cross;
| ^~~~~
%Error: t/t_vams_kwd_bad.v:30:8: Unsupported: AMS reserved word not implemented: 'ddt'
30 | int ddt;
| ^~~
%Error: t/t_vams_kwd_bad.v:31:8: Unsupported: AMS reserved word not implemented: 'ddt_nature'
31 | int ddt_nature;
| ^~~~~~~~~~
%Error: t/t_vams_kwd_bad.v:32:8: Unsupported: AMS reserved word not implemented: 'ddx'
32 | int ddx;
| ^~~
%Error: t/t_vams_kwd_bad.v:33:8: Unsupported: AMS reserved word not implemented: 'discipline'
33 | int discipline;
| ^~~~~~~~~~
%Error: t/t_vams_kwd_bad.v:34:8: Unsupported: AMS reserved word not implemented: 'discrete'
34 | int discrete;
| ^~~~~~~~
%Error: t/t_vams_kwd_bad.v:35:8: Unsupported: AMS reserved word not implemented: 'domain'
35 | int domain;
| ^~~~~~
%Error: t/t_vams_kwd_bad.v:36:8: Unsupported: AMS reserved word not implemented: 'driver_update'
36 | int driver_update;
| ^~~~~~~~~~~~~
%Error: t/t_vams_kwd_bad.v:37:8: Unsupported: AMS reserved word not implemented: 'endconnectrules'
37 | int endconnectrules;
| ^~~~~~~~~~~~~~~
%Error: t/t_vams_kwd_bad.v:38:8: Unsupported: AMS reserved word not implemented: 'enddiscipline'
38 | int enddiscipline;
| ^~~~~~~~~~~~~
%Error: t/t_vams_kwd_bad.v:39:8: Unsupported: AMS reserved word not implemented: 'endnature'
39 | int endnature;
| ^~~~~~~~~
%Error: t/t_vams_kwd_bad.v:40:8: Unsupported: AMS reserved word not implemented: 'endparamset'
40 | int endparamset;
| ^~~~~~~~~~~
%Error: t/t_vams_kwd_bad.v:41:8: Unsupported: AMS reserved word not implemented: 'exclude'
41 | int exclude;
| ^~~~~~~
%Error: t/t_vams_kwd_bad.v:42:8: Unsupported: AMS reserved word not implemented: 'final_step'
42 | int final_step;
| ^~~~~~~~~~
%Error: t/t_vams_kwd_bad.v:43:8: Unsupported: AMS reserved word not implemented: 'flicker_noise'
43 | int flicker_noise;
| ^~~~~~~~~~~~~
%Error: t/t_vams_kwd_bad.v:44:8: Unsupported: AMS reserved word not implemented: 'flow'
44 | int flow;
| ^~~~
%Error: t/t_vams_kwd_bad.v:45:8: Unsupported: AMS reserved word not implemented: 'from'
45 | int from;
| ^~~~
%Error: t/t_vams_kwd_bad.v:46:8: Unsupported: AMS reserved word not implemented: 'ground'
46 | int ground;
| ^~~~~~
%Error: t/t_vams_kwd_bad.v:47:8: Unsupported: AMS reserved word not implemented: 'idt'
47 | int idt;
| ^~~
%Error: t/t_vams_kwd_bad.v:48:8: Unsupported: AMS reserved word not implemented: 'idt_nature'
48 | int idt_nature;
| ^~~~~~~~~~
%Error: t/t_vams_kwd_bad.v:49:8: Unsupported: AMS reserved word not implemented: 'idtmod'
49 | int idtmod;
| ^~~~~~
%Error: t/t_vams_kwd_bad.v:50:8: Unsupported: AMS reserved word not implemented: 'inf'
50 | int inf;
| ^~~
%Error: t/t_vams_kwd_bad.v:51:8: Unsupported: AMS reserved word not implemented: 'initial_step'
51 | int initial_step;
| ^~~~~~~~~~~~
%Error: t/t_vams_kwd_bad.v:52:8: Unsupported: AMS reserved word not implemented: 'laplace_nd'
52 | int laplace_nd;
| ^~~~~~~~~~
%Error: t/t_vams_kwd_bad.v:53:8: Unsupported: AMS reserved word not implemented: 'laplace_np'
53 | int laplace_np;
| ^~~~~~~~~~
%Error: t/t_vams_kwd_bad.v:54:8: Unsupported: AMS reserved word not implemented: 'laplace_zd'
54 | int laplace_zd;
| ^~~~~~~~~~
%Error: t/t_vams_kwd_bad.v:55:8: Unsupported: AMS reserved word not implemented: 'laplace_zp'
55 | int laplace_zp;
| ^~~~~~~~~~
%Error: t/t_vams_kwd_bad.v:56:8: Unsupported: AMS reserved word not implemented: 'last_crossing'
56 | int last_crossing;
| ^~~~~~~~~~~~~
%Error: t/t_vams_kwd_bad.v:57:8: Unsupported: AMS reserved word not implemented: 'limexp'
57 | int limexp;
| ^~~~~~
%Error: t/t_vams_kwd_bad.v:58:8: Unsupported: AMS reserved word not implemented: 'max'
58 | int max;
| ^~~
%Error: t/t_vams_kwd_bad.v:59:8: Unsupported: AMS reserved word not implemented: 'merged'
59 | int merged;
| ^~~~~~
%Error: t/t_vams_kwd_bad.v:60:8: Unsupported: AMS reserved word not implemented: 'min'
60 | int min;
| ^~~
%Error: t/t_vams_kwd_bad.v:61:8: Unsupported: AMS reserved word not implemented: 'nature'
61 | int nature;
| ^~~~~~
%Error: t/t_vams_kwd_bad.v:62:8: Unsupported: AMS reserved word not implemented: 'net_resolution'
62 | int net_resolution;
| ^~~~~~~~~~~~~~
%Error: t/t_vams_kwd_bad.v:63:8: Unsupported: AMS reserved word not implemented: 'noise_table'
63 | int noise_table;
| ^~~~~~~~~~~
%Error: t/t_vams_kwd_bad.v:64:8: Unsupported: AMS reserved word not implemented: 'paramset'
64 | int paramset;
| ^~~~~~~~
%Error: t/t_vams_kwd_bad.v:65:8: Unsupported: AMS reserved word not implemented: 'potential'
65 | int potential;
| ^~~~~~~~~
%Error: t/t_vams_kwd_bad.v:66:8: Unsupported: AMS reserved word not implemented: 'resolveto'
66 | int resolveto;
| ^~~~~~~~~
%Error: t/t_vams_kwd_bad.v:67:8: Unsupported: AMS reserved word not implemented: 'slew'
67 | int slew;
| ^~~~
%Error: t/t_vams_kwd_bad.v:68:8: Unsupported: AMS reserved word not implemented: 'split'
68 | int split;
| ^~~~~
%Error: t/t_vams_kwd_bad.v:69:8: Unsupported: AMS reserved word not implemented: 'timer'
69 | int timer;
| ^~~~~
%Error: t/t_vams_kwd_bad.v:70:8: Unsupported: AMS reserved word not implemented: 'transition'
70 | int transition;
| ^~~~~~~~~~
%Error: t/t_vams_kwd_bad.v:71:8: Unsupported: AMS reserved word not implemented: 'units'
71 | int units;
| ^~~~~
%Error: t/t_vams_kwd_bad.v:72:8: Unsupported: AMS reserved word not implemented: 'white_noise'
72 | int white_noise;
| ^~~~~~~~~~~
%Error: t/t_vams_kwd_bad.v:73:8: Unsupported: AMS reserved word not implemented: 'zi_nd'
73 | int zi_nd;
| ^~~~~
%Error: t/t_vams_kwd_bad.v:74:8: Unsupported: AMS reserved word not implemented: 'zi_np'
74 | int zi_np;
| ^~~~~
%Error: t/t_vams_kwd_bad.v:75:8: Unsupported: AMS reserved word not implemented: 'zi_zd'
75 | int zi_zd;
| ^~~~~
%Error: t/t_vams_kwd_bad.v:76:8: Unsupported: AMS reserved word not implemented: 'zi_zp'
76 | int zi_zp;
| ^~~~~
%Error: Exiting due to

View File

@ -0,0 +1,20 @@
#!/usr/bin/env perl
if (!$::Driver) { use FindBin; exec("$FindBin::Bin/bootstrap.pl", @ARGV, $0); die; }
# DESCRIPTION: Verilator: Verilog Test driver/expect definition
#
# Copyright 2019 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(vlt => 1);
lint(
fails => 1,
verilator_flags2 => ["--error-limit 1000"],
expect_filename => $Self->{golden_filename},
);
ok(1);
1;

View File

@ -0,0 +1,78 @@
// DESCRIPTION: Verilator: Verilog Test module
//
// This file ONLY is placed into the Public Domain, for any use,
// without warranty, 2019 by Driss Hafdi.
// SPDX-License-Identifier: CC0-1.0
`begin_keywords "VAMS-2.3"
module t (/*AUTOARG*/);
// Just get errors on bad keywords (for code coverage)
int above;
int abs;
int absdelay;
int abstol;
int ac_stim;
int access;
int acos;
int acosh;
int aliasparam;
int analog;
int analysis;
int assert;
int branch;
int connect;
int connectmodule;
int connectrules;
int continuous;
int cross;
int ddt;
int ddt_nature;
int ddx;
int discipline;
int discrete;
int domain;
int driver_update;
int endconnectrules;
int enddiscipline;
int endnature;
int endparamset;
int exclude;
int final_step;
int flicker_noise;
int flow;
int from;
int ground;
int idt;
int idt_nature;
int idtmod;
int inf;
int initial_step;
int laplace_nd;
int laplace_np;
int laplace_zd;
int laplace_zp;
int last_crossing;
int limexp;
int max;
int merged;
int min;
int nature;
int net_resolution;
int noise_table;
int paramset;
int potential;
int resolveto;
int slew;
int split;
int timer;
int transition;
int units;
int white_noise;
int zi_nd;
int zi_np;
int zi_zd;
int zi_zp;
endmodule