jansvoboda11 updated this revision to Diff 526830.
jansvoboda11 added a comment.
Herald added a subscriber: ributzka.
Fix the `Modules/filename.cpp` test
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D127663/new/
https://reviews.llvm.org/D127663
Files:
clang/include/clang/Lex/HeaderSearch.h
clang/lib/Frontend/FrontendAction.cpp
clang/lib/Lex/HeaderSearch.cpp
clang/lib/Lex/PPDirectives.cpp
clang/test/Modules/Inputs/filename/a.h
clang/test/Modules/Inputs/filename/module.map
clang/test/Modules/filename.cpp
Index: clang/test/Modules/filename.cpp
===================================================================
--- clang/test/Modules/filename.cpp
+++ clang/test/Modules/filename.cpp
@@ -1,8 +1,17 @@
-// RUN: cd %S
-// RUN: %clang_cc1 -I. -fmodule-name=A -fmodule-map-file=%S/Inputs/filename/module.map %s -E | FileCheck %s
+// RUN: rm -rf %t
+// RUN: split-file %s %t
-#include "Inputs/filename/a.h"
+//--- include/a.h
+const char *p = __FILE__;
+//--- include/module.modulemap
+module "A" { header "a.h" }
+//--- src/tu.cpp
+#include "a.h"
+
+// RUN: cd %t
+// RUN: %clang_cc1 -I ./include -fmodule-name=A -fmodule-map-file=%t/include/module.modulemap %t/src/tu.cpp -E | FileCheck %s
// Make sure that headers that are referenced by module maps have __FILE__
-// reflect the include path they were found with.
-// CHECK: const char *p = "./Inputs/filename/a.h"
+// reflect the include path they were found with. (We make sure they cannot be
+// found relative to the includer.)
+// CHECK: const char *p = "./include/a.h"
Index: clang/test/Modules/Inputs/filename/module.map
===================================================================
--- clang/test/Modules/Inputs/filename/module.map
+++ /dev/null
@@ -1,3 +0,0 @@
-module "A" {
- header "a.h"
-}
Index: clang/test/Modules/Inputs/filename/a.h
===================================================================
--- clang/test/Modules/Inputs/filename/a.h
+++ /dev/null
@@ -1 +0,0 @@
-const char *p = __FILE__;
Index: clang/lib/Lex/PPDirectives.cpp
===================================================================
--- clang/lib/Lex/PPDirectives.cpp
+++ clang/lib/Lex/PPDirectives.cpp
@@ -935,12 +935,11 @@
// If the header lookup mechanism may be relative to the current inclusion
// stack, record the parent #includes.
- SmallVector<std::pair<const FileEntry *, const DirectoryEntry *>, 16>
- Includers;
+ SmallVector<std::pair<const FileEntry *, DirectoryEntryRef>, 16> Includers;
bool BuildSystemModule = false;
if (!FromDir && !FromFile) {
FileID FID = getCurrentFileLexer()->getFileID();
- const FileEntry *FileEnt = SourceMgr.getFileEntryForID(FID);
+ OptionalFileEntryRef FileEnt = SourceMgr.getFileEntryRefForID(FID);
// If there is no file entry associated with this file, it must be the
// predefines buffer or the module includes buffer. Any other file is not
@@ -958,11 +957,13 @@
if (FID == SourceMgr.getMainFileID() && MainFileDir) {
Includers.push_back(std::make_pair(nullptr, *MainFileDir));
BuildSystemModule = getCurrentModule()->IsSystem;
- } else if ((FileEnt =
- SourceMgr.getFileEntryForID(SourceMgr.getMainFileID())))
- Includers.push_back(std::make_pair(FileEnt, *FileMgr.getDirectory(".")));
+ } else if ((FileEnt = SourceMgr.getFileEntryRefForID(
+ SourceMgr.getMainFileID()))) {
+ auto CWD = FileMgr.getOptionalDirectoryRef(".");
+ Includers.push_back(std::make_pair(*FileEnt, *CWD));
+ }
} else {
- Includers.push_back(std::make_pair(FileEnt, FileEnt->getDir()));
+ Includers.push_back(std::make_pair(*FileEnt, FileEnt->getDir()));
}
// MSVC searches the current include stack from top to bottom for
@@ -972,7 +973,7 @@
for (IncludeStackInfo &ISEntry : llvm::reverse(IncludeMacroStack)) {
if (IsFileLexer(ISEntry))
if ((FileEnt = ISEntry.ThePPLexer->getFileEntry()))
- Includers.push_back(std::make_pair(FileEnt, FileEnt->getDir()));
+ Includers.push_back(std::make_pair(*FileEnt, FileEnt->getDir()));
}
}
}
Index: clang/lib/Lex/HeaderSearch.cpp
===================================================================
--- clang/lib/Lex/HeaderSearch.cpp
+++ clang/lib/Lex/HeaderSearch.cpp
@@ -863,7 +863,7 @@
OptionalFileEntryRef HeaderSearch::LookupFile(
StringRef Filename, SourceLocation IncludeLoc, bool isAngled,
ConstSearchDirIterator FromDir, ConstSearchDirIterator *CurDirArg,
- ArrayRef<std::pair<const FileEntry *, const DirectoryEntry *>> Includers,
+ ArrayRef<std::pair<const FileEntry *, DirectoryEntryRef>> Includers,
SmallVectorImpl<char> *SearchPath, SmallVectorImpl<char> *RelativePath,
Module *RequestingModule, ModuleMap::KnownHeader *SuggestedModule,
bool *IsMapped, bool *IsFrameworkFound, bool SkipCache,
@@ -918,7 +918,7 @@
// Concatenate the requested file onto the directory.
// FIXME: Portability. Filename concatenation should be in sys::Path.
- TmpDir = IncluderAndDir.second->getName();
+ TmpDir = IncluderAndDir.second.getName();
TmpDir.push_back('/');
TmpDir.append(Filename.begin(), Filename.end());
@@ -957,7 +957,7 @@
ToHFI.Framework = Framework;
if (SearchPath) {
- StringRef SearchPathRef(IncluderAndDir.second->getName());
+ StringRef SearchPathRef(IncluderAndDir.second.getName());
SearchPath->clear();
SearchPath->append(SearchPathRef.begin(), SearchPathRef.end());
}
@@ -967,7 +967,7 @@
}
if (First) {
diagnoseFrameworkInclude(Diags, IncludeLoc,
- IncluderAndDir.second->getName(), Filename,
+ IncluderAndDir.second.getName(), Filename,
&FE->getFileEntry());
return FE;
}
@@ -1122,7 +1122,7 @@
bool FoundByHeaderMap = !IsMapped ? false : *IsMapped;
if (!Includers.empty())
diagnoseFrameworkInclude(
- Diags, IncludeLoc, Includers.front().second->getName(), Filename,
+ Diags, IncludeLoc, Includers.front().second.getName(), Filename,
&File->getFileEntry(), isAngled, FoundByHeaderMap);
// Remember this location for the next lookup we do.
Index: clang/lib/Frontend/FrontendAction.cpp
===================================================================
--- clang/lib/Frontend/FrontendAction.cpp
+++ clang/lib/Frontend/FrontendAction.cpp
@@ -823,11 +823,9 @@
"trying to build a header unit without a Pre-processor?");
HeaderSearch &HS = CI.getPreprocessor().getHeaderSearchInfo();
// Relative searches begin from CWD.
- const DirectoryEntry *Dir = nullptr;
- if (auto DirOrErr = CI.getFileManager().getDirectory("."))
- Dir = *DirOrErr;
- SmallVector<std::pair<const FileEntry *, const DirectoryEntry *>, 1> CWD;
- CWD.push_back({nullptr, Dir});
+ auto Dir = CI.getFileManager().getOptionalDirectoryRef(".");
+ SmallVector<std::pair<const FileEntry *, DirectoryEntryRef>, 1> CWD;
+ CWD.push_back({nullptr, *Dir});
OptionalFileEntryRef FE =
HS.LookupFile(FileName, SourceLocation(),
/*Angled*/ Input.getKind().getHeaderUnitKind() ==
Index: clang/include/clang/Lex/HeaderSearch.h
===================================================================
--- clang/include/clang/Lex/HeaderSearch.h
+++ clang/include/clang/Lex/HeaderSearch.h
@@ -482,7 +482,7 @@
OptionalFileEntryRef LookupFile(
StringRef Filename, SourceLocation IncludeLoc, bool isAngled,
ConstSearchDirIterator FromDir, ConstSearchDirIterator *CurDir,
- ArrayRef<std::pair<const FileEntry *, const DirectoryEntry *>> Includers,
+ ArrayRef<std::pair<const FileEntry *, DirectoryEntryRef>> Includers,
SmallVectorImpl<char> *SearchPath, SmallVectorImpl<char> *RelativePath,
Module *RequestingModule, ModuleMap::KnownHeader *SuggestedModule,
bool *IsMapped, bool *IsFrameworkFound, bool SkipCache = false,
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits