From 762d80e3ab6e5b69f64aefd1bc9e1f46967e0cb3 Mon Sep 17 00:00:00 2001 From: Brian Neradt Date: Mon, 21 Feb 2022 14:29:49 -0600 Subject: [PATCH] Fix Clang 13.0.1 and GCC 12.0.1 Compiler Warnings This cherry-picks two commits from master: Fix Clang 13.0.1 compiler warnings (#8685) This fixes a couple compiler warnings raised by Clang 13.0.1. (cherry picked from commit 96ce993fa53a05b872c5041629e3aac0bc15d56d) Fix warnings from GCC 12.0.1 (#8684) This patch fixes warnings generated by GCC 12.0.1. The warnings involved the use of the deprecated std::binary_function, std::unary_function, and std::iterator interfaces. The use of these was considered more confusing than explicitly declaring the associated types. Therefore this patch replaces the use of these deprecated interfaces with the declaration of the associated types. (cherry picked from commit 0ae34d4d1699d978f6938027efb2ecb9ae05c89a) --- example/plugins/cpp-api/boom/boom.cc | 5 ++++- include/tscore/IntrusivePtr.h | 6 +++++- include/tscpp/api/Headers.h | 10 ++++++++-- iocore/net/quic/QUICFrame.h | 5 ++++- iocore/net/quic/QUICVersionNegotiator.cc | 2 -- src/tscore/HostLookup.cc | 6 +++++- src/wccp/WccpMeta.h | 6 +++++- 7 files changed, 31 insertions(+), 9 deletions(-) diff --git a/example/plugins/cpp-api/boom/boom.cc b/example/plugins/cpp-api/boom/boom.cc index a312e7f2043..7a3a3234d66 100644 --- a/example/plugins/cpp-api/boom/boom.cc +++ b/example/plugins/cpp-api/boom/boom.cc @@ -98,13 +98,16 @@ GlobalPlugin *plugin; // Functor that decides whether the HTTP error can be rewritten or not. // Rewritable codes are: 2xx, 3xx, 4xx, 5xx and 6xx. // 1xx is NOT rewritable! -class IsRewritableCode : public std::unary_function +class IsRewritableCode { // could probably be replaced with mem_ptr_fun().. private: int current_code_; std::string current_code_string_; public: + using argument_type = std::string; + using result_type = bool; + explicit IsRewritableCode(int current_code) : current_code_(current_code) { std::ostringstream oss; diff --git a/include/tscore/IntrusivePtr.h b/include/tscore/IntrusivePtr.h index bfe63a3aee0..70cc671e394 100644 --- a/include/tscore/IntrusivePtr.h +++ b/include/tscore/IntrusivePtr.h @@ -330,9 +330,13 @@ template class IntrusivePtrDefaultPolicy static void finalize(T *t); /// Strict weak order for STL containers. - class Order : public std::binary_function, IntrusivePtr, bool> + class Order { public: + using first_argument_type = IntrusivePtr; + using second_argument_type = IntrusivePtr; + using result_type = bool; + /// Default constructor. Order() {} /// Compare by raw pointer. diff --git a/include/tscpp/api/Headers.h b/include/tscpp/api/Headers.h index 9e6daea8ef4..ffaffde81b5 100644 --- a/include/tscpp/api/Headers.h +++ b/include/tscpp/api/Headers.h @@ -109,12 +109,15 @@ class HeaderField; /** * @brief A header field value iterator iterates through all header fields. */ -class header_field_value_iterator : public std::iterator +class header_field_value_iterator { private: HeaderFieldValueIteratorState *state_; public: + using iterator_category = std::forward_iterator_tag; + using value_type = int; + /** * Constructor for header_field_value_iterator, this shouldn't need to be used directly. * @param bufp the TSMBuffer associated with the headers @@ -169,13 +172,16 @@ class header_field_value_iterator : public std::iterator +class header_field_iterator { private: HeaderFieldIteratorState *state_; header_field_iterator(void *hdr_buf, void *hdr_loc, void *field_loc); public: + using iterator_category = std::forward_iterator_tag; + using value_type = int; + ~header_field_iterator(); /** diff --git a/iocore/net/quic/QUICFrame.h b/iocore/net/quic/QUICFrame.h index 93cd692fc7c..a0b4af9077d 100644 --- a/iocore/net/quic/QUICFrame.h +++ b/iocore/net/quic/QUICFrame.h @@ -204,9 +204,12 @@ class QUICAckFrame : public QUICFrame class AckBlockSection { public: - class const_iterator : public std::iterator + class const_iterator { public: + using iterator_category = std::input_iterator_tag; + using value_type = QUICAckFrame::AckBlock; + const_iterator(uint8_t index, const std::vector *ack_blocks); const QUICAckFrame::AckBlock & diff --git a/iocore/net/quic/QUICVersionNegotiator.cc b/iocore/net/quic/QUICVersionNegotiator.cc index 43d2fbf5631..d26f4f88327 100644 --- a/iocore/net/quic/QUICVersionNegotiator.cc +++ b/iocore/net/quic/QUICVersionNegotiator.cc @@ -46,11 +46,9 @@ QUICVersionNegotiator::negotiate(const QUICPacket &packet) case QUICPacketType::VERSION_NEGOTIATION: { const QUICVersionNegotiationPacketR &vn_packet = static_cast(packet); uint16_t n_supported_version = vn_packet.nversions(); - uint16_t len = 0; for (int i = 0; i < n_supported_version; ++i) { QUICVersion version = vn_packet.supported_version(i); - len += sizeof(QUICVersion); if (QUICTypeUtil::is_supported_version(version)) { this->_status = QUICVersionNegotiationStatus::NEGOTIATED; diff --git a/src/tscore/HostLookup.cc b/src/tscore/HostLookup.cc index b695e0f47d1..440474e9456 100644 --- a/src/tscore/HostLookup.cc +++ b/src/tscore/HostLookup.cc @@ -231,7 +231,11 @@ struct CharIndexBlock { class CharIndex { public: - struct iterator : public std::iterator { + struct iterator { + using iterator_category = std::forward_iterator_tag; + using value_type = HostBranch; + using difference_type = int; + using self_type = iterator; struct State { diff --git a/src/wccp/WccpMeta.h b/src/wccp/WccpMeta.h index 464e8bafcea..11a9b09cf44 100644 --- a/src/wccp/WccpMeta.h +++ b/src/wccp/WccpMeta.h @@ -54,7 +54,11 @@ template struct TEST_IF_TRUE : public TEST_RESULT> }; // Helper for assigning a value to all instances in a container. -template struct TsAssignMember : public std::binary_function { +template struct TsAssignMember { + using first_argument_type = T; + using second_argument_type = A1; + using result_type = R; + R T::*_m; A1 _arg1; TsAssignMember(R T::*m, A1 const &arg1) : _m(m), _arg1(arg1) {}