typedef std::vector<const FunctionCoverageMapping *> SetType;
std::unordered_map<uint64_t, SetType> InstantiatedFunctions;
- static KeyType getKey(const MappingRegion &R) {
+ static KeyType getKey(const CountedRegion &R) {
return uint64_t(R.LineStart) | uint64_t(R.ColumnStart) << 32;
}
public:
void insert(const FunctionCoverageMapping &Function, unsigned FileID) {
KeyType Key = 0;
- for (const auto &R : Function.MappingRegions) {
+ for (const auto &R : Function.CountedRegions) {
if (R.FileID == FileID) {
Key = getKey(R);
break;
/// \brief Create a source view which shows coverage for an expansion
/// of a file.
- void createExpansionSubView(const MappingRegion &ExpandedRegion,
+ void createExpansionSubView(const CountedRegion &ExpandedRegion,
const FunctionCoverageMapping &Function,
SourceCoverageView &Parent);
const FunctionCoverageMapping &Function) {
unsigned LineStart = std::numeric_limits<unsigned>::max();
unsigned LineEnd = 0;
- for (const auto &Region : Function.MappingRegions) {
- if (Region.FileID != FileID)
+ for (const auto &CR : Function.CountedRegions) {
+ if (CR.FileID != FileID)
continue;
- LineStart = std::min(Region.LineStart, LineStart);
- LineEnd = std::max(Region.LineEnd, LineEnd);
+ LineStart = std::min(CR.LineStart, LineStart);
+ LineEnd = std::max(CR.LineEnd, LineEnd);
}
return std::make_pair(LineStart, LineEnd);
}
if (equivalentFiles(SourceFile, Function.Filenames[I]))
FilenameEquivalence[I] = true;
}
- for (const auto &Region : Function.MappingRegions) {
- if (Region.Kind == MappingRegion::ExpansionRegion &&
- FilenameEquivalence[Region.FileID])
- IsExpandedFile[Region.ExpandedFileID] = true;
+ for (const auto &CR : Function.CountedRegions) {
+ if (CR.Kind == CounterMappingRegion::ExpansionRegion &&
+ FilenameEquivalence[CR.FileID])
+ IsExpandedFile[CR.ExpandedFileID] = true;
}
for (unsigned I = 0, E = Function.Filenames.size(); I < E; ++I) {
if (!FilenameEquivalence[I] || IsExpandedFile[I])
CodeCoverageTool::findMainViewFileID(const FunctionCoverageMapping &Function,
unsigned &MainViewFileID) {
llvm::SmallVector<bool, 8> IsExpandedFile(Function.Filenames.size(), false);
- for (const auto &Region : Function.MappingRegions) {
- if (Region.Kind == MappingRegion::ExpansionRegion)
- IsExpandedFile[Region.ExpandedFileID] = true;
+ for (const auto &CR : Function.CountedRegions) {
+ if (CR.Kind == CounterMappingRegion::ExpansionRegion)
+ IsExpandedFile[CR.ExpandedFileID] = true;
}
for (unsigned I = 0, E = Function.Filenames.size(); I < E; ++I) {
if (IsExpandedFile[I])
}
void CodeCoverageTool::createExpansionSubView(
- const MappingRegion &ExpandedRegion,
+ const CountedRegion &ExpandedRegion,
const FunctionCoverageMapping &Function, SourceCoverageView &Parent) {
auto ExpandedLines = findExpandedFileInterestingLineRange(
ExpandedRegion.ExpandedFileID, Function);
SourceBuffer.get(), Parent.getOptions(), ExpandedLines.first,
ExpandedLines.second, ExpandedRegion);
SourceCoverageDataManager RegionManager;
- for (const auto &Region : Function.MappingRegions) {
- if (Region.FileID == ExpandedRegion.ExpandedFileID)
- RegionManager.insert(Region);
+ for (const auto &CR : Function.CountedRegions) {
+ if (CR.FileID == ExpandedRegion.ExpandedFileID)
+ RegionManager.insert(CR);
}
SubView->load(RegionManager);
createExpansionSubViews(*SubView, ExpandedRegion.ExpandedFileID, Function);
const FunctionCoverageMapping &Function) {
if (!ViewOpts.ShowExpandedRegions)
return;
- for (const auto &Region : Function.MappingRegions) {
- if (Region.Kind != CounterMappingRegion::ExpansionRegion)
+ for (const auto &CR : Function.CountedRegions) {
+ if (CR.Kind != CounterMappingRegion::ExpansionRegion)
continue;
- if (Region.FileID != ViewFileID)
+ if (CR.FileID != ViewFileID)
continue;
- createExpansionSubView(Region, Function, View);
+ createExpansionSubView(CR, Function, View);
}
}
if (!gatherInterestingFileIDs(SourceFile, Function, InterestingFileIDs))
return;
// Get the interesting regions
- for (const auto &Region : Function.MappingRegions) {
- if (InterestingFileIDs.count(Region.FileID))
- RegionManager.insert(Region);
+ for (const auto &CR : Function.CountedRegions) {
+ if (InterestingFileIDs.count(CR.FileID))
+ RegionManager.insert(CR);
}
View.load(RegionManager);
unsigned MainFileID;
InterestingFileIDs))
continue;
// Get the interesting regions
- for (const auto &Region : Function.MappingRegions) {
- if (InterestingFileIDs.count(Region.FileID))
- RegionManager.insert(Region);
+ for (const auto &CR : Function.CountedRegions) {
+ if (InterestingFileIDs.count(CR.FileID))
+ RegionManager.insert(CR);
}
InstantiationSetCollector.insert(Function, MainFileID);
createExpansionSubViews(View, MainFileID, Function);
if (InstantiationSet.second.size() < 2)
continue;
auto InterestingRange = findExpandedFileInterestingLineRange(
- InstantiationSet.second.front()->MappingRegions.front().FileID,
+ InstantiationSet.second.front()->CountedRegions.front().FileID,
*InstantiationSet.second.front());
for (auto Function : InstantiationSet.second) {
auto SubView = llvm::make_unique<SourceCoverageView>(
}
ErrorOr<int64_t> ExecutionCount = Ctx.evaluate(R.Count);
if (ExecutionCount) {
- Function.MappingRegions.push_back(MappingRegion(R, *ExecutionCount));
+ Function.CountedRegions.push_back(CountedRegion(R, *ExecutionCount));
} else if (!RegionError) {
colored_ostream(errs(), raw_ostream::RED)
<< "error: Regions and counters don't match in a function '"
FunctionCoverageSummary::get(const FunctionCoverageMapping &Function) {
// Compute the region coverage
size_t NumCodeRegions = 0, CoveredRegions = 0;
- for (auto &Region : Function.MappingRegions) {
- if (Region.Kind != CounterMappingRegion::CodeRegion)
+ for (auto &CR : Function.CountedRegions) {
+ if (CR.Kind != CounterMappingRegion::CodeRegion)
continue;
++NumCodeRegions;
- if (Region.ExecutionCount != 0)
+ if (CR.ExecutionCount != 0)
++CoveredRegions;
}
// in that particular file
unsigned LineStart = std::numeric_limits<unsigned>::max();
unsigned LineEnd = 0;
- for (auto &Region : Function.MappingRegions) {
- if (Region.FileID != FileID)
+ for (auto &CR : Function.CountedRegions) {
+ if (CR.FileID != FileID)
continue;
- LineStart = std::min(LineStart, Region.LineStart);
- LineEnd = std::max(LineEnd, Region.LineEnd);
+ LineStart = std::min(LineStart, CR.LineStart);
+ LineEnd = std::max(LineEnd, CR.LineEnd);
}
unsigned LineCount = LineEnd - LineStart + 1;
// Get counters
llvm::SmallVector<uint64_t, 16> ExecutionCounts;
ExecutionCounts.resize(LineCount, 0);
- for (auto &Region : Function.MappingRegions) {
- if (Region.FileID != FileID)
+ for (auto &CR : Function.CountedRegions) {
+ if (CR.FileID != FileID)
continue;
// Ignore the lines that were skipped by the preprocessor.
- auto ExecutionCount = Region.ExecutionCount;
- if (Region.Kind == MappingRegion::SkippedRegion) {
- LineCount -= Region.LineEnd - Region.LineStart + 1;
+ auto ExecutionCount = CR.ExecutionCount;
+ if (CR.Kind == CounterMappingRegion::SkippedRegion) {
+ LineCount -= CR.LineEnd - CR.LineStart + 1;
ExecutionCount = 1;
}
- for (unsigned I = Region.LineStart; I <= Region.LineEnd; ++I)
+ for (unsigned I = CR.LineStart; I <= CR.LineEnd; ++I)
ExecutionCounts[I - LineStart] = ExecutionCount;
}
CoveredLines += LineCount - std::count(ExecutionCounts.begin(),