00001 //===-- ImpliedValue.h ------------------------------------------*- C++ -*-===// 00002 // 00003 // The KLEE Symbolic Virtual Machine 00004 // 00005 // This file is distributed under the University of Illinois Open Source 00006 // License. See LICENSE.TXT for details. 00007 // 00008 //===----------------------------------------------------------------------===// 00009 00010 #ifndef KLEE_IMPLIEDVALUE_H 00011 #define KLEE_IMPLIEDVALUE_H 00012 00013 #include "klee/Expr.h" 00014 00015 #include <vector> 00016 00017 // The idea of implied values is that often we know the result of some 00018 // expression e is a concrete value C. In many cases this directly 00019 // implies that some variable x embedded in e is also a concrete value 00020 // (derived from C). This module is used for finding such variables 00021 // and their computed values. 00022 00023 namespace klee { 00024 class ConstantExpr; 00025 class Expr; 00026 class ReadExpr; 00027 class Solver; 00028 00029 typedef std::vector< std::pair<ref<ReadExpr>, 00030 ref<ConstantExpr> > > ImpliedValueList; 00031 00032 namespace ImpliedValue { 00033 void getImpliedValues(ref<Expr> e, ref<ConstantExpr> cvalue, 00034 ImpliedValueList &result); 00035 void checkForImpliedValues(Solver *S, ref<Expr> e, 00036 ref<ConstantExpr> cvalue); 00037 } 00038 00039 } 00040 00041 #endif
1.5.8