diff options
| author | Fangrui Song <maskray@google.com> | 2019-04-15 08:30:10 +0000 |
|---|---|---|
| committer | Fangrui Song <maskray@google.com> | 2019-04-15 08:30:10 +0000 |
| commit | b93de4cd263002735b08a95108349ebd01fbd380 (patch) | |
| tree | bf8ee3c90219be7c80508f366b39360ff1c6ac5c | |
| parent | bd8a1ce7bbb9868188b6310cc7bec88bd1b830f0 (diff) | |
| download | bcm5719-llvm-b93de4cd263002735b08a95108349ebd01fbd380.tar.gz bcm5719-llvm-b93de4cd263002735b08a95108349ebd01fbd380.zip | |
[DWARF] Fix DWARFVerifier::DieRangeInfo::intersects
It was incorrect if RHS had more than 1 ranges and one of the ranges interacted with *this
llvm-svn: 358376
| -rw-r--r-- | llvm/lib/DebugInfo/DWARF/DWARFVerifier.cpp | 25 | ||||
| -rw-r--r-- | llvm/unittests/DebugInfo/DWARF/DWARFDebugInfoTest.cpp | 3 |
2 files changed, 12 insertions, 16 deletions
diff --git a/llvm/lib/DebugInfo/DWARF/DWARFVerifier.cpp b/llvm/lib/DebugInfo/DWARF/DWARFVerifier.cpp index 6f68553bb7b..43e83c83fd9 100644 --- a/llvm/lib/DebugInfo/DWARF/DWARFVerifier.cpp +++ b/llvm/lib/DebugInfo/DWARF/DWARFVerifier.cpp @@ -85,23 +85,16 @@ bool DWARFVerifier::DieRangeInfo::contains(const DieRangeInfo &RHS) const { } bool DWARFVerifier::DieRangeInfo::intersects(const DieRangeInfo &RHS) const { - if (Ranges.empty() || RHS.Ranges.empty()) - return false; - - auto End = Ranges.end(); - auto Iter = findRange(RHS.Ranges.front()); - for (const auto &R : RHS.Ranges) { - if (Iter == End) - return false; - if (R.HighPC <= Iter->LowPC) - continue; - while (Iter != End) { - if (Iter->intersects(R)) - return true; - ++Iter; - } + auto I1 = Ranges.begin(), E1 = Ranges.end(); + auto I2 = RHS.Ranges.begin(), E2 = RHS.Ranges.end(); + while (I1 != E1 && I2 != E2) { + if (I1->intersects(*I2)) + return true; + if (I1->LowPC < I2->LowPC) + ++I1; + else + ++I2; } - return false; } diff --git a/llvm/unittests/DebugInfo/DWARF/DWARFDebugInfoTest.cpp b/llvm/unittests/DebugInfo/DWARF/DWARFDebugInfoTest.cpp index bd519767105..d3643ca4bb7 100644 --- a/llvm/unittests/DebugInfo/DWARF/DWARFDebugInfoTest.cpp +++ b/llvm/unittests/DebugInfo/DWARF/DWARFDebugInfoTest.cpp @@ -3188,6 +3188,9 @@ TEST(DWARFDebugInfo, TestDWARFDieRangeInfoIntersects) { AssertRangesIntersect(Ranges, {{0x3f, 0x40}}); // Test range that starts at end of second range AssertRangesDontIntersect(Ranges, {{0x40, 0x41}}); + + AssertRangesDontIntersect(Ranges, {{0x20, 0x21}, {0x2f, 0x30}}); + AssertRangesIntersect(Ranges, {{0x20, 0x21}, {0x2f, 0x31}}); } } // end anonymous namespace |

