From 57a014d31fb2e731867623d355e98801596814f8 Mon Sep 17 00:00:00 2001 From: Alex Lorenz Date: Thu, 12 Sep 2019 18:03:24 +0000 Subject: [PATCH] [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. llvm-svn: 371751 --- .../DependencyScanning/DependencyScanningWorker.cpp | 8 ++++++-- .../Inputs/subframework_header_dir_symlink_cdb.json | 2 +- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/clang/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp b/clang/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp index f6096078d153..f382c202f8c2 100644 --- a/clang/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp +++ b/clang/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/clang/test/ClangScanDeps/Inputs/subframework_header_dir_symlink_cdb.json b/clang/test/ClangScanDeps/Inputs/subframework_header_dir_symlink_cdb.json index e458b5ca789f..82c6b7c1cb57 100644 --- a/clang/test/ClangScanDeps/Inputs/subframework_header_dir_symlink_cdb.json +++ b/clang/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" } ]