[PATCH] D107921: [Modules] Fix bug where header resolution in modules doesn't work when compiling with relative paths.

Amy Huang via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Wed Aug 11 11:24:18 PDT 2021


akhuang created this revision.
akhuang requested review of this revision.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.

Currently when searching for header files (with relative paths) we concatenate
the path to the module map with the header filename. However when
searching for system headers it seems like we should start from the
current directory and not the path to the module map.

No test added because I'm not sure there's a way to use relative paths
to system headers in the lit tests.

Bug: https://bugs.llvm.org/show_bug.cgi?id=47209


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D107921

Files:
  clang/lib/Lex/HeaderSearch.cpp


Index: clang/lib/Lex/HeaderSearch.cpp
===================================================================
--- clang/lib/Lex/HeaderSearch.cpp
+++ clang/lib/Lex/HeaderSearch.cpp
@@ -819,9 +819,19 @@
       bool IncluderIsSystemHeader =
           Includer ? getFileInfo(Includer).DirInfo != SrcMgr::C_User :
           BuildSystemModule;
-      if (Optional<FileEntryRef> FE = getFileAndSuggestModule(
-              TmpDir, IncludeLoc, IncluderAndDir.second, IncluderIsSystemHeader,
-              RequestingModule, SuggestedModule)) {
+
+      Optional<FileEntryRef> FE = getFileAndSuggestModule(
+          TmpDir, IncludeLoc, IncluderAndDir.second, IncluderIsSystemHeader,
+          RequestingModule, SuggestedModule);
+
+      // If this is a system header, we should also search from the current
+      // working directory and not the directory of the module map.
+      if (!FE && IncluderIsSystemHeader)
+        FE = getFileAndSuggestModule(
+            Filename, IncludeLoc, IncluderAndDir.second, IncluderIsSystemHeader,
+            RequestingModule, SuggestedModule);
+
+      if (FE) {
         if (!Includer) {
           assert(First && "only first includer can have no file");
           return FE;


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D107921.365809.patch
Type: text/x-patch
Size: 1217 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20210811/58ef5b44/attachment.bin>


More information about the cfe-commits mailing list