]> granicus.if.org Git - clang/commitdiff
Fix handling of -fmodule-map-file=X where X has no directory component.
authorRichard Smith <richard-llvm@metafoo.co.uk>
Thu, 9 Mar 2017 00:58:22 +0000 (00:58 +0000)
committerRichard Smith <richard-llvm@metafoo.co.uk>
Thu, 9 Mar 2017 00:58:22 +0000 (00:58 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@297349 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Lex/HeaderSearch.cpp
test/Modules/module_map_cwd.c [new file with mode: 0644]

index c667f4bf22070ab4339991284091c0eda9044fcf..4ee38719289bcb61c6c303341c3d4d0aa1e16c97 100644 (file)
@@ -172,8 +172,10 @@ std::string HeaderSearch::getModuleFileName(StringRef ModuleName,
     //
     // To avoid false-negatives, we form as canonical a path as we can, and map
     // to lower-case in case we're on a case-insensitive file system.
-   auto *Dir =
-        FileMgr.getDirectory(llvm::sys::path::parent_path(ModuleMapPath));
+    std::string Parent = llvm::sys::path::parent_path(ModuleMapPath);
+    if (Parent.empty())
+      Parent = ".";
+    auto *Dir = FileMgr.getDirectory(Parent);
     if (!Dir)
       return std::string();
     auto DirName = FileMgr.getCanonicalName(Dir);
diff --git a/test/Modules/module_map_cwd.c b/test/Modules/module_map_cwd.c
new file mode 100644 (file)
index 0000000..d76734a
--- /dev/null
@@ -0,0 +1,9 @@
+// RUN: rm -rf %t
+// RUN: mkdir %t
+// RUN: echo 'module X { header "x.h" }' > %t/map
+// RUN: echo 'extern int n;' > %t/x.h
+// RUN: cd %t
+// RUN: %clang_cc1 %s -fmodules -fmodule-map-file=map -fmodules-cache-path=. -verify -I.
+// expected-no-diagnostics
+#include "x.h"
+int *m = &n;