[PATCH] D117830: [HeaderSearch] Track framework name in LookupFile
David Goldman via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Fri Feb 4 10:33:25 PST 2022
This revision was automatically updated to reflect the committed changes.
dgoldman marked an inline comment as done.
Closed by commit rG9385ece95a4a: [HeaderSearch] Track framework name in LookupFile (authored by dgoldman).
Changed prior to commit:
https://reviews.llvm.org/D117830?vs=403340&id=406035#toc
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D117830/new/
https://reviews.llvm.org/D117830
Files:
clang/lib/Lex/HeaderSearch.cpp
clang/unittests/Lex/HeaderSearchTest.cpp
Index: clang/unittests/Lex/HeaderSearchTest.cpp
===================================================================
--- clang/unittests/Lex/HeaderSearchTest.cpp
+++ clang/unittests/Lex/HeaderSearchTest.cpp
@@ -186,6 +186,29 @@
"Sub/Sub.h");
}
+TEST_F(HeaderSearchTest, HeaderFrameworkLookup) {
+ std::string HeaderPath = "/tmp/Frameworks/Foo.framework/Headers/Foo.h";
+ addSystemFrameworkSearchDir("/tmp/Frameworks");
+ VFS->addFile(
+ HeaderPath, 0, llvm::MemoryBuffer::getMemBufferCopy("", HeaderPath),
+ /*User=*/None, /*Group=*/None, llvm::sys::fs::file_type::regular_file);
+
+ bool IsFrameworkFound = false;
+ auto FoundFile = Search.LookupFile(
+ "Foo/Foo.h", SourceLocation(), /*isAngled=*/true, /*FromDir=*/nullptr,
+ /*CurDir=*/nullptr, /*Includers=*/{}, /*SearchPath=*/nullptr,
+ /*RelativePath=*/nullptr, /*RequestingModule=*/nullptr,
+ /*SuggestedModule=*/nullptr, /*IsMapped=*/nullptr, &IsFrameworkFound);
+
+ EXPECT_TRUE(FoundFile.hasValue());
+ EXPECT_TRUE(IsFrameworkFound);
+ auto &FE = FoundFile.getValue();
+ auto FI = Search.getExistingFileInfo(FE);
+ EXPECT_TRUE(FI);
+ EXPECT_TRUE(FI->IsValid);
+ EXPECT_EQ(FI->Framework.str(), "Foo");
+}
+
// Helper struct with null terminator character to make MemoryBuffer happy.
template <class FileTy, class PaddingTy>
struct NullTerminatedFile : public FileTy {
Index: clang/lib/Lex/HeaderSearch.cpp
===================================================================
--- clang/lib/Lex/HeaderSearch.cpp
+++ clang/lib/Lex/HeaderSearch.cpp
@@ -1037,8 +1037,9 @@
}
}
- // If this file is found in a header map and uses the framework style of
- // includes, then this header is part of a framework we're building.
+ // Set the `Framework` info if this file is in a header map with framework
+ // style include spelling or found in a framework dir. The header map case
+ // is possible when building frameworks which use header maps.
if (CurDir->isHeaderMap() && isAngled) {
size_t SlashPos = Filename.find('/');
if (SlashPos != StringRef::npos)
@@ -1046,6 +1047,11 @@
getUniqueFrameworkName(StringRef(Filename.begin(), SlashPos));
if (CurDir->isIndexHeaderMap())
HFI.IndexHeaderMapHeader = 1;
+ } else if (CurDir->isFramework()) {
+ size_t SlashPos = Filename.find('/');
+ if (SlashPos != StringRef::npos)
+ HFI.Framework =
+ getUniqueFrameworkName(StringRef(Filename.begin(), SlashPos));
}
if (checkMSVCHeaderSearch(Diags, MSFE ? &MSFE->getFileEntry() : nullptr,
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D117830.406035.patch
Type: text/x-patch
Size: 2604 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20220204/3433fa22/attachment-0001.bin>
More information about the cfe-commits
mailing list