[llvm] r282422 - [llvm-cov] Silence a warning from the MSVC runtime (NFC)

Vedant Kumar via llvm-commits llvm-commits at lists.llvm.org
Mon Sep 26 10:57:13 PDT 2016


Author: vedantk
Date: Mon Sep 26 12:57:13 2016
New Revision: 282422

URL: http://llvm.org/viewvc/llvm-project?rev=282422&view=rev
Log:
[llvm-cov] Silence a warning from the MSVC runtime (NFC)

Rework getLongestCommonPrefixLen() so that it doesn't access string null
terminators. The old version with std::mismatch would do this:

                        |
                        v
    Strings[0] = ['a', nil]

    Strings[1] = ['a', 'a', nil]
                        ^
                        |

This should silence a warning from the MSVC runtime (PR30515). As
before, I tested this out by preparing a coverage report for FileCheck.
Thanks to Yaron Keren for the report!

Modified:
    llvm/trunk/tools/llvm-cov/CoverageReport.cpp

Modified: llvm/trunk/tools/llvm-cov/CoverageReport.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-cov/CoverageReport.cpp?rev=282422&r1=282421&r2=282422&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-cov/CoverageReport.cpp (original)
+++ llvm/trunk/tools/llvm-cov/CoverageReport.cpp Mon Sep 26 12:57:13 2016
@@ -123,10 +123,12 @@ raw_ostream::Colors determineCoveragePer
 unsigned getLongestCommonPrefixLen(ArrayRef<std::string> Strings) {
   unsigned LCP = Strings[0].size();
   for (unsigned I = 1, E = Strings.size(); LCP > 0 && I < E; ++I) {
-    auto Mismatch =
-        std::mismatch(Strings[0].begin(), Strings[0].end(), Strings[I].begin())
-            .first;
-    LCP = std::min(LCP, (unsigned)std::distance(Strings[0].begin(), Mismatch));
+    unsigned Cursor;
+    StringRef S = Strings[I];
+    for (Cursor = 0; Cursor < LCP && Cursor < S.size(); ++Cursor)
+      if (Strings[0][Cursor] != S[Cursor])
+        break;
+    LCP = std::min(LCP, Cursor);
   }
   return LCP;
 }




More information about the llvm-commits mailing list