Corrected what seems to be a long-standing error in which
DRCCheckThis() is called in order of top to bottom of the hierarchy when called from drcCheckFunc() although it was changed to order DRCPendingRoot from bottom to top. drcCheckFunc() then does it backwards. Fixing this appears to have resolved some weird errors with DRC errors not showing up when doing "drc check" (initially) and DRC errors disappearing when making changes to a generated cell. Appears to be okay now.
This commit is contained in:
parent
4d2912a406
commit
42aa06f8f5
|
|
@ -203,13 +203,12 @@ DRCCheckThis (celldef, operation, area)
|
||||||
/* Insert celldef into list of Defs waiting to be checked, unless */
|
/* Insert celldef into list of Defs waiting to be checked, unless */
|
||||||
/* it is already there. */
|
/* it is already there. */
|
||||||
|
|
||||||
#if (0)
|
|
||||||
|
|
||||||
/* The switch to copying up DRC errors from non-interacting */
|
/* The switch to copying up DRC errors from non-interacting */
|
||||||
/* child cells means that the child cells must be processed */
|
/* child cells means that the child cells must be processed */
|
||||||
/* first. So this routine changes from prepending the cell */
|
/* first. So this routine changes from prepending the cell */
|
||||||
/* to the list to appending it. */
|
/* to the list to appending it. */
|
||||||
|
|
||||||
|
#if (0)
|
||||||
pback = &DRCPendingRoot;
|
pback = &DRCPendingRoot;
|
||||||
p = DRCPendingRoot;
|
p = DRCPendingRoot;
|
||||||
|
|
||||||
|
|
@ -230,8 +229,8 @@ DRCCheckThis (celldef, operation, area)
|
||||||
}
|
}
|
||||||
p->dpc_next = DRCPendingRoot;
|
p->dpc_next = DRCPendingRoot;
|
||||||
DRCPendingRoot = p;
|
DRCPendingRoot = p;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Append new cell to check to the pending list */
|
/* Append new cell to check to the pending list */
|
||||||
if (DRCPendingRoot == NULL)
|
if (DRCPendingRoot == NULL)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -737,11 +737,12 @@ drcCheckFunc(scx, cdarg)
|
||||||
DBStdPaintTbl(TT_CHECKPAINT, PL_DRC_CHECK),
|
DBStdPaintTbl(TT_CHECKPAINT, PL_DRC_CHECK),
|
||||||
(PaintUndoInfo *) NULL);
|
(PaintUndoInfo *) NULL);
|
||||||
|
|
||||||
DRCCheckThis(def, TT_CHECKPAINT, (Rect *) NULL);
|
/* Search children and apply recursively */
|
||||||
|
|
||||||
/* Search children */
|
|
||||||
(void) DBCellSrArea(scx, drcCheckFunc, (ClientData) NULL);
|
(void) DBCellSrArea(scx, drcCheckFunc, (ClientData) NULL);
|
||||||
|
|
||||||
|
/* Then do self */
|
||||||
|
DRCCheckThis(def, TT_CHECKPAINT, (Rect *) NULL);
|
||||||
|
|
||||||
/* As a special performance hack, if the complete cell area is
|
/* As a special performance hack, if the complete cell area is
|
||||||
* handled here, don't bother to look at any more array elements.
|
* handled here, don't bother to look at any more array elements.
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue