[compiler-rt] r257858 - sanitizer_common: C++ify the IntrusiveList iterator interface.

David Blaikie via llvm-commits llvm-commits at lists.llvm.org
Thu Jan 14 21:00:32 PST 2016


On Thu, Jan 14, 2016 at 6:19 PM, Peter Collingbourne via llvm-commits <
llvm-commits at lists.llvm.org> wrote:

> Author: pcc
> Date: Thu Jan 14 20:19:20 2016
> New Revision: 257858
>
> URL: http://llvm.org/viewvc/llvm-project?rev=257858&view=rev
> Log:
> sanitizer_common: C++ify the IntrusiveList iterator interface.
>
> Modified:
>     compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.cc
>     compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.h
>
> compiler-rt/trunk/lib/sanitizer_common/sanitizer_coverage_mapping_libcdep.cc
>     compiler-rt/trunk/lib/sanitizer_common/sanitizer_list.h
>     compiler-rt/trunk/lib/sanitizer_common/sanitizer_symbolizer.h
>     compiler-rt/trunk/lib/sanitizer_common/sanitizer_symbolizer_libcdep.cc
>
> Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.cc
> URL:
> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.cc?rev=257858&r1=257857&r2=257858&view=diff
>
> ==============================================================================
> --- compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.cc (original)
> +++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.cc Thu Jan 14
> 20:19:20 2016
> @@ -355,9 +355,8 @@ void LoadedModule::addAddressRange(uptr
>  }
>
>  bool LoadedModule::containsAddress(uptr address) const {
> -  for (Iterator iter = ranges(); iter.hasNext();) {
> -    const AddressRange *r = iter.next();
> -    if (r->beg <= address && address < r->end)
> +  for (const AddressRange &r : ranges()) {
> +    if (r.beg <= address && address < r.end)
>        return true;
>

llvm::any_of?


>    }
>    return false;
>
> Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.h
> URL:
> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.h?rev=257858&r1=257857&r2=257858&view=diff
>
> ==============================================================================
> --- compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.h (original)
> +++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.h Thu Jan 14
> 20:19:20 2016
> @@ -628,8 +628,7 @@ class LoadedModule {
>          : next(nullptr), beg(beg), end(end), executable(executable) {}
>    };
>
> -  typedef IntrusiveList<AddressRange>::ConstIterator Iterator;
> -  Iterator ranges() const { return Iterator(&ranges_); }
> +  const IntrusiveList<AddressRange> &ranges() const { return ranges_; }
>
>   private:
>    char *full_name_;  // Owned.
>
> Modified:
> compiler-rt/trunk/lib/sanitizer_common/sanitizer_coverage_mapping_libcdep.cc
> URL:
> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_coverage_mapping_libcdep.cc?rev=257858&r1=257857&r2=257858&view=diff
>
> ==============================================================================
> ---
> compiler-rt/trunk/lib/sanitizer_common/sanitizer_coverage_mapping_libcdep.cc
> (original)
> +++
> compiler-rt/trunk/lib/sanitizer_common/sanitizer_coverage_mapping_libcdep.cc
> Thu Jan 14 20:19:20 2016
> @@ -81,11 +81,10 @@ void CovUpdateMapping(const char *covera
>      for (int i = 0; i < n_modules; ++i) {
>        const char *module_name = StripModuleName(modules[i].full_name());
>        uptr base = modules[i].base_address();
> -      for (auto iter = modules[i].ranges(); iter.hasNext();) {
> -        const auto *range = iter.next();
> -        if (range->executable) {
> -          uptr start = range->beg;
> -          uptr end = range->end;
> +      for (const auto &range : modules[i].ranges()) {
> +        if (range.executable) {
> +          uptr start = range.beg;
> +          uptr end = range.end;
>            text.append("%zx %zx %zx %s\n", start, end, base, module_name);
>            if (caller_pc && caller_pc >= start && caller_pc < end)
>              cached_mapping.SetModuleRange(start, end);
>
> Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_list.h
> URL:
> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_list.h?rev=257858&r1=257857&r2=257858&view=diff
>
> ==============================================================================
> --- compiler-rt/trunk/lib/sanitizer_common/sanitizer_list.h (original)
> +++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_list.h Thu Jan 14
> 20:19:20 2016
> @@ -116,24 +116,32 @@ struct IntrusiveList {
>      }
>    }
>
> -  template<class ListTy, class ItemTy>
> +  template<class ItemTy>
>    class IteratorBase {
>     public:
> -    explicit IteratorBase(ListTy *list)
> -        : list_(list), current_(list->first_) { }
> -    ItemTy *next() {
> -      ItemTy *ret = current_;
> -      if (current_) current_ = current_->next;
> -      return ret;
> +    explicit IteratorBase(ItemTy *current) : current_(current) {}
> +    IteratorBase &operator++() {
> +      current_ = current_->next;
> +      return *this;
> +    }
> +    bool operator!=(IteratorBase other) const {
> +      return current_ != other.current_;
> +    }
> +    ItemTy &operator*() {
> +      return *current_;
>      }
> -    bool hasNext() const { return current_ != nullptr; }
>     private:
> -    ListTy *list_;
>      ItemTy *current_;
>    };
>
> -  typedef IteratorBase<IntrusiveList<Item>, Item> Iterator;
> -  typedef IteratorBase<const IntrusiveList<Item>, const Item>
> ConstIterator;
> +  typedef IteratorBase<Item> Iterator;
> +  typedef IteratorBase<const Item> ConstIterator;
> +
> +  Iterator begin() { return Iterator(first_); }
> +  Iterator end() { return Iterator(0); }
> +
> +  ConstIterator begin() const { return ConstIterator(first_); }
> +  ConstIterator end() const { return ConstIterator(0); }
>
>  // private, don't use directly.
>    uptr size_;
>
> Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_symbolizer.h
> URL:
> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_symbolizer.h?rev=257858&r1=257857&r2=257858&view=diff
>
> ==============================================================================
> --- compiler-rt/trunk/lib/sanitizer_common/sanitizer_symbolizer.h
> (original)
> +++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_symbolizer.h Thu Jan
> 14 20:19:20 2016
> @@ -157,7 +157,6 @@ class Symbolizer final {
>    // always synchronized.
>    BlockingMutex mu_;
>
> -  typedef IntrusiveList<SymbolizerTool>::Iterator Iterator;
>    IntrusiveList<SymbolizerTool> tools_;
>
>    explicit Symbolizer(IntrusiveList<SymbolizerTool> tools);
>
> Modified:
> compiler-rt/trunk/lib/sanitizer_common/sanitizer_symbolizer_libcdep.cc
> URL:
> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_symbolizer_libcdep.cc?rev=257858&r1=257857&r2=257858&view=diff
>
> ==============================================================================
> --- compiler-rt/trunk/lib/sanitizer_common/sanitizer_symbolizer_libcdep.cc
> (original)
> +++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_symbolizer_libcdep.cc
> Thu Jan 14 20:19:20 2016
> @@ -69,10 +69,9 @@ SymbolizedStack *Symbolizer::SymbolizePC
>      return res;
>    // Always fill data about module name and offset.
>    res->info.FillModuleInfo(module_name, module_offset);
> -  for (auto iter = Iterator(&tools_); iter.hasNext();) {
> -    auto *tool = iter.next();
> +  for (auto &tool : tools_) {
>      SymbolizerScope sym_scope(this);
> -    if (tool->SymbolizePC(addr, res)) {
> +    if (tool.SymbolizePC(addr, res)) {
>        return res;
>      }
>    }
> @@ -88,10 +87,9 @@ bool Symbolizer::SymbolizeData(uptr addr
>    info->Clear();
>    info->module = internal_strdup(module_name);
>    info->module_offset = module_offset;
> -  for (auto iter = Iterator(&tools_); iter.hasNext();) {
> -    auto *tool = iter.next();
> +  for (auto &tool : tools_) {
>      SymbolizerScope sym_scope(this);
> -    if (tool->SymbolizeData(addr, info)) {
> +    if (tool.SymbolizeData(addr, info)) {
>        return true;
>      }
>    }
> @@ -113,19 +111,17 @@ bool Symbolizer::GetModuleNameAndOffsetF
>
>  void Symbolizer::Flush() {
>    BlockingMutexLock l(&mu_);
> -  for (auto iter = Iterator(&tools_); iter.hasNext();) {
> -    auto *tool = iter.next();
> +  for (auto &tool : tools_) {
>      SymbolizerScope sym_scope(this);
> -    tool->Flush();
> +    tool.Flush();
>    }
>  }
>
>  const char *Symbolizer::Demangle(const char *name) {
>    BlockingMutexLock l(&mu_);
> -  for (auto iter = Iterator(&tools_); iter.hasNext();) {
> -    auto *tool = iter.next();
> +  for (auto &tool : tools_) {
>      SymbolizerScope sym_scope(this);
> -    if (const char *demangled = tool->Demangle(name))
> +    if (const char *demangled = tool.Demangle(name))
>        return demangled;
>    }
>    return PlatformDemangle(name);
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160114/38b35243/attachment.html>


More information about the llvm-commits mailing list