Index: llvm/lib/Support/VirtualFileSystem.cpp =================================================================== --- llvm/lib/Support/VirtualFileSystem.cpp +++ llvm/lib/Support/VirtualFileSystem.cpp @@ -2027,10 +2027,10 @@ if (!Entries.empty()) { const YAMLVFSEntry &Entry = Entries.front(); - bool first_entry_is_directory = Entry.IsDirectory; - StringRef Dir = - first_entry_is_directory ? Entry.VPath : path::parent_path(Entry.VPath); - startDirectory(Dir); + + startDirectory( + Entry.IsDirectory ? Entry.VPath : path::parent_path(Entry.VPath) + ); StringRef RPath = Entry.RPath; if (UseOverlayRelative) { @@ -2040,16 +2040,18 @@ RPath = RPath.slice(OverlayDirLen, RPath.size()); } - if (!first_entry_is_directory) + bool IsCurrentDirEmpty = true; + if (!Entry.IsDirectory) { writeEntry(path::filename(Entry.VPath), RPath); + IsCurrentDirEmpty = false; + } for (const auto &Entry : Entries.slice(1)) { StringRef Dir = Entry.IsDirectory ? Entry.VPath : path::parent_path(Entry.VPath); if (Dir == DirStack.back()) { - if (!first_entry_is_directory) { + if (!IsCurrentDirEmpty) { OS << ",\n"; - first_entry_is_directory = false; } } else { while (!DirStack.empty() && !containedIn(DirStack.back(), Dir)) { @@ -2058,6 +2060,7 @@ } OS << ",\n"; startDirectory(Dir); + IsCurrentDirEmpty = true; } StringRef RPath = Entry.RPath; if (UseOverlayRelative) { @@ -2066,8 +2069,10 @@ "Overlay dir must be contained in RPath"); RPath = RPath.slice(OverlayDirLen, RPath.size()); } - if (!Entry.IsDirectory) + if (!Entry.IsDirectory) { writeEntry(path::filename(Entry.VPath), RPath); + IsCurrentDirEmpty = false; + } } while (!DirStack.empty()) {