From 3a42a1aa58e5c46f8225e203548214ff0e7b13a6 Mon Sep 17 00:00:00 2001 From: Tim Edwards Date: Mon, 23 Nov 2020 14:28:46 -0500 Subject: [PATCH] Corrected the lefRead routine so that LEF annotation works properly on cells with multiple ports per pin. As written, the code was erasing all labels before creating a new port label, which would erase all previous port labels. This should have been done only on the first port. --- VERSION | 2 +- lef/lefRead.c | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/VERSION b/VERSION index 1e845493..c11b93ef 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -8.3.87 +8.3.88 diff --git a/lef/lefRead.c b/lef/lefRead.c index b35ab5a5..307de1a4 100644 --- a/lef/lefRead.c +++ b/lef/lefRead.c @@ -1385,6 +1385,7 @@ LefReadPin(lefMacro, f, pinname, pinNum, oscale, is_imported) int pinUse = PORT_USE_DEFAULT; int pinShape = PORT_SHAPE_DEFAULT; Label *firstlab; + bool firstport = TRUE; static char *pin_keys[] = { "DIRECTION", @@ -1636,13 +1637,14 @@ LefReadPin(lefMacro, f, pinname, pinNum, oscale, is_imported) if (needRect) { - if (lab == NULL) + if ((lab == NULL) && (firstport == TRUE)) DBEraseLabelsByContent(lefMacro, NULL, -1, testpin); LefReadPort(lefMacro, f, testpin, pinNum, pinDir, pinUse, pinShape, oscale, lab); } else LefSkipSection(f, NULL); + firstport = FALSE; } else LefReadPort(lefMacro, f, testpin, pinNum, pinDir, pinUse,