OSDN Git Service

[llvm-profdata] Clean up the way we create the input filenames buffer (NFC)
authorVedant Kumar <vsk@apple.com>
Sat, 4 Jun 2016 00:36:28 +0000 (00:36 +0000)
committerVedant Kumar <vsk@apple.com>
Sat, 4 Jun 2016 00:36:28 +0000 (00:36 +0000)
Create the buffer before calling parseInputFilenamesFile(), and add a
comment explaining why this is done.

Thanks to David Li for the suggestion!

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@271756 91177308-0d34-0410-b5e6-96231b3b80d8

tools/llvm-profdata/llvm-profdata.cpp

index 45f3487..b9efd2e 100644 (file)
@@ -224,8 +224,7 @@ static WeightedFile parseWeightedFile(const StringRef &WeightedFilename) {
 }
 
 static std::unique_ptr<MemoryBuffer>
-parseInputFilenamesFile(const StringRef &InputFilenamesFile,
-                        WeightedFileVector &WFV) {
+getInputFilenamesFileBuf(const StringRef &InputFilenamesFile) {
   if (InputFilenamesFile == "")
     return {};
 
@@ -233,10 +232,16 @@ parseInputFilenamesFile(const StringRef &InputFilenamesFile,
   if (!BufOrError)
     exitWithErrorCode(BufOrError.getError(), InputFilenamesFile);
 
-  std::unique_ptr<MemoryBuffer> Buffer = std::move(*BufOrError);
-  StringRef Data = Buffer->getBuffer();
+  return std::move(*BufOrError);
+}
+
+static void parseInputFilenamesFile(MemoryBuffer *Buffer,
+                                    WeightedFileVector &WFV) {
+  if (!Buffer)
+    return;
 
   SmallVector<StringRef, 8> Entries;
+  StringRef Data = Buffer->getBuffer();
   Data.split(Entries, '\n', /*MaxSplit=*/-1, /*KeepEmpty=*/false);
   for (const StringRef &FileWeightEntry : Entries) {
     StringRef SanitizedEntry = FileWeightEntry.trim(" \t\v\f\r");
@@ -249,8 +254,6 @@ parseInputFilenamesFile(const StringRef &InputFilenamesFile,
     else
       WFV.emplace_back(parseWeightedFile(SanitizedEntry));
   }
-
-  return Buffer;
 }
 
 static int merge_main(int argc, const char *argv[]) {
@@ -293,7 +296,11 @@ static int merge_main(int argc, const char *argv[]) {
     WeightedInputs.push_back(WeightedFile(Filename, 1));
   for (StringRef WeightedFilename : WeightedInputFilenames)
     WeightedInputs.push_back(parseWeightedFile(WeightedFilename));
-  auto Buf = parseInputFilenamesFile(InputFilenamesFile, WeightedInputs);
+
+  // Make sure that the file buffer stays alive for the duration of the
+  // weighted input vector's lifetime.
+  auto Buffer = getInputFilenamesFileBuf(InputFilenamesFile);
+  parseInputFilenamesFile(Buffer.get(), WeightedInputs);
 
   if (WeightedInputs.empty())
     exitWithError("No input files specified. See " +