Failed to execute make shared_lib on main
same behavior as https://github.com/facebook/rocksdb/issues/10940
gcc 16.1.1 on Arch Linux 7.0.3-arch1-2
built from source with `make shared_lib DISABLE_JEMALLOC=1`:
```
$DEBUG_LEVEL is 0, $LIB_MODE is shared
CC db/blob/blob_file_reader.o
In file included from ./env/file_system_tracer.h:8,
from ./file/random_access_file_reader.h:15,
from ./db/blob/blob_file_reader.h:12,
from db/blob/blob_file_reader.cc:6:
In constructor ‘rocksdb::FSReadRequest::FSReadRequest(rocksdb::FSReadRequest&&)’,
inlined from ‘constexpr _Tp* std::construct_at(_Tp*, _Args&& ...) [with _Tp = rocksdb::FSReadRequest; _Args = {rocksdb::FSReadRequest}]’ at /usr/include/c++/16.1.1/bits/stl_construct.h:110:9,
inlined from ‘static constexpr void std::allocator_traits<std::allocator<_Up> >::construct(allocator_type&, _Up*, _Args&& ...) [with _Up = rocksdb::FSReadRequest; _Args = {rocksdb::FSReadRequest}; _Tp = rocksdb::FSReadRequest]’ at /usr/include/c++/16.1.1/bits/alloc_traits.h:716:21,
inlined from ‘constexpr std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {rocksdb::FSReadRequest}; _Tp = rocksdb::FSReadRequest; _Alloc = std::allocator<rocksdb::FSReadRequest>]’ at /usr/include/c++/16.1.1/bits/vector.tcc:121:30,
inlined from ‘void rocksdb::BlobFileReader::MultiGetBlob(const rocksdb::ReadOptions&, rocksdb::MemoryAllocator*, rocksdb::autovector<std::pair<rocksdb::BlobReadRequest*, std::unique_ptr<rocksdb::BlobContents> > >&, uint64_t*) const’ at db/blob/blob_file_reader.cc:467:27:
./include/rocksdb/file_system.h:872:8: error: ‘read_req.rocksdb::FSReadRequest::scratch’ may be used uninitialized [-Werror=maybe-uninitialized]
872 | struct FSReadRequest {
| ^~~~~~~~~~~~~
db/blob/blob_file_reader.cc: In member function ‘void rocksdb::BlobFileReader::MultiGetBlob(const rocksdb::ReadOptions&, rocksdb::MemoryAllocator*, rocksdb::autovector<std::pair<rocksdb::BlobReadRequest*, std::unique_ptr<rocksdb::BlobContents> > >&, uint64_t*) const’:
db/blob/blob_file_reader.cc:463:19: note: ‘read_req’ declared here
463 | FSReadRequest read_req;
| ^~~~~~~~
In constructor ‘rocksdb::FSReadRequest::FSReadRequest(rocksdb::FSReadRequest&&)’,
inlined from ‘constexpr _Tp* std::construct_at(_Tp*, _Args&& ...) [with _Tp = rocksdb::FSReadRequest; _Args = {rocksdb::FSReadRequest}]’ at /usr/include/c++/16.1.1/bits/stl_construct.h:110:9,
inlined from ‘static constexpr void std::allocator_traits<std::allocator<_Up> >::construct(allocator_type&, _Up*, _Args&& ...) [with _Up = rocksdb::FSReadRequest; _Args = {rocksdb::FSReadRequest}; _Tp = rocksdb::FSReadRequest]’ at /usr/include/c++/16.1.1/bits/alloc_traits.h:716:21,
inlined from ‘constexpr void std::vector<_Tp, _Alloc>::_M_realloc_append(_Args&& ...) [with _Args = {rocksdb::FSReadRequest}; _Tp = rocksdb::FSReadRequest; _Alloc = std::allocator<rocksdb::FSReadRequest>]’ at /usr/include/c++/16.1.1/bits/vector.tcc:594:26,
inlined from ‘constexpr std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {rocksdb::FSReadRequest}; _Tp = rocksdb::FSReadRequest; _Alloc = std::allocator<rocksdb::FSReadRequest>]’ at /usr/include/c++/16.1.1/bits/vector.tcc:127:21,
inlined from ‘void rocksdb::BlobFileReader::MultiGetBlob(const rocksdb::ReadOptions&, rocksdb::MemoryAllocator*, rocksdb::autovector<std::pair<rocksdb::BlobReadRequest*, std::unique_ptr<rocksdb::BlobContents> > >&, uint64_t*) const’ at db/blob/blob_file_reader.cc:467:27:
./include/rocksdb/file_system.h:872:8: error: ‘read_req.rocksdb::FSReadRequest::scratch’ may be used uninitialized [-Werror=maybe-uninitialized]
872 | struct FSReadRequest {
| ^~~~~~~~~~~~~
db/blob/blob_file_reader.cc: In member function ‘void rocksdb::BlobFileReader::MultiGetBlob(const rocksdb::ReadOptions&, rocksdb::MemoryAllocator*, rocksdb::autovector<std::pair<rocksdb::BlobReadRequest*, std::unique_ptr<rocksdb::BlobContents> > >&, uint64_t*) const’:
db/blob/blob_file_reader.cc:463:19: note: ‘read_req’ declared here
463 | FSReadRequest read_req;
| ^~~~~~~~
cc1plus: all warnings being treated as errors
make: *** [Makefile:2662: db/blob/blob_file_reader.o] Error 1
```
patching the `FSReadRequest` struct (`char* scratch = nullptr;` on L887) returns a new error on build:
```
$DEBUG_LEVEL is 0, $LIB_MODE is shared
CC cache/compressed_secondary_cache.o
CC db/arena_wrapped_db_iter.o
CC db/blob/blob_fetcher.o
CC db/blob/blob_file_builder.o
CC db/blob/blob_file_cache.o
CC db/blob/blob_file_partition_manager.o
CC db/blob/blob_file_reader.o
CC db/blob/blob_garbage_meter.o
CC db/blob/blob_log_format.o
CC db/blob/blob_log_sequential_reader.o
CC db/blob/blob_log_writer.o
CC db/blob/blob_source.o
CC db/blob/blob_write_batch_transformer.o
CC db/blob/prefetch_buffer_collection.o
CC db/builder.o
CC db/c.o
CC db/coalescing_iterator.o
CC db/column_family.o
CC db/compaction/compaction.o
CC db/compaction/compaction_iterator.o
CC db/compaction/compaction_job.o
CC db/compaction/compaction_picker.o
CC db/compaction/compaction_picker_fifo.o
CC db/compaction/compaction_picker_level.o
In member function ‘void rocksdb::{anonymous}::LevelCompactionBuilder::SetupInitialFiles()’,
inlined from ‘rocksdb::Compaction* rocksdb::{anonymous}::LevelCompactionBuilder::PickCompaction()’ at db/compaction/compaction_picker_level.cc:534:20,
inlined from ‘virtual rocksdb::Compaction* rocksdb::LevelCompactionPicker::PickCompaction(const std::string&, const rocksdb::MutableCFOptions&, const rocksdb::MutableDBOptions&, const std::vector<long unsigned int>&, const rocksdb::SnapshotChecker*, rocksdb::VersionStorageInfo*, rocksdb::LogBuffer*, const std::string&, bool)’ at db/compaction/compaction_picker_level.cc:1007:32:
db/compaction/compaction_picker_level.cc:292:42: error: ‘*(std::value_type*)((char*)&expired_files + offsetof(rocksdb::autovector<std::pair<int, rocksdb::FileMetaData*>, 8>,rocksdb::autovector<std::pair<int, rocksdb::FileMetaData*>, 8>::buf_[0])).std::pair<int, rocksdb::FileMetaData*>::first’ may be used uninitialized [-Werror=maybe-uninitialized]
292 | start_level_ = expired_files.front().first;
| ~~~~~~~~~~~~~~~~~~~~~~^~~~~
db/compaction/compaction_picker_level.cc: In member function ‘virtual rocksdb::Compaction* rocksdb::LevelCompactionPicker::PickCompaction(const std::string&, const rocksdb::MutableCFOptions&, const rocksdb::MutableDBOptions&, const std::vector<long unsigned int>&, const rocksdb::SnapshotChecker*, rocksdb::VersionStorageInfo*, rocksdb::LogBuffer*, const std::string&, bool)’:
db/compaction/compaction_picker_level.cc:290:10: note: ‘expired_files’ declared here
290 | auto expired_files = vstorage_->ExpiredTtlFiles();
| ^~~~~~~~~~~~~
cc1plus: all warnings being treated as errors
make: *** [Makefile:2662: db/compaction/compaction_picker_level.o] Error 1
```
I'll see if I can reproduce with clang
0 条评论