<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>