From 153d1e354133b6313ff827908a0008861c0a9f2b Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Fri, 13 Sep 2024 14:31:45 +0200 Subject: [PATCH] Trying to improve stability under PCell debugging conditions inside the IDE --- src/db/db/dbLayout.cc | 3 +++ src/db/db/dbLibraryProxy.cc | 19 ++++++++++--------- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/src/db/db/dbLayout.cc b/src/db/db/dbLayout.cc index d31cc36ac..b69ca8d73 100644 --- a/src/db/db/dbLayout.cc +++ b/src/db/db/dbLayout.cc @@ -2876,6 +2876,9 @@ Layout::get_context_info (cell_index_type cell_index, LayoutOrCellContextInfo &i // one level of library indirection ly = &lib->layout (); + if (! ly->is_valid_cell_index (lib_proxy->library_cell_index ())) { + return any_meta; // abort + } cptr = &ly->cell (lib_proxy->library_cell_index ()); info.lib_name = lib->get_name (); diff --git a/src/db/db/dbLibraryProxy.cc b/src/db/db/dbLibraryProxy.cc index 1bb78a8a7..ff86a6f5e 100644 --- a/src/db/db/dbLibraryProxy.cc +++ b/src/db/db/dbLibraryProxy.cc @@ -132,6 +132,7 @@ LibraryProxy::get_layer_indices (db::Layout &layout, db::ImportLayerMapping *lay Library *lib = LibraryManager::instance ().lib (lib_id ()); tl_assert (lib != 0); + tl_assert (lib->layout ().is_valid_cell_index (library_cell_index ())); const db::Cell &cell = lib->layout ().cell (library_cell_index ()); @@ -247,11 +248,11 @@ LibraryProxy::get_basic_name () const { Library *lib = LibraryManager::instance ().lib (lib_id ()); if (lib) { - const db::Cell *lib_cell = &lib->layout ().cell (library_cell_index ()); - if (! lib_cell) { + if (! lib->layout ().is_valid_cell_index (library_cell_index ())) { return ""; } else { - return lib_cell->get_basic_name (); + const db::Cell &lib_cell = lib->layout ().cell (library_cell_index ()); + return lib_cell.get_basic_name (); } } else { return Cell::get_basic_name (); @@ -263,11 +264,11 @@ LibraryProxy::get_display_name () const { Library *lib = LibraryManager::instance ().lib (lib_id ()); if (lib) { - const db::Cell *lib_cell = &lib->layout ().cell (library_cell_index ()); - if (! lib_cell) { + if (! lib->layout ().is_valid_cell_index (library_cell_index ())) { return lib->get_name () + "." + ""; } else { - return lib->get_name () + "." + lib_cell->get_display_name (); + const db::Cell &lib_cell = lib->layout ().cell (library_cell_index ()); + return lib->get_name () + "." + lib_cell.get_display_name (); } } else { return Cell::get_display_name (); @@ -279,11 +280,11 @@ LibraryProxy::get_qualified_name () const { Library *lib = LibraryManager::instance ().lib (lib_id ()); if (lib) { - const db::Cell *lib_cell = &lib->layout ().cell (library_cell_index ()); - if (! lib_cell) { + if (! lib->layout ().is_valid_cell_index (library_cell_index ())) { return lib->get_name () + "." + ""; } else { - return lib->get_name () + "." + lib_cell->get_qualified_name (); + const db::Cell &lib_cell = lib->layout ().cell (library_cell_index ()); + return lib->get_name () + "." + lib_cell.get_qualified_name (); } } else { return Cell::get_qualified_name ();