summaryrefslogtreecommitdiffstats
path: root/tools/index-test/index-test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/index-test/index-test.cpp')
-rw-r--r--tools/index-test/index-test.cpp46
1 files changed, 21 insertions, 25 deletions
diff --git a/tools/index-test/index-test.cpp b/tools/index-test/index-test.cpp
index dd7cbb2..ff9fd54 100644
--- a/tools/index-test/index-test.cpp
+++ b/tools/index-test/index-test.cpp
@@ -208,20 +208,26 @@ static void ProcessASTLocation(ASTLocation ASTLoc, Indexer &Idxer) {
static llvm::cl::opt<bool>
ASTFromSource("ast-from-source",
- llvm::cl::desc("Treat the inputs as source files to parse."));
+ llvm::cl::desc("Treat the inputs as source files to parse"));
+
+static llvm::cl::list<std::string>
+CompilerArgs("arg", llvm::cl::desc("Extra arguments to use during parsing"));
static llvm::cl::list<std::string>
InputFilenames(llvm::cl::Positional, llvm::cl::desc("<input AST files>"));
-void CreateCompilerInvocation(const std::string &Filename,
- CompilerInvocation &CI, Diagnostic &Diags,
- const char *argv0) {
+ASTUnit *CreateFromSource(const std::string &Filename, Diagnostic &Diags,
+ const char *Argv0) {
llvm::SmallVector<const char *, 16> Args;
Args.push_back(Filename.c_str());
-
- void *MainAddr = (void*) (intptr_t) CreateCompilerInvocation;
- CompilerInvocation::CreateFromArgs(CI, Args.data(), Args.data() + Args.size(),
- argv0, MainAddr, Diags);
+ for (unsigned i = 0, e = CompilerArgs.size(); i != e; ++i)
+ Args.push_back(CompilerArgs[i].c_str());
+
+ void *MainAddr = (void*) (intptr_t) CreateFromSource;
+ std::string ResourceDir =
+ CompilerInvocation::GetResourcesPath(Argv0, MainAddr);
+ return ASTUnit::LoadFromCommandLine(Args.data(), Args.data() + Args.size(),
+ Diags, ResourceDir);
}
int main(int argc, char **argv) {
@@ -234,9 +240,9 @@ int main(int argc, char **argv) {
Indexer Idxer(Prog);
llvm::SmallVector<TUnit*, 4> TUnits;
- TextDiagnosticPrinter DiagClient(llvm::errs(), DiagnosticOptions(), false);
+ DiagnosticOptions DiagOpts;
llvm::OwningPtr<Diagnostic> Diags(
- CompilerInstance::createDiagnostics(DiagnosticOptions(), argc, argv));
+ CompilerInstance::createDiagnostics(DiagOpts, argc, argv));
// If no input was specified, read from stdin.
if (InputFilenames.empty())
@@ -244,23 +250,13 @@ int main(int argc, char **argv) {
for (unsigned i = 0, e = InputFilenames.size(); i != e; ++i) {
const std::string &InFile = InputFilenames[i];
-
- std::string ErrMsg;
llvm::OwningPtr<ASTUnit> AST;
-
- if (ASTFromSource) {
- CompilerInvocation CI;
- CreateCompilerInvocation(InFile, CI, *Diags, argv[0]);
- AST.reset(ASTUnit::LoadFromCompilerInvocation(CI, *Diags));
- if (!AST)
- ErrMsg = "unable to create AST";
- } else
- AST.reset(ASTUnit::LoadFromPCHFile(InFile, &ErrMsg));
-
- if (!AST) {
- llvm::errs() << "[" << InFile << "] Error: " << ErrMsg << '\n';
+ if (ASTFromSource)
+ AST.reset(CreateFromSource(InFile, *Diags, argv[0]));
+ else
+ AST.reset(ASTUnit::LoadFromPCHFile(InFile, *Diags));
+ if (!AST)
return 1;
- }
TUnit *TU = new TUnit(AST.take(), InFile);
TUnits.push_back(TU);
OpenPOWER on IntegriCloud