[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