diff --git a/VERSION b/VERSION index 66dd59a..af0cfc2 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.5.190 +1.5.191 diff --git a/base/flatten.c b/base/flatten.c index 4bf3fb6..f21c807 100644 --- a/base/flatten.c +++ b/base/flatten.c @@ -344,7 +344,10 @@ int flattenInstancesOf(char *name, int fnum, char *instance) /* Find the end record of the parent cell and save it */ for (ParentEnd = (ParentProps) ? ParentProps : ParentParams; - ParentEnd && ParentEnd->next && ParentEnd->next->type != FIRSTPIN; + ParentEnd && ParentEnd->next && + /* Stop on a node or the next instance */ + ((ParentEnd->next->type > FIRSTPIN) || + (ParentEnd->next->type == PROPERTY)); ParentEnd = ParentEnd->next); /* Not primitive, so need to flatten this instance */ diff --git a/base/netcmp.c b/base/netcmp.c index 5c0b75f..4ea9003 100644 --- a/base/netcmp.c +++ b/base/netcmp.c @@ -620,15 +620,15 @@ struct FormattedList *FormatBadElementFragment(struct Element *E) for (elems = nodes[i]->node->elementlist; elems != NULL; elems = elems->next) count++; - - elemlist->flist[k].count = count; - if (*ob->name != *ob->instance.name) // e.g., "port_match_error" - elemlist->flist[k].name = ob->name; - else - elemlist->flist[k].name = ob->name + strlen(ob->instance.name) + 1; - elemlist->flist[k].permute = (char)1; - k++; } + + elemlist->flist[k].count = count; + if (*ob->name != *ob->instance.name) // e.g., "port_match_error" + elemlist->flist[k].name = ob->name; + else + elemlist->flist[k].name = ob->name + strlen(ob->instance.name) + 1; + elemlist->flist[k].permute = (char)1; + k++; } else { /* handle multiple permutable pins */ struct objlist *ob2; @@ -665,13 +665,16 @@ struct FormattedList *FormatBadElementFragment(struct Element *E) struct ElementList *elems; count = 0; - if (nodes[j]->node == NULL) continue; // ? - for (elems = nodes[j]->node->elementlist; elems != NULL; - elems = elems->next) - count++; + if (nodes[j]->node == NULL) /* Under what condition is the node NULL? */ + count++; + else { + for (elems = nodes[j]->node->elementlist; elems != NULL; + elems = elems->next) + count++; + } if (count >= maxcount) { - maxcount = count; - maxindex = j; + maxcount = count; + maxindex = j; } } } @@ -7225,8 +7228,13 @@ int MatchPins(struct nlist *tc1, struct nlist *tc2, int dolist) snprintf(ostr, left_col_end, "%s", obn->name); if ((*matchfunc)(obn->name, obp->name)) snprintf(ostr + left_col_end + 1, left_col_end, "%s", obp->name); - else + else { snprintf(ostr + left_col_end + 1, left_col_end, "%s **Mismatch**", obp->name); + /* Pins with different names are on different nets, + * so this should trigger an error return code. + */ + result = 0; + } for (m = 0; m < right_col_end + 1; m++) if (*(ostr + m) == '\0') *(ostr + m) = ' '; Fprintf(stdout, ostr);