pkgsrc-Users archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: net/rtorrent default option xmlrpc option fails



On Sun 08 Oct 2017 at 00:30:53 +0200, Rhialto wrote:
> I'll have to look later at this.

constants::request_list_constants::bucket_count is meant to be a
compile-time constant which is presubably inlined everywhere. It is used
as array sizes and template argument. Why g++ still generates a
reference to it, I don't know.

I tried to hack around it by replacing all uses of it by a constant, but
then I discovered it is also used indirectly via a template argument
which gives the namespace... 

Explicitly instantiating the bucket_count causes g++ to complain

request_list.cc:54:37: error: duplicate initialization of 'torrent::request_list_constants::bucket_count'
   const int request_list_constants::bucket_count = REQUEST_LIST_CONSTANTS__BUCKET_COUNT;

as with the patches below, which are in the state that I tried last.
Leaving out the instantiating still leaves me with the original link
error about the same thing being undefined.

Adding GCC_REQD+=4.9 does not help, nor USE_LANGUAGES+=c++14.

I'm unsure how to continue working around what clearly seems a g++ bug.

$NetBSD$

--- src/protocol/request_list.h.orig	2015-08-08 15:01:49.000000000 +0000
+++ src/protocol/request_list.h
@@ -50,13 +50,14 @@ namespace torrent {
 class PeerChunks;
 class Delegator;
 
+#define REQUEST_LIST_CONSTANTS__BUCKET_COUNT  4
 struct request_list_constants {
-  static const int bucket_count = 4;
+  static const int bucket_count = REQUEST_LIST_CONSTANTS__BUCKET_COUNT;
 
-  static const torrent::instrumentation_enum instrumentation_added[bucket_count];
-  static const torrent::instrumentation_enum instrumentation_moved[bucket_count];
-  static const torrent::instrumentation_enum instrumentation_removed[bucket_count];
-  static const torrent::instrumentation_enum instrumentation_total[bucket_count];
+  static const torrent::instrumentation_enum instrumentation_added[REQUEST_LIST_CONSTANTS__BUCKET_COUNT];
+  static const torrent::instrumentation_enum instrumentation_moved[REQUEST_LIST_CONSTANTS__BUCKET_COUNT];
+  static const torrent::instrumentation_enum instrumentation_removed[REQUEST_LIST_CONSTANTS__BUCKET_COUNT];
+  static const torrent::instrumentation_enum instrumentation_total[REQUEST_LIST_CONSTANTS__BUCKET_COUNT];
 
   template <typename Type>
   static void destroy(Type& obj);



$NetBSD$

--- src/protocol/request_list.cc.orig	2015-08-08 15:01:49.000000000 +0000
+++ src/protocol/request_list.cc
@@ -51,26 +51,27 @@
 #include "request_list.h"
 
 namespace torrent {
+  const int request_list_constants::bucket_count = REQUEST_LIST_CONSTANTS__BUCKET_COUNT;
 
-const instrumentation_enum request_list_constants::instrumentation_added[bucket_count] = {
+const instrumentation_enum request_list_constants::instrumentation_added[REQUEST_LIST_CONSTANTS__BUCKET_COUNT] = {
   INSTRUMENTATION_TRANSFER_REQUESTS_QUEUED_ADDED,
   INSTRUMENTATION_TRANSFER_REQUESTS_UNORDERED_ADDED,
   INSTRUMENTATION_TRANSFER_REQUESTS_STALLED_ADDED,
   INSTRUMENTATION_TRANSFER_REQUESTS_CHOKED_ADDED
 };
-const instrumentation_enum request_list_constants::instrumentation_moved[bucket_count] = {
+const instrumentation_enum request_list_constants::instrumentation_moved[REQUEST_LIST_CONSTANTS__BUCKET_COUNT] = {
   INSTRUMENTATION_TRANSFER_REQUESTS_QUEUED_MOVED,
   INSTRUMENTATION_TRANSFER_REQUESTS_UNORDERED_MOVED,
   INSTRUMENTATION_TRANSFER_REQUESTS_STALLED_MOVED,
   INSTRUMENTATION_TRANSFER_REQUESTS_CHOKED_MOVED
 };
-const instrumentation_enum request_list_constants::instrumentation_removed[bucket_count] = {
+const instrumentation_enum request_list_constants::instrumentation_removed[REQUEST_LIST_CONSTANTS__BUCKET_COUNT] = {
   INSTRUMENTATION_TRANSFER_REQUESTS_QUEUED_REMOVED,
   INSTRUMENTATION_TRANSFER_REQUESTS_UNORDERED_REMOVED,
   INSTRUMENTATION_TRANSFER_REQUESTS_STALLED_REMOVED,
   INSTRUMENTATION_TRANSFER_REQUESTS_CHOKED_REMOVED
 };
-const instrumentation_enum request_list_constants::instrumentation_total[bucket_count] = {
+const instrumentation_enum request_list_constants::instrumentation_total[REQUEST_LIST_CONSTANTS__BUCKET_COUNT] = {
   INSTRUMENTATION_TRANSFER_REQUESTS_QUEUED_TOTAL,
   INSTRUMENTATION_TRANSFER_REQUESTS_UNORDERED_TOTAL,
   INSTRUMENTATION_TRANSFER_REQUESTS_STALLED_TOTAL,


-Olaf.
-- 
___ Olaf 'Rhialto' Seibert  -- Wayland: Those who don't understand X
\X/ rhialto/at/falu.nl      -- are condemned to reinvent it. Poorly.

Attachment: signature.asc
Description: PGP signature



Home | Main Index | Thread Index | Old Index