UninitializedValues.h revision 8d798c75b8aa8457ea06b22c6637d626ce1402de
16f56ab789cb470620554d624c37f488285b3b04eDan Albert//===- UninitializedValues.h - unintialized values analysis ----*- C++ --*-===// 26f56ab789cb470620554d624c37f488285b3b04eDan Albert// 36f56ab789cb470620554d624c37f488285b3b04eDan Albert// The LLVM Compiler Infrastructure 46f56ab789cb470620554d624c37f488285b3b04eDan Albert// 56f56ab789cb470620554d624c37f488285b3b04eDan Albert// This file is distributed under the University of Illinois Open Source 66f56ab789cb470620554d624c37f488285b3b04eDan Albert// License. See LICENSE.TXT for details. 76f56ab789cb470620554d624c37f488285b3b04eDan Albert// 86f56ab789cb470620554d624c37f488285b3b04eDan Albert//===----------------------------------------------------------------------===// 96f56ab789cb470620554d624c37f488285b3b04eDan Albert// 106f56ab789cb470620554d624c37f488285b3b04eDan Albert// This file provides the interface for the Unintialized Values analysis, 116f56ab789cb470620554d624c37f488285b3b04eDan Albert// a flow-sensitive analysis that detects when variable values are unintialized. 126f56ab789cb470620554d624c37f488285b3b04eDan Albert// 136f56ab789cb470620554d624c37f488285b3b04eDan Albert//===----------------------------------------------------------------------===// 146f56ab789cb470620554d624c37f488285b3b04eDan Albert 156f56ab789cb470620554d624c37f488285b3b04eDan Albert#ifndef LLVM_CLANG_UNITVALS_H 166f56ab789cb470620554d624c37f488285b3b04eDan Albert#define LLVM_CLANG_UNITVALS_H 176f56ab789cb470620554d624c37f488285b3b04eDan Albert 186f56ab789cb470620554d624c37f488285b3b04eDan Albert#include "clang/Analysis/Support/BlkExprDeclBitVector.h" 196f56ab789cb470620554d624c37f488285b3b04eDan Albert#include "clang/Analysis/FlowSensitive/DataflowValues.h" 206f56ab789cb470620554d624c37f488285b3b04eDan Albert 216f56ab789cb470620554d624c37f488285b3b04eDan Albertnamespace clang { 226f56ab789cb470620554d624c37f488285b3b04eDan Albert 236f56ab789cb470620554d624c37f488285b3b04eDan Albert class BlockVarDecl; 24 class Expr; 25 class DeclRefExpr; 26 class VarDecl; 27 28/// UninitializedValues_ValueTypes - Utility class to wrap type declarations 29/// for dataflow values and dataflow analysis state for the 30/// Unitialized Values analysis. 31class UninitializedValues_ValueTypes { 32public: 33 34 struct ObserverTy; 35 36 struct AnalysisDataTy : public StmtDeclBitVector_Types::AnalysisDataTy { 37 AnalysisDataTy() : Observer(NULL), FullUninitTaint(true) {} 38 virtual ~AnalysisDataTy() {}; 39 40 ObserverTy* Observer; 41 bool FullUninitTaint; 42 }; 43 44 typedef StmtDeclBitVector_Types::ValTy ValTy; 45 46 //===--------------------------------------------------------------------===// 47 // ObserverTy - Observer for querying DeclRefExprs that use an uninitalized 48 // value. 49 //===--------------------------------------------------------------------===// 50 51 struct ObserverTy { 52 virtual ~ObserverTy(); 53 virtual void ObserveDeclRefExpr(ValTy& Val, AnalysisDataTy& AD, 54 DeclRefExpr* DR, VarDecl* VD) = 0; 55 }; 56}; 57 58/// UninitializedValues - Objects of this class encapsulate dataflow analysis 59/// information regarding what variable declarations in a function are 60/// potentially unintialized. 61class UninitializedValues : 62 public DataflowValues<UninitializedValues_ValueTypes> { 63public: 64 typedef UninitializedValues_ValueTypes::ObserverTy ObserverTy; 65 66 UninitializedValues(CFG &cfg) { getAnalysisData().setCFG(&cfg); } 67 68 /// IntializeValues - Create initial dataflow values and meta data for 69 /// a given CFG. This is intended to be called by the dataflow solver. 70 void InitializeValues(const CFG& cfg); 71}; 72 73} // end namespace clang 74#endif 75