[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