[gcov] Sort file info before printing it
authorVedant Kumar <vsk@apple.com>
Wed, 26 Apr 2017 00:16:10 +0000 (00:16 +0000)
committerVedant Kumar <vsk@apple.com>
Wed, 26 Apr 2017 00:16:10 +0000 (00:16 +0000)
The order in which GCOV file info is printed depends on the string hash
function. This makes some GCOV tests brittle, because the tests must be
updated whenever the hash function changes.

Sort the filenames before printing out the file info to solve the
problem. This should be relatively cheap.

Differential Revision: https://reviews.llvm.org/D32512

llvm-svn: 301371

llvm/lib/IR/GCOV.cpp
llvm/test/tools/llvm-cov/Inputs/test_-b.output
llvm/test/tools/llvm-cov/Inputs/test_-f.output
llvm/test/tools/llvm-cov/Inputs/test_long_file_names.output
llvm/test/tools/llvm-cov/Inputs/test_long_paths.output
llvm/test/tools/llvm-cov/Inputs/test_missing.output
llvm/test/tools/llvm-cov/Inputs/test_no_gcda.output
llvm/test/tools/llvm-cov/Inputs/test_no_options.output
llvm/test/tools/llvm-cov/Inputs/test_no_output.output
llvm/test/tools/llvm-cov/Inputs/test_no_preserve_paths.output
llvm/test/tools/llvm-cov/Inputs/test_preserve_paths.output

index ba92a91..d4b4552 100644 (file)
@@ -589,8 +589,12 @@ FileInfo::openCoveragePath(StringRef CoveragePath) {
 /// print -  Print source files with collected line count information.
 void FileInfo::print(raw_ostream &InfoOS, StringRef MainFilename,
                      StringRef GCNOFile, StringRef GCDAFile) {
-  for (const auto &LI : LineInfo) {
-    StringRef Filename = LI.first();
+  SmallVector<StringRef, 4> Filenames;
+  for (const auto &LI : LineInfo)
+    Filenames.push_back(LI.first());
+  std::sort(Filenames.begin(), Filenames.end());
+
+  for (StringRef Filename : Filenames) {
     auto AllLines = LineConsumer(Filename);
 
     std::string CoveragePath = getCoveragePath(Filename, MainFilename);
@@ -603,7 +607,7 @@ void FileInfo::print(raw_ostream &InfoOS, StringRef MainFilename,
     CovOS << "        -:    0:Runs:" << RunCount << "\n";
     CovOS << "        -:    0:Programs:" << ProgramCount << "\n";
 
-    const LineData &Line = LI.second;
+    const LineData &Line = LineInfo[Filename];
     GCOVCoverage FileCoverage(Filename);
     for (uint32_t LineIndex = 0; LineIndex < Line.LastLine || !AllLines.empty();
          ++LineIndex) {
index 515987d..a6495fd 100644 (file)
@@ -1,3 +1,9 @@
+File './test.h'
+Lines executed:100.00% of 1
+No branches
+No calls
+./test.h:creating 'test.h.gcov'
+
 File 'test.cpp'
 Lines executed:84.21% of 38
 Branches executed:100.00% of 15
@@ -5,9 +11,3 @@ Taken at least once:86.67% of 15
 No calls
 test.cpp:creating 'test.cpp.gcov'
 
-File './test.h'
-Lines executed:100.00% of 1
-No branches
-No calls
-./test.h:creating 'test.h.gcov'
-
index d97aa18..b0a73ea 100644 (file)
@@ -1,3 +1,9 @@
+Function '_ZN1AC1Ev'
+Lines executed:100.00% of 1
+
+Function '_ZN1AC2Ev'
+Lines executed:100.00% of 1
+
 Function '_ZN1A1BEv'
 Lines executed:100.00% of 1
 
@@ -22,17 +28,11 @@ Lines executed:100.00% of 4
 Function 'main'
 Lines executed:91.67% of 24
 
-Function '_ZN1AC1Ev'
-Lines executed:100.00% of 1
-
-Function '_ZN1AC2Ev'
+File './test.h'
 Lines executed:100.00% of 1
+./test.h:creating 'test.h.gcov'
 
 File 'test.cpp'
 Lines executed:84.21% of 38
 test.cpp:creating 'test.cpp.gcov'
 
-File './test.h'
-Lines executed:100.00% of 1
-./test.h:creating 'test.h.gcov'
-
index e09f4cb..e74b636 100644 (file)
@@ -1,8 +1,8 @@
-File 'srcdir/./nested_dir/../test.h'
-Lines executed:100.00% of 1
-srcdir/./nested_dir/../test.h:creating 'test_paths.cpp##test.h.gcov'
-
 File 'srcdir/./nested_dir/../test.cpp'
 Lines executed:84.21% of 38
 srcdir/./nested_dir/../test.cpp:creating 'test_paths.cpp##test.cpp.gcov'
 
+File 'srcdir/./nested_dir/../test.h'
+Lines executed:100.00% of 1
+srcdir/./nested_dir/../test.h:creating 'test_paths.cpp##test.h.gcov'
+
index 376ee5b..faf3d8a 100644 (file)
@@ -1,8 +1,8 @@
-File 'srcdir/./nested_dir/../test.h'
-Lines executed:100.00% of 1
-srcdir/./nested_dir/../test.h:creating 'srcdir#^#test_paths.cpp##srcdir#nested_dir#^#test.h.gcov'
-
 File 'srcdir/./nested_dir/../test.cpp'
 Lines executed:84.21% of 38
 srcdir/./nested_dir/../test.cpp:creating 'srcdir#^#test_paths.cpp##srcdir#nested_dir#^#test.cpp.gcov'
 
+File 'srcdir/./nested_dir/../test.h'
+Lines executed:100.00% of 1
+srcdir/./nested_dir/../test.h:creating 'srcdir#^#test_paths.cpp##srcdir#nested_dir#^#test.h.gcov'
+
index ada0c36..a3e32dd 100644 (file)
@@ -1,8 +1,8 @@
-File 'srcdir/./nested_dir/../test.h'
-Lines executed:100.00% of 1
-srcdir/./nested_dir/../test.h:creating 'test.h.gcov'
-
 File 'srcdir/./nested_dir/../test.cpp'
 Lines executed:84.21% of 38
 srcdir/./nested_dir/../test.cpp:creating 'test.cpp.gcov'
 
+File 'srcdir/./nested_dir/../test.h'
+Lines executed:100.00% of 1
+srcdir/./nested_dir/../test.h:creating 'test.h.gcov'
+
index e994be7..46efaca 100644 (file)
@@ -1,8 +1,8 @@
-File 'test.cpp'
-Lines executed:0.00% of 38
-test.cpp:creating 'test.cpp.gcov'
-
 File './test.h'
 Lines executed:0.00% of 1
 ./test.h:creating 'test.h.gcov'
 
+File 'test.cpp'
+Lines executed:0.00% of 38
+test.cpp:creating 'test.cpp.gcov'
+
index 8be8c1c..dd76811 100644 (file)
@@ -1,8 +1,8 @@
-File 'test.cpp'
-Lines executed:84.21% of 38
-test.cpp:creating 'test.cpp.gcov'
-
 File './test.h'
 Lines executed:100.00% of 1
 ./test.h:creating 'test.h.gcov'
 
+File 'test.cpp'
+Lines executed:84.21% of 38
+test.cpp:creating 'test.cpp.gcov'
+
index 74286b9..b41e20e 100644 (file)
@@ -1,6 +1,6 @@
-File 'test.cpp'
-Lines executed:84.21% of 38
-
 File './test.h'
 Lines executed:100.00% of 1
 
+File 'test.cpp'
+Lines executed:84.21% of 38
+
index ada0c36..a3e32dd 100644 (file)
@@ -1,8 +1,8 @@
-File 'srcdir/./nested_dir/../test.h'
-Lines executed:100.00% of 1
-srcdir/./nested_dir/../test.h:creating 'test.h.gcov'
-
 File 'srcdir/./nested_dir/../test.cpp'
 Lines executed:84.21% of 38
 srcdir/./nested_dir/../test.cpp:creating 'test.cpp.gcov'
 
+File 'srcdir/./nested_dir/../test.h'
+Lines executed:100.00% of 1
+srcdir/./nested_dir/../test.h:creating 'test.h.gcov'
+
index 5331972..0164f2d 100644 (file)
@@ -1,8 +1,8 @@
-File 'srcdir/./nested_dir/../test.h'
-Lines executed:100.00% of 1
-srcdir/./nested_dir/../test.h:creating 'srcdir#nested_dir#^#test.h.gcov'
-
 File 'srcdir/./nested_dir/../test.cpp'
 Lines executed:84.21% of 38
 srcdir/./nested_dir/../test.cpp:creating 'srcdir#nested_dir#^#test.cpp.gcov'
 
+File 'srcdir/./nested_dir/../test.h'
+Lines executed:100.00% of 1
+srcdir/./nested_dir/../test.h:creating 'srcdir#nested_dir#^#test.h.gcov'
+