summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--llvm/include/llvm/ProfileData/SampleProfReader.h4
-rw-r--r--llvm/unittests/ProfileData/SampleProfTest.cpp4
2 files changed, 8 insertions, 0 deletions
diff --git a/llvm/include/llvm/ProfileData/SampleProfReader.h b/llvm/include/llvm/ProfileData/SampleProfReader.h
index 3c477cc3471..5cc729e42cc 100644
--- a/llvm/include/llvm/ProfileData/SampleProfReader.h
+++ b/llvm/include/llvm/ProfileData/SampleProfReader.h
@@ -548,6 +548,9 @@ public:
: SampleProfileReader(std::move(B), C, Underlying->getFormat()) {
Profiles = std::move(Underlying->getProfiles());
Summary = takeSummary(*Underlying);
+ // Keep the underlying reader alive; the profile data may contain
+ // StringRefs referencing names in its name table.
+ UnderlyingReader = std::move(Underlying);
}
/// Create a remapped sample profile from the given remapping file and
@@ -569,6 +572,7 @@ public:
private:
SymbolRemappingReader Remappings;
DenseMap<SymbolRemappingReader::Key, FunctionSamples*> SampleMap;
+ std::unique_ptr<SampleProfileReader> UnderlyingReader;
};
} // end namespace sampleprof
diff --git a/llvm/unittests/ProfileData/SampleProfTest.cpp b/llvm/unittests/ProfileData/SampleProfTest.cpp
index 67e6e9fc95b..a31eccefb4d 100644
--- a/llvm/unittests/ProfileData/SampleProfTest.cpp
+++ b/llvm/unittests/ProfileData/SampleProfTest.cpp
@@ -128,11 +128,15 @@ struct SampleProfTest : ::testing::Test {
FunctionSamples *ReadFooSamples = Reader->getSamplesFor(FooName);
ASSERT_TRUE(ReadFooSamples != nullptr);
+ if (Format != SampleProfileFormat::SPF_Compact_Binary)
+ ASSERT_EQ("_Z3fooi", ReadFooSamples->getName());
ASSERT_EQ(7711u, ReadFooSamples->getTotalSamples());
ASSERT_EQ(610u, ReadFooSamples->getHeadSamples());
FunctionSamples *ReadBarSamples = Reader->getSamplesFor(BarName);
ASSERT_TRUE(ReadBarSamples != nullptr);
+ if (Format != SampleProfileFormat::SPF_Compact_Binary)
+ ASSERT_EQ("_Z3bari", ReadBarSamples->getName());
ASSERT_EQ(20301u, ReadBarSamples->getTotalSamples());
ASSERT_EQ(1437u, ReadBarSamples->getHeadSamples());
ErrorOr<SampleRecord::CallTargetMap> CTMap =
OpenPOWER on IntegriCloud