1218887Sdim//== CheckerHelpers.h - Helper functions for 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 CheckerVisitor. 11218887Sdim// 12218887Sdim//===----------------------------------------------------------------------===// 13218887Sdim 14218887Sdim#ifndef LLVM_CLANG_GR_PATHSENSITIVE_CHECKERHELPERS 15218887Sdim#define LLVM_CLANG_GR_PATHSENSITIVE_CHECKERHELPERS 16218887Sdim 17218887Sdim#include "clang/AST/Stmt.h" 18218887Sdim 19218887Sdimnamespace clang { 20218887Sdim 21218887Sdimnamespace ento { 22218887Sdim 23218887Sdimbool containsMacro(const Stmt *S); 24218887Sdimbool containsEnum(const Stmt *S); 25218887Sdimbool containsStaticLocal(const Stmt *S); 26218887Sdimbool containsBuiltinOffsetOf(const Stmt *S); 27218887Sdimtemplate <class T> bool containsStmt(const Stmt *S) { 28218887Sdim if (isa<T>(S)) 29218887Sdim return true; 30218887Sdim 31218887Sdim for (Stmt::const_child_range I = S->children(); I; ++I) 32218887Sdim if (const Stmt *child = *I) 33218887Sdim if (containsStmt<T>(child)) 34218887Sdim return true; 35218887Sdim 36218887Sdim return false; 37218887Sdim} 38218887Sdim 39218887Sdim} // end GR namespace 40218887Sdim 41218887Sdim} // end clang namespace 42218887Sdim 43218887Sdim#endif 44