diff --git a/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp b/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp index ae4d1e9741441..193fdaeeb5e4c 100644 --- a/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp +++ b/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp @@ -19,6 +19,7 @@ #include "llvm/ADT/StringRef.h" #include "llvm/Support/CommandLine.h" #include "llvm/Support/FormatVariadic.h" +#include "llvm/Support/MemoryBuffer.h" #include "llvm/Support/Regex.h" #include "llvm/Support/Signals.h" #include "llvm/Support/raw_ostream.h" @@ -270,12 +271,24 @@ int main(int argc, const char **argv) { } } } + + clang::tooling::ClangTool Tool(OptionsParser->getCompilations(), + OptionsParser->getSourcePathList()); + std::vector> Buffers; + for (const auto &File : OptionsParser->getSourcePathList()) { + auto Content = llvm::MemoryBuffer::getFile(File); + if (!Content) { + llvm::errs() << "Error: can't read file '" << File + << "': " << Content.getError().message() << "\n"; + return 1; + } + Buffers.push_back(std::move(Content.get())); + Tool.mapVirtualFile(File, Buffers.back()->getBuffer()); + } + auto HeaderFilter = headerFilter(); if (!HeaderFilter) return 1; // error already reported. ActionFactory Factory(HeaderFilter); - return clang::tooling::ClangTool(OptionsParser->getCompilations(), - OptionsParser->getSourcePathList()) - .run(&Factory) || - Errors != 0; + return Tool.run(&Factory) || Errors != 0; }