From 451f57bb255caba09b673d351847c1cac5fdfccc Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Tue, 21 Sep 2021 23:37:57 +0200 Subject: [PATCH] Fixed #909 (Crash on DRC) --- src/db/db/dbOriginalLayerRegion.cc | 10 ++++++++++ src/db/unit_tests/dbRegionTests.cc | 13 +++++++++++++ 2 files changed, 23 insertions(+) diff --git a/src/db/db/dbOriginalLayerRegion.cc b/src/db/db/dbOriginalLayerRegion.cc index 6df7a711f..23a924016 100644 --- a/src/db/db/dbOriginalLayerRegion.cc +++ b/src/db/db/dbOriginalLayerRegion.cc @@ -204,6 +204,16 @@ OriginalLayerRegion::count () const return n; + } else if (! iter.layout ()) { + + // for Shapes-based iterators just use the shape count + + if (iter.shapes ()) { + return iter.shapes ()->size (iter.shape_flags () & db::ShapeIterator::Regions); + } else { + return 0; + } + } else { // otherwise we can utilize the CellCounter diff --git a/src/db/unit_tests/dbRegionTests.cc b/src/db/unit_tests/dbRegionTests.cc index 7ca238133..3b3bd8122 100644 --- a/src/db/unit_tests/dbRegionTests.cc +++ b/src/db/unit_tests/dbRegionTests.cc @@ -2094,3 +2094,16 @@ TEST(issue_277) r.set_min_coherence (false); // needs to merge again EXPECT_EQ (r.sized (1).merged (false, 1).to_string (), ""); } + +TEST(issue_909) +{ + db::Shapes s1; + s1.insert(db::Box(0, 0, 100, 100)); + db::Shapes s2; + s2.insert(db::Box(0, 0, 200, 300)); + db::Region r1 = db::Region (db::RecursiveShapeIterator (s1)); + db::Region r2 = db::Region (db::RecursiveShapeIterator (s2)); + + db::Region r = r1 + r2; + EXPECT_EQ (r.to_string (), "(0,0;0,100;100,100;100,0);(0,0;0,300;200,300;200,0)"); +}