14 #ifndef LLVM_CLANG_STATICANALYZER_CORE_PATHSENSITIVE_SYMEXPR_H
15 #define LLVM_CLANG_STATICANALYZER_CORE_PATHSENSITIVE_SYMEXPR_H
18 #include "llvm/ADT/FoldingSet.h"
19 #include "llvm/ADT/SmallVector.h"
20 #include "llvm/Support/raw_ostream.h"
29 class SymExpr :
public llvm::FoldingSetNode {
30 virtual void anchor();
34 #define SYMBOL(Id, Parent) Id##Kind,
35 #define SYMBOL_RANGE(Id, First, Last) BEGIN_##Id = First, END_##Id = Last,
36 #include "clang/StaticAnalyzer/Core/PathSensitive/Symbols.def"
50 virtual void dump()
const;
55 virtual void Profile(llvm::FoldingSetNodeID &profile) = 0;
102 void anchor()
override;
116 return k >= BEGIN_SYMBOLS && k <= END_SYMBOLS;
SmallVector< SymbolRef, 2 > SymbolRefSmallVectorTy
virtual void dump() const
A (possibly-)qualified type.
MemRegion - The root abstract class for all memory regions.
bool operator==(const symbol_iterator &X) const
const SymExpr * SymbolRef
C Language Family Type Representation.
symbol_iterator & operator++()
virtual const MemRegion * getOriginRegion() const
Find the region from which this symbol originates.
SymbolID getSymbolID() const
unsigned computeComplexity() const
bool operator!=(const symbol_iterator &X) const
virtual QualType getType() const =0
static bool classof(const SymExpr *SE)
virtual void Profile(llvm::FoldingSetNodeID &profile)=0
static symbol_iterator symbol_end()
SymbolData(Kind k, SymbolID sym)
virtual void dumpToStream(raw_ostream &os) const
X
Add a minimal nested name specifier fixit hint to allow lookup of a tag name from an outer enclosing ...
symbol_iterator symbol_begin() const
const SymExpr * operator*()
A symbol representing data which can be stored in a memory location (region).
Iterator over symbols that the current symbol depends on.