[Lldb-commits] [lldb] r338949 - Fix a bug in VMRange
Hans Wennborg via lldb-commits
lldb-commits at lists.llvm.org
Tue Aug 7 00:43:42 PDT 2018
Merged to 7.0 in r339107.
On Sat, Aug 4, 2018 at 4:15 AM, Leonard Mosescu via lldb-commits
<lldb-commits at 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 at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
More information about the lldb-commits
mailing list