aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorClifford Wolf <clifford@clifford.at>2017-02-14 15:10:59 +0100
committerClifford Wolf <clifford@clifford.at>2017-02-14 15:10:59 +0100
commit4fb800717101c65344fe78a365b8ae6ca0a90d9e (patch)
tree04ffd6d2c2a822043eeedc91bc9ea7b948103160
parent4e80ce97a8de55360a9aa5cb05c734fd4b0ba5c5 (diff)
downloadyosys-4fb800717101c65344fe78a365b8ae6ca0a90d9e.tar.gz
yosys-4fb800717101c65344fe78a365b8ae6ca0a90d9e.tar.bz2
yosys-4fb800717101c65344fe78a365b8ae6ca0a90d9e.zip
Fix incorrect "incompatible re-declaration of wire" error in tasks/functions
-rw-r--r--frontends/ast/simplify.cc11
1 files changed, 9 insertions, 2 deletions
diff --git a/frontends/ast/simplify.cc b/frontends/ast/simplify.cc
index eecc04132..f7fcbc479 100644
--- a/frontends/ast/simplify.cc
+++ b/frontends/ast/simplify.cc
@@ -2183,9 +2183,16 @@ skip_dynamic_range_lvalue_expansion:;
if (wire->children.empty()) {
for (auto c : child->children)
wire->children.push_back(c->clone());
- } else {
- if (!child->children.empty())
+ } else if (!child->children.empty()) {
+ while (child->simplify(true, false, false, stage, -1, false, false)) { }
+ if (GetSize(child->children) == GetSize(wire->children)) {
+ for (int i = 0; i < GetSize(child->children); i++)
+ if (*child->children.at(i) != *wire->children.at(i))
+ goto tcall_incompatible_wires;
+ } else {
+ tcall_incompatible_wires:
log_error("Incompatible re-declaration of wire %s at %s:%d.\n", child->str.c_str(), filename.c_str(), linenum);
+ }
}
}
else