build failure with GCC 13 due to missing `#include <cstdint> in `AnnService/inc/Helper/DiskIO.h`
Nobody has claimed this yet.
- Dominant language
- C++
- Stars
- 5k
- Forks
- 622
- Avg merge
- 8h 37m
- Merged PRs (30d)
- 5
Description
Forwarding Debian sptag bug #1037866
Describe the bug
SPTAG fails to build on Linux with GCC 13, because AnnService/inc/Helper/DiskIO.h uses std::uint16_t, std::uint32_t and std::uint64_t but does not #include <cstdint>.
To Reproduce
Install GCC 13 and build SPTAG.
Steps to reproduce the behavior:
- Install Debian
- Upgrade to Debian 13
- Add unstable to apt sources
apt updateapt install gcc-13 g++-13- Add experimental to apt sources
apt updateapt install -t experimental gcc g++- Build SPTAG
- Notice failure
Expected behavior
All files should include the headers they need to use the types, variables and functions that they use but don't define.
All of the following files probably should contain #include <cstdint>:
$ for f in `git grep -lE 'std::u?int[0-9]'` ; do git grep stdint $f || echo $f missing cstdint; done
AnnService/inc/Aggregator/AggregatorExecutionContext.h missing cstdint
AnnService/inc/Aggregator/AggregatorSettings.h missing cstdint
AnnService/inc/Client/ClientWrapper.h missing cstdint
AnnService/inc/Client/Options.h missing cstdint
AnnService/inc/Core/BKT/Index.h missing cstdint
AnnService/inc/Core/Common.h:#include <cstdint>
AnnService/inc/Core/Common/BKTree.h missing cstdint
AnnService/inc/Core/Common/Dataset.h missing cstdint
AnnService/inc/Core/Common/DistanceUtils.h missing cstdint
AnnService/inc/Core/Common/IQuantizer.h:#include <cstdint>
AnnService/inc/Core/Common/KDTree.h missing cstdint
AnnService/inc/Core/Common/Labelset.h missing cstdint
AnnService/inc/Core/Common/NeighborhoodGraph.h missing cstdint
AnnService/inc/Core/Common/OPQQuantizer.h missing cstdint
AnnService/inc/Core/Common/PQQuantizer.h missing cstdint
AnnService/inc/Core/Common/SIMDUtils.h missing cstdint
AnnService/inc/Core/CommonDataStructure.h missing cstdint
AnnService/inc/Core/DefinitionList.h missing cstdint
AnnService/inc/Core/KDT/Index.h missing cstdint
AnnService/inc/Core/MetadataSet.h missing cstdint
AnnService/inc/Core/SPANN/ExtraFullGraphSearcher.h missing cstdint
AnnService/inc/Core/SPANN/IExtraSearcher.h missing cstdint
AnnService/inc/Core/SPANN/Index.h missing cstdint
AnnService/inc/Core/SearchQuery.h missing cstdint
AnnService/inc/Core/VectorIndex.h missing cstdint
AnnService/inc/Helper/AsyncFileReader.h:#include <cstdint>
AnnService/inc/Helper/AsyncFileReader.h:#include <stdint.h>
AnnService/inc/Helper/Base64Encode.h:#include <cstdint>
AnnService/inc/Helper/Concurrent.h missing cstdint
AnnService/inc/Helper/DiskIO.h missing cstdint
AnnService/inc/Helper/LockFree.h:#include <cstdint>
AnnService/inc/Helper/StringConvert.h missing cstdint
AnnService/inc/Helper/VectorSetReader.h missing cstdint
AnnService/inc/Helper/VectorSetReaders/MemoryReader.h missing cstdint
AnnService/inc/Helper/VectorSetReaders/TxtReader.h missing cstdint
AnnService/inc/Server/SearchService.h missing cstdint
AnnService/inc/Socket/Client.h missing cstdint
AnnService/inc/Socket/Common.h:#include <cstdint>
AnnService/inc/Socket/Connection.h:#include <cstdint>
AnnService/inc/Socket/ConnectionManager.h:#include <cstdint>
AnnService/inc/Socket/Packet.h:#include <cstdint>
AnnService/inc/Socket/RemoteSearchQuery.h:#include <cstdint>
AnnService/inc/Socket/ResourceManager.h missing cstdint
AnnService/inc/Socket/SimpleSerialization.h:#include <cstdint>
AnnService/src/Aggregator/AggregatorContext.cpp missing cstdint
AnnService/src/Aggregator/AggregatorExecutionContext.cpp missing cstdint
AnnService/src/Aggregator/AggregatorService.cpp missing cstdint
AnnService/src/BalancedDataPartition/main.cpp missing cstdint
AnnService/src/Client/ClientWrapper.cpp missing cstdint
AnnService/src/Client/main.cpp missing cstdint
AnnService/src/Core/BKT/BKTIndex.cpp missing cstdint
AnnService/src/Core/Common/DistanceUtils.cpp missing cstdint
AnnService/src/Core/Common/IQuantizer.cpp missing cstdint
AnnService/src/Core/Common/SIMDUtils.cpp missing cstdint
AnnService/src/Core/KDT/KDTIndex.cpp missing cstdint
AnnService/src/Core/MetadataSet.cpp missing cstdint
AnnService/src/Core/SPANN/SPANNIndex.cpp missing cstdint
AnnService/src/Core/VectorIndex.cpp missing cstdint
AnnService/src/Helper/AsyncFileReader.cpp missing cstdint
AnnService/src/Helper/Base64Encode.cpp missing cstdint
AnnService/src/Helper/Concurrent.cpp missing cstdint
AnnService/src/Helper/SimpleIniReader.cpp missing cstdint
AnnService/src/Helper/VectorSetReader.cpp missing cstdint
AnnService/src/Helper/VectorSetReaders/DefaultReader.cpp missing cstdint
AnnService/src/Helper/VectorSetReaders/TxtReader.cpp missing cstdint
AnnService/src/Helper/VectorSetReaders/XvecReader.cpp missing cstdint
AnnService/src/IndexSearcher/main.cpp missing cstdint
AnnService/src/Quantizer/main.cpp missing cstdint
AnnService/src/Server/SearchService.cpp missing cstdint
AnnService/src/Server/ServiceContext.cpp missing cstdint
AnnService/src/Socket/Client.cpp missing cstdint
AnnService/src/Socket/ConnectionManager.cpp missing cstdint
AnnService/src/Socket/Packet.cpp missing cstdint
AnnService/src/Socket/RemoteSearchQuery.cpp missing cstdint
Test/src/AlgoTest.cpp missing cstdint
Test/src/ConcurrentTest.cpp missing cstdint
Test/src/DistanceTest.cpp missing cstdint
Test/src/FilterTest.cpp missing cstdint
Test/src/PerfTest.cpp missing cstdint
Test/src/ReconstructIndexSimilarityTest.cpp missing cstdint
Test/src/SIMDTest.cpp missing cstdint
Wrappers/WinRT/AnnIndex.cpp missing cstdint
Wrappers/inc/ClientInterface.h missing cstdint
Wrappers/inc/CsharpCommon.i missing cstdint
Wrappers/inc/JavaCommon.i missing cstdint
Wrappers/inc/PythonCommon.i missing cstdint
Wrappers/src/CLRCoreInterface.cpp missing cstdint
Wrappers/src/ClientInterface.cpp missing cstdint
Wrappers/src/CoreInterface.cpp missing cstdint
Screenshots
cd "build/AnnService" && /usr/bin/c++ -DNUMA -DSPTAGLib_EXPORTS -I"AnnService" -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -Wunreachable-code -Wno-reorder -Wno-delete-non-virtual-dtor -Wno-sign-compare -Wno-unknown-pragmas -Wcast-align -lm -lrt -fopenmp -lnuma -fopenmp -std=gnu++17 -fPIC -MD -MT AnnService/CMakeFiles/SPTAGLib.dir/src/Helper/AsyncFileReader.cpp.o -MF CMakeFiles/SPTAGLib.dir/src/Helper/AsyncFileReader.cpp.o.d -o CMakeFiles/SPTAGLib.dir/src/Helper/AsyncFileReader.cpp.o -c "AnnService/src/Helper/AsyncFileReader.cpp"
In file included from AnnService/inc/Helper/AsyncFileReader.h:7,
from AnnService/src/Helper/AsyncFileReader.cpp:4:
AnnService/inc/Helper/DiskIO.h:29:18: error: 'uint64_t' in namespace 'std' does not name a type; did you mean 'wint_t'?
29 | std::uint64_t m_offset;
| ^~~~~~~~
| wint_t
AnnService/inc/Helper/DiskIO.h:30:18: error: 'uint64_t' in namespace 'std' does not name a type; did you mean 'wint_t'?
30 | std::uint64_t m_readSize;
| ^~~~~~~~
| wint_t
AnnService/inc/Helper/DiskIO.h: In constructor 'SPTAG::Helper::AsyncReadRequest::AsyncReadRequest()':
AnnService/inc/Helper/DiskIO.h:42:34: error: class 'SPTAG::Helper::AsyncReadRequest' does not have any field named 'm_offset'
42 | AsyncReadRequest() : m_offset(0), m_readSize(0), m_buffer(nullptr), m_status(0), m_payload(nullptr), m_success(false), m_extension(nullptr) {}
| ^~~~~~~~
AnnService/inc/Helper/DiskIO.h:42:47: error: class 'SPTAG::Helper::AsyncReadRequest' does not have any field named 'm_readSize'
42 | AsyncReadRequest() : m_offset(0), m_readSize(0), m_buffer(nullptr), m_status(0), m_payload(nullptr), m_success(false), m_extension(nullptr) {}
| ^~~~~~~~~~
AnnService/inc/Helper/DiskIO.h: At global scope:
AnnService/inc/Helper/DiskIO.h:54:17: error: 'std::uint64_t' has not been declared
54 | std::uint64_t maxIOSize = (1 << 20),
| ^~~
AnnService/inc/Helper/DiskIO.h:55:17: error: 'std::uint32_t' has not been declared
55 | std::uint32_t maxReadRetries = 2,
| ^~~
AnnService/inc/Helper/DiskIO.h:56:17: error: 'std::uint32_t' has not been declared
56 | std::uint32_t maxWriteRetries = 2,
| ^~~
AnnService/inc/Helper/DiskIO.h:57:17: error: 'std::uint16_t' has not been declared
57 | std::uint16_t threadPoolSize = 4) = 0;
| ^~~
AnnService/inc/Helper/DiskIO.h:59:26: error: 'uint64_t' in namespace 'std' does not name a type; did you mean 'wint_t'?
59 | virtual std::uint64_t ReadBinary(std::uint64_t readSize, char* buffer, std::uint64_t offset = UINT64_MAX) = 0;
| ^~~~~~~~
| wint_t
AnnService/inc/Helper/DiskIO.h:61:26: error: 'uint64_t' in namespace 'std' does not name a type; did you mean 'wint_t'?
61 | virtual std::uint64_t WriteBinary(std::uint64_t writeSize, const char* buffer, std::uint64_t offset = UINT64_MAX) = 0;
| ^~~~~~~~
| wint_t
AnnService/inc/Helper/DiskIO.h:63:26: error: 'uint64_t' in namespace 'std' does not name a type; did you mean 'wint_t'?
63 | virtual std::uint64_t ReadString(std::uint64_t& readSize, std::unique_ptr<char[]>& buffer, char delim = '\n', std::uint64_t offset = UINT64_MAX) = 0;
| ^~~~~~~~
| wint_t
AnnService/inc/Helper/DiskIO.h:65:26: error: 'uint64_t' in namespace 'std' does not name a type; did you mean 'wint_t'?
65 | virtual std::uint64_t WriteString(const char* buffer, std::uint64_t offset = UINT64_MAX) = 0;
| ^~~~~~~~
| wint_t
AnnService/inc/Helper/DiskIO.h:69:72: error: 'std::uint32_t' has not been declared
69 | virtual bool BatchReadFile(AsyncReadRequest* readRequests, std::uint32_t requestCount) { return false; }
| ^~~
AnnService/inc/Helper/DiskIO.h:71:92: error: 'std::uint32_t' has not been declared
71 | virtual bool BatchCleanRequests(SPTAG::Helper::AsyncReadRequest* readRequests, std::uint32_t requestCount) { return false; }
| ^~~
AnnService/inc/Helper/DiskIO.h:73:26: error: 'uint64_t' in namespace 'std' does not name a type; did you mean 'wint_t'?
73 | virtual std::uint64_t TellP() = 0;
| ^~~~~~~~
| wint_t
AnnService/inc/Helper/DiskIO.h:87:17: error: 'std::uint64_t' has not been declared
87 | std::uint64_t maxIOSize = (1 << 20),
| ^~~
AnnService/inc/Helper/DiskIO.h:88:17: error: 'std::uint32_t' has not been declared
88 | std::uint32_t maxReadRetries = 2,
| ^~~
AnnService/inc/Helper/DiskIO.h:89:17: error: 'std::uint32_t' has not been declared
89 | std::uint32_t maxWriteRetries = 2,
| ^~~
AnnService/inc/Helper/DiskIO.h:90:17: error: 'std::uint16_t' has not been declared
90 | std::uint16_t threadPoolSize = 4)
| ^~~
AnnService/inc/Helper/DiskIO.h:96:26: error: 'uint64_t' in namespace 'std' does not name a type; did you mean 'wint_t'?
96 | virtual std::uint64_t ReadBinary(std::uint64_t readSize, char* buffer, std::uint64_t offset = UINT64_MAX)
| ^~~~~~~~
| wint_t
AnnService/inc/Helper/DiskIO.h:103:26: error: 'uint64_t' in namespace 'std' does not name a type; did you mean 'wint_t'?
103 | virtual std::uint64_t WriteBinary(std::uint64_t writeSize, const char* buffer, std::uint64_t offset = UINT64_MAX)
| ^~~~~~~~
| wint_t
AnnService/inc/Helper/DiskIO.h:111:26: error: 'uint64_t' in namespace 'std' does not name a type; did you mean 'wint_t'?
111 | virtual std::uint64_t ReadString(std::uint64_t& readSize, std::unique_ptr<char[]>& buffer, char delim = '\n', std::uint64_t offset = UINT64_MAX)
| ^~~~~~~~
| wint_t
AnnService/inc/Helper/DiskIO.h:144:26: error: 'uint64_t' in namespace 'std' does not name a type; did you mean 'wint_t'?
144 | virtual std::uint64_t WriteString(const char* buffer, std::uint64_t offset = UINT64_MAX)
| ^~~~~~~~
| wint_t
AnnService/inc/Helper/DiskIO.h:149:26: error: 'uint64_t' in namespace 'std' does not name a type; did you mean 'wint_t'?
149 | virtual std::uint64_t TellP()
| ^~~~~~~~
| wint_t
AnnService/inc/Helper/DiskIO.h:176:22: error: 'uint64_t' in namespace 'std' does not name a type; did you mean 'wint_t'?
176 | std::uint64_t tellp()
| ^~~~~~~~
| wint_t
AnnService/inc/Helper/DiskIO.h:192:17: error: 'std::uint64_t' has not been declared
192 | std::uint64_t maxIOSize = (1 << 20),
| ^~~
AnnService/inc/Helper/DiskIO.h:193:17: error: 'std::uint32_t' has not been declared
193 | std::uint32_t maxReadRetries = 2,
| ^~~
AnnService/inc/Helper/DiskIO.h:194:17: error: 'std::uint32_t' has not been declared
194 | std::uint32_t maxWriteRetries = 2,
| ^~~
AnnService/inc/Helper/DiskIO.h:195:17: error: 'std::uint16_t' has not been declared
195 | std::uint16_t threadPoolSize = 4)
| ^~~
AnnService/inc/Helper/DiskIO.h:204:26: error: 'uint64_t' in namespace 'std' does not name a type; did you mean 'wint_t'?
204 | virtual std::uint64_t ReadBinary(std::uint64_t readSize, char* buffer, std::uint64_t offset = UINT64_MAX)
| ^~~~~~~~
| wint_t
AnnService/inc/Helper/DiskIO.h:210:26: error: 'uint64_t' in namespace 'std' does not name a type; did you mean 'wint_t'?
210 | virtual std::uint64_t WriteBinary(std::uint64_t writeSize, const char* buffer, std::uint64_t offset = UINT64_MAX)
| ^~~~~~~~
| wint_t
AnnService/inc/Helper/DiskIO.h:217:26: error: 'uint64_t' in namespace 'std' does not name a type; did you mean 'wint_t'?
217 | virtual std::uint64_t ReadString(std::uint64_t& readSize, std::unique_ptr<char[]>& buffer, char delim = '\n', std::uint64_t offset = UINT64_MAX)
| ^~~~~~~~
| wint_t
AnnService/inc/Helper/DiskIO.h:251:26: error: 'uint64_t' in namespace 'std' does not name a type; did you mean 'wint_t'?
251 | virtual std::uint64_t WriteString(const char* buffer, std::uint64_t offset = UINT64_MAX)
| ^~~~~~~~
| wint_t
AnnService/inc/Helper/DiskIO.h:256:26: error: 'uint64_t' in namespace 'std' does not name a type; did you mean 'wint_t'?
256 | virtual std::uint64_t TellP()
| ^~~~~~~~
| wint_t
AnnService/inc/Helper/AsyncFileReader.h: In member function 'virtual bool SPTAG::Helper::AsyncFileIO::ReadFileAsync(SPTAG::Helper::AsyncReadRequest&)':
AnnService/inc/Helper/AsyncFileReader.h:580:49: error: 'struct SPTAG::Helper::AsyncReadRequest' has no member named 'm_readSize'
580 | myiocb.aio_nbytes = readRequest.m_readSize;
| ^~~~~~~~~~
AnnService/inc/Helper/AsyncFileReader.h:581:75: error: 'struct SPTAG::Helper::AsyncReadRequest' has no member named 'm_offset'
581 | myiocb.aio_offset = static_cast<std::int64_t>(readRequest.m_offset);
| ^~~~~~~~
AnnService/src/Helper/AsyncFileReader.cpp: In function 'void SPTAG::Helper::BatchReadFileAsync(std::vector<std::shared_ptr<DiskIO> >&, AsyncReadRequest*, int)':
AnnService/src/Helper/AsyncFileReader.cpp:73:51: error: 'struct SPTAG::Helper::AsyncReadRequest' has no member named 'm_readSize'
73 | myiocb->aio_nbytes = readRequest->m_readSize;
| ^~~~~~~~~~
AnnService/src/Helper/AsyncFileReader.cpp:74:77: error: 'struct SPTAG::Helper::AsyncReadRequest' has no member named 'm_offset'
74 | myiocb->aio_offset = static_cast<std::int64_t>(readRequest->m_offset);
| ^~~~~~~~
make[2]: *** [AnnService/CMakeFiles/SPTAGLib.dir/build.make:233: AnnService/CMakeFiles/SPTAGLib.dir/src/Helper/AsyncFileReader.cpp.o] Error 1
make[2]: Leaving directory 'build'
make[1]: *** [CMakeFiles/Makefile2:959: AnnService/CMakeFiles/SPTAGLib.dir/all] Error 2
make[1]: Leaving directory 'build'
make: *** [Makefile:149: all] Error 2
Desktop (please complete the following information):
- OS: Debian
- Version 13
Additional context
I verified that adding #include <cstdint> to AnnService/inc/Helper/DiskIO.h fixes the build failure,
however it isn't sufficient to fix the more general problem of missing includes, the tool called
include-what-you-use can help discover the missing includes.
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with AnnService/inc/Helper/DiskIO.h and the GCC 13 compiler output, then review the other files listed by the git grep check for direct use of fixed-width integer types. Build SPTAG with GCC 13 using the Debian reproduction steps and verify that the reported missing-type errors are resolved across the affected targets.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- cpp
- Domain
- build-system
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100