DebugCheckers.cpp revision 226633
1218887Sdim//==- DebugCheckers.cpp - Debugging Checkers ---------------------*- C++ -*-==// 2218887Sdim// 3218887Sdim// The LLVM Compiler Infrastructure 4218887Sdim// 5218887Sdim// This file is distributed under the University of Illinois Open Source 6218887Sdim// License. See LICENSE.TXT for details. 7218887Sdim// 8218887Sdim//===----------------------------------------------------------------------===// 9218887Sdim// 10218887Sdim// This file defines a checkers that display debugging information. 11218887Sdim// 12218887Sdim//===----------------------------------------------------------------------===// 13218887Sdim 14218887Sdim#include "ClangSACheckers.h" 15221345Sdim#include "clang/StaticAnalyzer/Core/Checker.h" 16218887Sdim#include "clang/StaticAnalyzer/Core/PathSensitive/AnalysisManager.h" 17218887Sdim#include "clang/Analysis/Analyses/LiveVariables.h" 18218887Sdim 19218887Sdimusing namespace clang; 20218887Sdimusing namespace ento; 21218887Sdim 22218887Sdim//===----------------------------------------------------------------------===// 23218887Sdim// LiveVariablesDumper 24218887Sdim//===----------------------------------------------------------------------===// 25218887Sdim 26218887Sdimnamespace { 27221345Sdimclass LiveVariablesDumper : public Checker<check::ASTCodeBody> { 28218887Sdimpublic: 29218887Sdim void checkASTCodeBody(const Decl *D, AnalysisManager& mgr, 30218887Sdim BugReporter &BR) const { 31226633Sdim if (LiveVariables* L = mgr.getAnalysis<LiveVariables>(D)) { 32218887Sdim L->dumpBlockLiveness(mgr.getSourceManager()); 33218887Sdim } 34218887Sdim } 35218887Sdim}; 36218887Sdim} 37218887Sdim 38218887Sdimvoid ento::registerLiveVariablesDumper(CheckerManager &mgr) { 39218887Sdim mgr.registerChecker<LiveVariablesDumper>(); 40218887Sdim} 41218887Sdim 42218887Sdim//===----------------------------------------------------------------------===// 43218887Sdim// CFGViewer 44218887Sdim//===----------------------------------------------------------------------===// 45218887Sdim 46218887Sdimnamespace { 47221345Sdimclass CFGViewer : public Checker<check::ASTCodeBody> { 48218887Sdimpublic: 49218887Sdim void checkASTCodeBody(const Decl *D, AnalysisManager& mgr, 50218887Sdim BugReporter &BR) const { 51218887Sdim if (CFG *cfg = mgr.getCFG(D)) { 52218887Sdim cfg->viewCFG(mgr.getLangOptions()); 53218887Sdim } 54218887Sdim } 55218887Sdim}; 56218887Sdim} 57218887Sdim 58218887Sdimvoid ento::registerCFGViewer(CheckerManager &mgr) { 59218887Sdim mgr.registerChecker<CFGViewer>(); 60218887Sdim} 61218887Sdim 62218887Sdim//===----------------------------------------------------------------------===// 63218887Sdim// CFGDumper 64218887Sdim//===----------------------------------------------------------------------===// 65218887Sdim 66218887Sdimnamespace { 67221345Sdimclass CFGDumper : public Checker<check::ASTCodeBody> { 68218887Sdimpublic: 69218887Sdim void checkASTCodeBody(const Decl *D, AnalysisManager& mgr, 70218887Sdim BugReporter &BR) const { 71218887Sdim if (CFG *cfg = mgr.getCFG(D)) { 72218887Sdim cfg->dump(mgr.getLangOptions()); 73218887Sdim } 74218887Sdim } 75218887Sdim}; 76218887Sdim} 77218887Sdim 78218887Sdimvoid ento::registerCFGDumper(CheckerManager &mgr) { 79218887Sdim mgr.registerChecker<CFGDumper>(); 80218887Sdim} 81