diff --git a/src/plugins/streamers/lefdef/db_plugin/dbDEFImporter.cc b/src/plugins/streamers/lefdef/db_plugin/dbDEFImporter.cc index a47f99d32..b07a347b0 100644 --- a/src/plugins/streamers/lefdef/db_plugin/dbDEFImporter.cc +++ b/src/plugins/streamers/lefdef/db_plugin/dbDEFImporter.cc @@ -749,7 +749,12 @@ DEFImporter::read_single_net (std::string &nondefaultrule, Layout &layout, db::C } std::map::const_iterator vd = m_via_desc.find (vn); - if (vd != m_via_desc.end () && ! pts.empty ()) { + + if (vd == m_via_desc.end ()) { + + warn (tl::to_string (tr ("Invalid via name: ")) + vn); + + } else if (! pts.empty ()) { // For the via, the masks are encoded in a three-digit number ( ) unsigned int mask_top = (mask / 100) % 10; diff --git a/src/plugins/streamers/lefdef/unit_tests/dbLEFDEFImportTests.cc b/src/plugins/streamers/lefdef/unit_tests/dbLEFDEFImportTests.cc index fb786413f..f430e4829 100644 --- a/src/plugins/streamers/lefdef/unit_tests/dbLEFDEFImportTests.cc +++ b/src/plugins/streamers/lefdef/unit_tests/dbLEFDEFImportTests.cc @@ -898,6 +898,21 @@ TEST(132_issue1307_pin_names) run_test (_this, "issue-1307c", "lef:in.lef+def:in.def", "au.oas", opt, false); } +/* +TODO: need to clarify first, if invalid via specs should be errors +TEST(133_unknown_vias_are_errors) +{ + db::LEFDEFReaderOptions opt = default_options (); + + try { + run_test (_this, "invalid_via", "lef:tech.lef+def:comp_invalid_via.def", "au.oas", opt, false); + EXPECT_EQ (true, false); + } catch (db::LEFDEFReaderException &ex) { + EXPECT_EQ (ex.msg ().find ("Invalid via name"), size_t (0)); + } +} +*/ + TEST(200_lefdef_plugin) { db::Layout ly; diff --git a/testdata/lefdef/invalid_via/comp_invalid_via.def b/testdata/lefdef/invalid_via/comp_invalid_via.def new file mode 100644 index 000000000..1eb475daf --- /dev/null +++ b/testdata/lefdef/invalid_via/comp_invalid_via.def @@ -0,0 +1,16 @@ +VERSION 5.8 ; +DIVIDERCHAR "/" ; +BUSBITCHARS "[]" ; +DESIGN comp_invalid_via ; +UNITS DISTANCE MICRONS 1000 ; +DIEAREA ( 0 0 ) ( 10000 2000 ) ; + +SPECIALNETS 2 ; + - VGND ( PIN VGND ) ( * VNB ) ( * VGND ) + USE GROUND + + ROUTED met1 480 + SHAPE FOLLOWPIN ( 0 1000 ) ( 2000 1000 ) + NEW met1 0 + SHAPE STRIPE ( 2000 1000 ) via1 + + ROUTED met2 480 + SHAPE FOLLOWPIN ( 2000 1000 ) ( 4000 1000 ) + NEW met2 0 + SHAPE STRIPE ( 4000 1000 ) invalid_via ; +END SPECIALNETS +END DESIGN + diff --git a/testdata/lefdef/invalid_via/tech.lef b/testdata/lefdef/invalid_via/tech.lef new file mode 100644 index 000000000..cae5bcd54 --- /dev/null +++ b/testdata/lefdef/invalid_via/tech.lef @@ -0,0 +1,89 @@ + +VERSION 5.7 ; + +BUSBITCHARS "[]" ; +DIVIDERCHAR "/" ; +USEMINSPACING OBS OFF ; + +UNITS + DATABASE MICRONS 1000 ; +END UNITS + +MANUFACTURINGGRID 0.005 ; + +LAYER met1 + TYPE ROUTING ; + DIRECTION HORIZONTAL ; + PITCH 0.34 ; + OFFSET 0.17 ; + WIDTH 0.14 ; +END met1 + +LAYER via + TYPE CUT ; + WIDTH 0.15 ; + SPACING 0.17 ; +END via + +LAYER met2 + TYPE ROUTING ; + DIRECTION VERTICAL ; + PITCH 0.46 ; + OFFSET 0.23 ; + WIDTH 0.14 ; +END met2 + +LAYER via2 + TYPE CUT ; + WIDTH 0.2 ; + SPACING 0.2 ; +END via2 + +LAYER met3 + TYPE ROUTING ; + DIRECTION HORIZONTAL ; + PITCH 0.68 ; + OFFSET 0.34 ; + WIDTH 0.3 ; +END met3 + +VIA via1 DEFAULT + LAYER via ; + RECT -0.075 -0.075 0.075 0.075 ; + LAYER met1 ; + RECT -0.16 -0.24 0.16 0.24 ; + LAYER met2 ; + RECT -0.13 -0.24 0.13 0.24 ; +END via1 + +VIARULE M1M2_PR GENERATE + LAYER met1 ; + ENCLOSURE 0.085 0.055 ; + LAYER met2 ; + ENCLOSURE 0.055 0.085 ; + LAYER via ; + RECT -0.075 -0.075 0.075 0.075 ; + SPACING 0.32 BY 0.32 ; +END M1M2_PR + +VIA via2 DEFAULT + LAYER via2 ; + RECT -0.1 -0.1 0.1 0.1 ; + LAYER met2 ; + RECT -0.14 -0.24 0.14 0.24 ; + LAYER met3 ; + RECT -0.165 -0.165 0.165 0.165 ; +END via2 + +VIARULE M2M3_PR GENERATE + LAYER met2 ; + ENCLOSURE 0.04 0.085 ; + LAYER met3 ; + ENCLOSURE 0.065 0.065 ; + LAYER via2 ; + RECT -0.1 -0.1 0.1 0.1 ; + SPACING 0.4 BY 0.4 ; +END M2M3_PR + +END LIBRARY + diff --git a/testdata/lefdef/multi_def/au.oas b/testdata/lefdef/multi_def/au.oas index 3b6e66367..4f1002177 100644 Binary files a/testdata/lefdef/multi_def/au.oas and b/testdata/lefdef/multi_def/au.oas differ