Revert "[Coverage] Prevent detection of false instantiations in case of macro expansion."
This reverts commit r266436 as it broke buildbot. llvm-svn: 266458
This commit is contained in:
parent
ea25877d4a
commit
e880a06559
|
@ -375,7 +375,21 @@ static SmallBitVector gatherFileIDs(StringRef SourceFile,
|
|||
return FilenameEquivalence;
|
||||
}
|
||||
|
||||
/// Return the ID of the file where the definition of the function is located.
|
||||
static Optional<unsigned> findMainViewFileID(StringRef SourceFile,
|
||||
const FunctionRecord &Function) {
|
||||
SmallBitVector IsNotExpandedFile(Function.Filenames.size(), true);
|
||||
SmallBitVector FilenameEquivalence = gatherFileIDs(SourceFile, Function);
|
||||
for (const auto &CR : Function.CountedRegions)
|
||||
if (CR.Kind == CounterMappingRegion::ExpansionRegion &&
|
||||
FilenameEquivalence[CR.FileID])
|
||||
IsNotExpandedFile[CR.ExpandedFileID] = false;
|
||||
IsNotExpandedFile &= FilenameEquivalence;
|
||||
int I = IsNotExpandedFile.find_first();
|
||||
if (I == -1)
|
||||
return None;
|
||||
return I;
|
||||
}
|
||||
|
||||
static Optional<unsigned> findMainViewFileID(const FunctionRecord &Function) {
|
||||
SmallBitVector IsNotExpandedFile(Function.Filenames.size(), true);
|
||||
for (const auto &CR : Function.CountedRegions)
|
||||
|
@ -387,16 +401,6 @@ static Optional<unsigned> findMainViewFileID(const FunctionRecord &Function) {
|
|||
return I;
|
||||
}
|
||||
|
||||
/// Check if SourceFile is the file that contains the definition of
|
||||
/// the Function. Return the ID of the file in that case or None otherwise.
|
||||
static Optional<unsigned> findMainViewFileID(StringRef SourceFile,
|
||||
const FunctionRecord &Function) {
|
||||
Optional<unsigned> I = findMainViewFileID(Function);
|
||||
if (I && SourceFile == Function.Filenames[*I])
|
||||
return I;
|
||||
return None;
|
||||
}
|
||||
|
||||
/// Sort a nested sequence of regions from a single file.
|
||||
template <class It> static void sortNestedRegions(It First, It Last) {
|
||||
std::sort(First, Last,
|
||||
|
@ -418,11 +422,13 @@ CoverageData CoverageMapping::getCoverageForFile(StringRef Filename) {
|
|||
|
||||
for (const auto &Function : Functions) {
|
||||
auto MainFileID = findMainViewFileID(Filename, Function);
|
||||
if (!MainFileID)
|
||||
continue;
|
||||
auto FileIDs = gatherFileIDs(Filename, Function);
|
||||
for (const auto &CR : Function.CountedRegions)
|
||||
if (FileIDs.test(CR.FileID)) {
|
||||
Regions.push_back(CR);
|
||||
if (MainFileID && isExpansion(CR, *MainFileID))
|
||||
if (isExpansion(CR, *MainFileID))
|
||||
FileCoverage.Expansions.emplace_back(CR, Function);
|
||||
}
|
||||
}
|
||||
|
|
Binary file not shown.
|
@ -1,15 +0,0 @@
|
|||
#include "prevent_false_instantiations.h"
|
||||
|
||||
void func1() {
|
||||
DO_SOMETHING();
|
||||
}
|
||||
|
||||
void func2() {
|
||||
DO_SOMETHING();
|
||||
}
|
||||
|
||||
int main() {
|
||||
func1();
|
||||
func2();
|
||||
return 0;
|
||||
}
|
|
@ -1,26 +0,0 @@
|
|||
_Z5func1v
|
||||
# Func Hash:
|
||||
3
|
||||
# Num Counters:
|
||||
2
|
||||
# Counter Values:
|
||||
1
|
||||
0
|
||||
|
||||
_Z5func2v
|
||||
# Func Hash:
|
||||
3
|
||||
# Num Counters:
|
||||
2
|
||||
# Counter Values:
|
||||
1
|
||||
0
|
||||
|
||||
main
|
||||
# Func Hash:
|
||||
0
|
||||
# Num Counters:
|
||||
1
|
||||
# Counter Values:
|
||||
1
|
||||
|
|
@ -1 +1 @@
|
|||
config.suffixes = ['.test', '.m', '.cpp', '.c', '.h']
|
||||
config.suffixes = ['.test', '.m', '.cpp', '.c']
|
||||
|
|
|
@ -1,10 +0,0 @@
|
|||
// Checks that function instantiations don't go to a wrong file.
|
||||
|
||||
// CHECK-NOT: {{_Z5func[1,2]v}}
|
||||
|
||||
// RUN: llvm-profdata merge %S/Inputs/prevent_false_instantiations.proftext -o %t.profdata
|
||||
// RUN: llvm-cov show %S/Inputs/prevent_false_instantiations.covmapping -instr-profile %t.profdata -filename-equivalence %s | FileCheck %s
|
||||
|
||||
#define DO_SOMETHING() \
|
||||
do { \
|
||||
} while (0)
|
|
@ -454,44 +454,6 @@ TEST_P(MaybeSparseCoverageMappingTest, strip_unknown_filename_prefix) {
|
|||
ASSERT_EQ("func", Names[0]);
|
||||
}
|
||||
|
||||
TEST_P(MaybeSparseCoverageMappingTest, dont_detect_false_instantiations) {
|
||||
InstrProfRecord Record1("foo", 0x1234, {10});
|
||||
InstrProfRecord Record2("bar", 0x2345, {20});
|
||||
ProfileWriter.addRecord(std::move(Record1));
|
||||
ProfileWriter.addRecord(std::move(Record2));
|
||||
|
||||
startFunction("foo", 0x1234);
|
||||
addCMR(Counter::getCounter(0), "expanded", 1, 1, 1, 10);
|
||||
addExpansionCMR("main", "expanded", 4, 1, 4, 5);
|
||||
|
||||
startFunction("bar", 0x2345);
|
||||
addCMR(Counter::getCounter(0), "expanded", 1, 1, 1, 10);
|
||||
addExpansionCMR("main", "expanded", 9, 1, 9, 5);
|
||||
|
||||
loadCoverageMapping();
|
||||
|
||||
std::vector<const FunctionRecord *> Instantiations =
|
||||
LoadedCoverage->getInstantiations("expanded");
|
||||
ASSERT_TRUE(Instantiations.empty());
|
||||
}
|
||||
|
||||
TEST_P(MaybeSparseCoverageMappingTest, load_coverage_for_expanded_file) {
|
||||
InstrProfRecord Record("func", 0x1234, {10});
|
||||
ProfileWriter.addRecord(std::move(Record));
|
||||
|
||||
startFunction("func", 0x1234);
|
||||
addCMR(Counter::getCounter(0), "expanded", 1, 1, 1, 10);
|
||||
addExpansionCMR("main", "expanded", 4, 1, 4, 5);
|
||||
|
||||
loadCoverageMapping();
|
||||
|
||||
CoverageData Data = LoadedCoverage->getCoverageForFile("expanded");
|
||||
std::vector<CoverageSegment> Segments(Data.begin(), Data.end());
|
||||
ASSERT_EQ(2U, Segments.size());
|
||||
EXPECT_EQ(CoverageSegment(1, 1, 10, true), Segments[0]);
|
||||
EXPECT_EQ(CoverageSegment(1, 10, false), Segments[1]);
|
||||
}
|
||||
|
||||
INSTANTIATE_TEST_CASE_P(MaybeSparse, MaybeSparseCoverageMappingTest,
|
||||
::testing::Bool());
|
||||
|
||||
|
|
Loading…
Reference in New Issue