[LLVMdev] getting pointer to CFG object for any given C program
Rajendra
rks at cse.iitb.ac.in
Sun Oct 7 00:56:35 PDT 2012
Hi,
Let say we have a C program, and we want to get pointer to CFG object
for this code
in order to traverse basic blocks and do some analysis using CFG
object.
From my main program main.cpp, how can I get pointer to CFG object if
argv[1] = hello.c ?
I have seen following places among many in clang/lib or clang/include:
llvm-3.1.src/tools/clang/lib/StaticAnalyzer/Checkers/DebugCheckers.cpp:96
- calls checkASTCodeBody(const Decl *D, AnalysisManager& mgr,
BugReporter &BR)
if (CFG *cfg = mgr.getCFG(D)) call cfg->dump()
llvm-3.1.src/tools/clang/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp:472
- AnalysisConsumer::HandleCode(Decl *D, AnalysisMode Mode,
SetOfConstDecls *VisitedCallees)
/usr/home3/rks/llvm/llvm-3.1.src/tools/clang/lib/Analysis/CFG.cpp:3166
- CFG* CFG::buildCFG(const Decl *D, Stmt *Statement, ASTContext *C,
const BuildOptions &BO) {
CFGBuilder Builder(C, BO);
return Builder.buildCFG(D, Statement);
}
I have tried to debug clang using gdb (by running r -cc1 -analyze
-analyser-checker=Debug.DumpCFG hello.c from within gdb)
and now I know something about flow but exactly not able to figure out
how to get pointer to CFG object in my program?
Since CFG is being built by recursive visit to AST, I cannot direct do
anything with objects of classes such as CFG, CFGBuilder or CFGBlock.
My query may be trivial for many of you but I have spent a lot of time
to figure this out without success.
Any help is much appreciated.
Rajendra
http://www.cse.iitb.ac.in/~rks
More information about the llvm-dev
mailing list