From 4a3e3b733fb33d1884738cb496b112cb54286022 Mon Sep 17 00:00:00 2001 From: Justin Bogner Date: Fri, 12 Dec 2014 23:12:27 +0000 Subject: [PATCH] Frontend: Canonicalize to native paths when dumping module dependencies Mixed path separators (ie, both / and \\) can mess up the sort order of the VFS map when dumping module dependencies, as was recently exposed by r224055 and papered over in r224145. Instead, we should simply use native paths for consistency. This also adds a TODO to add handling of .. in paths. There was some code for this before r224055, but it was untested and probably broken. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@224164 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Frontend/ModuleDependencyCollector.cpp | 4 ++++ test/Modules/dependency-dump.m | 10 +++++----- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/lib/Frontend/ModuleDependencyCollector.cpp b/lib/Frontend/ModuleDependencyCollector.cpp index 1ac7e36eff..8e2ee55bca 100644 --- a/lib/Frontend/ModuleDependencyCollector.cpp +++ b/lib/Frontend/ModuleDependencyCollector.cpp @@ -63,6 +63,10 @@ std::error_code ModuleDependencyListener::copyToRoot(StringRef Src) { // We need an absolute path to append to the root. SmallString<256> AbsoluteSrc = Src; fs::make_absolute(AbsoluteSrc); + // Canonicalize to a native path to avoid mixed separator styles. + path::native(AbsoluteSrc); + // TODO: We probably need to handle .. as well as . in order to have valid + // input to the YAMLVFSWriter. FileManager::removeDotPaths(AbsoluteSrc); // Build the destination path. diff --git a/test/Modules/dependency-dump.m b/test/Modules/dependency-dump.m index e3d8b37964..630af4950c 100644 --- a/test/Modules/dependency-dump.m +++ b/test/Modules/dependency-dump.m @@ -6,10 +6,10 @@ // expected-no-diagnostics // RUN: FileCheck %s -check-prefix=VFS -input-file %t/vfs/vfs.yaml -// VFS-DAG: 'name': "SubFramework.h" -// VFS-DAG: 'name': "Treasure.h" -// VFS-DAG: 'name': "Module.h" -// VFS-DAG: 'name': "Sub.h" -// VFS-DAG: 'name': "Sub2.h" +// VFS: 'name': "SubFramework.h" +// VFS: 'name': "Treasure.h" +// VFS: 'name': "Module.h" +// VFS: 'name': "Sub.h" +// VFS: 'name': "Sub2.h" @import Module; -- 2.40.0