Skip to content

Commit

Permalink
[llvm-cov] Avoid 0% when reporting something that's 0/0
Browse files Browse the repository at this point in the history
This commit makes llvm-cov avoid showing 0% (0/0) coverage for things
like file function coverage, etc. in reports and HTML output. This can happen
for files like headers that have macros but no functions. This commit makes
llvm-cov report - (0/0) instead.

rdar://29246480

Differential Revision: https://reviews.llvm.org/D26615


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@287539 91177308-0d34-0410-b5e6-96231b3b80d8
  • Loading branch information
hyp committed Nov 21, 2016
1 parent b65e1c7 commit c636d7a
Show file tree
Hide file tree
Showing 6 changed files with 74 additions and 20 deletions.
Binary file not shown.
3 changes: 3 additions & 0 deletions test/tools/llvm-cov/Inputs/zeroFunctionFile.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
// This header has no functions

#define NOFUNCTIONS(x) (x) > 0 ? 0 : 1
16 changes: 16 additions & 0 deletions test/tools/llvm-cov/Inputs/zeroFunctionFile.proftext
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
foo
# Func Hash:
13
# Num Counters:
2
# Counter Values:
1
1

main
# Func Hash:
0
# Num Counters:
1
# Counter Values:
1
19 changes: 19 additions & 0 deletions test/tools/llvm-cov/zeroFunctionFile.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
#include "Inputs/zeroFunctionFile.h"

int foo(int x) {
return NOFUNCTIONS(x);
}
int main() {
return foo(2);
}

// RUN: llvm-profdata merge %S/Inputs/zeroFunctionFile.proftext -o %t.profdata

// RUN: llvm-cov report %S/Inputs/zeroFunctionFile.covmapping -instr-profile %t.profdata 2>&1 | FileCheck --check-prefix=REPORT --strict-whitespace %s
// REPORT: 0 0 - 0 0 - 0 0 - 0 0 -
// REPORT-NO: 0%

// RUN: llvm-cov show %S/Inputs/zeroFunctionFile.covmapping -format html -instr-profile %t.profdata -o %t.dir
// RUN: FileCheck %s -input-file=%t.dir/index.html -check-prefix=HTML
// HTML: <td class='column-entry-green'><pre>- (0/0)
// HTML-NO: 0.00% (0/0)
44 changes: 28 additions & 16 deletions tools/llvm-cov/CoverageReport.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -154,36 +154,48 @@ void CoverageReport::render(const FileCoverageSummary &File,
(unsigned)File.RegionCoverage.NumRegions);
Options.colored_ostream(OS, FileCoverageColor) << format(
"%*u", FileReportColumns[2], (unsigned)File.RegionCoverage.NotCovered);
Options.colored_ostream(OS, FileCoverageColor)
<< format("%*.2f", FileReportColumns[3] - 1,
File.RegionCoverage.getPercentCovered())
<< '%';
if (File.RegionCoverage.NumRegions)
Options.colored_ostream(OS, FileCoverageColor)
<< format("%*.2f", FileReportColumns[3] - 1,
File.RegionCoverage.getPercentCovered())
<< '%';
else
OS << column("-", FileReportColumns[3], Column::RightAlignment);
OS << format("%*u", FileReportColumns[4],
(unsigned)File.FunctionCoverage.NumFunctions);
OS << format("%*u", FileReportColumns[5],
(unsigned)(File.FunctionCoverage.NumFunctions -
File.FunctionCoverage.Executed));
Options.colored_ostream(OS, FuncCoverageColor)
<< format("%*.2f", FileReportColumns[6] - 1,
File.FunctionCoverage.getPercentCovered())
<< '%';
if (File.FunctionCoverage.NumFunctions)
Options.colored_ostream(OS, FuncCoverageColor)
<< format("%*.2f", FileReportColumns[6] - 1,
File.FunctionCoverage.getPercentCovered())
<< '%';
else
OS << column("-", FileReportColumns[6], Column::RightAlignment);
OS << format("%*u", FileReportColumns[7],
(unsigned)File.InstantiationCoverage.NumFunctions);
OS << format("%*u", FileReportColumns[8],
(unsigned)(File.InstantiationCoverage.NumFunctions -
File.InstantiationCoverage.Executed));
Options.colored_ostream(OS, InstantiationCoverageColor)
<< format("%*.2f", FileReportColumns[9] - 1,
File.InstantiationCoverage.getPercentCovered())
<< '%';
if (File.InstantiationCoverage.NumFunctions)
Options.colored_ostream(OS, InstantiationCoverageColor)
<< format("%*.2f", FileReportColumns[9] - 1,
File.InstantiationCoverage.getPercentCovered())
<< '%';
else
OS << column("-", FileReportColumns[9], Column::RightAlignment);
OS << format("%*u", FileReportColumns[10],
(unsigned)File.LineCoverage.NumLines);
Options.colored_ostream(OS, LineCoverageColor) << format(
"%*u", FileReportColumns[11], (unsigned)File.LineCoverage.NotCovered);
Options.colored_ostream(OS, LineCoverageColor)
<< format("%*.2f", FileReportColumns[12] - 1,
File.LineCoverage.getPercentCovered())
<< '%';
if (File.LineCoverage.NumLines)
Options.colored_ostream(OS, LineCoverageColor)
<< format("%*.2f", FileReportColumns[12] - 1,
File.LineCoverage.getPercentCovered())
<< '%';
else
OS << column("-", FileReportColumns[12], Column::RightAlignment);
OS << "\n";
}

Expand Down
12 changes: 8 additions & 4 deletions tools/llvm-cov/SourceCoverageViewHTML.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -307,13 +307,17 @@ void CoveragePrinterHTML::emitFileSummary(raw_ostream &OS, StringRef SF,
std::string S;
{
raw_string_ostream RSO{S};
RSO << format("%*.2f", 7, Pctg) << "% (" << Hit << '/' << Total << ')';
if (Total)
RSO << format("%*.2f", 7, Pctg) << "% ";
else
RSO << "- ";
RSO << '(' << Hit << '/' << Total << ')';
}
const char *CellClass = "column-entry-yellow";
if (Pctg < 80.0)
CellClass = "column-entry-red";
else if (Hit == Total)
if (Hit == Total)
CellClass = "column-entry-green";
else if (Pctg < 80.0)
CellClass = "column-entry-red";
Columns.emplace_back(tag("td", tag("pre", S), CellClass));
};

Expand Down

0 comments on commit c636d7a

Please sign in to comment.