From: Amos Jeffries Date: Sat, 24 Sep 2016 22:36:05 +0000 (+1300) Subject: Bug 4594: build failure with clang 3.9 X-Git-Tag: SQUID_3_5_22~7 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c697fb5b19126adf7d2a3a8b6ea9034504296336;p=thirdparty%2Fsquid.git Bug 4594: build failure with clang 3.9 --- diff --git a/src/adaptation/ecap/XactionRep.cc b/src/adaptation/ecap/XactionRep.cc index 3d242f9491..8ec628d928 100644 --- a/src/adaptation/ecap/XactionRep.cc +++ b/src/adaptation/ecap/XactionRep.cc @@ -726,7 +726,7 @@ Adaptation::Ecap::XactionRep::status() const buf.append(" A?", 3); } - buf.Printf(" %s%u]", id.Prefix, id.value); + buf.Printf(" %s%u]", id.prefix(), id.value); buf.terminate(); diff --git a/src/adaptation/icap/Xaction.cc b/src/adaptation/icap/Xaction.cc index bea0026748..1181c5dfac 100644 --- a/src/adaptation/icap/Xaction.cc +++ b/src/adaptation/icap/Xaction.cc @@ -598,9 +598,7 @@ const char *Adaptation::Icap::Xaction::status() const fillPendingStatus(buf); buf.append("/", 1); fillDoneStatus(buf); - - buf.Printf(" %s%u]", id.Prefix, id.value); - + buf.Printf(" %s%u]", id.prefix(), id.value); buf.terminate(); return buf.content(); diff --git a/src/base/AsyncJob.cc b/src/base/AsyncJob.cc index 79ca7de450..80dcf936db 100644 --- a/src/base/AsyncJob.cc +++ b/src/base/AsyncJob.cc @@ -164,7 +164,7 @@ const char *AsyncJob::status() const buf.Printf("Stopped, reason:"); buf.Printf("%s",stopReason); } - buf.Printf(" %s%u]", id.Prefix, id.value); + buf.Printf(" %s%u]", id.prefix(), id.value); buf.terminate(); return buf.content(); diff --git a/src/base/InstanceId.h b/src/base/InstanceId.h index c64f9df13d..2e2c457d92 100644 --- a/src/base/InstanceId.h +++ b/src/base/InstanceId.h @@ -25,35 +25,41 @@ class InstanceId public: typedef unsigned int Value; ///< id storage type; \todo: parameterize? - InstanceId(): value(++Last ? Last : ++Last) {} + InstanceId(): value(0) {change();} operator Value() const { return value; } bool operator ==(const InstanceId &o) const { return value == o.value; } bool operator !=(const InstanceId &o) const { return !(*this == o); } - void change() {value = ++Last ? Last : ++Last;} + void change(); - /// prints Prefix followed by ID value; \todo: use HEX for value printing? + /// prints class-pecific prefix followed by ID value; \todo: use HEX for value printing? std::ostream &print(std::ostream &os) const; + /// returns the class-pecific prefix + const char * const prefix() const; + public: - static const char *Prefix; ///< Class shorthand string for debugging Value value; ///< instance identifier private: InstanceId(const InstanceId& right); ///< not implemented; IDs are unique InstanceId& operator=(const InstanceId &right); ///< not implemented - -private: - static Value Last; ///< the last used ID value }; /// convenience macro to instantiate Class-specific stuff in .cc files -#define InstanceIdDefinitions(Class, prefix) \ - template<> const char *InstanceId::Prefix = prefix; \ - template<> InstanceId::Value InstanceId::Last = 0; \ +#define InstanceIdDefinitions(Class, pfx) \ + template<> const char * const \ + InstanceId::prefix() const { \ + return pfx; \ + } \ template<> std::ostream & \ InstanceId::print(std::ostream &os) const { \ - return os << Prefix << value; \ + return os << pfx << value; \ + } \ + template<> void \ + InstanceId::change() { \ + static InstanceId::Value Last = 0; \ + value = ++Last ? Last : ++Last; \ } /// print the id diff --git a/src/ssl/PeerConnector.cc b/src/ssl/PeerConnector.cc index 8760f6c379..9d1184591b 100644 --- a/src/ssl/PeerConnector.cc +++ b/src/ssl/PeerConnector.cc @@ -771,7 +771,7 @@ Ssl::PeerConnector::status() const } if (serverConn != NULL) buf.Printf(" FD %d", serverConn->fd); - buf.Printf(" %s%u]", id.Prefix, id.value); + buf.Printf(" %s%u]", id.prefix(), id.value); buf.terminate(); return buf.content();