]> granicus.if.org Git - clang/commitdiff
Fix use-of-temporary with StringRef in code coverage
authorJordan Rose <jordan_rose@apple.com>
Mon, 7 Nov 2016 17:28:04 +0000 (17:28 +0000)
committerJordan Rose <jordan_rose@apple.com>
Mon, 7 Nov 2016 17:28:04 +0000 (17:28 +0000)
The fixed code is basically identical to the same loop below, which
might indicate an opportunity for refactoring. I just wanted to fix
the use-of-temporary issue.

Caught by adding a similar check to StringRef as r283798 did for
ArrayRef. I'll be upstreaming that soon.

Reviewed by Vedant Kumar as https://reviews.llvm.org/D26317.

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

lib/CodeGen/CoverageMappingGen.cpp

index 530ac8361121ade5e0c6c662493be613a6eca34f..5bc9e5011aa893f3967736fc736cf0bf35f3a2aa 100644 (file)
@@ -1039,10 +1039,15 @@ void CoverageMappingModuleGen::addFunctionMappingRecord(
     std::vector<StringRef> Filenames;
     std::vector<CounterExpression> Expressions;
     std::vector<CounterMappingRegion> Regions;
+    llvm::SmallVector<std::string, 16> FilenameStrs;
     llvm::SmallVector<StringRef, 16> FilenameRefs;
+    FilenameStrs.resize(FileEntries.size());
     FilenameRefs.resize(FileEntries.size());
-    for (const auto &Entry : FileEntries)
-      FilenameRefs[Entry.second] = normalizeFilename(Entry.first->getName());
+    for (const auto &Entry : FileEntries) {
+      auto I = Entry.second;
+      FilenameStrs[I] = normalizeFilename(Entry.first->getName());
+      FilenameRefs[I] = FilenameStrs[I];
+    }
     RawCoverageMappingReader Reader(CoverageMapping, FilenameRefs, Filenames,
                                     Expressions, Regions);
     if (Reader.read())