diff options
-rw-r--r-- | llvm/include/llvm/ProfileData/SampleProfReader.h | 4 | ||||
-rw-r--r-- | llvm/unittests/ProfileData/SampleProfTest.cpp | 4 |
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 = |