Go to the documentation of this file.
16 #ifndef LLVM_CLANG_STATICANALYZER_CORE_PATHSENSITIVE_PROGRAMSTATETRAIT_H
17 #define LLVM_CLANG_STATICANALYZER_CORE_PATHSENSITIVE_PROGRAMSTATETRAIT_H
19 #include "llvm/ADT/ImmutableList.h"
20 #include "llvm/ADT/ImmutableMap.h"
21 #include "llvm/ADT/ImmutableSet.h"
22 #include "llvm/Support/Allocator.h"
33 #define REGISTER_TRAIT_WITH_PROGRAMSTATE(Name, Type) \
36 using Name ## Ty = Type; \
41 struct ProgramStateTrait<Name> \
42 : public ProgramStatePartialTrait<Name ## Ty> { \
43 static void *GDMIndex() { static int Index; return &Index; } \
52 #define REGISTER_FACTORY_WITH_PROGRAMSTATE(Type) \
56 struct ProgramStateTrait<Type> \
57 : public ProgramStatePartialTrait<Type> { \
58 static void *GDMIndex() { static int Index; return &Index; } \
70 #define CLANG_ENTO_PROGRAMSTATE_MAP(Key, Value) llvm::ImmutableMap<Key, Value>
84 #define REGISTER_MAP_WITH_PROGRAMSTATE(Name, Key, Value) \
85 REGISTER_TRAIT_WITH_PROGRAMSTATE(Name, \
86 CLANG_ENTO_PROGRAMSTATE_MAP(Key, Value))
92 #define REGISTER_MAP_FACTORY_WITH_PROGRAMSTATE(Name, Key, Value) \
93 using Name = llvm::ImmutableMap<Key, Value>; \
94 REGISTER_FACTORY_WITH_PROGRAMSTATE(Name)
109 #define REGISTER_SET_WITH_PROGRAMSTATE(Name, Elem) \
110 REGISTER_TRAIT_WITH_PROGRAMSTATE(Name, llvm::ImmutableSet<Elem>)
116 #define REGISTER_SET_FACTORY_WITH_PROGRAMSTATE(Name, Elem) \
117 using Name = llvm::ImmutableSet<Elem>; \
118 REGISTER_FACTORY_WITH_PROGRAMSTATE(Name)
132 #define REGISTER_LIST_WITH_PROGRAMSTATE(Name, Elem) \
133 REGISTER_TRAIT_WITH_PROGRAMSTATE(Name, llvm::ImmutableList<Elem>)
139 #define REGISTER_LIST_FACTORY_WITH_PROGRAMSTATE(Name, Elem) \
140 using Name = llvm::ImmutableList<Elem>; \
141 REGISTER_FACTORY_WITH_PROGRAMSTATE(Name)
145 template <
typename Key,
typename Data,
typename Info>
154 return p ?
data_type((
typename data_type::TreeTy *) *p)
168 return F.add(B, K, E);
172 return F.remove(B, K);
176 return B.contains(K);
180 return *((
typename data_type::Factory *) p);
184 return new typename data_type::Factory(Alloc);
188 delete (
typename data_type::Factory *) Ctx;
193 template <
typename Key,
typename Info>
200 return p ?
data_type((
typename data_type::TreeTy *) *p)
213 return F.remove(B, K);
217 return B.contains(K);
221 return *((
typename data_type::Factory *) p);
225 return new typename data_type::Factory(Alloc);
229 delete (
typename data_type::Factory *) Ctx;
234 template <
typename T>
245 return L.contains(K);
249 return p ?
data_type((
const llvm::ImmutableListImpl<T> *) *p)
254 return const_cast<llvm::ImmutableListImpl<T> *
>(D.getInternalPointer());
258 return *((
typename data_type::Factory *) p);
262 return new typename data_type::Factory(Alloc);
266 delete (
typename data_type::Factory *) Ctx;
321 return const_cast<void *
>(d);
328 #endif // LLVM_CLANG_STATICANALYZER_CORE_PATHSENSITIVE_PROGRAMSTATETRAIT_H
YAML serialization mapping.
static void DeleteContext(void *Ctx)
static context_type MakeContext(void *p)
static void * CreateContext(llvm::BumpPtrAllocator &Alloc)
static data_type MakeData(void *const *p)
static void * MakeVoidPtr(data_type d)
static data_type MakeData(void *const *p)
llvm::ImmutableSet< Key, Info > data_type
static void DeleteContext(void *Ctx)
static data_type Add(data_type L, key_type K, context_type F)
static void * MakeVoidPtr(data_type d)
static data_type MakeData(void *const *p)
static lookup_type Lookup(data_type B, key_type K)
__UINTPTR_TYPE__ uintptr_t
An unsigned integer type with the property that any valid pointer to void can be converted to this ty...
static bool Contains(data_type L, key_type K)
static void * CreateContext(llvm::BumpPtrAllocator &Alloc)
static bool Contains(data_type B, key_type K)
static context_type MakeContext(void *p)
static data_type Remove(data_type B, key_type K, context_type F)
typename data_type::Factory & context_type
typename data_type::Factory & context_type
static data_type Remove(data_type B, key_type K, context_type F)
static data_type MakeData(void *const *p)
typename data_type::Factory & context_type
static void * MakeVoidPtr(data_type D)
static void * MakeVoidPtr(data_type d)
static void * MakeVoidPtr(data_type B)
static context_type MakeContext(void *p)
const value_type * lookup_type
llvm::ImmutableList< T > data_type
static data_type MakeData(void *const *p)
static data_type MakeData(void *const *p)
static void * CreateContext(llvm::BumpPtrAllocator &Alloc)
static void * MakeVoidPtr(data_type B)
static data_type Add(data_type B, key_type K, context_type F)
static void DeleteContext(void *Ctx)
static data_type MakeData(void *const *p)
llvm::ImmutableMap< Key, Data, Info > data_type
static data_type Set(data_type B, key_type K, value_type E, context_type F)
static bool Contains(data_type B, key_type K)
static void * MakeVoidPtr(data_type d)