diff options
-rw-r--r-- | clang/include/clang/Tooling/Tooling.h | 7 | ||||
-rw-r--r-- | clang/lib/Tooling/Tooling.cpp | 18 | ||||
-rw-r--r-- | clang/unittests/ASTMatchers/ASTMatchersTest.h | 6 |
3 files changed, 19 insertions, 12 deletions
diff --git a/clang/include/clang/Tooling/Tooling.h b/clang/include/clang/Tooling/Tooling.h index b7a9b25acd0..ca232f40983 100644 --- a/clang/include/clang/Tooling/Tooling.h +++ b/clang/include/clang/Tooling/Tooling.h @@ -163,6 +163,8 @@ typedef std::vector<std::pair<std::string, std::string>> FileContentMappings; /// \param Code C++ code. /// \param Args Additional flags to pass on. /// \param FileName The file name which 'Code' will be mapped as. +/// \param ToolName The name of the binary running the tool. Standard library +/// header paths will be resolved relative to this. /// \param PCHContainerOps The PCHContainerOperations for loading and creating /// clang modules. /// @@ -170,6 +172,7 @@ typedef std::vector<std::pair<std::string, std::string>> FileContentMappings; bool runToolOnCodeWithArgs( clang::FrontendAction *ToolAction, const Twine &Code, const std::vector<std::string> &Args, const Twine &FileName = "input.cc", + const Twine &ToolName = "clang-tool", std::shared_ptr<PCHContainerOperations> PCHContainerOps = std::make_shared<PCHContainerOperations>(), const FileContentMappings &VirtualMappedFiles = FileContentMappings()); @@ -192,13 +195,15 @@ buildASTFromCode(const Twine &Code, const Twine &FileName = "input.cc", /// \param Code C++ code. /// \param Args Additional flags to pass on. /// \param FileName The file name which 'Code' will be mapped as. +/// \param ToolName The name of the binary running the tool. Standard library +/// header paths will be resolved relative to this. /// \param PCHContainerOps The PCHContainerOperations for loading and creating /// clang modules. /// /// \return The resulting AST or null if an error occurred. std::unique_ptr<ASTUnit> buildASTFromCodeWithArgs( const Twine &Code, const std::vector<std::string> &Args, - const Twine &FileName = "input.cc", + const Twine &FileName = "input.cc", const Twine &ToolName = "clang-tool", std::shared_ptr<PCHContainerOperations> PCHContainerOps = std::make_shared<PCHContainerOperations>()); diff --git a/clang/lib/Tooling/Tooling.cpp b/clang/lib/Tooling/Tooling.cpp index fd5596ec2de..f223fd0a6a9 100644 --- a/clang/lib/Tooling/Tooling.cpp +++ b/clang/lib/Tooling/Tooling.cpp @@ -103,14 +103,15 @@ bool runToolOnCode(clang::FrontendAction *ToolAction, const Twine &Code, const Twine &FileName, std::shared_ptr<PCHContainerOperations> PCHContainerOps) { return runToolOnCodeWithArgs(ToolAction, Code, std::vector<std::string>(), - FileName, PCHContainerOps); + FileName, "clang-tool", PCHContainerOps); } static std::vector<std::string> -getSyntaxOnlyToolArgs(const std::vector<std::string> &ExtraArgs, +getSyntaxOnlyToolArgs(const Twine &ToolName, + const std::vector<std::string> &ExtraArgs, StringRef FileName) { std::vector<std::string> Args; - Args.push_back("clang-tool"); + Args.push_back(ToolName.str()); Args.push_back("-fsyntax-only"); Args.insert(Args.end(), ExtraArgs.begin(), ExtraArgs.end()); Args.push_back(FileName.str()); @@ -120,6 +121,7 @@ getSyntaxOnlyToolArgs(const std::vector<std::string> &ExtraArgs, bool runToolOnCodeWithArgs( clang::FrontendAction *ToolAction, const Twine &Code, const std::vector<std::string> &Args, const Twine &FileName, + const Twine &ToolName, std::shared_ptr<PCHContainerOperations> PCHContainerOps, const FileContentMappings &VirtualMappedFiles) { @@ -132,7 +134,7 @@ bool runToolOnCodeWithArgs( OverlayFileSystem->pushOverlay(InMemoryFileSystem); llvm::IntrusiveRefCntPtr<FileManager> Files( new FileManager(FileSystemOptions(), OverlayFileSystem)); - ToolInvocation Invocation(getSyntaxOnlyToolArgs(Args, FileNameRef), + ToolInvocation Invocation(getSyntaxOnlyToolArgs(ToolName, Args, FileNameRef), ToolAction, Files.get(), PCHContainerOps); SmallString<1024> CodeStorage; @@ -470,12 +472,12 @@ std::unique_ptr<ASTUnit> buildASTFromCode(const Twine &Code, const Twine &FileName, std::shared_ptr<PCHContainerOperations> PCHContainerOps) { return buildASTFromCodeWithArgs(Code, std::vector<std::string>(), FileName, - PCHContainerOps); + "clang-tool", PCHContainerOps); } std::unique_ptr<ASTUnit> buildASTFromCodeWithArgs( const Twine &Code, const std::vector<std::string> &Args, - const Twine &FileName, + const Twine &FileName, const Twine &ToolName, std::shared_ptr<PCHContainerOperations> PCHContainerOps) { SmallString<16> FileNameStorage; StringRef FileNameRef = FileName.toNullTerminatedStringRef(FileNameStorage); @@ -489,8 +491,8 @@ std::unique_ptr<ASTUnit> buildASTFromCodeWithArgs( OverlayFileSystem->pushOverlay(InMemoryFileSystem); llvm::IntrusiveRefCntPtr<FileManager> Files( new FileManager(FileSystemOptions(), OverlayFileSystem)); - ToolInvocation Invocation(getSyntaxOnlyToolArgs(Args, FileNameRef), &Action, - Files.get(), PCHContainerOps); + ToolInvocation Invocation(getSyntaxOnlyToolArgs(ToolName, Args, FileNameRef), + &Action, Files.get(), PCHContainerOps); SmallString<1024> CodeStorage; InMemoryFileSystem->addFile(FileNameRef, 0, diff --git a/clang/unittests/ASTMatchers/ASTMatchersTest.h b/clang/unittests/ASTMatchers/ASTMatchersTest.h index 68824e61ac6..235e6fbde2d 100644 --- a/clang/unittests/ASTMatchers/ASTMatchersTest.h +++ b/clang/unittests/ASTMatchers/ASTMatchersTest.h @@ -79,9 +79,9 @@ testing::AssertionResult matchesConditionally( // Some tests need rtti/exceptions on Args.push_back("-frtti"); Args.push_back("-fexceptions"); - if (!runToolOnCodeWithArgs(Factory->create(), Code, Args, Filename, - std::make_shared<PCHContainerOperations>(), - VirtualMappedFiles)) { + if (!runToolOnCodeWithArgs( + Factory->create(), Code, Args, Filename, "clang-tool", + std::make_shared<PCHContainerOperations>(), VirtualMappedFiles)) { return testing::AssertionFailure() << "Parsing error in \"" << Code << "\""; } if (Found != DynamicFound) { |