Merged to 7.0 in r339107.
On Sat, Aug 4, 2018 at 4:15 AM, Leonard Mosescu via lldb-commits <lldb-commits@lists.llvm.org> wrote: > Author: lemo > Date: Fri Aug 3 19:15:26 2018 > New Revision: 338949 > > URL: http://llvm.org/viewvc/llvm-project?rev=338949&view=rev > Log: > 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 > > > Modified: > lldb/trunk/include/lldb/Utility/VMRange.h > lldb/trunk/source/Utility/VMRange.cpp > > Modified: lldb/trunk/include/lldb/Utility/VMRange.h > URL: > http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Utility/VMRange.h?rev=338949&r1=338948&r2=338949&view=diff > ============================================================================== > --- lldb/trunk/include/lldb/Utility/VMRange.h (original) > +++ lldb/trunk/include/lldb/Utility/VMRange.h Fri Aug 3 19:15:26 2018 > @@ -87,24 +87,6 @@ public: > void Dump(Stream *s, lldb::addr_t base_addr = 0, > uint32_t addr_width = 8) const; > > - class ValueInRangeUnaryPredicate { > - public: > - ValueInRangeUnaryPredicate(lldb::addr_t value) : _value(value) {} > - bool operator()(const VMRange &range) const { > - return range.Contains(_value); > - } > - lldb::addr_t _value; > - }; > - > - class RangeInRangeUnaryPredicate { > - public: > - RangeInRangeUnaryPredicate(VMRange range) : _range(range) {} > - bool operator()(const VMRange &range) const { > - return range.Contains(_range); > - } > - const VMRange &_range; > - }; > - > static bool ContainsValue(const VMRange::collection &coll, > lldb::addr_t value); > > > Modified: lldb/trunk/source/Utility/VMRange.cpp > URL: > http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Utility/VMRange.cpp?rev=338949&r1=338948&r2=338949&view=diff > ============================================================================== > --- lldb/trunk/source/Utility/VMRange.cpp (original) > +++ lldb/trunk/source/Utility/VMRange.cpp Fri Aug 3 19:15:26 2018 > @@ -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 { > > > _______________________________________________ > lldb-commits mailing list > lldb-commits@lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits