Skip to content

-Wmaybe-uninitialized warnings under LTO #27343

@fanquake

Description

@fanquake

Building under GCC 14.0.1 with -flto (Fedora Rawhide) currently results in a number of -Wmaybe-uninitialized warnings. Some of these are things we might not want to "fix", i.e in test code. Some come from leveldb etc. Open this issue to document them, as some exist with current versions of GCC, and GCC 14.0 will be released soon:

leveldb/db/memtable.cc: In function 'GetLengthPrefixedSlice':
leveldb/db/memtable.cc:18:22: warning: 'len' may be used uninitialized [-Wmaybe-uninitialized]
   18 |   return Slice(p, len);
      |                      ^
leveldb/db/memtable.cc:15:12: note: 'len' was declared here
   15 |   uint32_t len;
      |            ^
In function 'GetLengthPrefixedSlice',
    inlined from 'operator()' at leveldb/db/memtable.cc:32:35,
    inlined from 'KeyIsAfterNode' at ./leveldb/db/skiplist.h:257:37,
    inlined from 'FindGreaterOrEqual' at ./leveldb/db/skiplist.h:268:23:
leveldb/db/memtable.cc:18:22: warning: 'len' may be used uninitialized [-Wmaybe-uninitialized]
   18 |   return Slice(p, len);
      |                      ^
leveldb/db/memtable.cc: In member function 'FindGreaterOrEqual':
leveldb/db/memtable.cc:15:12: note: 'len' was declared here
   15 |   uint32_t len;
      |            ^
leveldb/db/memtable.cc: In member function 'Get':
leveldb/db/memtable.cc:119:39: warning: 'key_length' may be used uninitialized [-Wmaybe-uninitialized]
  119 |             Slice(key_ptr, key_length - 8), key.user_key()) == 0) {
      |                                       ^
leveldb/db/memtable.cc:116:14: note: 'key_length' was declared here
  116 |     uint32_t key_length;
      |              ^
In member function 'operator=',
    inlined from '__ct ' at test/prevector_tests.cpp:215:49,
    inlined from 'test_method.isra' at test/prevector_tests.cpp:222:34:
random.cpp:749:19: warning: 'D.58376.bitbuf' is used uninitialized [-Wuninitialized]
  749 |     bitbuf = from.bitbuf;
      |                   ^
test/prevector_tests.cpp: In function 'test_method.isra':
test/prevector_tests.cpp:215:22: note: '<anonymous>' declared here
  215 |         rand_cache = FastRandomContext(rand_seed);
      |                      ^
leveldb/db/memtable.cc: In function 'GetLengthPrefixedSlice':
leveldb/db/memtable.cc:18:22: warning: 'len' may be used uninitialized [-Wmaybe-uninitialized]
   18 |   return Slice(p, len);
      |                      ^
leveldb/db/memtable.cc:15:12: note: 'len' was declared here
   15 |   uint32_t len;
      |            ^
leveldb/db/memtable.cc: In function 'GetLengthPrefixedSlice':
leveldb/db/memtable.cc:18:22: warning: 'len' may be used uninitialized [-Wmaybe-uninitialized]
   18 |   return Slice(p, len);
      |                      ^
leveldb/db/memtable.cc:15:12: note: 'len' was declared here
   15 |   uint32_t len;
      |            ^
In function 'GetLengthPrefixedSlice',
    inlined from 'operator()' at leveldb/db/memtable.cc:32:35,
    inlined from 'KeyIsAfterNode' at ./leveldb/db/skiplist.h:257:37,
    inlined from 'FindGreaterOrEqual' at ./leveldb/db/skiplist.h:268:23:
leveldb/db/memtable.cc:18:22: warning: 'len' may be used uninitialized [-Wmaybe-uninitialized]
   18 |   return Slice(p, len);
      |                      ^
leveldb/db/memtable.cc: In member function 'FindGreaterOrEqual':
leveldb/db/memtable.cc:15:12: note: 'len' was declared here
   15 |   uint32_t len;
      |            ^
In function 'GetLengthPrefixedSlice',
    inlined from 'operator()' at leveldb/db/memtable.cc:32:35,
    inlined from 'KeyIsAfterNode' at ./leveldb/db/skiplist.h:257:37,
    inlined from 'FindGreaterOrEqual' at ./leveldb/db/skiplist.h:268:23:
leveldb/db/memtable.cc:18:22: warning: 'len' may be used uninitialized [-Wmaybe-uninitialized]
   18 |   return Slice(p, len);
      |                      ^
leveldb/db/memtable.cc: In member function 'FindGreaterOrEqual':
leveldb/db/memtable.cc:15:12: note: 'len' was declared here
   15 |   uint32_t len;
      |            ^
leveldb/db/memtable.cc: In member function 'Get':
leveldb/db/memtable.cc:119:39: warning: 'key_length' may be used uninitialized [-Wmaybe-uninitialized]
  119 |             Slice(key_ptr, key_length - 8), key.user_key()) == 0) {
      |                                       ^
leveldb/db/memtable.cc:116:14: note: 'key_length' was declared here
  116 |     uint32_t key_length;
      |              ^
In member function 'operator=',
    inlined from 'Seed.constprop' at test/util/random.cpp:32:33:
random.cpp:749:19: warning: 'D.69037.bitbuf' may be used uninitialized [-Wmaybe-uninitialized]
  749 |     bitbuf = from.bitbuf;
      |                   ^
test/util/random.cpp: In function 'Seed.constprop':
test/util/random.cpp:32:33: note: '<anonymous>' declared here
   32 |     ctx = FastRandomContext(seed);
      |                                 ^
leveldb/db/memtable.cc: In member function 'Get':
leveldb/db/memtable.cc:119:39: warning: 'key_length' may be used uninitialized [-Wmaybe-uninitialized]
  119 |             Slice(key_ptr, key_length - 8), key.user_key()) == 0) {
      |                                       ^
leveldb/db/memtable.cc:116:14: note: 'key_length' was declared here
  116 |     uint32_t key_length;
      |              ^
In member function 'operator=',
    inlined from 'Seed' at test/util/random.cpp:32:33,
    inlined from 'SeedInsecureRand' at ./test/util/random.h:41:13,
    inlined from '__ct_base ' at test/util/setup_common.cpp:184:21:
random.cpp:749:19: warning: 'D.40691.bitbuf' may be used uninitialized [-Wmaybe-uninitialized]
  749 |     bitbuf = from.bitbuf;
      |                   ^
test/util/random.cpp: In member function '__ct_base ':
test/util/random.cpp:32:33: note: '<anonymous>' declared here
   32 |     ctx = FastRandomContext(seed);
      |                                 ^
leveldb/db/memtable.cc: In function 'GetLengthPrefixedSlice':
leveldb/db/memtable.cc:18:22: warning: 'len' may be used uninitialized [-Wmaybe-uninitialized]
   18 |   return Slice(p, len);
      |                      ^
leveldb/db/memtable.cc:15:12: note: 'len' was declared here
   15 |   uint32_t len;
      |            ^
In function 'GetLengthPrefixedSlice',
    inlined from 'operator()' at leveldb/db/memtable.cc:32:35,
    inlined from 'KeyIsAfterNode' at ./leveldb/db/skiplist.h:257:37,
    inlined from 'FindGreaterOrEqual' at ./leveldb/db/skiplist.h:268:23:
leveldb/db/memtable.cc:18:22: warning: 'len' may be used uninitialized [-Wmaybe-uninitialized]
   18 |   return Slice(p, len);
      |                      ^
leveldb/db/memtable.cc: In member function 'FindGreaterOrEqual':
leveldb/db/memtable.cc:15:12: note: 'len' was declared here
   15 |   uint32_t len;
      |            ^
leveldb/db/memtable.cc: In member function 'Get':
leveldb/db/memtable.cc:119:39: warning: 'key_length' may be used uninitialized [-Wmaybe-uninitialized]
  119 |             Slice(key_ptr, key_length - 8), key.user_key()) == 0) {
      |                                       ^
leveldb/db/memtable.cc:116:14: note: 'key_length' was declared here
  116 |     uint32_t key_length;
      |              ^
test/fuzz/float.cpp: In function 'float_fuzz_target':
test/fuzz/float.cpp:49:40: warning: 'tmp' may be used uninitialized [-Wmaybe-uninitialized]
   49 |         uint64_t encoded = EncodeDouble(d);
      |                                        ^
test/fuzz/float.cpp:21:20: note: 'tmp' was declared here
   21 |             double tmp;
      |                    ^
In member function 'operator=',
    inlined from 'operator()' at test/fuzz/addrman.cpp:127:9,
    inlined from '__ct ' at test/fuzz/addrman.cpp:127:9,
    inlined from 'addrman_serdeser_fuzz_target' at test/fuzz/addrman.cpp:295:69:
random.cpp:749:19: warning: 'D.36455.bitbuf' may be used uninitialized [-Wmaybe-uninitialized]
  749 |     bitbuf = from.bitbuf;
      |                   ^
test/fuzz/addrman.cpp: In function 'addrman_serdeser_fuzz_target':
test/fuzz/addrman.cpp:127:9: note: '<anonymous>' declared here
  127 |         WITH_LOCK(m_impl->cs, m_impl->insecure_rand = FastRandomContext{ConsumeUInt256(fuzzed_data_provider)});
      |         ^
In member function 'operator=',
    inlined from 'operator()' at test/fuzz/addrman.cpp:127:9,
    inlined from '__ct ' at test/fuzz/addrman.cpp:127:9,
    inlined from 'addrman_serdeser_fuzz_target' at test/fuzz/addrman.cpp:296:69:
random.cpp:749:19: warning: 'D.36632.bitbuf' may be used uninitialized [-Wmaybe-uninitialized]
  749 |     bitbuf = from.bitbuf;
      |                   ^
test/fuzz/addrman.cpp: In function 'addrman_serdeser_fuzz_target':
test/fuzz/addrman.cpp:127:9: note: '<anonymous>' declared here
  127 |         WITH_LOCK(m_impl->cs, m_impl->insecure_rand = FastRandomContext{ConsumeUInt256(fuzzed_data_provider)});
      |         ^
In member function 'operator=',
    inlined from 'SeedInsecureRand' at ./test/util/random.h:39:72,
    inlined from 'SeedInsecureRand' at ./test/util/random.h:36:20,
    inlined from 'test_method' at test/cuckoocache_tests.cpp:40:21,
    inlined from 'test_cuckoocache_no_fakes_invoker' at test/cuckoocache_tests.cpp:38:1:
random.cpp:749:19: warning: 'D.46810.bitbuf' may be used uninitialized [-Wmaybe-uninitialized]
  749 |     bitbuf = from.bitbuf;
      |                   ^
./test/util/random.h: In function 'test_cuckoocache_no_fakes_invoker':
./test/util/random.h:39:72: note: '<anonymous>' declared here
   39 |         g_insecure_rand_ctx = FastRandomContext(/*fDeterministic=*/true);
      |                                                                        ^
In member function 'operator=',
    inlined from 'SeedInsecureRand' at ./test/util/random.h:39:72,
    inlined from 'SeedInsecureRand' at ./test/util/random.h:36:20,
    inlined from 'test_cache' at test/cuckoocache_tests.cpp:58:21,
    inlined from 'test_method' at test/cuckoocache_tests.cpp:117:84,
    inlined from 'cuckoocache_hit_rate_ok_invoker' at test/cuckoocache_tests.cpp:109:1:
random.cpp:749:19: warning: 'D.48398.bitbuf' may be used uninitialized [-Wmaybe-uninitialized]
  749 |     bitbuf = from.bitbuf;
      |                   ^
./test/util/random.h: In function 'cuckoocache_hit_rate_ok_invoker':
./test/util/random.h:39:72: note: '<anonymous>' declared here
   39 |         g_insecure_rand_ctx = FastRandomContext(/*fDeterministic=*/true);
      |                                                                        ^
In member function 'operator=',
    inlined from 'SeedInsecureRand' at ./test/util/random.h:39:72,
    inlined from 'SeedInsecureRand' at ./test/util/random.h:36:20,
    inlined from 'test_cache_erase' at test/cuckoocache_tests.cpp:129:21,
    inlined from 'test_method' at test/cuckoocache_tests.cpp:185:72,
    inlined from 'cuckoocache_erase_ok_invoker' at test/cuckoocache_tests.cpp:182:1:
random.cpp:749:19: warning: 'D.50490.bitbuf' may be used uninitialized [-Wmaybe-uninitialized]
  749 |     bitbuf = from.bitbuf;
      |                   ^
./test/util/random.h: In function 'cuckoocache_erase_ok_invoker':
./test/util/random.h:39:72: note: '<anonymous>' declared here
   39 |         g_insecure_rand_ctx = FastRandomContext(/*fDeterministic=*/true);
      |                                                                        ^
In function '__fill_a1',
    inlined from '__fill_a1' at /usr/include/c++/14/bits/stl_algobase.h:981:21,
    inlined from '__fill_a' at /usr/include/c++/14/bits/stl_algobase.h:998:21,
    inlined from 'fill' at /usr/include/c++/14/bits/stl_algobase.h:1029:20,
    inlined from 'PollutePubKey' at wallet/test/wallet_tests.cpp:503:14:
/usr/include/c++/14/bits/stl_algobase.h:952:18: warning: '__builtin_memset' specified bound 18446744073709551615 exceeds maximum object size 9223372036854775807 [-Wstringop-overflow=]
  952 |         *__first = __tmp;
      |                  ^
In member function 'operator=',
    inlined from 'SeedInsecureRand' at ./test/util/random.h:39:0,
    inlined from 'test_method' at test/util_tests.cpp:448:21,
    inlined from 'util_seed_insecure_rand_invoker' at test/util_tests.cpp:446:1:
random.cpp:749:19: warning: 'D.49511.bitbuf' may be used uninitialized [-Wmaybe-uninitialized]
  749 |     bitbuf = from.bitbuf;
      |                   ^
./test/util/random.h: In function 'util_seed_insecure_rand_invoker':
./test/util/random.h:39: note: '<anonymous>' declared here
   39 |         g_insecure_rand_ctx = FastRandomContext(/*fDeterministic=*/true);
In member function 'operator=',
    inlined from 'operator()' at test/fuzz/addrman.cpp:127:9,
    inlined from '__ct ' at test/fuzz/addrman.cpp:127:9,
    inlined from 'make_unique' at /usr/include/c++/14/bits/unique_ptr.h:1076:30,
    inlined from 'addrman_fuzz_target' at test/fuzz/addrman.cpp:228:97:
random.cpp:749:19: warning: 'D.38104.bitbuf' may be used uninitialized [-Wmaybe-uninitialized]
  749 |     bitbuf = from.bitbuf;
      |                   ^
test/fuzz/addrman.cpp: In function 'addrman_fuzz_target':
test/fuzz/addrman.cpp:127:9: note: '<anonymous>' declared here
  127 |         WITH_LOCK(m_impl->cs, m_impl->insecure_rand = FastRandomContext{ConsumeUInt256(fuzzed_data_provider)});
      |         ^
In member function 'operator=',
    inlined from 'operator()' at test/fuzz/addrman.cpp:127:9,
    inlined from '__ct ' at test/fuzz/addrman.cpp:127:9,
    inlined from 'make_unique' at /usr/include/c++/14/bits/unique_ptr.h:1076:30,
    inlined from 'addrman_fuzz_target' at test/fuzz/addrman.cpp:235:66:
random.cpp:749:19: warning: 'D.41251.bitbuf' may be used uninitialized [-Wmaybe-uninitialized]
  749 |     bitbuf = from.bitbuf;
      |                   ^
test/fuzz/addrman.cpp: In function 'addrman_fuzz_target':
test/fuzz/addrman.cpp:127:9: note: '<anonymous>' declared here
  127 |         WITH_LOCK(m_impl->cs, m_impl->insecure_rand = FastRandomContext{ConsumeUInt256(fuzzed_data_provider)});
      |         ^
In member function 'operator=',
    inlined from 'Seed' at test/util/random.cpp:32:33,
    inlined from 'SeedInsecureRand' at ./test/util/random.h:41:13,
    inlined from '__ct_base ' at test/util/setup_common.cpp:184:21:
random.cpp:749:19: warning: 'D.39055.bitbuf' may be used uninitialized [-Wmaybe-uninitialized]
  749 |     bitbuf = from.bitbuf;
      |                   ^
test/util/random.cpp: In member function '__ct_base ':
test/util/random.cpp:32:33: note: '<anonymous>' declared here
   32 |     ctx = FastRandomContext(seed);
      |                                 ^
In member function 'operator=',
    inlined from 'test_method' at test/orphanage_tests.cpp:57:56,
    inlined from 'DoS_mapOrphans_invoker' at test/orphanage_tests.cpp:49:1:
random.cpp:749:19: warning: 'D.45887.bitbuf' may be used uninitialized [-Wmaybe-uninitialized]
  749 |     bitbuf = from.bitbuf;
      |                   ^
test/orphanage_tests.cpp: In function 'DoS_mapOrphans_invoker':
test/orphanage_tests.cpp:57:56: note: '<anonymous>' declared here
   57 |     g_insecure_rand_ctx = FastRandomContext{uint256{33}};
      |                                                        ^
In member function '__ct ',
    inlined from 'construct_at' at /usr/include/c++/14/bits/stl_construct.h:97:14,
    inlined from 'construct' at /usr/include/c++/14/bits/alloc_traits.h:536:21,
    inlined from '_M_realloc_append' at /usr/include/c++/14/bits/vector.tcc:634:26,
    inlined from 'emplace_back' at /usr/include/c++/14/bits/vector.tcc:123:21,
    inlined from 'test_method' at test/logging_tests.cpp:166:45,
    inlined from 'logging_LogPrintMacros_CategoryName_invoker' at test/logging_tests.cpp:156:1:
/usr/include/c++/14/bits/stl_pair.h:444:11: warning: 'category' may be used uninitialized [-Wmaybe-uninitialized]
  444 |         : first(std::forward<_U1>(__x)), second(std::forward<_U2>(__y))
      |           ^
test/logging_tests.cpp: In function 'logging_LogPrintMacros_CategoryName_invoker':
test/logging_tests.cpp:163:25: note: 'category' was declared here
  163 |         BCLog::LogFlags category;
      |                         ^

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions