DebugCheckers.cpp revision 221345
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 {
31218887Sdim    if (LiveVariables* L = mgr.getLiveVariables(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