Corrected an extraction issue in which an error message about

"unexpected asymmetric device" is printed prematurely, as it
is inside a loop checking over all device entries compatible
with a device type.  Also:  Flagged an issue with the "label"
keyword in the "cifinput" section of a tech file.  The "label"
keyword cannot be used in conjunction with boolean operators.
It can only connect labels on a specific GDS type to one magic
type.  Unfortunately, because this was not flagged before as
an error or warning, the incorrect usage has crept into a lot
of tech files.  This uncovers an underlying issue that labels
must be allowed to automatically reconnect types, which is
undermined by the "no-reconnect-labels" cifinput option.  That
issue will be addressed in an upcoming commit.
This commit is contained in:
Tim Edwards 2023-10-16 17:29:05 -04:00
parent 8798a3256c
commit 5b29870fce
5 changed files with 19 additions and 15 deletions

View File

@ -1 +1 @@
8.3.438 8.3.439

View File

@ -872,10 +872,20 @@ CIFReadTechLine(sectionName, argc, argv)
goto wrongNumArgs; goto wrongNumArgs;
} }
CIFParseReadLayers(argv[1], &mask, TRUE); CIFParseReadLayers(argv[1], &mask, TRUE);
for (i=0; i<MAXCIFRLAYERS; i+=1) for (i = 0; i < MAXCIFRLAYERS; i++)
{ {
if (TTMaskHasType(&mask,i)) if (TTMaskHasType(&mask, i))
{ {
/* Only one magic type can be assigned to a GDS layer, so
* multiple assignments should be flagged as errors.
*/
if (cifCurReadStyle->crs_labelLayer[i] != TT_SPACE)
TechError("Labels on layer \"%s\" attached to \"%s\" supersedes "
"prior attachment to \"%s\".\n",
cifReadLayers[i],
DBTypeLongNameTbl[cifCurReadLayer->crl_magicType],
DBTypeLongNameTbl[cifCurReadStyle->crs_labelLayer[i]]);
cifCurReadStyle->crs_labelLayer[i] cifCurReadStyle->crs_labelLayer[i]
= cifCurReadLayer->crl_magicType; = cifCurReadLayer->crl_magicType;
if (argc == 3) if (argc == 3)
@ -899,8 +909,8 @@ CIFReadTechLine(sectionName, argc, argv)
if (argc != 2) goto wrongNumArgs; if (argc != 2) goto wrongNumArgs;
CIFParseReadLayers(argv[1], &mask, TRUE); CIFParseReadLayers(argv[1], &mask, TRUE);
/* trash the value in crs_labelLayer so that any labels on this /* trash the value in crs_labelLayer so that any labels on this
layer get junked, also. dcs 4/11/90 * layer get junked, also. dcs 4/11/90
*/ */
for (i=0; i < cifNReadLayers; i++) for (i=0; i < cifNReadLayers; i++)
{ {
if (TTMaskHasType(&mask,i)) if (TTMaskHasType(&mask,i))

View File

@ -50,7 +50,7 @@ static char rcsid[] __attribute__ ((unused)) = "$Header: /usr/cvsroot/magic-8.0/
* CmdAddPath -- * CmdAddPath --
* *
* Implement the "addpath" command: append to the global cell search path. * Implement the "addpath" command: append to the global cell search path.
* (Usage superceded by extended "path" command; retained for compatibility) * (Usage superseded by extended "path" command; retained for compatibility)
* *
* Usage: * Usage:
* addpath path * addpath path

View File

@ -785,7 +785,7 @@ CmdMove(w, cmd)
* box exists. * box exists.
* If no selection exists, but the box does, then move the box * If no selection exists, but the box does, then move the box
* anyway (hace 10/8/97) * anyway (hace 10/8/97)
* The above method is superceded by "box move <dir> <dist>" * The above method is superseded by "box move <dir> <dist>"
* but is retained for backward compatibility. * but is retained for backward compatibility.
*/ */

View File

@ -3490,16 +3490,10 @@ extTransPerimFunc(bp)
} }
} }
else else
{ /* Do not print error messages here, as errors may
/* Do not generate error messages on "Ignore" or "Short" * be resolved when checking the next device entry.
* device types
*/ */
if (strcmp(extTransRec.tr_devrec->exts_deviceName, "Ignore") &&
strcmp(extTransRec.tr_devrec->exts_deviceName, "Short"))
TxError("Warning: Unexpected asymmetric device at %d, %d!\n",
bp->b_outside->ti_ll.p_x, bp->b_outside->ti_ll.p_y);
break; break;
}
/* Add the length to this terminal's perimeter */ /* Add the length to this terminal's perimeter */
extTransRec.tr_termlen[thisterm] += len; extTransRec.tr_termlen[thisterm] += len;