From 8e25303db40a5ac1ded40e35b5e7a2dc107001ac Mon Sep 17 00:00:00 2001 From: Tim Edwards Date: Sun, 27 Aug 2023 14:21:02 -0400 Subject: [PATCH] Corrected what looks like a very long-standing error in the DRC engine. Rule checks of triggering rules are not subject to clipping to the clip area. However, they *must* be clipped to the (larger) overall DRC check area, because no layout is valid outside of that area. This clipping was missed, allowing triggering rules to trigger on areas outside the valid layout, resulting in mysterious false-positive DRC errors. This has been fixed. --- VERSION | 2 +- drc/DRCbasic.c | 7 ++++++- scripts/configure | 14 +++++++++++++- 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/VERSION b/VERSION index 18624789..bb41ad9a 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -8.3.425 +8.3.426 diff --git a/drc/DRCbasic.c b/drc/DRCbasic.c index 3e23ab3d..328145c7 100644 --- a/drc/DRCbasic.c +++ b/drc/DRCbasic.c @@ -148,11 +148,14 @@ areaCheck(tile, arg) TiToRect(tile, &rect); /* Only consider the portion of the suspicious tile that overlaps - * the clip area for errors, unless this is a trigger rule. + * the clip area for errors, unless this is a trigger rule, in + * which case it should be restricted only to the full check area. */ if (!(arg->dCD_cptr->drcc_flags & DRC_TRIGGER)) GeoClip(&rect, arg->dCD_clip); + else + GeoClip(&rect, arg->dCD_rect); GeoClip(&rect, arg->dCD_constraint); if ((rect.r_xbot >= rect.r_xtop) || (rect.r_ybot >= rect.r_ytop)) @@ -301,6 +304,8 @@ areaNMCheck(tile, arg) if (!(arg->dCD_cptr->drcc_flags & DRC_TRIGGER)) GeoClip(&rect, arg->dCD_clip); + else + GeoClip(&rect, arg->dCD_rect); GeoClip(&rect, arg->dCD_constraint); if ((rect.r_xbot >= rect.r_xtop) || (rect.r_ybot >= rect.r_ytop)) diff --git a/scripts/configure b/scripts/configure index 6504d103..86455290 100755 --- a/scripts/configure +++ b/scripts/configure @@ -722,6 +722,7 @@ infodir docdir oldincludedir includedir +runstatedir localstatedir sharedstatedir sysconfdir @@ -827,6 +828,7 @@ datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' +runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE}' @@ -1079,6 +1081,15 @@ do | -silent | --silent | --silen | --sile | --sil) silent=yes ;; + -runstatedir | --runstatedir | --runstatedi | --runstated \ + | --runstate | --runstat | --runsta | --runst | --runs \ + | --run | --ru | --r) + ac_prev=runstatedir ;; + -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ + | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ + | --run=* | --ru=* | --r=*) + runstatedir=$ac_optarg ;; + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ @@ -1216,7 +1227,7 @@ fi for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir + libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. @@ -1369,6 +1380,7 @@ Fine tuning of the installation directories: --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include]