From ec58b685c8e1c73e1cb053b47d4cee971c603aab Mon Sep 17 00:00:00 2001 From: Bart Wyatt Date: Mon, 18 Dec 2017 17:03:26 -0500 Subject: [PATCH] various fixes for gcc 5.4 (aka Ubuntu 16.04 default) --- libraries/chain/chain_controller.cpp | 6 ++-- .../chain/contracts/chain_initializer.cpp | 2 +- libraries/chain/contracts/eosio_contract.cpp | 10 +++--- .../eosio/chain/contracts/abi_serializer.hpp | 31 ++++++++++++++----- .../eosio/chain/contracts/genesis_state.hpp | 2 ++ .../include/eosio/chain/contracts/types.hpp | 4 +-- libraries/chain/wasm_interface.cpp | 9 +++--- libraries/fc/include/fc/crypto/common.hpp | 2 +- libraries/fc/include/fc/static_variant.hpp | 2 +- libraries/testing/tester.cpp | 4 +-- .../account_history_plugin.cpp | 4 +-- plugins/producer_plugin/producer_plugin.cpp | 2 +- .../txn_test_gen_plugin.cpp | 2 +- 13 files changed, 49 insertions(+), 31 deletions(-) diff --git a/libraries/chain/chain_controller.cpp b/libraries/chain/chain_controller.cpp index 78c67fa3b..fc87feb72 100644 --- a/libraries/chain/chain_controller.cpp +++ b/libraries/chain/chain_controller.cpp @@ -377,7 +377,7 @@ void chain_controller::_apply_cycle_trace( const cycle_trace& res ) for (const auto&st: res.shard_traces) { for (const auto &tr: st.transaction_traces) { for (const auto &dt: tr.deferred_transactions) { - _db.create([&](auto &obj) { + _db.create([&](generated_transaction_object &obj) { obj.trx_id = dt.id(); obj.sender = dt.sender; obj.sender_id = dt.sender_id; @@ -630,7 +630,7 @@ void chain_controller::__apply_block(const signed_block& next_block) flat_set chain_controller::get_required_keys(const signed_transaction& trx, const flat_set& candidate_keys)const { - auto checker = make_auth_checker( [&](auto p){ return get_permission(p).auth; }, + auto checker = make_auth_checker( [&](const permission_level& p){ return get_permission(p).auth; }, get_global_properties().configuration.max_authority_depth, candidate_keys); @@ -652,7 +652,7 @@ void chain_controller::check_authorization( const vector& actions, bool allow_unused_signatures, flat_set provided_accounts )const { - auto checker = make_auth_checker( [&](auto p){ return get_permission(p).auth; }, + auto checker = make_auth_checker( [&](const permission_level& p){ return get_permission(p).auth; }, get_global_properties().configuration.max_authority_depth, provided_keys, provided_accounts ); diff --git a/libraries/chain/contracts/chain_initializer.cpp b/libraries/chain/contracts/chain_initializer.cpp index c833a3100..befa83fa6 100644 --- a/libraries/chain/contracts/chain_initializer.cpp +++ b/libraries/chain/contracts/chain_initializer.cpp @@ -147,7 +147,7 @@ abi_def chain_initializer::eos_contract_abi() {"account", "account_name"}, {"permission", "permission_name"}, {"parent", "permission_name"}, - {"authority", "authority"}, + {"data", "authority"}, } }); diff --git a/libraries/chain/contracts/eosio_contract.cpp b/libraries/chain/contracts/eosio_contract.cpp index 47509cf59..608f21bec 100644 --- a/libraries/chain/contracts/eosio_contract.cpp +++ b/libraries/chain/contracts/eosio_contract.cpp @@ -415,8 +415,8 @@ void apply_eosio_updateauth(apply_context& context) { EOS_ASSERT(!update.permission.empty(), action_validate_exception, "Cannot create authority with empty name"); EOS_ASSERT(update.permission != update.parent, action_validate_exception, "Cannot set an authority as its own parent"); - EOS_ASSERT(validate(update.authority), action_validate_exception, - "Invalid authority: ${auth}", ("auth", update.authority)); + EOS_ASSERT(validate(update.data), action_validate_exception, + "Invalid authority: ${auth}", ("auth", update.data)); if (update.permission == "active") EOS_ASSERT(update.parent == "owner", action_validate_exception, "Cannot change active authority's parent from owner", ("update.parent", update.parent) ); if (update.permission == "owner") @@ -426,7 +426,7 @@ void apply_eosio_updateauth(apply_context& context) { context.require_authorization(update.account); db.get(update.account); - validate_authority_precondition(context, update.authority); + validate_authority_precondition(context, update.data); auto permission = db.find(boost::make_tuple(update.account, update.permission)); @@ -443,7 +443,7 @@ void apply_eosio_updateauth(apply_context& context) { // TODO/QUESTION: If we are updating an existing permission, should we check if the message declared // permission satisfies the permission we want to modify? db.modify(*permission, [&update, &parent_id](permission_object& po) { - po.auth = update.authority; + po.auth = update.data; po.parent = parent_id; }); } else { @@ -452,7 +452,7 @@ void apply_eosio_updateauth(apply_context& context) { db.create([&update, &parent_id](permission_object& po) { po.name = update.permission; po.owner = update.account; - po.auth = update.authority; + po.auth = update.data; po.parent = parent_id; }); } diff --git a/libraries/chain/include/eosio/chain/contracts/abi_serializer.hpp b/libraries/chain/include/eosio/chain/contracts/abi_serializer.hpp index a39f7b1a5..79356d35f 100644 --- a/libraries/chain/include/eosio/chain/contracts/abi_serializer.hpp +++ b/libraries/chain/include/eosio/chain/contracts/abi_serializer.hpp @@ -92,33 +92,48 @@ namespace impl { * @tparam T - the type to check */ template - constexpr bool single_type_requires_abi_v = std::is_base_of::value || - std::is_same::value || - std::is_same::value || - std::is_same::value; + constexpr bool single_type_requires_abi_v() { + return std::is_base_of::value || + std::is_same::value || + std::is_same::value || + std::is_same::value; + } /** * Basic constexpr for a type, aliases the basic check directly * @tparam T - the type to check */ template - constexpr bool type_requires_abi_v = single_type_requires_abi_v; + struct type_requires_abi { + static constexpr bool value() { + return single_type_requires_abi_v(); + } + }; /** * specialization that catches common container patterns and checks their contained-type * @tparam Container - a templated container type whose first argument is the contained type */ template class Container, typename T, typename ...Args > - constexpr bool type_requires_abi_v> = single_type_requires_abi_v; + struct type_requires_abi> { + static constexpr bool value() { + return single_type_requires_abi_v(); + } + }; + + template + constexpr bool type_requires_abi_v() { + return type_requires_abi::value(); + } /** * convenience aliases for creating overload-guards based on whether the type contains ABI related info */ template - using not_require_abi_t = std::enable_if_t, int>; + using not_require_abi_t = std::enable_if_t(), int>; template - using require_abi_t = std::enable_if_t, int>; + using require_abi_t = std::enable_if_t(), int>; /** * Reflection visitor that uses a resolver to resolve ABIs for nested types diff --git a/libraries/chain/include/eosio/chain/contracts/genesis_state.hpp b/libraries/chain/include/eosio/chain/contracts/genesis_state.hpp index 6eb2f177d..1e5df55ae 100644 --- a/libraries/chain/include/eosio/chain/contracts/genesis_state.hpp +++ b/libraries/chain/include/eosio/chain/contracts/genesis_state.hpp @@ -50,9 +50,11 @@ struct genesis_state_type { .max_block_acts_per_scope = config::default_max_block_acts_per_scope, .target_block_acts = config::default_target_block_acts, .max_block_acts = config::default_max_block_acts, + .real_threads = 0, // TODO: unused? .max_storage_size = config::default_max_storage_size, .max_transaction_lifetime = config::default_max_trx_lifetime, .max_authority_depth = config::default_max_auth_depth, + .max_transaction_exec_time = 0, // TODO: unused? .max_inline_depth = config::default_max_inline_depth, .max_inline_action_size = config::default_max_inline_action_size, .max_generated_transaction_size = config::default_max_gen_trx_size diff --git a/libraries/chain/include/eosio/chain/contracts/types.hpp b/libraries/chain/include/eosio/chain/contracts/types.hpp index f120ea05d..65f4e0253 100644 --- a/libraries/chain/include/eosio/chain/contracts/types.hpp +++ b/libraries/chain/include/eosio/chain/contracts/types.hpp @@ -299,7 +299,7 @@ struct updateauth { account_name account; permission_name permission; permission_name parent; - authority authority; + authority data; static scope_name get_scope() { return config::system_account_name; @@ -410,7 +410,7 @@ FC_REFLECT( eosio::chain::contracts::setabi , (account FC_REFLECT( eosio::chain::contracts::setproducer , (name)(key)(configuration) ) FC_REFLECT( eosio::chain::contracts::okproducer , (voter)(producer)(approve) ) FC_REFLECT( eosio::chain::contracts::setproxy , (stakeholder)(proxy) ) -FC_REFLECT( eosio::chain::contracts::updateauth , (account)(permission)(parent)(authority) ) +FC_REFLECT( eosio::chain::contracts::updateauth , (account)(permission)(parent)(data) ) FC_REFLECT( eosio::chain::contracts::deleteauth , (account)(permission) ) FC_REFLECT( eosio::chain::contracts::linkauth , (account)(code)(type)(requirement) ) FC_REFLECT( eosio::chain::contracts::unlinkauth , (account)(code)(type) ) diff --git a/libraries/chain/wasm_interface.cpp b/libraries/chain/wasm_interface.cpp index 669171387..d7ce47dfc 100644 --- a/libraries/chain/wasm_interface.cpp +++ b/libraries/chain/wasm_interface.cpp @@ -130,6 +130,10 @@ namespace eosio { namespace chain { * the instance handed out to other threads */ struct code_info { + code_info( size_t mem_end, vector&& mem_image ) + :mem_end(mem_end),mem_image(std::forward>(mem_image)) + {} + // a clean image of the memory used to sanitize things on checkin size_t mem_start = 0; size_t mem_end = 1<<16; @@ -249,10 +253,7 @@ namespace eosio { namespace chain { // grab the lock and put this in the cache as unavailble with_lock([&,this]() { // find or create a new entry - auto iter = _cache.emplace(code_id, code_info { - .mem_end = mem_end, - .mem_image = std::move(mem_image) - }).first; + auto iter = _cache.emplace(code_id, std::move(code_info(mem_end, std::move(mem_image)))).first; iter->second.instances.emplace_back(std::make_unique(instance, module)); pending_result = optional_entry_ref(*iter->second.instances.back().get()); diff --git a/libraries/fc/include/fc/crypto/common.hpp b/libraries/fc/include/fc/crypto/common.hpp index 04ac10e2e..8920c89b2 100644 --- a/libraries/fc/include/fc/crypto/common.hpp +++ b/libraries/fc/include/fc/crypto/common.hpp @@ -82,7 +82,7 @@ namespace fc { namespace crypto { template< typename KeyType > std::string operator()( const KeyType& key ) const { using data_type = typename KeyType::data_type; - constexpr int position = Storage::template position; + constexpr int position = Storage::template position(); constexpr bool is_default = position == DefaultPosition; checksummed_data wrapper; diff --git a/libraries/fc/include/fc/static_variant.hpp b/libraries/fc/include/fc/static_variant.hpp index c35bff3d7..3a0a7ab72 100644 --- a/libraries/fc/include/fc/static_variant.hpp +++ b/libraries/fc/include/fc/static_variant.hpp @@ -353,7 +353,7 @@ public: bool contains() const { return which() == tag::value; } template - static constexpr int position = impl::position::pos; + static constexpr int position() { return impl::position::pos; } template::size,int> = 1> using type_at = typename impl::type_at::type; diff --git a/libraries/testing/tester.cpp b/libraries/testing/tester.cpp index 620e53145..f9d9f4e9e 100644 --- a/libraries/testing/tester.cpp +++ b/libraries/testing/tester.cpp @@ -148,8 +148,8 @@ namespace eosio { namespace testing { contracts::updateauth{ .account = account, .permission = perm, - .authority = move(auth), - .parent = parent + .parent = parent, + .data = move(auth), }); set_tapos( trx ); diff --git a/plugins/account_history_plugin/account_history_plugin.cpp b/plugins/account_history_plugin/account_history_plugin.cpp index 8a09e6e56..607843197 100644 --- a/plugins/account_history_plugin/account_history_plugin.cpp +++ b/plugins/account_history_plugin/account_history_plugin.cpp @@ -333,10 +333,10 @@ void account_history_plugin_impl::applied_block(const signed_block& block) { const auto update = msg.as(); remove(db, update.account, update.permission); - add(db, update.authority.keys, update.account, update.permission); + add(db, update.data.keys, update.account, update.permission); remove(db, update.account, update.permission); - add(db, update.authority.accounts, update.account, update.permission); + add(db, update.data.accounts, update.account, update.permission); } else if (msg.type == DELETE_AUTH) { diff --git a/plugins/producer_plugin/producer_plugin.cpp b/plugins/producer_plugin/producer_plugin.cpp index 2c5372667..850d45380 100644 --- a/plugins/producer_plugin/producer_plugin.cpp +++ b/plugins/producer_plugin/producer_plugin.cpp @@ -184,7 +184,7 @@ void producer_plugin_impl::schedule_production_loop() { //_timer.expires_from_now(boost::posix_time::microseconds(time_to_next_block_time)); _timer.expires_from_now( boost::posix_time::microseconds(time_to_next_block_time) ); //_timer.async_wait(boost::bind(&producer_plugin_impl::block_production_loop, this)); - _timer.async_wait( [&](auto){ block_production_loop(); } ); + _timer.async_wait( [&](const boost::system::error_code&){ block_production_loop(); } ); } block_production_condition::block_production_condition_enum producer_plugin_impl::block_production_loop() { diff --git a/plugins/txn_test_gen_plugin/txn_test_gen_plugin.cpp b/plugins/txn_test_gen_plugin/txn_test_gen_plugin.cpp index 490412371..7a4a687a2 100644 --- a/plugins/txn_test_gen_plugin/txn_test_gen_plugin.cpp +++ b/plugins/txn_test_gen_plugin/txn_test_gen_plugin.cpp @@ -144,7 +144,7 @@ struct txn_test_gen_plugin_impl { void arm_timer(boost::asio::high_resolution_timer::time_point s) { timer.expires_at(s + std::chrono::milliseconds(timer_timeout)); - timer.async_wait([this](auto ec) { + timer.async_wait([this](const boost::system::error_code& ec) { if(ec) return; try { -- GitLab