diff --git a/src/Makefile.am b/src/Makefile.am index ae6b3863e2..bdad5e20c7 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -336,6 +336,7 @@ BITCOIN_CORE_H = \ util/bip32.h \ util/bytevectorhash.h \ util/check.h \ + util/designator.h \ util/edge.h \ util/enumerate.h \ util/epochguard.h \ diff --git a/src/net.cpp b/src/net.cpp index d7863ab05b..ba03e2703a 100644 --- a/src/net.cpp +++ b/src/net.cpp @@ -27,6 +27,7 @@ #include #include #include +#include #include #include #include @@ -1329,12 +1330,20 @@ bool CConnman::AttemptToEvictConnection() } } - NodeEvictionCandidate candidate = {node->GetId(), node->m_connected, node->m_min_ping_time, - node->m_last_block_time, node->m_last_tx_time, - node->m_has_all_wanted_services, - node->m_relays_txs.load(), node->m_bloom_filter_loaded.load(), - node->nKeyedNetGroup, node->m_prefer_evict, node->addr.IsLocal(), - node->ConnectedThroughNetwork()}; + NodeEvictionCandidate candidate{ + Desig(id) node->GetId(), + Desig(m_connected) node->m_connected, + Desig(m_min_ping_time) node->m_min_ping_time, + Desig(m_last_block_time) node->m_last_block_time, + Desig(m_last_tx_time) node->m_last_tx_time, + Desig(fRelevantServices) node->m_has_all_wanted_services, + Desig(m_relay_txs) node->m_relays_txs.load(), + Desig(fBloomFilter) node->m_bloom_filter_loaded.load(), + Desig(nKeyedNetGroup) node->nKeyedNetGroup, + Desig(prefer_evict) node->m_prefer_evict, + Desig(m_is_local) node->addr.IsLocal(), + Desig(m_network) node->ConnectedThroughNetwork(), + }; vEvictionCandidates.push_back(candidate); } } diff --git a/src/util/designator.h b/src/util/designator.h new file mode 100644 index 0000000000..3670b11e00 --- /dev/null +++ b/src/util/designator.h @@ -0,0 +1,21 @@ +// Copyright (c) 2022 The Bitcoin Core developers +// Distributed under the MIT software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#ifndef BITCOIN_UTIL_DESIGNATOR_H +#define BITCOIN_UTIL_DESIGNATOR_H + +/** + * Designated initializers can be used to avoid ordering mishaps in aggregate + * initialization. However, they do not prevent uninitialized members. The + * checks can be disabled by defining DISABLE_DESIGNATED_INITIALIZER_ERRORS. + * This should only be needed on MSVC 2019. MSVC 2022 supports them with the + * option "/std:c++20" + */ +#ifndef DISABLE_DESIGNATED_INITIALIZER_ERRORS +#define Desig(field_name) .field_name = +#else +#define Desig(field_name) +#endif + +#endif // BITCOIN_UTIL_DESIGNATOR_H