Skip to content

Commit c445e65

Browse files
committed
[llvm-cov] Make some summary info fields private. NFC.
There's a bug in the way the line and region summary objects are merged. It would have been less likely to occur if those objects kept some data private. llvm-svn: 313416
1 parent b84e484 commit c445e65

5 files changed

+74
-51
lines changed

llvm/tools/llvm-cov/CoverageExporterJson.cpp

+10-10
Original file line numberDiff line numberDiff line change
@@ -362,8 +362,8 @@ class CoverageExporterJson {
362362

363363
// Start Line Coverage Summary.
364364
emitDictStart();
365-
emitDictElement("count", Summary.LineCoverage.NumLines);
366-
emitDictElement("covered", Summary.LineCoverage.Covered);
365+
emitDictElement("count", Summary.LineCoverage.getNumLines());
366+
emitDictElement("covered", Summary.LineCoverage.getCovered());
367367
emitDictElement("percent", Summary.LineCoverage.getPercentCovered());
368368
// End Line Coverage Summary.
369369
emitDictEnd();
@@ -372,8 +372,8 @@ class CoverageExporterJson {
372372

373373
// Start Function Coverage Summary.
374374
emitDictStart();
375-
emitDictElement("count", Summary.FunctionCoverage.NumFunctions);
376-
emitDictElement("covered", Summary.FunctionCoverage.Executed);
375+
emitDictElement("count", Summary.FunctionCoverage.getNumFunctions());
376+
emitDictElement("covered", Summary.FunctionCoverage.getExecuted());
377377
emitDictElement("percent", Summary.FunctionCoverage.getPercentCovered());
378378
// End Function Coverage Summary.
379379
emitDictEnd();
@@ -382,8 +382,8 @@ class CoverageExporterJson {
382382

383383
// Start Instantiation Coverage Summary.
384384
emitDictStart();
385-
emitDictElement("count", Summary.InstantiationCoverage.NumFunctions);
386-
emitDictElement("covered", Summary.InstantiationCoverage.Executed);
385+
emitDictElement("count", Summary.InstantiationCoverage.getNumFunctions());
386+
emitDictElement("covered", Summary.InstantiationCoverage.getExecuted());
387387
emitDictElement("percent",
388388
Summary.InstantiationCoverage.getPercentCovered());
389389
// End Function Coverage Summary.
@@ -393,11 +393,11 @@ class CoverageExporterJson {
393393

394394
// Start Region Coverage Summary.
395395
emitDictStart();
396-
emitDictElement("count", Summary.RegionCoverage.NumRegions);
397-
emitDictElement("covered", Summary.RegionCoverage.Covered);
396+
emitDictElement("count", Summary.RegionCoverage.getNumRegions());
397+
emitDictElement("covered", Summary.RegionCoverage.getCovered());
398398
emitDictElement("notcovered",
399-
Summary.RegionCoverage.NumRegions -
400-
Summary.RegionCoverage.Covered);
399+
Summary.RegionCoverage.getNumRegions() -
400+
Summary.RegionCoverage.getCovered());
401401
emitDictElement("percent", Summary.RegionCoverage.getPercentCovered());
402402
// End Region Coverage Summary.
403403
emitDictEnd();

llvm/tools/llvm-cov/CoverageReport.cpp

+26-25
Original file line numberDiff line numberDiff line change
@@ -185,11 +185,12 @@ void CoverageReport::render(const FileCoverageSummary &File,
185185

186186
if (Options.ShowRegionSummary) {
187187
OS << format("%*u", FileReportColumns[1],
188-
(unsigned)File.RegionCoverage.NumRegions);
189-
Options.colored_ostream(OS, FileCoverageColor) << format(
190-
"%*u", FileReportColumns[2], (unsigned)(File.RegionCoverage.NumRegions -
191-
File.RegionCoverage.Covered));
192-
if (File.RegionCoverage.NumRegions)
188+
(unsigned)File.RegionCoverage.getNumRegions());
189+
Options.colored_ostream(OS, FileCoverageColor)
190+
<< format("%*u", FileReportColumns[2],
191+
(unsigned)(File.RegionCoverage.getNumRegions() -
192+
File.RegionCoverage.getCovered()));
193+
if (File.RegionCoverage.getNumRegions())
193194
Options.colored_ostream(OS, FileCoverageColor)
194195
<< format("%*.2f", FileReportColumns[3] - 1,
195196
File.RegionCoverage.getPercentCovered())
@@ -199,11 +200,11 @@ void CoverageReport::render(const FileCoverageSummary &File,
199200
}
200201

201202
OS << format("%*u", FileReportColumns[4],
202-
(unsigned)File.FunctionCoverage.NumFunctions);
203+
(unsigned)File.FunctionCoverage.getNumFunctions());
203204
OS << format("%*u", FileReportColumns[5],
204-
(unsigned)(File.FunctionCoverage.NumFunctions -
205-
File.FunctionCoverage.Executed));
206-
if (File.FunctionCoverage.NumFunctions)
205+
(unsigned)(File.FunctionCoverage.getNumFunctions() -
206+
File.FunctionCoverage.getExecuted()));
207+
if (File.FunctionCoverage.getNumFunctions())
207208
Options.colored_ostream(OS, FuncCoverageColor)
208209
<< format("%*.2f", FileReportColumns[6] - 1,
209210
File.FunctionCoverage.getPercentCovered())
@@ -213,11 +214,11 @@ void CoverageReport::render(const FileCoverageSummary &File,
213214

214215
if (Options.ShowInstantiationSummary) {
215216
OS << format("%*u", FileReportColumns[7],
216-
(unsigned)File.InstantiationCoverage.NumFunctions);
217+
(unsigned)File.InstantiationCoverage.getNumFunctions());
217218
OS << format("%*u", FileReportColumns[8],
218-
(unsigned)(File.InstantiationCoverage.NumFunctions -
219-
File.InstantiationCoverage.Executed));
220-
if (File.InstantiationCoverage.NumFunctions)
219+
(unsigned)(File.InstantiationCoverage.getNumFunctions() -
220+
File.InstantiationCoverage.getExecuted()));
221+
if (File.InstantiationCoverage.getNumFunctions())
221222
Options.colored_ostream(OS, InstantiationCoverageColor)
222223
<< format("%*.2f", FileReportColumns[9] - 1,
223224
File.InstantiationCoverage.getPercentCovered())
@@ -227,11 +228,11 @@ void CoverageReport::render(const FileCoverageSummary &File,
227228
}
228229

229230
OS << format("%*u", FileReportColumns[10],
230-
(unsigned)File.LineCoverage.NumLines);
231+
(unsigned)File.LineCoverage.getNumLines());
231232
Options.colored_ostream(OS, LineCoverageColor) << format(
232-
"%*u", FileReportColumns[11],
233-
(unsigned)(File.LineCoverage.NumLines - File.LineCoverage.Covered));
234-
if (File.LineCoverage.NumLines)
233+
"%*u", FileReportColumns[11], (unsigned)(File.LineCoverage.getNumLines() -
234+
File.LineCoverage.getCovered()));
235+
if (File.LineCoverage.getNumLines())
235236
Options.colored_ostream(OS, LineCoverageColor)
236237
<< format("%*.2f", FileReportColumns[12] - 1,
237238
File.LineCoverage.getPercentCovered())
@@ -251,22 +252,22 @@ void CoverageReport::render(const FunctionCoverageSummary &Function,
251252
OS << column(DC.demangle(Function.Name), FunctionReportColumns[0],
252253
Column::RightTrim)
253254
<< format("%*u", FunctionReportColumns[1],
254-
(unsigned)Function.RegionCoverage.NumRegions);
255+
(unsigned)Function.RegionCoverage.getNumRegions());
255256
Options.colored_ostream(OS, FuncCoverageColor)
256257
<< format("%*u", FunctionReportColumns[2],
257-
(unsigned)(Function.RegionCoverage.NumRegions -
258-
Function.RegionCoverage.Covered));
258+
(unsigned)(Function.RegionCoverage.getNumRegions() -
259+
Function.RegionCoverage.getCovered()));
259260
Options.colored_ostream(
260261
OS, determineCoveragePercentageColor(Function.RegionCoverage))
261262
<< format("%*.2f", FunctionReportColumns[3] - 1,
262263
Function.RegionCoverage.getPercentCovered())
263264
<< '%';
264265
OS << format("%*u", FunctionReportColumns[4],
265-
(unsigned)Function.LineCoverage.NumLines);
266+
(unsigned)Function.LineCoverage.getNumLines());
266267
Options.colored_ostream(OS, LineCoverageColor)
267268
<< format("%*u", FunctionReportColumns[5],
268-
(unsigned)(Function.LineCoverage.NumLines -
269-
Function.LineCoverage.Covered));
269+
(unsigned)(Function.LineCoverage.getNumLines() -
270+
Function.LineCoverage.getCovered()));
270271
Options.colored_ostream(
271272
OS, determineCoveragePercentageColor(Function.LineCoverage))
272273
<< format("%*.2f", FunctionReportColumns[6] - 1,
@@ -391,7 +392,7 @@ void CoverageReport::renderFileReports(raw_ostream &OS,
391392

392393
bool EmptyFiles = false;
393394
for (const FileCoverageSummary &FCS : FileReports) {
394-
if (FCS.FunctionCoverage.NumFunctions)
395+
if (FCS.FunctionCoverage.getNumFunctions())
395396
render(FCS, OS);
396397
else
397398
EmptyFiles = true;
@@ -402,7 +403,7 @@ void CoverageReport::renderFileReports(raw_ostream &OS,
402403
<< "Files which contain no functions:\n";
403404

404405
for (const FileCoverageSummary &FCS : FileReports)
405-
if (!FCS.FunctionCoverage.NumFunctions)
406+
if (!FCS.FunctionCoverage.getNumFunctions())
406407
render(FCS, OS);
407408
}
408409

llvm/tools/llvm-cov/CoverageSummaryInfo.cpp

+2-4
Original file line numberDiff line numberDiff line change
@@ -87,10 +87,8 @@ FunctionCoverageSummary::get(const InstantiationGroup &Group,
8787
Summary.RegionCoverage = Summaries[0].RegionCoverage;
8888
Summary.LineCoverage = Summaries[0].LineCoverage;
8989
for (const auto &FCS : Summaries.drop_front()) {
90-
Summary.RegionCoverage.Covered =
91-
std::max(FCS.RegionCoverage.Covered, Summary.RegionCoverage.Covered);
92-
Summary.LineCoverage.Covered =
93-
std::max(FCS.LineCoverage.Covered, Summary.LineCoverage.Covered);
90+
Summary.RegionCoverage.merge(FCS.RegionCoverage);
91+
Summary.LineCoverage.merge(FCS.LineCoverage);
9492
}
9593
return Summary;
9694
}

llvm/tools/llvm-cov/CoverageSummaryInfo.h

+26-3
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,14 @@
2121
namespace llvm {
2222

2323
/// \brief Provides information about region coverage for a function/file.
24-
struct RegionCoverageInfo {
24+
class RegionCoverageInfo {
2525
/// \brief The number of regions that were executed at least once.
2626
size_t Covered;
2727

2828
/// \brief The total number of regions in a function/file.
2929
size_t NumRegions;
3030

31+
public:
3132
RegionCoverageInfo() : Covered(0), NumRegions(0) {}
3233

3334
RegionCoverageInfo(size_t Covered, size_t NumRegions)
@@ -39,6 +40,14 @@ struct RegionCoverageInfo {
3940
return *this;
4041
}
4142

43+
void merge(const RegionCoverageInfo &RHS) {
44+
Covered = std::max(Covered, RHS.Covered);
45+
}
46+
47+
size_t getCovered() const { return Covered; }
48+
49+
size_t getNumRegions() const { return NumRegions; }
50+
4251
bool isFullyCovered() const { return Covered == NumRegions; }
4352

4453
double getPercentCovered() const {
@@ -49,13 +58,14 @@ struct RegionCoverageInfo {
4958
};
5059

5160
/// \brief Provides information about line coverage for a function/file.
52-
struct LineCoverageInfo {
61+
class LineCoverageInfo {
5362
/// \brief The number of lines that were executed at least once.
5463
size_t Covered;
5564

5665
/// \brief The total number of lines in a function/file.
5766
size_t NumLines;
5867

68+
public:
5969
LineCoverageInfo() : Covered(0), NumLines(0) {}
6070

6171
LineCoverageInfo(size_t Covered, size_t NumLines)
@@ -67,6 +77,14 @@ struct LineCoverageInfo {
6777
return *this;
6878
}
6979

80+
void merge(const LineCoverageInfo &RHS) {
81+
Covered = std::max(Covered, RHS.Covered);
82+
}
83+
84+
size_t getCovered() const { return Covered; }
85+
86+
size_t getNumLines() const { return NumLines; }
87+
7088
bool isFullyCovered() const { return Covered == NumLines; }
7189

7290
double getPercentCovered() const {
@@ -77,13 +95,14 @@ struct LineCoverageInfo {
7795
};
7896

7997
/// \brief Provides information about function coverage for a file.
80-
struct FunctionCoverageInfo {
98+
class FunctionCoverageInfo {
8199
/// \brief The number of functions that were executed.
82100
size_t Executed;
83101

84102
/// \brief The total number of functions in this file.
85103
size_t NumFunctions;
86104

105+
public:
87106
FunctionCoverageInfo() : Executed(0), NumFunctions(0) {}
88107

89108
FunctionCoverageInfo(size_t Executed, size_t NumFunctions)
@@ -95,6 +114,10 @@ struct FunctionCoverageInfo {
95114
++NumFunctions;
96115
}
97116

117+
size_t getExecuted() const { return Executed; }
118+
119+
size_t getNumFunctions() const { return NumFunctions; }
120+
98121
bool isFullyCovered() const { return Executed == NumFunctions; }
99122

100123
double getPercentCovered() const {

llvm/tools/llvm-cov/SourceCoverageViewHTML.cpp

+10-9
Original file line numberDiff line numberDiff line change
@@ -346,18 +346,19 @@ void CoveragePrinterHTML::emitFileSummary(raw_ostream &OS, StringRef SF,
346346
}
347347

348348
Columns.emplace_back(tag("td", tag("pre", Filename)));
349-
AddCoverageTripleToColumn(FCS.FunctionCoverage.Executed,
350-
FCS.FunctionCoverage.NumFunctions,
349+
AddCoverageTripleToColumn(FCS.FunctionCoverage.getExecuted(),
350+
FCS.FunctionCoverage.getNumFunctions(),
351351
FCS.FunctionCoverage.getPercentCovered());
352352
if (Opts.ShowInstantiationSummary)
353-
AddCoverageTripleToColumn(FCS.InstantiationCoverage.Executed,
354-
FCS.InstantiationCoverage.NumFunctions,
353+
AddCoverageTripleToColumn(FCS.InstantiationCoverage.getExecuted(),
354+
FCS.InstantiationCoverage.getNumFunctions(),
355355
FCS.InstantiationCoverage.getPercentCovered());
356-
AddCoverageTripleToColumn(FCS.LineCoverage.Covered, FCS.LineCoverage.NumLines,
356+
AddCoverageTripleToColumn(FCS.LineCoverage.getCovered(),
357+
FCS.LineCoverage.getNumLines(),
357358
FCS.LineCoverage.getPercentCovered());
358359
if (Opts.ShowRegionSummary)
359-
AddCoverageTripleToColumn(FCS.RegionCoverage.Covered,
360-
FCS.RegionCoverage.NumRegions,
360+
AddCoverageTripleToColumn(FCS.RegionCoverage.getCovered(),
361+
FCS.RegionCoverage.getNumRegions(),
361362
FCS.RegionCoverage.getPercentCovered());
362363

363364
OS << tag("tr", join(Columns.begin(), Columns.end(), ""), "light-row");
@@ -407,7 +408,7 @@ Error CoveragePrinterHTML::createIndexFile(
407408
CoverageReport::prepareFileReports(Coverage, Totals, SourceFiles, Opts);
408409
bool EmptyFiles = false;
409410
for (unsigned I = 0, E = FileReports.size(); I < E; ++I) {
410-
if (FileReports[I].FunctionCoverage.NumFunctions)
411+
if (FileReports[I].FunctionCoverage.getNumFunctions())
411412
emitFileSummary(OSRef, SourceFiles[I], FileReports[I]);
412413
else
413414
EmptyFiles = true;
@@ -424,7 +425,7 @@ Error CoveragePrinterHTML::createIndexFile(
424425
"by the preprocessor.)\n");
425426
OSRef << BeginCenteredDiv << BeginTable;
426427
for (unsigned I = 0, E = FileReports.size(); I < E; ++I)
427-
if (!FileReports[I].FunctionCoverage.NumFunctions) {
428+
if (!FileReports[I].FunctionCoverage.getNumFunctions()) {
428429
std::string Link = buildLinkToFile(SourceFiles[I], FileReports[I]);
429430
OSRef << tag("tr", tag("td", tag("pre", Link)), "light-row") << '\n';
430431
}

0 commit comments

Comments
 (0)