Fix incorrect "incompatible re-declaration of wire" error in tasks/functions
authorClifford Wolf <clifford@clifford.at>
Tue, 14 Feb 2017 14:10:59 +0000 (15:10 +0100)
committerClifford Wolf <clifford@clifford.at>
Tue, 14 Feb 2017 14:10:59 +0000 (15:10 +0100)
frontends/ast/simplify.cc

index eecc0413292d40e29c2a45c63d8d5be6fbc2bd42..f7fcbc479b093fd176d4a8270d174ef153a2dbd7 100644 (file)
@@ -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