akhuang updated this revision to Diff 366153.
akhuang added a comment.

add case for include_nexts; I don't entirely understand this part of the code 
so not sure if it's what we want, but it seems to make building with 
-no-canonical-prefixes happier


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D107921/new/

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,24 @@
       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) {
+        // If this was an #include_next "/file", fail.
+        if (!FromDir)
+          return None;
+
+        FE = getFileAndSuggestModule(
+            Filename, IncludeLoc, IncluderAndDir.second, 
IncluderIsSystemHeader,
+            RequestingModule, SuggestedModule);
+      }
+
+      if (FE) {
         if (!Includer) {
           assert(First && "only first includer can have no file");
           return FE;


Index: clang/lib/Lex/HeaderSearch.cpp
===================================================================
--- clang/lib/Lex/HeaderSearch.cpp
+++ clang/lib/Lex/HeaderSearch.cpp
@@ -819,9 +819,24 @@
       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) {
+        // If this was an #include_next "/file", fail.
+        if (!FromDir)
+          return None;
+
+        FE = getFileAndSuggestModule(
+            Filename, IncludeLoc, IncluderAndDir.second, IncluderIsSystemHeader,
+            RequestingModule, SuggestedModule);
+      }
+
+      if (FE) {
         if (!Includer) {
           assert(First && "only first includer can have no file");
           return FE;
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to