CheckerContext.cpp revision 8687397a0f5e4c31632959d907f9d9b38d793b1c
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
198687397a0f5e4c31632959d907f9d9b38d793b1cAnna ZaksStringRef CheckerContext::getCalleeName(const CallExpr *CE) {
208687397a0f5e4c31632959d907f9d9b38d793b1cAnna Zaks  const ProgramState *State = getState();
218687397a0f5e4c31632959d907f9d9b38d793b1cAnna Zaks  const Expr *Callee = CE->getCallee();
228687397a0f5e4c31632959d907f9d9b38d793b1cAnna Zaks  SVal L = State->getSVal(Callee);
238687397a0f5e4c31632959d907f9d9b38d793b1cAnna Zaks
248687397a0f5e4c31632959d907f9d9b38d793b1cAnna Zaks  const FunctionDecl *funDecl = L.getAsFunctionDecl();
258687397a0f5e4c31632959d907f9d9b38d793b1cAnna Zaks  if (!funDecl)
268687397a0f5e4c31632959d907f9d9b38d793b1cAnna Zaks    return StringRef();
278687397a0f5e4c31632959d907f9d9b38d793b1cAnna Zaks  IdentifierInfo *funI = funDecl->getIdentifier();
288687397a0f5e4c31632959d907f9d9b38d793b1cAnna Zaks  if (!funI)
298687397a0f5e4c31632959d907f9d9b38d793b1cAnna Zaks    return StringRef();
308687397a0f5e4c31632959d907f9d9b38d793b1cAnna Zaks  return funI->getName();
318687397a0f5e4c31632959d907f9d9b38d793b1cAnna Zaks}
32