diff --git a/src/db/db/dbAsIfFlatRegion.cc b/src/db/db/dbAsIfFlatRegion.cc index 37b1708ee..7ba74217e 100644 --- a/src/db/db/dbAsIfFlatRegion.cc +++ b/src/db/db/dbAsIfFlatRegion.cc @@ -1237,7 +1237,12 @@ AsIfFlatRegion::run_check (db::edge_relation_type rel, bool different_polygons, different_polygons = true; } - bool needs_merged_primary = (! other && different_polygons) || options.needs_merged (); + // in some cases we need merged primary polygons: + // 1.) isolated check (same layer, but different polygons) + // 2.) options need merged edges (projection limits, rectangle filter, opposite filter) + // 3.) prop_ne constraint - in that case, merge must not be applied internally after properties have been separated + bool needs_merged_primary = (! other && different_polygons) || options.needs_merged () || pc_always_different (options.prop_constraint); + bool primary_is_merged = is_merged (); db::RegionIterator polygons; diff --git a/src/db/db/dbDeepRegion.cc b/src/db/db/dbDeepRegion.cc index bb739ed54..ea984a1a8 100644 --- a/src/db/db/dbDeepRegion.cc +++ b/src/db/db/dbDeepRegion.cc @@ -2405,7 +2405,12 @@ DeepRegion::run_check (db::edge_relation_type rel, bool different_polygons, cons // primary input - bool needs_merged_primary = (! other_deep && different_polygons) || options.needs_merged (); + // in some cases we need merged primary polygons: + // 1.) isolated check (same layer, but different polygons) + // 2.) options need merged edges (projection limits, rectangle filter, opposite filter) + // 3.) prop_ne constraint - in that case, merge must not be applied internally after properties have been separated + bool needs_merged_primary = (! other_deep && different_polygons) || options.needs_merged () || pc_always_different (options.prop_constraint); + bool primary_is_merged = false; db::DeepLayer polygons; diff --git a/src/drc/unit_tests/drcSimpleTests.cc b/src/drc/unit_tests/drcSimpleTests.cc index 9928e45de..a4a2b489f 100644 --- a/src/drc/unit_tests/drcSimpleTests.cc +++ b/src/drc/unit_tests/drcSimpleTests.cc @@ -2143,3 +2143,14 @@ TEST(151d_edges_from_region_with_properties) { run_test (_this, "151", true); } + +// issue #2416 +TEST(152_sep_with_props) +{ + run_test (_this, "152", false); +} + +TEST(152d_sep_with_props) +{ + run_test (_this, "152", true); +} diff --git a/testdata/drc/drcSimpleTests_152.drc b/testdata/drc/drcSimpleTests_152.drc new file mode 100644 index 000000000..17f0b6af2 --- /dev/null +++ b/testdata/drc/drcSimpleTests_152.drc @@ -0,0 +1,25 @@ +source $drc_test_source +target $drc_test_target + +if $drc_test_deep + deep +end + +deep + +l1 = input(1, 0, enable_props) +l1.output(1, 0) + +l2 = input(2, 0, enable_props) +l2.output(2, 0) + +l1.sep(l2, 1.um, props_ne).output(100, 0) +l1.sep(l2, 1.um, props_eq).output(101, 0) +l1.sep(l2, 1.um).output(102, 0) +l2.sep(l1, 1.um, props_ne).output(110, 0) +l2.sep(l1, 1.um, props_eq).output(111, 0) +l2.sep(l1, 1.um).output(112, 0) +l1.space(1.um, props_ne).output(120, 0) +l1.space(1.um, props_eq).output(121, 0) +l1.space(1.um).output(122, 0) + diff --git a/testdata/drc/drcSimpleTests_152.gds b/testdata/drc/drcSimpleTests_152.gds new file mode 100644 index 000000000..9835938cd Binary files /dev/null and b/testdata/drc/drcSimpleTests_152.gds differ diff --git a/testdata/drc/drcSimpleTests_au152.gds b/testdata/drc/drcSimpleTests_au152.gds new file mode 100644 index 000000000..523f55b6b Binary files /dev/null and b/testdata/drc/drcSimpleTests_au152.gds differ diff --git a/testdata/drc/drcSimpleTests_au152d.gds b/testdata/drc/drcSimpleTests_au152d.gds new file mode 100644 index 000000000..71b367404 Binary files /dev/null and b/testdata/drc/drcSimpleTests_au152d.gds differ