clang  7.0.0svn
Classes | Namespaces | Macros
ProgramStateTrait.h File Reference
#include "llvm/ADT/ImmutableList.h"
#include "llvm/ADT/ImmutableMap.h"
#include "llvm/ADT/ImmutableSet.h"
#include "llvm/Support/Allocator.h"
#include <cstdint>
Include dependency graph for ProgramStateTrait.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  clang::ento::ProgramStatePartialTrait< T >
 
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

 clang
 Dataflow Directional Tag Classes.
 
 clang::ento
 

Macros

#define REGISTER_TRAIT_WITH_PROGRAMSTATE(Name, Type)
 Declares a program state trait for type Type called Name, and introduce a type named NameTy. More...
 
#define CLANG_ENTO_PROGRAMSTATE_MAP(Key, Value)   llvm::ImmutableMap<Key, Value>
 Helper for registering a map trait. More...
 

Macro Definition Documentation

◆ CLANG_ENTO_PROGRAMSTATE_MAP

#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 105 of file ProgramStateTrait.h.

◆ REGISTER_TRAIT_WITH_PROGRAMSTATE

#define REGISTER_TRAIT_WITH_PROGRAMSTATE (   Name,
  Type 
)
Value:
namespace { \
class Name {}; \
using Name ## Ty = Type; \
} \
namespace clang { \
namespace ento { \
template <> \
struct ProgramStateTrait<Name> \
: public ProgramStatePartialTrait<Name ## Ty> { \
static void *GDMIndex() { static int Index; return &Index; } \
}; \
} \
}
Dataflow Directional Tag Classes.

Declares a program state trait for type Type called Name, and introduce a type 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 35 of file ProgramStateTrait.h.