From ee30546c007d26d9c0c6f15b0e291a8bb0e651f9 Mon Sep 17 00:00:00 2001 From: Rafael Espindola Date: Mon, 29 Jul 2013 15:47:24 +0000 Subject: Fix handling of "clang c:foo" On windows, c:foo is a valid file path, but stat fails on just "c:". This causes a problem for clang since its file manager wants to cache data about the parent directory. There are refactorings to be done in here, but this gives clang the correct behavior and testing first. Patch by Yunzhong Gao! llvm-svn: 187359 --- clang/unittests/Basic/FileManagerTest.cpp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'clang/unittests/Basic/FileManagerTest.cpp') diff --git a/clang/unittests/Basic/FileManagerTest.cpp b/clang/unittests/Basic/FileManagerTest.cpp index a55fcbf76cf..d86c96f5a2c 100644 --- a/clang/unittests/Basic/FileManagerTest.cpp +++ b/clang/unittests/Basic/FileManagerTest.cpp @@ -125,6 +125,14 @@ TEST_F(FileManagerTest, getFileReturnsValidFileEntryForExistingRealFile) { FakeStatCache *statCache = new FakeStatCache; statCache->InjectDirectory("/tmp", 42); statCache->InjectFile("/tmp/test", 43); + +#ifdef _WIN32 + const char *DirName = "C:."; + const char *FileName = "C:test"; + statCache->InjectDirectory(DirName, 44); + statCache->InjectFile(FileName, 45); +#endif + manager.addStatCache(statCache); const FileEntry *file = manager.getFile("/tmp/test"); @@ -134,6 +142,15 @@ TEST_F(FileManagerTest, getFileReturnsValidFileEntryForExistingRealFile) { const DirectoryEntry *dir = file->getDir(); ASSERT_TRUE(dir != NULL); EXPECT_STREQ("/tmp", dir->getName()); + +#ifdef _WIN32 + file = manager.getFile(FileName); + ASSERT_TRUE(file != NULL); + + dir = file->getDir(); + ASSERT_TRUE(dir != NULL); + EXPECT_STREQ(DirName, dir->getName()); +#endif } // getFile() returns non-NULL if a virtual file exists at the given path. -- cgit v1.2.3