bitshares / bitshares/bitshares-core

Compiler warning: objects of type `fc::optional` may be used uninitialized

Open
#2,484 2 comments 0 reactions 0 assignees View on GitHub
Dominant language
C++
Stars
1.2k
Forks
660
Avg merge
8h 17m
Merged PRs (30d)
26

Description

**Build Error Description**

Also reported in https://github.com/bitshares/bitshares-core/issues/2348.

```
/bitshares-core/libraries/protocol/fee_schedule_calc.cpp: In member function ‘graphene::protocol::calc_fee_visitor::result_type graphene::protocol::calc_fee_visitor::operator()(const OpType&) const [with OpType = graphene::protocol::asset_create_operation; graphene::protocol::calc_fee_visitor::result_type = long unsigned int]’:
/bitshares-core/libraries/protocol/fee_schedule_calc.cpp:70:26: warning: ‘sub_asset_creation_fee’ may be used uninitialized in this function [-Wmaybe-uninitialized]
optional sub_asset_creation_fee;
^
```

```
In file included from /bitshares-core/tests/tests/operation_tests.cpp:43:0:
/bitshares-core/tests/tests/../common/database_fixture.hpp: In member function ‘void operation_tests::update_uia::test_method()’:
/bitshares-core/tests/tests/../common/database_fixture.hpp:148:9: warning: ‘bak.fc::optional >::_value[0]’ may be used uninitialized in this function [-Wmaybe-uninitialized]
auto bak = op.field; \
^~~
/bitshares-core/tests/tests/../common/database_fixture.hpp:148:9: note: ‘bak.fc::optional >::_value[0]’ was declared here
auto bak = op.field; \
^
/bitshares-core/tests/tests/../common/database_fixture.hpp:148:9: note: in definition of macro ‘REQUIRE_THROW_WITH_VALUE_2’
auto bak = op.field; \
^~~
/bitshares-core/tests/tests/operation_tests.cpp:1758:7: note: in expansion of macro ‘REQUIRE_THROW_WITH_VALUE’
REQUIRE_THROW_WITH_VALUE(op, new_issuer, test.issuer);
^
```

```
In file included from /home/ubuntu/bitshares-core-dev/libraries/fc/include/fc/variant_object.hpp:2:0,
from /home/ubuntu/bitshares-core-dev/libraries/fc/include/fc/log/log_message.hpp:8,
from /home/ubuntu/bitshares-core-dev/libraries/fc/include/fc/log/logger.hpp:5,
from /home/ubuntu/bitshares-core-dev/libraries/fc/include/fc/exception/exception.hpp:6,
from /home/ubuntu/bitshares-core-dev/libraries/fc/include/fc/safe.hpp:2,
from /home/ubuntu/bitshares-core-dev/libraries/fc/include/fc/io/raw_fwd.hpp:7,
from /home/ubuntu/bitshares-core-dev/libraries/fc/include/fc/io/enum_type.hpp:3,
from /home/ubuntu/bitshares-core-dev/libraries/protocol/include/graphene/protocol/types.hpp:42,
from /home/ubuntu/bitshares-core-dev/libraries/chain/include/graphene/chain/types.hpp:26,
from /home/ubuntu/bitshares-core-dev/libraries/chain/include/graphene/chain/account_object.hpp:26,
from /home/ubuntu/bitshares-core-dev/libraries/chain/market_evaluator.cpp:24:
/home/ubuntu/bitshares-core-dev/libraries/fc/include/fc/variant.hpp: In member function ‘graphene::db::object_id_type graphene::chain::call_order_update_evaluator::do_apply(const graphene::protocol::call_order_update_operation&)’:
/home/ubuntu/bitshares-core-dev/libraries/fc/include/fc/variant.hpp:634:17: warning: ‘old_debt.fc::safe::value’ may be used uninitialized in this function [-Wmaybe-uninitialized]
to_variant( static_cast(s.value), v, max_depth );
^
/home/ubuntu/bitshares-core-dev/libraries/chain/market_evaluator.cpp:316:25: note: ‘old_debt.fc::safe::value’ was declared here
optional old_debt;
^
```

**Build Environment**
Details about the build environment, including the relevant required libraries. Much of this information can be found in the `CMakeFiles/CMakeOutput.log`.
- Host OS: [Ubuntu 18.04 / 16.04 LTS]
- Host Physical RAM -
- Source Branch/Tag: 5.2.1
- OpenSSL Version: 1.1.1 / 1.0.2
- Boost Version: 1.65.1 / 1.58
- C++ Compiler: gcc version 7.5.0 / 5.4.0

## CORE TEAM TASK LIST
- [ ] Evaluate `Build Error`
- [ ] Provide build guidance
- [ ] Create `Bug Report`

Contributor guide

No contributing guide indexed for this repository

Research direction

Start by reproducing the GCC warnings on the stated 5.2.1 branch and inspect libraries/protocol/fee_schedule_calc.cpp, tests/common/database_fixture.hpp, tests/tests/operation_tests.cpp, and libraries/chain/market_evaluator.cpp. Determine whether each warning reflects a real uninitialized-value path or a compiler false positive, then document the findings and verify the build result.

Written by the indexing model from the issue text.

Assessment

Tech stack
cpp
Domain
build-system, compilers
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
30/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.