CheckerContext.cpp revision b805c8ff133ef0c62df032fa711d6b13c5afd7f4
18687397a0f5e4c31632959d907f9d9b38d793b1cAnna Zaks//== CheckerContext.cpp - Context info for path-sensitive checkers-----------=//
28687397a0f5e4c31632959d907f9d9b38d793b1cAnna Zaks//
38687397a0f5e4c31632959d907f9d9b38d793b1cAnna Zaks//                     The LLVM Compiler Infrastructure
48687397a0f5e4c31632959d907f9d9b38d793b1cAnna Zaks//
58687397a0f5e4c31632959d907f9d9b38d793b1cAnna Zaks// This file is distributed under the University of Illinois Open Source
68687397a0f5e4c31632959d907f9d9b38d793b1cAnna Zaks// License. See LICENSE.TXT for details.
78687397a0f5e4c31632959d907f9d9b38d793b1cAnna Zaks//
88687397a0f5e4c31632959d907f9d9b38d793b1cAnna Zaks//===----------------------------------------------------------------------===//
98687397a0f5e4c31632959d907f9d9b38d793b1cAnna Zaks//
108687397a0f5e4c31632959d907f9d9b38d793b1cAnna Zaks//  This file defines CheckerContext that provides contextual info for
118687397a0f5e4c31632959d907f9d9b38d793b1cAnna Zaks//  path-sensitive checkers.
128687397a0f5e4c31632959d907f9d9b38d793b1cAnna Zaks//
138687397a0f5e4c31632959d907f9d9b38d793b1cAnna Zaks//===----------------------------------------------------------------------===//
148687397a0f5e4c31632959d907f9d9b38d793b1cAnna Zaks
158687397a0f5e4c31632959d907f9d9b38d793b1cAnna Zaks#include "clang/StaticAnalyzer/Core/PathSensitive/CheckerContext.h"
168687397a0f5e4c31632959d907f9d9b38d793b1cAnna Zaksusing namespace clang;
178687397a0f5e4c31632959d907f9d9b38d793b1cAnna Zaksusing namespace ento;
188687397a0f5e4c31632959d907f9d9b38d793b1cAnna Zaks
19b805c8ff133ef0c62df032fa711d6b13c5afd7f4Anna Zaksconst FunctionDecl *CheckerContext::getCalleeDecl(const CallExpr *CE) const {
208687397a0f5e4c31632959d907f9d9b38d793b1cAnna Zaks  const ProgramState *State = getState();
218687397a0f5e4c31632959d907f9d9b38d793b1cAnna Zaks  const Expr *Callee = CE->getCallee();
228687397a0f5e4c31632959d907f9d9b38d793b1cAnna Zaks  SVal L = State->getSVal(Callee);
23b805c8ff133ef0c62df032fa711d6b13c5afd7f4Anna Zaks  return L.getAsFunctionDecl();
24b805c8ff133ef0c62df032fa711d6b13c5afd7f4Anna Zaks}
258687397a0f5e4c31632959d907f9d9b38d793b1cAnna Zaks
26b805c8ff133ef0c62df032fa711d6b13c5afd7f4Anna ZaksStringRef CheckerContext::getCalleeName(const CallExpr *CE) const {
27b805c8ff133ef0c62df032fa711d6b13c5afd7f4Anna Zaks  const FunctionDecl *funDecl = getCalleeDecl(CE);
288687397a0f5e4c31632959d907f9d9b38d793b1cAnna Zaks  if (!funDecl)
298687397a0f5e4c31632959d907f9d9b38d793b1cAnna Zaks    return StringRef();
308687397a0f5e4c31632959d907f9d9b38d793b1cAnna Zaks  IdentifierInfo *funI = funDecl->getIdentifier();
318687397a0f5e4c31632959d907f9d9b38d793b1cAnna Zaks  if (!funI)
328687397a0f5e4c31632959d907f9d9b38d793b1cAnna Zaks    return StringRef();
338687397a0f5e4c31632959d907f9d9b38d793b1cAnna Zaks  return funI->getName();
348687397a0f5e4c31632959d907f9d9b38d793b1cAnna Zaks}
35