Issue Details

Number
27343
Title
-Wmaybe-uninitialized warnings under LTO
Description
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: ```bash 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; | ^ ```
URL
https://github.com/bitcoin/bitcoin/issue/27343
Closed by
Back to List