diff --git a/VERSION b/VERSION index 7df9552c..c0947289 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -8.3.160 +8.3.161 diff --git a/drc/DRCarray.c b/drc/DRCarray.c index 18c4d6e1..662f3f29 100644 --- a/drc/DRCarray.c +++ b/drc/DRCarray.c @@ -105,7 +105,7 @@ drcArrayFunc(scx, arg) int xsep, ysep; int xsize, ysize; int rval, oldTiles; - Rect errorArea, yankArea, tmp, tmp2; + Rect errorArea, yankArea, tmp, tmp2, saveClip; DRCCookie *save_cptr; CellUse *use = scx->scx_use; Rect *area; @@ -183,6 +183,8 @@ drcArrayFunc(scx, arg) (ClientData) &yankArea); drcArrayCount += DRCBasicCheck(DRCdef, &yankArea, &errorArea, drcArrayErrorFunc, drcArrayClientData); + *arg->dCD_clip = *area; + GeoClip(arg->dCD_clip, &yankArea); (void) DBArraySr(use, &errorArea, drcArrayOverlapFunc, (ClientData) arg); } @@ -200,6 +202,8 @@ drcArrayFunc(scx, arg) (ClientData) &yankArea); drcArrayCount += DRCBasicCheck(DRCdef, &yankArea, &errorArea, drcArrayErrorFunc, drcArrayClientData); + *arg->dCD_clip = *area; + GeoClip(arg->dCD_clip, &yankArea); (void) DBArraySr(use, &errorArea, drcArrayOverlapFunc, (ClientData) arg); } @@ -222,6 +226,8 @@ drcArrayFunc(scx, arg) (ClientData) &yankArea); drcArrayCount += DRCBasicCheck(DRCdef, &yankArea, &errorArea, drcArrayErrorFunc, drcArrayClientData); + *arg->dCD_clip = *area; + GeoClip(arg->dCD_clip, &yankArea); (void) DBArraySr(use, &errorArea, drcArrayOverlapFunc, (ClientData) arg); } @@ -239,11 +245,16 @@ drcArrayFunc(scx, arg) (ClientData) &yankArea); drcArrayCount += DRCBasicCheck(DRCdef, &yankArea, &errorArea, drcArrayErrorFunc, drcArrayClientData); + *arg->dCD_clip = *area; + GeoClip(arg->dCD_clip, &yankArea); (void) DBArraySr(use, &errorArea, drcArrayOverlapFunc, (ClientData) arg); } } + /* Restore original clip rect */ + *arg->dCD_clip = *area; + (void) DBNewPaintTable(savedPaintTable); (void) DBNewPaintPlane(savedPaintPlane); diff --git a/drc/DRCsubcell.c b/drc/DRCsubcell.c index c976a1c0..ac41952a 100644 --- a/drc/DRCsubcell.c +++ b/drc/DRCsubcell.c @@ -539,13 +539,23 @@ drcExactOverlapTile(tile, cxp) type = TiGetType(tile); TTMaskSetOnlyType(&typeMask, type); - for (t = DBNumUserLayers; t < DBNumTypes; t++) + if (type < DBNumUserLayers) { - rmask = DBResidueMask(t); - if (TTMaskHasType(rmask, type)) - TTMaskSetType(&typeMask, t); + for (t = DBNumUserLayers; t < DBNumTypes; t++) + { + rmask = DBResidueMask(t); + if (TTMaskHasType(rmask, type)) + TTMaskSetType(&typeMask, t); + } + TTMaskCom2(&invMask, &typeMask); + } + else + { + rmask = DBResidueMask(type); + TTMaskSetMask(&typeMask, rmask); // Add residue types for inverse only + TTMaskCom2(&invMask, &typeMask); + TTMaskSetOnlyType(&typeMask, type); // Restore original type mask } - TTMaskCom2(&invMask, &typeMask); for (i = PL_TECHDEPBASE; i < DBNumPlanes; i++) {