]> granicus.if.org Git - clang/commitdiff
[Coverage] Remove '..' from filenames *after* getting an absolute path
authorVedant Kumar <vsk@apple.com>
Mon, 18 Jul 2016 22:32:02 +0000 (22:32 +0000)
committerVedant Kumar <vsk@apple.com>
Mon, 18 Jul 2016 22:32:02 +0000 (22:32 +0000)
Failure to do this breaks relative paths which begin with '..'.

This issue was caught by the (still nascent) coverage bot.

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

lib/CodeGen/CoverageMappingGen.cpp
test/CoverageMapping/abspath.cpp

index c5495de3b5660cbd532b85f541b58bdfa7e7f792..4debc7e95065470a34c34a70e4c7485b58f21718 100644 (file)
@@ -932,8 +932,8 @@ StringRef getCoverageSection(const CodeGenModule &CGM) {
 
 std::string normalizeFilename(StringRef Filename) {
   llvm::SmallString<256> Path(Filename);
-  llvm::sys::path::remove_dots(Path, /*remove_dot_dots=*/true);
   llvm::sys::fs::make_absolute(Path);
+  llvm::sys::path::remove_dots(Path, /*remove_dot_dots=*/true);
   return Path.str().str();
 }
 
index ffc3896c4135be837a9c5a6b931f14f6822ff6af..dfdf10f4259adaf377da9c6110dd80ab231d8472 100644 (file)
@@ -1,7 +1,18 @@
-// RUN: %clang_cc1 -fprofile-instrument=clang -fcoverage-mapping -emit-llvm -main-file-name abspath.cpp %S/Inputs/../abspath.cpp -o - | FileCheck %s
+// This test requires mkdir.
+// REQUIRES: shell
+//
+// RUN: %clang_cc1 -fprofile-instrument=clang -fcoverage-mapping -emit-llvm -main-file-name abspath.cpp %S/Inputs/../abspath.cpp -o - | FileCheck -check-prefix=RMDOTS %s
 
-// CHECK: @__llvm_coverage_mapping = {{.*}}"\01
-// CHECK-NOT: Inputs
-// CHECK: "
+// RMDOTS: @__llvm_coverage_mapping = {{.*}}"\01
+// RMDOTS-NOT: Inputs
+// RMDOTS: "
+
+// RUN: cd %T && mkdir -p test && cd test
+// RUN: echo "void f1() {}" > f1.c
+// RUN: %clang_cc1 -fprofile-instrument=clang -fcoverage-mapping -emit-llvm -main-file-name abspath.cpp ../test/f1.c -o - | FileCheck -check-prefix=RELPATH %s
+
+// RELPATH: @__llvm_coverage_mapping = {{.*}}"\01
+// RELPATH: test{{.*}}f1.c
+// RELPATH: "
 
 void f1() {}