From: Alex Lorenz <arphaman@gmail.com>
Date: Thu, 12 Sep 2019 18:03:24 +0000 (+0000)
Subject: [clang-scan-deps] remove dots and dots dots from the reported file dependency paths
X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=02fd9963406199172d2545389edbecc440982dc7;p=clang

[clang-scan-deps] remove dots and dots dots from the reported file dependency paths

This resolves differences observed on LLVM + Clang when running the comparison between canonical
dependencies (full preprocessing, no file manager reused), and dependencies obtained
when the file manager was reused between the full preprocessing invocations.

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

diff --git a/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp b/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp
index f6096078d1..f382c202f8 100644
--- a/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp
+++ b/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp
@@ -30,8 +30,12 @@ public:
       : DependencyFileGenerator(*Opts), Opts(std::move(Opts)), C(C) {}
 
   void finishedMainFile(DiagnosticsEngine &Diags) override {
-    for (const auto &File : getDependencies())
-      C.handleFileDependency(*Opts, File);
+    llvm::SmallString<256> CanonPath;
+    for (const auto &File : getDependencies()) {
+      CanonPath = File;
+      llvm::sys::path::remove_dots(CanonPath, /*remove_dot_dot=*/true);
+      C.handleFileDependency(*Opts, CanonPath);
+    }
   }
 
 private:
diff --git a/test/ClangScanDeps/Inputs/subframework_header_dir_symlink_cdb.json b/test/ClangScanDeps/Inputs/subframework_header_dir_symlink_cdb.json
index e458b5ca78..82c6b7c1cb 100644
--- a/test/ClangScanDeps/Inputs/subframework_header_dir_symlink_cdb.json
+++ b/test/ClangScanDeps/Inputs/subframework_header_dir_symlink_cdb.json
@@ -6,7 +6,7 @@
 },
 {
   "directory": "DIR",
-  "command": "clang -E DIR/subframework_header_dir_symlink_input2.m -FInputs/frameworks -iframework Inputs/frameworks_symlink",
+  "command": "clang -E DIR/subframework_header_dir_symlink_input2.m -FInputs/frameworks -iframework Inputs/frameworks_symlink/../frameworks_symlink",
   "file": "DIR/subframework_header_dir_symlink_input2.m"
 }
 ]