From 0bef0499cd9bfe75fd248abecc0146128e8a67a6 Mon Sep 17 00:00:00 2001 From: Martin Nowack Date: Mon, 27 Mar 2023 15:22:41 +0100 Subject: Use newer C++ standard for KLEE's iterators; fixes deprecation warning --- lib/Core/GetElementPtrTypeIterator.h | 74 ++++++++++++++++++------------------ lib/Core/SpecialFunctionHandler.h | 18 ++++++--- 2 files changed, 50 insertions(+), 42 deletions(-) diff --git a/lib/Core/GetElementPtrTypeIterator.h b/lib/Core/GetElementPtrTypeIterator.h index c24ff74b..d8b0e097 100644 --- a/lib/Core/GetElementPtrTypeIterator.h +++ b/lib/Core/GetElementPtrTypeIterator.h @@ -31,51 +31,53 @@ DISABLE_WARNING_POP namespace klee { template -class generic_gep_type_iterator - : public std::iterator { - typedef std::iterator - super; - - ItTy OpIt; - llvm::Type *CurTy; - generic_gep_type_iterator() {} - - llvm::Value *asValue(llvm::Value *V) const { return V; } - llvm::Value *asValue(unsigned U) const { - return llvm::ConstantInt::get(CurTy->getContext(), llvm::APInt(32, U)); - } +class generic_gep_type_iterator { + using iterator_category = std::forward_iterator_tag; + using value_type = llvm::Type *; + using difference_type = ptrdiff_t; + using pointer = void; + using reference = void; + + ItTy OpIt; + llvm::Type *CurTy; + generic_gep_type_iterator() {} + + llvm::Value *asValue(llvm::Value *V) const { return V; } + llvm::Value *asValue(unsigned U) const { + return llvm::ConstantInt::get(CurTy->getContext(), llvm::APInt(32, U)); + } - public: - static generic_gep_type_iterator begin(llvm::Type *Ty, ItTy It) { - generic_gep_type_iterator I; - I.CurTy = Ty; - I.OpIt = It; - return I; - } - static generic_gep_type_iterator end(ItTy It) { - generic_gep_type_iterator I; - I.CurTy = 0; - I.OpIt = It; - return I; - } +public: + static generic_gep_type_iterator begin(llvm::Type *Ty, ItTy It) { + generic_gep_type_iterator I; + I.CurTy = Ty; + I.OpIt = It; + return I; + } + static generic_gep_type_iterator end(ItTy It) { + generic_gep_type_iterator I; + I.CurTy = 0; + I.OpIt = It; + return I; + } - bool operator==(const generic_gep_type_iterator& x) const { - return OpIt == x.OpIt; - } - bool operator!=(const generic_gep_type_iterator& x) const { - return !operator==(x); - } + bool operator==(const generic_gep_type_iterator &x) const { + return OpIt == x.OpIt; + } + bool operator!=(const generic_gep_type_iterator &x) const { + return !operator==(x); + } - llvm::Type *operator*() const { return CurTy; } + llvm::Type *operator*() const { return CurTy; } - llvm::Type *getIndexedType() const { + llvm::Type *getIndexedType() const { #if LLVM_VERSION_CODE >= LLVM_VERSION(11, 0) return llvm::GetElementPtrInst::getTypeAtIndex(CurTy, getOperand()); #else llvm::CompositeType *CT = cast(CurTy); return CT->getTypeAtIndex(getOperand()); #endif - } + } // This is a non-standard operator->. It allows you to call methods on the // current type directly. @@ -104,7 +106,7 @@ class generic_gep_type_iterator generic_gep_type_iterator operator++(int) { // Postincrement generic_gep_type_iterator tmp = *this; ++*this; return tmp; } - }; +}; typedef generic_gep_type_iterator<> gep_type_iterator; typedef generic_gep_type_iterator ev_type_iterator; diff --git a/lib/Core/SpecialFunctionHandler.h b/lib/Core/SpecialFunctionHandler.h index 9487fdf5..230d3929 100644 --- a/lib/Core/SpecialFunctionHandler.h +++ b/lib/Core/SpecialFunctionHandler.h @@ -50,12 +50,18 @@ namespace klee { // const_iterator to iterate over stored HandlerInfo // FIXME: Implement >, >=, <=, < operators - class const_iterator : public std::iterator - { - private: - value_type* base; - int index; - public: + class const_iterator { + using iterator_category = std::random_access_iterator_tag; + using value_type = HandlerInfo; + using difference_type = ptrdiff_t; + using pointer = void; + using reference = void; + + private: + value_type *base; + int index; + + public: const_iterator(value_type* hi) : base(hi), index(0) {}; const_iterator& operator++(); // pre-fix const_iterator operator++(int); // post-fix -- cgit 1.4.1