Home | History | Annotate | Download | only in PathSensitive
      1 //== TaintManager.h - Managing taint --------------------------- -*- C++ -*--=//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 //
     10 //  This file provides APIs for adding, removing, querying symbol taint.
     11 //
     12 //===----------------------------------------------------------------------===//
     13 
     14 #ifndef LLVM_CLANG_TAINTMANAGER_H
     15 #define LLVM_CLANG_TAINTMANAGER_H
     16 
     17 #include "clang/StaticAnalyzer/Core/PathSensitive/TaintTag.h"
     18 
     19 namespace clang {
     20 namespace ento {
     21 
     22 /// The GDM component containing the tainted root symbols. We lazily infer the
     23 /// taint of the dependent symbols. Currently, this is a map from a symbol to
     24 /// tag kind. TODO: Should support multiple tag kinds.
     25 struct TaintMap {};
     26 typedef llvm::ImmutableMap<SymbolRef, TaintTagType> TaintMapImpl;
     27 template<> struct ProgramStateTrait<TaintMap>
     28     :  public ProgramStatePartialTrait<TaintMapImpl> {
     29   static void *GDMIndex() { static int index = 0; return &index; }
     30 };
     31 
     32 class TaintManager {
     33 
     34   TaintManager() {}
     35 };
     36 
     37 }
     38 }
     39 
     40 #endif
     41