From 1c328dfe15752a0f6f5c561984e9583d9a4f9e79 Mon Sep 17 00:00:00 2001 From: Tim Edwards Date: Mon, 17 May 2021 15:18:05 -0400 Subject: [PATCH] Corrected an error in the "cifspacing" rule check for non-Manhattan geometry (which had gone unnoticed due to the lack of use of "cifspacing" in any rule decks). The rule was not checking for all synthetic edges, because the tile type was expected to match the rule type when the function is called, but with a non-Manhattan tile, that may or may not be true and needs to be checked. --- drc/DRCcif.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/drc/DRCcif.c b/drc/DRCcif.c index a06d8d0d..af6264d0 100644 --- a/drc/DRCcif.c +++ b/drc/DRCcif.c @@ -613,6 +613,14 @@ drcCifTile (tile, arg) if (SigInterruptPending) return 1; DRCstatTiles++; + /* For non-Manhattan tiles, if the left side of tile is not the */ + /* type that is declared by the rule, then skip the left-right */ + /* check. */ + + if (IsSplit(tile)) + if (SplitSide(tile)) + goto tbcheck; + /* * Check design rules along a vertical boundary between two tiles. * @@ -801,6 +809,15 @@ drcCifTile (tile, arg) } } +tbcheck: + + /* For non-Manhattan tiles, if the bottom side of tile is not */ + /* the type that is declared by the rule, then skip the top- */ + /* bottom check. */ + + if (IsSplit(tile)) + if (SplitSide(tile) == SplitDirection(tile)) + return 0; /* * Check design rules along a horizontal boundary between two tiles.