mirror of
https://github.com/YosysHQ/yosys
synced 2025-04-12 12:08:19 +00:00
simplify: Skip AST_PRIMITIVE in AST_CELLARRAY
Otherwise the `AST_PRIMITIVE` simplifies to the corresponding function and is no longer caught by the check for `AST_PRIMITIVE`s, raising an assertion error instead of an input error. Add bug4785.ys to tests/verilog to demonstrate.
This commit is contained in:
parent
cce7aaedf7
commit
0a1c664f02
|
@ -1758,7 +1758,7 @@ bool AstNode::simplify(bool const_fold, int stage, int width_hint, bool sign_hin
|
||||||
break;
|
break;
|
||||||
if (type == AST_GENBLOCK)
|
if (type == AST_GENBLOCK)
|
||||||
break;
|
break;
|
||||||
if (type == AST_CELLARRAY && children[i]->type == AST_CELL)
|
if (type == AST_CELLARRAY && (children[i]->type == AST_CELL || children[i]->type == AST_PRIMITIVE))
|
||||||
continue;
|
continue;
|
||||||
if (type == AST_BLOCK && !str.empty())
|
if (type == AST_BLOCK && !str.empty())
|
||||||
break;
|
break;
|
||||||
|
@ -2741,6 +2741,7 @@ bool AstNode::simplify(bool const_fold, int stage, int width_hint, bool sign_hin
|
||||||
if (new_cell->type == AST_PRIMITIVE) {
|
if (new_cell->type == AST_PRIMITIVE) {
|
||||||
input_error("Cell arrays of primitives are currently not supported.\n");
|
input_error("Cell arrays of primitives are currently not supported.\n");
|
||||||
} else {
|
} else {
|
||||||
|
this->dumpAst(NULL, " ");
|
||||||
log_assert(new_cell->children.at(0)->type == AST_CELLTYPE);
|
log_assert(new_cell->children.at(0)->type == AST_CELLTYPE);
|
||||||
new_cell->children.at(0)->str = stringf("$array:%d:%d:%s", i, num, new_cell->children.at(0)->str.c_str());
|
new_cell->children.at(0)->str = stringf("$array:%d:%d:%s", i, num, new_cell->children.at(0)->str.c_str());
|
||||||
}
|
}
|
||||||
|
|
9
tests/verilog/bug4785.ys
Normal file
9
tests/verilog/bug4785.ys
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
logger -expect error "Cell arrays of primitives are currently not supported" 1
|
||||||
|
read_verilog <<EOT
|
||||||
|
module test(in1, in2, out1);
|
||||||
|
input in1, in2;
|
||||||
|
output out1;
|
||||||
|
|
||||||
|
nand #2 t_nand[0:7](out1, in1, in2);
|
||||||
|
endmodule
|
||||||
|
EOT
|
Loading…
Reference in a new issue