Correction to device property matching code to fix a problem that

caused LVS(A, B) to give different results for property errors
than LVS(B, A).
This commit is contained in:
Tim Edwards 2016-12-12 13:31:56 -05:00
parent fdab366627
commit 4f24915661
1 changed files with 13 additions and 8 deletions

View File

@ -4195,13 +4195,18 @@ int PropertyCheckMismatch(struct objlist *tp1, struct nlist *tc1,
vl1 = &svl;
if ((*matchfunc)(vl1->key, vl2->key)) break;
/* No match */
if (do_print) {
Fprintf(stdout, "%s vs. %s:\n", inst1, inst2);
Fprintf(stdout, "Property %s in circuit2 has no matching "
"property in circuit1\n", vl2->key);
/* Check if property is "of interest". */
kl2 = (struct property *)HashLookup(vl2->key, &(tc2->propdict));
if (kl2 != NULL) {
/* No match */
if (do_print) {
Fprintf(stdout, "%s vs. %s:\n", inst1, inst2);
Fprintf(stdout, "Property %s in circuit2 has no matching "
"property in circuit1\n", vl2->key);
}
if (rval != NULL) mismatches++;
}
if (rval != NULL) mismatches++;
}
}
if (j == len2) break;
@ -4213,9 +4218,9 @@ int PropertyCheckMismatch(struct objlist *tp1, struct nlist *tc1,
/* Check if this is a "property of interest". */
kl1 = (struct property *)HashLookup(vl1->key, &(tc1->propdict));
if (kl1 == NULL) {
if (vl1 == &mvl)
if ((*matchfunc)(vl1->key, mvl.key))
kl1 = &klm;
else if (vl1 == &svl)
else if ((*matchfunc)(vl1->key, svl.key))
kl1 = &kls;
else {
if (j < len2) check2[j] = 1; /* Mark as checked */