forked from OSchip/llvm-project
[Tooling] Added a VFS parameter to ClangTool
Summary: The parameter overrides the underlying vfs used by ClangTool for filesystem operations. Patch by Vladimir Plyashkun. Reviewers: alexfh, ilya-biryukov Reviewed By: ilya-biryukov Subscribers: klimek, cfe-commits Differential Revision: https://reviews.llvm.org/D41947 llvm-svn: 323195
This commit is contained in:
parent
78fdc9007d
commit
5da21edb35
|
@ -296,10 +296,14 @@ class ClangTool {
|
|||
/// not found in Compilations, it is skipped.
|
||||
/// \param PCHContainerOps The PCHContainerOperations for loading and creating
|
||||
/// clang modules.
|
||||
/// \param BaseFS VFS used for all underlying file accesses when running the
|
||||
/// tool.
|
||||
ClangTool(const CompilationDatabase &Compilations,
|
||||
ArrayRef<std::string> SourcePaths,
|
||||
std::shared_ptr<PCHContainerOperations> PCHContainerOps =
|
||||
std::make_shared<PCHContainerOperations>());
|
||||
std::make_shared<PCHContainerOperations>(),
|
||||
IntrusiveRefCntPtr<vfs::FileSystem> BaseFS =
|
||||
vfs::getRealFileSystem());
|
||||
|
||||
~ClangTool();
|
||||
|
||||
|
|
|
@ -328,10 +328,11 @@ bool FrontendActionFactory::runInvocation(
|
|||
|
||||
ClangTool::ClangTool(const CompilationDatabase &Compilations,
|
||||
ArrayRef<std::string> SourcePaths,
|
||||
std::shared_ptr<PCHContainerOperations> PCHContainerOps)
|
||||
std::shared_ptr<PCHContainerOperations> PCHContainerOps,
|
||||
IntrusiveRefCntPtr<vfs::FileSystem> BaseFS)
|
||||
: Compilations(Compilations), SourcePaths(SourcePaths),
|
||||
PCHContainerOps(std::move(PCHContainerOps)),
|
||||
OverlayFileSystem(new vfs::OverlayFileSystem(vfs::getRealFileSystem())),
|
||||
OverlayFileSystem(new vfs::OverlayFileSystem(BaseFS)),
|
||||
InMemoryFileSystem(new vfs::InMemoryFileSystem),
|
||||
Files(new FileManager(FileSystemOptions(), OverlayFileSystem)),
|
||||
DiagConsumer(nullptr) {
|
||||
|
|
|
@ -402,6 +402,24 @@ TEST(ClangToolTest, ArgumentAdjusters) {
|
|||
EXPECT_FALSE(Found);
|
||||
}
|
||||
|
||||
TEST(ClangToolTest, BaseVirtualFileSystemUsage) {
|
||||
FixedCompilationDatabase Compilations("/", std::vector<std::string>());
|
||||
llvm::IntrusiveRefCntPtr<vfs::OverlayFileSystem> OverlayFileSystem(
|
||||
new vfs::OverlayFileSystem(vfs::getRealFileSystem()));
|
||||
llvm::IntrusiveRefCntPtr<vfs::InMemoryFileSystem> InMemoryFileSystem(
|
||||
new vfs::InMemoryFileSystem);
|
||||
OverlayFileSystem->pushOverlay(InMemoryFileSystem);
|
||||
|
||||
InMemoryFileSystem->addFile(
|
||||
"a.cpp", 0, llvm::MemoryBuffer::getMemBuffer("int main() {}"));
|
||||
|
||||
ClangTool Tool(Compilations, std::vector<std::string>(1, "a.cpp"),
|
||||
std::make_shared<PCHContainerOperations>(), OverlayFileSystem);
|
||||
std::unique_ptr<FrontendActionFactory> Action(
|
||||
newFrontendActionFactory<SyntaxOnlyAction>());
|
||||
EXPECT_EQ(0, Tool.run(Action.get()));
|
||||
}
|
||||
|
||||
// Check getClangStripDependencyFileAdjuster doesn't strip args after -MD/-MMD.
|
||||
TEST(ClangToolTest, StripDependencyFileAdjuster) {
|
||||
FixedCompilationDatabase Compilations("/", {"-MD", "-c", "-MMD", "-w"});
|
||||
|
|
Loading…
Reference in New Issue