blob: 2cdc1c6d98884163543fb51f20f6968732f36c76 [file] [log] [blame]
Zhongxing Xu22daf792009-07-16 01:03:49 +00001//===--- clang-wpa.cpp - clang whole program analyzer ---------------------===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This tool reads a sequence of precompiled AST files, and do various
11// cross translation unit analyses.
12//
13//===----------------------------------------------------------------------===//
14
Zhongxing Xudc3240c2009-07-16 01:00:25 +000015#include "clang/Analysis/CallGraph.h"
16
17#include "clang/Basic/FileManager.h"
Zhongxing Xudc3240c2009-07-16 01:00:25 +000018#include "llvm/Support/CommandLine.h"
19#include "llvm/Support/raw_ostream.h"
20using namespace clang;
21using namespace idx;
22
23static llvm::cl::list<std::string>
24InputFilenames(llvm::cl::Positional, llvm::cl::desc("<input AST files>"));
25
Zhongxing Xudc3240c2009-07-16 01:00:25 +000026int main(int argc, char **argv) {
27 llvm::cl::ParseCommandLineOptions(argc, argv, "clang-wpa");
28 FileManager FileMgr;
Argyrios Kyrtzidis05945452009-07-29 23:39:09 +000029 std::vector<ASTUnit*> ASTUnits;
Zhongxing Xudc3240c2009-07-16 01:00:25 +000030
31 if (InputFilenames.empty())
32 return 0;
33
34 for (unsigned i = 0, e = InputFilenames.size(); i != e; ++i) {
35 const std::string &InFile = InputFilenames[i];
36
37 std::string ErrMsg;
38 llvm::OwningPtr<ASTUnit> AST;
39
40 AST.reset(ASTUnit::LoadFromPCHFile(InFile, FileMgr, &ErrMsg));
41
42 if (!AST) {
43 llvm::errs() << "[" << InFile << "] error: " << ErrMsg << '\n';
44 return 1;
45 }
46
Argyrios Kyrtzidis05945452009-07-29 23:39:09 +000047 ASTUnits.push_back(AST.take());
Zhongxing Xudc3240c2009-07-16 01:00:25 +000048 }
49
50 llvm::OwningPtr<CallGraph> CG;
51 CG.reset(new CallGraph());
52
Argyrios Kyrtzidis05945452009-07-29 23:39:09 +000053 for (unsigned i = 0, e = ASTUnits.size(); i != e; ++i)
54 CG->addTU(*ASTUnits[i]);
Zhongxing Xudc3240c2009-07-16 01:00:25 +000055
Zhongxing Xu56a5d802009-07-23 13:39:38 +000056 CG->ViewCallGraph();
Zhongxing Xudc3240c2009-07-16 01:00:25 +000057}