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