<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Jan 14, 2016 at 6:19 PM, Peter Collingbourne via llvm-commits <span dir="ltr"><<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: pcc<br>
Date: Thu Jan 14 20:19:20 2016<br>
New Revision: 257858<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=257858&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=257858&view=rev</a><br>
Log:<br>
sanitizer_common: C++ify the IntrusiveList iterator interface.<br>
<br>
Modified:<br>
    compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.cc<br>
    compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.h<br>
    compiler-rt/trunk/lib/sanitizer_common/sanitizer_coverage_mapping_libcdep.cc<br>
    compiler-rt/trunk/lib/sanitizer_common/sanitizer_list.h<br>
    compiler-rt/trunk/lib/sanitizer_common/sanitizer_symbolizer.h<br>
    compiler-rt/trunk/lib/sanitizer_common/sanitizer_symbolizer_libcdep.cc<br>
<br>
Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.cc?rev=257858&r1=257857&r2=257858&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.cc?rev=257858&r1=257857&r2=257858&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.cc (original)<br>
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.cc Thu Jan 14 20:19:20 2016<br>
@@ -355,9 +355,8 @@ void LoadedModule::addAddressRange(uptr<br>
 }<br>
<br>
 bool LoadedModule::containsAddress(uptr address) const {<br>
-  for (Iterator iter = ranges(); iter.hasNext();) {<br>
-    const AddressRange *r = iter.next();<br>
-    if (r->beg <= address && address < r->end)<br>
+  for (const AddressRange &r : ranges()) {<br>
+    if (r.beg <= address && address < r.end)<br>
       return true;<br></blockquote><div><br></div><div>llvm::any_of?</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
   }<br>
   return false;<br>
<br>
Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.h?rev=257858&r1=257857&r2=257858&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.h?rev=257858&r1=257857&r2=257858&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.h (original)<br>
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.h Thu Jan 14 20:19:20 2016<br>
@@ -628,8 +628,7 @@ class LoadedModule {<br>
         : next(nullptr), beg(beg), end(end), executable(executable) {}<br>
   };<br>
<br>
-  typedef IntrusiveList<AddressRange>::ConstIterator Iterator;<br>
-  Iterator ranges() const { return Iterator(&ranges_); }<br>
+  const IntrusiveList<AddressRange> &ranges() const { return ranges_; }<br>
<br>
  private:<br>
   char *full_name_;  // Owned.<br>
<br>
Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_coverage_mapping_libcdep.cc<br>
URL: <a href="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" rel="noreferrer" target="_blank">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</a><br>
==============================================================================<br>
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_coverage_mapping_libcdep.cc (original)<br>
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_coverage_mapping_libcdep.cc Thu Jan 14 20:19:20 2016<br>
@@ -81,11 +81,10 @@ void CovUpdateMapping(const char *covera<br>
     for (int i = 0; i < n_modules; ++i) {<br>
       const char *module_name = StripModuleName(modules[i].full_name());<br>
       uptr base = modules[i].base_address();<br>
-      for (auto iter = modules[i].ranges(); iter.hasNext();) {<br>
-        const auto *range = iter.next();<br>
-        if (range->executable) {<br>
-          uptr start = range->beg;<br>
-          uptr end = range->end;<br>
+      for (const auto &range : modules[i].ranges()) {<br>
+        if (range.executable) {<br>
+          uptr start = range.beg;<br>
+          uptr end = range.end;<br>
           text.append("%zx %zx %zx %s\n", start, end, base, module_name);<br>
           if (caller_pc && caller_pc >= start && caller_pc < end)<br>
             cached_mapping.SetModuleRange(start, end);<br>
<br>
Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_list.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_list.h?rev=257858&r1=257857&r2=257858&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_list.h?rev=257858&r1=257857&r2=257858&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_list.h (original)<br>
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_list.h Thu Jan 14 20:19:20 2016<br>
@@ -116,24 +116,32 @@ struct IntrusiveList {<br>
     }<br>
   }<br>
<br>
-  template<class ListTy, class ItemTy><br>
+  template<class ItemTy><br>
   class IteratorBase {<br>
    public:<br>
-    explicit IteratorBase(ListTy *list)<br>
-        : list_(list), current_(list->first_) { }<br>
-    ItemTy *next() {<br>
-      ItemTy *ret = current_;<br>
-      if (current_) current_ = current_->next;<br>
-      return ret;<br>
+    explicit IteratorBase(ItemTy *current) : current_(current) {}<br>
+    IteratorBase &operator++() {<br>
+      current_ = current_->next;<br>
+      return *this;<br>
+    }<br>
+    bool operator!=(IteratorBase other) const {<br>
+      return current_ != other.current_;<br>
+    }<br>
+    ItemTy &operator*() {<br>
+      return *current_;<br>
     }<br>
-    bool hasNext() const { return current_ != nullptr; }<br>
    private:<br>
-    ListTy *list_;<br>
     ItemTy *current_;<br>
   };<br>
<br>
-  typedef IteratorBase<IntrusiveList<Item>, Item> Iterator;<br>
-  typedef IteratorBase<const IntrusiveList<Item>, const Item> ConstIterator;<br>
+  typedef IteratorBase<Item> Iterator;<br>
+  typedef IteratorBase<const Item> ConstIterator;<br>
+<br>
+  Iterator begin() { return Iterator(first_); }<br>
+  Iterator end() { return Iterator(0); }<br>
+<br>
+  ConstIterator begin() const { return ConstIterator(first_); }<br>
+  ConstIterator end() const { return ConstIterator(0); }<br>
<br>
 // private, don't use directly.<br>
   uptr size_;<br>
<br>
Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_symbolizer.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_symbolizer.h?rev=257858&r1=257857&r2=257858&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_symbolizer.h?rev=257858&r1=257857&r2=257858&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_symbolizer.h (original)<br>
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_symbolizer.h Thu Jan 14 20:19:20 2016<br>
@@ -157,7 +157,6 @@ class Symbolizer final {<br>
   // always synchronized.<br>
   BlockingMutex mu_;<br>
<br>
-  typedef IntrusiveList<SymbolizerTool>::Iterator Iterator;<br>
   IntrusiveList<SymbolizerTool> tools_;<br>
<br>
   explicit Symbolizer(IntrusiveList<SymbolizerTool> tools);<br>
<br>
Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_symbolizer_libcdep.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_symbolizer_libcdep.cc?rev=257858&r1=257857&r2=257858&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_symbolizer_libcdep.cc?rev=257858&r1=257857&r2=257858&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_symbolizer_libcdep.cc (original)<br>
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_symbolizer_libcdep.cc Thu Jan 14 20:19:20 2016<br>
@@ -69,10 +69,9 @@ SymbolizedStack *Symbolizer::SymbolizePC<br>
     return res;<br>
   // Always fill data about module name and offset.<br>
   res->info.FillModuleInfo(module_name, module_offset);<br>
-  for (auto iter = Iterator(&tools_); iter.hasNext();) {<br>
-    auto *tool = iter.next();<br>
+  for (auto &tool : tools_) {<br>
     SymbolizerScope sym_scope(this);<br>
-    if (tool->SymbolizePC(addr, res)) {<br>
+    if (tool.SymbolizePC(addr, res)) {<br>
       return res;<br>
     }<br>
   }<br>
@@ -88,10 +87,9 @@ bool Symbolizer::SymbolizeData(uptr addr<br>
   info->Clear();<br>
   info->module = internal_strdup(module_name);<br>
   info->module_offset = module_offset;<br>
-  for (auto iter = Iterator(&tools_); iter.hasNext();) {<br>
-    auto *tool = iter.next();<br>
+  for (auto &tool : tools_) {<br>
     SymbolizerScope sym_scope(this);<br>
-    if (tool->SymbolizeData(addr, info)) {<br>
+    if (tool.SymbolizeData(addr, info)) {<br>
       return true;<br>
     }<br>
   }<br>
@@ -113,19 +111,17 @@ bool Symbolizer::GetModuleNameAndOffsetF<br>
<br>
 void Symbolizer::Flush() {<br>
   BlockingMutexLock l(&mu_);<br>
-  for (auto iter = Iterator(&tools_); iter.hasNext();) {<br>
-    auto *tool = iter.next();<br>
+  for (auto &tool : tools_) {<br>
     SymbolizerScope sym_scope(this);<br>
-    tool->Flush();<br>
+    tool.Flush();<br>
   }<br>
 }<br>
<br>
 const char *Symbolizer::Demangle(const char *name) {<br>
   BlockingMutexLock l(&mu_);<br>
-  for (auto iter = Iterator(&tools_); iter.hasNext();) {<br>
-    auto *tool = iter.next();<br>
+  for (auto &tool : tools_) {<br>
     SymbolizerScope sym_scope(this);<br>
-    if (const char *demangled = tool->Demangle(name))<br>
+    if (const char *demangled = tool.Demangle(name))<br>
       return demangled;<br>
   }<br>
   return PlatformDemangle(name);<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div></div>