forked from OSchip/llvm-project
Fix llvm-cov counts to be 64-bit integers to avoid overflows.
Line counts in llvm-cov are read in as 64-bit integers but were being truncated to 32-bit in collectLineCounts(), which caused overflow for large counts. This patch fixes all counts to be uint64_t. Patch by Yuchen Wu! llvm-svn: 193172
This commit is contained in:
parent
28d0f60c48
commit
68bf30a8b4
|
@ -205,17 +205,17 @@ class GCOVLines {
|
|||
public:
|
||||
~GCOVLines() { Lines.clear(); }
|
||||
void add(uint32_t N) { Lines.push_back(N); }
|
||||
void collectLineCounts(FileInfo &FI, StringRef Filename, uint32_t Count);
|
||||
void collectLineCounts(FileInfo &FI, StringRef Filename, uint64_t Count);
|
||||
void dump();
|
||||
|
||||
private:
|
||||
SmallVector<uint32_t, 4> Lines;
|
||||
};
|
||||
|
||||
typedef SmallVector<uint32_t, 16> LineCounts;
|
||||
typedef SmallVector<uint64_t, 16> LineCounts;
|
||||
class FileInfo {
|
||||
public:
|
||||
void addLineCount(StringRef Filename, uint32_t Line, uint32_t Count);
|
||||
void addLineCount(StringRef Filename, uint32_t Line, uint64_t Count);
|
||||
void print(StringRef gcnoFile, StringRef gcdaFile);
|
||||
private:
|
||||
StringMap<LineCounts> LineInfo;
|
||||
|
|
|
@ -219,7 +219,7 @@ void GCOVBlock::dump() {
|
|||
/// collectLineCounts - Collect line counts. This must be used after
|
||||
/// reading .gcno and .gcda files.
|
||||
void GCOVLines::collectLineCounts(FileInfo &FI, StringRef Filename,
|
||||
uint32_t Count) {
|
||||
uint64_t Count) {
|
||||
for (SmallVectorImpl<uint32_t>::iterator I = Lines.begin(),
|
||||
E = Lines.end(); I != E; ++I)
|
||||
FI.addLineCount(Filename, *I, Count);
|
||||
|
@ -236,7 +236,7 @@ void GCOVLines::dump() {
|
|||
// FileInfo implementation.
|
||||
|
||||
/// addLineCount - Add line count for the given line number in a file.
|
||||
void FileInfo::addLineCount(StringRef Filename, uint32_t Line, uint32_t Count) {
|
||||
void FileInfo::addLineCount(StringRef Filename, uint32_t Line, uint64_t Count) {
|
||||
if (LineInfo.find(Filename) == LineInfo.end()) {
|
||||
OwningPtr<MemoryBuffer> Buff;
|
||||
if (error_code ec = MemoryBuffer::getFileOrSTDIN(Filename, Buff)) {
|
||||
|
|
Loading…
Reference in New Issue