forked from OSchip/llvm-project
Add an optional ToolName argument to runToolOnCodeWithArgs/buildASTFromCodeWithArgs.
This can be used as a way to modify argv[0] for a clang tool. Differential Revision: http://reviews.llvm.org/D16718 llvm-svn: 259187
This commit is contained in:
parent
2c9b7bd326
commit
987a1d21e7
|
@ -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>());
|
||||
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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) {
|
||||
|
|
Loading…
Reference in New Issue