clang API Documentation
#include "llvm/Support/Allocator.h"
#include "llvm/Support/DataTypes.h"
Go to the source code of this file.
Classes | |
struct | clang::ento::ProgramStatePartialTrait< llvm::ImmutableMap< Key, Data, Info > > |
struct | clang::ento::ProgramStatePartialTrait< llvm::ImmutableSet< Key, Info > > |
struct | clang::ento::ProgramStatePartialTrait< llvm::ImmutableList< T > > |
struct | clang::ento::ProgramStatePartialTrait< bool > |
struct | clang::ento::ProgramStatePartialTrait< unsigned > |
struct | clang::ento::ProgramStatePartialTrait< void * > |
struct | clang::ento::ProgramStatePartialTrait< const void * > |
Namespaces | |
namespace | llvm |
namespace | clang |
namespace | clang::ento |
Defines | |
#define | REGISTER_TRAIT_WITH_PROGRAMSTATE(Name, Type) |
#define | CLANG_ENTO_PROGRAMSTATE_MAP(Key, Value) llvm::ImmutableMap<Key, Value> |
#define CLANG_ENTO_PROGRAMSTATE_MAP | ( | Key, | |
Value | |||
) | llvm::ImmutableMap<Key, Value> |
Helper for registering a map trait.
If the map type were written directly in the invocation of REGISTER_TRAIT_WITH_PROGRAMSTATE, the comma in the template arguments would be treated as a macro argument separator, which is wrong. This allows the user to specify a map type in a way that the preprocessor can deal with.
Definition at line 104 of file ProgramStateTrait.h.
#define REGISTER_TRAIT_WITH_PROGRAMSTATE | ( | Name, | |
Type | |||
) |
namespace { \ class Name {}; \ typedef Type Name ## Ty; \ } \ namespace clang { \ namespace ento { \ template <> \ struct ProgramStateTrait<Name> \ : public ProgramStatePartialTrait<Name ## Ty> { \ static void *GDMIndex() { static int Index; return &Index; } \ }; \ } \ }
Declares a program state trait for type Type
called Name
, and introduce a typedef named NameTy
. The macro should not be used inside namespaces, or for traits that must be accessible from more than one translation unit.
Definition at line 40 of file ProgramStateTrait.h.