diff options
| author | Leonard Mosescu <mosescu@google.com> | 2018-08-04 02:15:26 +0000 |
|---|---|---|
| committer | Leonard Mosescu <mosescu@google.com> | 2018-08-04 02:15:26 +0000 |
| commit | 3da16f839338e06fab74a2199f06c7b3d614b032 (patch) | |
| tree | 1660683ac1c36e8f1387f9516ec950ed61ef1fc0 /lldb/source/Utility/VMRange.cpp | |
| parent | f93f3dac3e812a4faad63f8c513d5effa95ef352 (diff) | |
| download | bcm5719-llvm-3da16f839338e06fab74a2199f06c7b3d614b032.tar.gz bcm5719-llvm-3da16f839338e06fab74a2199f06c7b3d614b032.zip | |
Fix a bug in VMRange
I noticed a suspicious failure:
[ RUN ] VMRange.CollectionContains
llvm/src/tools/lldb/unittests/Utility/VMRangeTest.cpp:146: Failure
Value of: VMRange::ContainsRange(collection, VMRange(0x100, 0x104))
Actual: false
Expected: true
Looking at the code, it is a very real bug:
class RangeInRangeUnaryPredicate {
public:
RangeInRangeUnaryPredicate(VMRange range) : _range(range) {} // note that _range binds to a temporary!
bool operator()(const VMRange &range) const {
return range.Contains(_range);
}
const VMRange &_range;
};
This change fixes the bug.
Differential Revision: https://reviews.llvm.org/D50290
llvm-svn: 338949
Diffstat (limited to 'lldb/source/Utility/VMRange.cpp')
| -rw-r--r-- | lldb/source/Utility/VMRange.cpp | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/lldb/source/Utility/VMRange.cpp b/lldb/source/Utility/VMRange.cpp index 105b1a58c48..7e35d3ef0c6 100644 --- a/lldb/source/Utility/VMRange.cpp +++ b/lldb/source/Utility/VMRange.cpp @@ -24,14 +24,16 @@ using namespace lldb_private; bool VMRange::ContainsValue(const VMRange::collection &coll, lldb::addr_t value) { - ValueInRangeUnaryPredicate in_range_predicate(value); - return llvm::find_if(coll, in_range_predicate) != coll.end(); + return llvm::find_if(coll, [&](const VMRange &r) { + return r.Contains(value); + }) != coll.end(); } bool VMRange::ContainsRange(const VMRange::collection &coll, const VMRange &range) { - RangeInRangeUnaryPredicate in_range_predicate(range); - return llvm::find_if(coll, in_range_predicate) != coll.end(); + return llvm::find_if(coll, [&](const VMRange &r) { + return r.Contains(range); + }) != coll.end(); } void VMRange::Dump(Stream *s, lldb::addr_t offset, uint32_t addr_width) const { |

