CheckerHelpers.h revision 218887
190075Sobrien//== CheckerHelpers.h - Helper functions for checkers ------------*- C++ -*--=//
290075Sobrien//
390075Sobrien//                     The LLVM Compiler Infrastructure
490075Sobrien//
590075Sobrien// This file is distributed under the University of Illinois Open Source
690075Sobrien// License. See LICENSE.TXT for details.
790075Sobrien//
890075Sobrien//===----------------------------------------------------------------------===//
990075Sobrien//
1090075Sobrien//  This file defines CheckerVisitor.
1190075Sobrien//
1290075Sobrien//===----------------------------------------------------------------------===//
1390075Sobrien
1490075Sobrien#ifndef LLVM_CLANG_GR_PATHSENSITIVE_CHECKERHELPERS
1590075Sobrien#define LLVM_CLANG_GR_PATHSENSITIVE_CHECKERHELPERS
1690075Sobrien
1790075Sobrien#include "clang/AST/Stmt.h"
1890075Sobrien
1990075Sobriennamespace clang {
2090075Sobrien
2190075Sobriennamespace ento {
2290075Sobrien
2390075Sobrienbool containsMacro(const Stmt *S);
2490075Sobrienbool containsEnum(const Stmt *S);
2590075Sobrienbool containsStaticLocal(const Stmt *S);
2690075Sobrienbool containsBuiltinOffsetOf(const Stmt *S);
2790075Sobrientemplate <class T> bool containsStmt(const Stmt *S) {
2890075Sobrien  if (isa<T>(S))
2990075Sobrien      return true;
3090075Sobrien
3190075Sobrien  for (Stmt::const_child_range I = S->children(); I; ++I)
3290075Sobrien    if (const Stmt *child = *I)
3390075Sobrien      if (containsStmt<T>(child))
3490075Sobrien        return true;
3590075Sobrien
3690075Sobrien  return false;
3790075Sobrien}
3890075Sobrien
3990075Sobrien} // end GR namespace
4090075Sobrien
4190075Sobrien} // end clang namespace
4290075Sobrien
4390075Sobrien#endif
44117395Skan