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