clang 17.0.0git
Classes | Typedefs | Enumerations | Functions
clang::interp Namespace Reference

Classes

class  ArrayIndexScope
 
class  Block
 A memory block, either on the stack or in the heap. More...
 
class  BlockScope
 Scope for storage declared in a compound statement. More...
 
class  Boolean
 Wrapper around boolean types. More...
 
class  ByteCodeEmitter
 An emitter which links the program to bytecode for later use. More...
 
class  ByteCodeExprGen
 Compilation context for expressions. More...
 
struct  ByteCodeGenError
 Error thrown by the compiler. More...
 
class  ByteCodeStmtGen
 Compilation context for statements. More...
 
class  CodePtr
 Pointer into the code segment. More...
 
class  Context
 Holds all information required to evaluate constexpr code in a module. More...
 
class  DeadBlock
 Descriptor for a dead block. More...
 
class  DeclScope
 Scope used to handle temporaries in toplevel variable declarations. More...
 
struct  Descriptor
 Describes a memory block created by an allocation site. More...
 
class  EvalEmitter
 An emitter which evaluates opcodes as they are emitted. More...
 
class  ExprScope
 Expression scope which tracks potentially lifetime extended temporaries which are hoisted to the parent scope on exit. More...
 
class  Floating
 
class  Frame
 Base class for stack frames, shared between VM and walker. More...
 
class  Function
 Bytecode function. More...
 
struct  InitMap
 Bitfield tracking the initialisation status of elements of primitive arrays. More...
 
struct  InlineDescriptor
 Inline descriptor embedded in structures and arrays. More...
 
class  Integral
 Wrapper around numeric types. More...
 
class  InterpFrame
 Frame storing local variables. More...
 
class  InterpStack
 Stack frame storing temporaries and parameters. More...
 
class  InterpState
 Interpreter context. More...
 
class  LabelScope
 Scope managing label targets. More...
 
class  LocalScope
 Scope for local variables. More...
 
class  LoopScope
 Sets the context for break/continue statements. More...
 
class  OptionScope
 Scope used to handle initialization methods. More...
 
class  Pointer
 A pointer to a memory block, live or dead. More...
 
struct  PrimConv
 Mapping from primitive types to their representation. More...
 
struct  PrimConv< PT_Bool >
 
struct  PrimConv< PT_Float >
 
struct  PrimConv< PT_Ptr >
 
struct  PrimConv< PT_Sint16 >
 
struct  PrimConv< PT_Sint32 >
 
struct  PrimConv< PT_Sint64 >
 
struct  PrimConv< PT_Sint8 >
 
struct  PrimConv< PT_Uint16 >
 
struct  PrimConv< PT_Uint32 >
 
struct  PrimConv< PT_Uint64 >
 
struct  PrimConv< PT_Uint8 >
 
class  Program
 The program contains and links the bytecode for all functions. More...
 
class  Record
 Structure/Class descriptor. More...
 
class  RecordScope
 
struct  Repr
 
struct  Repr< 16, false >
 
struct  Repr< 16, true >
 
struct  Repr< 32, false >
 
struct  Repr< 32, true >
 
struct  Repr< 64, false >
 
struct  Repr< 64, true >
 
struct  Repr< 8, false >
 
struct  Repr< 8, true >
 
class  Scope
 Describes a scope block. More...
 
class  SourceInfo
 Describes the statement/declaration an opcode was generated from. More...
 
class  SourceMapper
 Interface for classes which map locations to sources. More...
 
class  State
 Interface for the VM to interact with the AST walker's context. More...
 
class  SwitchScope
 
class  VariableScope
 Scope chain managing the variable lifetimes. More...
 

Typedefs

using DeclTy = llvm::PointerUnion< const Decl *, const Expr * >
 
using BlockCtorFn = void(*)(Block *Storage, char *FieldPtr, bool IsConst, bool IsMutable, bool IsActive, const Descriptor *FieldDesc)
 Invoked whenever a block is created.
 
using BlockDtorFn = void(*)(Block *Storage, char *FieldPtr, const Descriptor *FieldDesc)
 Invoked when a block is destroyed.
 
using BlockMoveFn = void(*)(Block *Storage, char *SrcFieldPtr, char *DstFieldPtr, const Descriptor *FieldDesc)
 Invoked when a block with pointers referencing it goes out of scope.
 
using APFloat = llvm::APFloat
 
using APSInt = llvm::APSInt
 
using APInt = llvm::APInt
 
using CompareFn = llvm::function_ref< bool(ComparisonCategoryResult)>
 
using SourceMap = std::vector< std::pair< unsigned, SourceInfo > >
 

Enumerations

enum class  ArithOp { Add , Sub }
 
enum class  PushVal : bool { No , Yes }
 
enum class  IncDecOp { Inc , Dec }
 
enum  Opcode : uint32_t
 
enum  PrimType : unsigned {
  PT_Sint8 , PT_Uint8 , PT_Sint16 , PT_Uint16 ,
  PT_Sint32 , PT_Uint32 , PT_Sint64 , PT_Uint64 ,
  PT_Bool , PT_Float , PT_Ptr
}
 Enumeration of the primitive types of the VM. More...
 

Functions

llvm::raw_ostream & operator<< (llvm::raw_ostream &OS, const Boolean &B)
 
llvm::raw_ostream & operator<< (llvm::raw_ostream &OS, Floating F)
 
Floating getSwappedBytes (Floating F)
 
template<unsigned Bits, bool Signed>
llvm::raw_ostream & operator<< (llvm::raw_ostream &OS, Integral< Bits, Signed > I)
 
bool CheckExtern (InterpState &S, CodePtr OpPC, const Pointer &Ptr)
 Checks if the variable has externally defined storage.
 
bool CheckArray (InterpState &S, CodePtr OpPC, const Pointer &Ptr)
 Checks if the array is offsetable.
 
bool CheckLive (InterpState &S, CodePtr OpPC, const Pointer &Ptr, AccessKinds AK)
 Checks if a pointer is live and accessible.
 
bool CheckNull (InterpState &S, CodePtr OpPC, const Pointer &Ptr, CheckSubobjectKind CSK)
 Checks if a pointer is null.
 
bool CheckRange (InterpState &S, CodePtr OpPC, const Pointer &Ptr, AccessKinds AK)
 Checks if a pointer is in range.
 
bool CheckRange (InterpState &S, CodePtr OpPC, const Pointer &Ptr, CheckSubobjectKind CSK)
 Checks if a field from which a pointer is going to be derived is valid.
 
bool CheckConst (InterpState &S, CodePtr OpPC, const Pointer &Ptr)
 Checks if a pointer points to const storage.
 
bool CheckMutable (InterpState &S, CodePtr OpPC, const Pointer &Ptr)
 Checks if a pointer points to a mutable field.
 
bool CheckLoad (InterpState &S, CodePtr OpPC, const Pointer &Ptr)
 Checks if a value can be loaded from a block.
 
bool CheckStore (InterpState &S, CodePtr OpPC, const Pointer &Ptr)
 Checks if a value can be stored in a block.
 
bool CheckInvoke (InterpState &S, CodePtr OpPC, const Pointer &Ptr)
 Checks if a method can be invoked on an object.
 
bool CheckInit (InterpState &S, CodePtr OpPC, const Pointer &Ptr)
 Checks if a value can be initialized.
 
bool CheckCallable (InterpState &S, CodePtr OpPC, const Function *F)
 Checks if a method can be called.
 
bool CheckThis (InterpState &S, CodePtr OpPC, const Pointer &This)
 Checks the 'this' pointer.
 
bool CheckPure (InterpState &S, CodePtr OpPC, const CXXMethodDecl *MD)
 Checks if a method is pure virtual.
 
static void DiagnoseUninitializedSubobject (InterpState &S, const SourceInfo &SI, QualType SubObjType, SourceLocation SubObjLoc)
 
static bool CheckFieldsInitialized (InterpState &S, CodePtr OpPC, const Pointer &BasePtr, const Record *R)
 
static bool CheckArrayInitialized (InterpState &S, CodePtr OpPC, const Pointer &BasePtr, const ConstantArrayType *CAT)
 
bool CheckCtorCall (InterpState &S, CodePtr OpPC, const Pointer &This)
 Checks that all fields are initialized after a constructor call.
 
bool CheckFloatResult (InterpState &S, CodePtr OpPC, APFloat::opStatus Status)
 Checks if the result is a floating-point operation is valid in the current context.
 
bool CastFP (InterpState &S, CodePtr OpPC, const llvm::fltSemantics *Sem, llvm::RoundingMode RM)
 1) Pops a Floating from the stack.
 
bool Interpret (InterpState &S, APValue &Result)
 Interpreter entry point.
 
template<typename T >
bool ReturnValue (const T &V, APValue &R)
 Convert a value to an APValue.
 
template<typename RT >
bool CheckShift (InterpState &S, CodePtr OpPC, const RT &RHS, unsigned Bits)
 Checks if the shift operation is legal.
 
template<typename T >
bool CheckDivRem (InterpState &S, CodePtr OpPC, const T &LHS, const T &RHS)
 Checks if Div/Rem operation on LHS and RHS is valid.
 
bool InterpretBuiltin (InterpState &S, CodePtr &PC, unsigned BuiltinID)
 Interpret a builtin function.
 
template<PrimType Name, bool Builtin = false, class T = typename PrimConv<Name>::T>
bool Ret (InterpState &S, CodePtr &PC, APValue &Result)
 
template<bool Builtin = false>
bool RetVoid (InterpState &S, CodePtr &PC, APValue &Result)
 
template<typename T , bool(*)(T, T, unsigned, T *) OpFW, template< typename U > class OpAP>
bool AddSubMulHelper (InterpState &S, CodePtr OpPC, unsigned Bits, const T &LHS, const T &RHS)
 
template<PrimType Name, class T = typename PrimConv<Name>::T>
bool Add (InterpState &S, CodePtr OpPC)
 
bool Addf (InterpState &S, CodePtr OpPC, llvm::RoundingMode RM)
 
template<PrimType Name, class T = typename PrimConv<Name>::T>
bool Sub (InterpState &S, CodePtr OpPC)
 
bool Subf (InterpState &S, CodePtr OpPC, llvm::RoundingMode RM)
 
template<PrimType Name, class T = typename PrimConv<Name>::T>
bool Mul (InterpState &S, CodePtr OpPC)
 
bool Mulf (InterpState &S, CodePtr OpPC, llvm::RoundingMode RM)
 
template<PrimType Name, class T = typename PrimConv<Name>::T>
bool BitAnd (InterpState &S, CodePtr OpPC)
 1) Pops the RHS from the stack.
 
template<PrimType Name, class T = typename PrimConv<Name>::T>
bool BitOr (InterpState &S, CodePtr OpPC)
 1) Pops the RHS from the stack.
 
template<PrimType Name, class T = typename PrimConv<Name>::T>
bool BitXor (InterpState &S, CodePtr OpPC)
 1) Pops the RHS from the stack.
 
template<PrimType Name, class T = typename PrimConv<Name>::T>
bool Rem (InterpState &S, CodePtr OpPC)
 1) Pops the RHS from the stack.
 
template<PrimType Name, class T = typename PrimConv<Name>::T>
bool Div (InterpState &S, CodePtr OpPC)
 1) Pops the RHS from the stack.
 
bool Divf (InterpState &S, CodePtr OpPC, llvm::RoundingMode RM)
 
template<PrimType Name, class T = typename PrimConv<Name>::T>
bool Inv (InterpState &S, CodePtr OpPC)
 
template<PrimType Name, class T = typename PrimConv<Name>::T>
bool Neg (InterpState &S, CodePtr OpPC)
 
template<typename T , IncDecOp Op, PushVal DoPush>
bool IncDecHelper (InterpState &S, CodePtr OpPC, const Pointer &Ptr)
 
template<PrimType Name, class T = typename PrimConv<Name>::T>
bool Inc (InterpState &S, CodePtr OpPC)
 1) Pops a pointer from the stack 2) Load the value from the pointer 3) Writes the value increased by one back to the pointer 4) Pushes the original (pre-inc) value on the stack.
 
template<PrimType Name, class T = typename PrimConv<Name>::T>
bool IncPop (InterpState &S, CodePtr OpPC)
 1) Pops a pointer from the stack 2) Load the value from the pointer 3) Writes the value increased by one back to the pointer
 
template<PrimType Name, class T = typename PrimConv<Name>::T>
bool Dec (InterpState &S, CodePtr OpPC)
 1) Pops a pointer from the stack 2) Load the value from the pointer 3) Writes the value decreased by one back to the pointer 4) Pushes the original (pre-dec) value on the stack.
 
template<PrimType Name, class T = typename PrimConv<Name>::T>
bool DecPop (InterpState &S, CodePtr OpPC)
 1) Pops a pointer from the stack 2) Load the value from the pointer 3) Writes the value decreased by one back to the pointer
 
template<PrimType Name, class T = typename PrimConv<Name>::T>
bool Comp (InterpState &S, CodePtr OpPC)
 1) Pops the value from the stack.
 
template<typename T >
bool CmpHelper (InterpState &S, CodePtr OpPC, CompareFn Fn)
 
template<typename T >
bool CmpHelperEQ (InterpState &S, CodePtr OpPC, CompareFn Fn)
 
template<>
bool CmpHelper< Pointer > (InterpState &S, CodePtr OpPC, CompareFn Fn)
 
template<>
bool CmpHelperEQ< Pointer > (InterpState &S, CodePtr OpPC, CompareFn Fn)
 
template<PrimType Name, class T = typename PrimConv<Name>::T>
bool EQ (InterpState &S, CodePtr OpPC)
 
template<PrimType Name, class T = typename PrimConv<Name>::T>
bool NE (InterpState &S, CodePtr OpPC)
 
template<PrimType Name, class T = typename PrimConv<Name>::T>
bool LT (InterpState &S, CodePtr OpPC)
 
template<PrimType Name, class T = typename PrimConv<Name>::T>
bool LE (InterpState &S, CodePtr OpPC)
 
template<PrimType Name, class T = typename PrimConv<Name>::T>
bool GT (InterpState &S, CodePtr OpPC)
 
template<PrimType Name, class T = typename PrimConv<Name>::T>
bool GE (InterpState &S, CodePtr OpPC)
 
template<PrimType Name, class T = typename PrimConv<Name>::T>
bool InRange (InterpState &S, CodePtr OpPC)
 
template<PrimType Name, class T = typename PrimConv<Name>::T>
bool Dup (InterpState &S, CodePtr OpPC)
 
template<PrimType Name, class T = typename PrimConv<Name>::T>
bool Pop (InterpState &S, CodePtr OpPC)
 
template<PrimType Name, class T = typename PrimConv<Name>::T>
bool Const (InterpState &S, CodePtr OpPC, const T &Arg)
 
template<PrimType Name, class T = typename PrimConv<Name>::T>
bool GetLocal (InterpState &S, CodePtr OpPC, uint32_t I)
 
template<PrimType Name, class T = typename PrimConv<Name>::T>
bool SetLocal (InterpState &S, CodePtr OpPC, uint32_t I)
 
template<PrimType Name, class T = typename PrimConv<Name>::T>
bool GetParam (InterpState &S, CodePtr OpPC, uint32_t I)
 
template<PrimType Name, class T = typename PrimConv<Name>::T>
bool SetParam (InterpState &S, CodePtr OpPC, uint32_t I)
 
template<PrimType Name, class T = typename PrimConv<Name>::T>
bool GetField (InterpState &S, CodePtr OpPC, uint32_t I)
 1) Peeks a pointer on the stack 2) Pushes the value of the pointer's field on the stack
 
template<PrimType Name, class T = typename PrimConv<Name>::T>
bool SetField (InterpState &S, CodePtr OpPC, uint32_t I)
 
template<PrimType Name, class T = typename PrimConv<Name>::T>
bool GetFieldPop (InterpState &S, CodePtr OpPC, uint32_t I)
 1) Pops a pointer from the stack 2) Pushes the value of the pointer's field on the stack
 
template<PrimType Name, class T = typename PrimConv<Name>::T>
bool GetThisField (InterpState &S, CodePtr OpPC, uint32_t I)
 
template<PrimType Name, class T = typename PrimConv<Name>::T>
bool SetThisField (InterpState &S, CodePtr OpPC, uint32_t I)
 
template<PrimType Name, class T = typename PrimConv<Name>::T>
bool GetGlobal (InterpState &S, CodePtr OpPC, uint32_t I)
 
template<PrimType Name, class T = typename PrimConv<Name>::T>
bool SetGlobal (InterpState &S, CodePtr OpPC, uint32_t I)
 
template<PrimType Name, class T = typename PrimConv<Name>::T>
bool InitGlobal (InterpState &S, CodePtr OpPC, uint32_t I)
 
template<PrimType Name, class T = typename PrimConv<Name>::T>
bool InitGlobalTemp (InterpState &S, CodePtr OpPC, uint32_t I, const LifetimeExtendedTemporaryDecl *Temp)
 1) Converts the value on top of the stack to an APValue 2) Sets that APValue on \Temp 3) Initialized global with index \I with that
 
template<PrimType Name, class T = typename PrimConv<Name>::T>
bool InitThisField (InterpState &S, CodePtr OpPC, uint32_t I)
 
template<PrimType Name, class T = typename PrimConv<Name>::T>
bool InitThisBitField (InterpState &S, CodePtr OpPC, const Record::Field *F)
 
template<PrimType Name, class T = typename PrimConv<Name>::T>
bool InitThisFieldActive (InterpState &S, CodePtr OpPC, uint32_t I)
 
template<PrimType Name, class T = typename PrimConv<Name>::T>
bool InitField (InterpState &S, CodePtr OpPC, uint32_t I)
 1) Pops the value from the stack 2) Peeks a pointer from the stack 3) Pushes the value to field I of the pointer on the stack
 
template<PrimType Name, class T = typename PrimConv<Name>::T>
bool InitBitField (InterpState &S, CodePtr OpPC, const Record::Field *F)
 
template<PrimType Name, class T = typename PrimConv<Name>::T>
bool InitFieldActive (InterpState &S, CodePtr OpPC, uint32_t I)
 
bool GetPtrLocal (InterpState &S, CodePtr OpPC, uint32_t I)
 
bool GetPtrParam (InterpState &S, CodePtr OpPC, uint32_t I)
 
bool GetPtrGlobal (InterpState &S, CodePtr OpPC, uint32_t I)
 
bool GetPtrField (InterpState &S, CodePtr OpPC, uint32_t Off)
 1) Pops a Pointer from the stack 2) Pushes Pointer.atField(Off) on the stack
 
bool GetPtrThisField (InterpState &S, CodePtr OpPC, uint32_t Off)
 
bool GetPtrActiveField (InterpState &S, CodePtr OpPC, uint32_t Off)
 
bool GetPtrActiveThisField (InterpState &S, CodePtr OpPC, uint32_t Off)
 
bool GetPtrBase (InterpState &S, CodePtr OpPC, uint32_t Off)
 
bool GetPtrBasePop (InterpState &S, CodePtr OpPC, uint32_t Off)
 
bool GetPtrThisBase (InterpState &S, CodePtr OpPC, uint32_t Off)
 
bool VirtBaseHelper (InterpState &S, CodePtr OpPC, const RecordDecl *Decl, const Pointer &Ptr)
 
bool GetPtrVirtBase (InterpState &S, CodePtr OpPC, const RecordDecl *D)
 
bool GetPtrThisVirtBase (InterpState &S, CodePtr OpPC, const RecordDecl *D)
 
template<PrimType Name, class T = typename PrimConv<Name>::T>
bool Load (InterpState &S, CodePtr OpPC)
 
template<PrimType Name, class T = typename PrimConv<Name>::T>
bool LoadPop (InterpState &S, CodePtr OpPC)
 
template<PrimType Name, class T = typename PrimConv<Name>::T>
bool Store (InterpState &S, CodePtr OpPC)
 
template<PrimType Name, class T = typename PrimConv<Name>::T>
bool StorePop (InterpState &S, CodePtr OpPC)
 
template<PrimType Name, class T = typename PrimConv<Name>::T>
bool StoreBitField (InterpState &S, CodePtr OpPC)
 
template<PrimType Name, class T = typename PrimConv<Name>::T>
bool StoreBitFieldPop (InterpState &S, CodePtr OpPC)
 
template<PrimType Name, class T = typename PrimConv<Name>::T>
bool InitPop (InterpState &S, CodePtr OpPC)
 
template<PrimType Name, class T = typename PrimConv<Name>::T>
bool InitElem (InterpState &S, CodePtr OpPC, uint32_t Idx)
 1) Pops the value from the stack 2) Peeks a pointer and gets its index \Idx 3) Sets the value on the pointer, leaving the pointer on the stack.
 
template<PrimType Name, class T = typename PrimConv<Name>::T>
bool InitElemPop (InterpState &S, CodePtr OpPC, uint32_t Idx)
 The same as InitElem, but pops the pointer as well.
 
template<class T , ArithOp Op>
bool OffsetHelper (InterpState &S, CodePtr OpPC, const T &Offset, const Pointer &Ptr)
 
template<PrimType Name, class T = typename PrimConv<Name>::T>
bool AddOffset (InterpState &S, CodePtr OpPC)
 
template<PrimType Name, class T = typename PrimConv<Name>::T>
bool SubOffset (InterpState &S, CodePtr OpPC)
 
template<ArithOp Op>
static bool IncDecPtrHelper (InterpState &S, CodePtr OpPC)
 
static bool IncPtr (InterpState &S, CodePtr OpPC)
 
static bool DecPtr (InterpState &S, CodePtr OpPC)
 
template<PrimType Name, class T = typename PrimConv<Name>::T>
bool SubPtr (InterpState &S, CodePtr OpPC)
 1) Pops a Pointer from the stack.
 
bool Destroy (InterpState &S, CodePtr OpPC, uint32_t I)
 
template<PrimType TIn, PrimType TOut>
bool Cast (InterpState &S, CodePtr OpPC)
 
template<PrimType Name, class T = typename PrimConv<Name>::T>
bool CastIntegralFloating (InterpState &S, CodePtr OpPC, const llvm::fltSemantics *Sem, llvm::RoundingMode RM)
 
template<PrimType Name, class T = typename PrimConv<Name>::T>
bool CastFloatingIntegral (InterpState &S, CodePtr OpPC)
 
template<PrimType Name, class T = typename PrimConv<Name>::T>
bool Zero (InterpState &S, CodePtr OpPC)
 
template<PrimType Name, class T = typename PrimConv<Name>::T>
bool Null (InterpState &S, CodePtr OpPC)
 
bool This (InterpState &S, CodePtr OpPC)
 
bool RVOPtr (InterpState &S, CodePtr OpPC)
 
template<PrimType NameL, PrimType NameR>
bool Shr (InterpState &S, CodePtr OpPC)
 
template<PrimType NameL, PrimType NameR>
bool Shl (InterpState &S, CodePtr OpPC)
 
bool NoRet (InterpState &S, CodePtr OpPC)
 
bool NarrowPtr (InterpState &S, CodePtr OpPC)
 
bool ExpandPtr (InterpState &S, CodePtr OpPC)
 
template<PrimType Name, class T = typename PrimConv<Name>::T>
bool ArrayElemPtr (InterpState &S, CodePtr OpPC)
 
template<PrimType Name, class T = typename PrimConv<Name>::T>
bool ArrayElemPtrPop (InterpState &S, CodePtr OpPC)
 
bool CheckGlobalCtor (InterpState &S, CodePtr &PC)
 
bool Call (InterpState &S, CodePtr &PC, const Function *Func)
 
bool CallBI (InterpState &S, CodePtr &PC, const Function *Func)
 
template<typename T >
ReadArg (InterpState &S, CodePtr &OpPC)
 
llvm::raw_ostream & operator<< (llvm::raw_ostream &OS, const Pointer &P)
 
template<typename T >
ComparisonCategoryResult Compare (const T &X, const T &Y)
 Helper to compare two comparable types.
 
size_t primSize (PrimType Type)
 Returns the size of a primitive type in bytes.
 
constexpr size_t align (size_t Size)
 Aligns a size to the pointer alignment.
 
constexpr bool aligned (uintptr_t Value)
 
static bool aligned (const void *P)
 

Typedef Documentation

◆ APFloat

using clang::interp::APFloat = typedef llvm::APFloat

Definition at line 23 of file Floating.h.

◆ APInt

typedef llvm::APInt clang::interp::APInt

Definition at line 29 of file Integral.h.

◆ APSInt

typedef llvm::APSInt clang::interp::APSInt

Definition at line 24 of file Floating.h.

◆ BlockCtorFn

using clang::interp::BlockCtorFn = typedef void (*)(Block *Storage, char *FieldPtr, bool IsConst, bool IsMutable, bool IsActive, const Descriptor *FieldDesc)

Invoked whenever a block is created.

The constructor method fills in the inline descriptors of all fields and array elements. It also initializes all the fields which contain non-trivial types.

Definition at line 31 of file Descriptor.h.

◆ BlockDtorFn

using clang::interp::BlockDtorFn = typedef void (*)(Block *Storage, char *FieldPtr, const Descriptor *FieldDesc)

Invoked when a block is destroyed.

Invokes the destructors of all non-trivial nested fields of arrays and records.

Definition at line 37 of file Descriptor.h.

◆ BlockMoveFn

using clang::interp::BlockMoveFn = typedef void (*)(Block *Storage, char *SrcFieldPtr, char *DstFieldPtr, const Descriptor *FieldDesc)

Invoked when a block with pointers referencing it goes out of scope.

Such blocks are persisted: the move function copies all inline descriptors and non-trivial fields, as existing pointers might need to reference those descriptors. Data is not copied since it cannot be legally read.

Definition at line 44 of file Descriptor.h.

◆ CompareFn

using clang::interp::CompareFn = typedef llvm::function_ref<bool(ComparisonCategoryResult)>

Definition at line 540 of file Interp.h.

◆ DeclTy

using clang::interp::DeclTy = typedef llvm::PointerUnion<const Decl *, const Expr *>

Definition at line 26 of file Descriptor.h.

◆ SourceMap

using clang::interp::SourceMap = typedef std::vector<std::pair<unsigned, SourceInfo> >

Definition at line 88 of file Source.h.

Enumeration Type Documentation

◆ ArithOp

enum class clang::interp::ArithOp
strong
Enumerator
Add 
Sub 

Definition at line 151 of file Interp.h.

◆ IncDecOp

enum class clang::interp::IncDecOp
strong
Enumerator
Inc 
Dec 

Definition at line 427 of file Interp.h.

◆ Opcode

enum clang::interp::Opcode : uint32_t

Definition at line 21 of file Opcode.h.

◆ PrimType

Enumeration of the primitive types of the VM.

Enumerator
PT_Sint8 
PT_Uint8 
PT_Sint16 
PT_Uint16 
PT_Sint32 
PT_Uint32 
PT_Sint64 
PT_Uint64 
PT_Bool 
PT_Float 
PT_Ptr 

Definition at line 29 of file PrimType.h.

◆ PushVal

enum class clang::interp::PushVal : bool
strong
Enumerator
No 
Yes 

Definition at line 423 of file Interp.h.

Function Documentation

◆ Add()

template<PrimType Name, class T = typename PrimConv<Name>::T>
bool clang::interp::Add ( InterpState S,
CodePtr  OpPC 
)

Definition at line 237 of file Interp.h.

◆ Addf()

bool clang::interp::Addf ( InterpState S,
CodePtr  OpPC,
llvm::RoundingMode  RM 
)
inline

Definition at line 244 of file Interp.h.

References clang::interp::Floating::add(), CheckFloatResult(), and clang::Result.

◆ AddOffset()

template<PrimType Name, class T = typename PrimConv<Name>::T>
bool clang::interp::AddOffset ( InterpState S,
CodePtr  OpPC 
)

Definition at line 1228 of file Interp.h.

References Offset.

◆ AddSubMulHelper()

template<typename T , bool(*)(T, T, unsigned, T *) OpFW, template< typename U > class OpAP>
bool clang::interp::AddSubMulHelper ( InterpState S,
CodePtr  OpPC,
unsigned  Bits,
const T &  LHS,
const T &  RHS 
)

Definition at line 206 of file Interp.h.

References clang::Expr::getExprLoc(), clang::Expr::getType(), clang::Result, and toString().

◆ align()

constexpr size_t clang::interp::align ( size_t  Size)
constexpr

◆ aligned() [1/2]

static bool clang::interp::aligned ( const void *  P)
inlinestatic

Definition at line 68 of file PrimType.h.

References aligned(), and P.

◆ aligned() [2/2]

constexpr bool clang::interp::aligned ( uintptr_t  Value)
constexpr

◆ ArrayElemPtr()

template<PrimType Name, class T = typename PrimConv<Name>::T>
bool clang::interp::ArrayElemPtr ( InterpState S,
CodePtr  OpPC 
)
inline

Definition at line 1467 of file Interp.h.

References NarrowPtr(), and Offset.

◆ ArrayElemPtrPop()

template<PrimType Name, class T = typename PrimConv<Name>::T>
bool clang::interp::ArrayElemPtrPop ( InterpState S,
CodePtr  OpPC 
)
inline

Definition at line 1478 of file Interp.h.

References NarrowPtr(), and Offset.

◆ BitAnd()

template<PrimType Name, class T = typename PrimConv<Name>::T>
bool clang::interp::BitAnd ( InterpState S,
CodePtr  OpPC 
)

1) Pops the RHS from the stack.

2) Pops the LHS from the stack. 3) Pushes 'LHS & RHS' on the stack

Definition at line 293 of file Interp.h.

References clang::Result.

◆ BitOr()

template<PrimType Name, class T = typename PrimConv<Name>::T>
bool clang::interp::BitOr ( InterpState S,
CodePtr  OpPC 
)

1) Pops the RHS from the stack.

2) Pops the LHS from the stack. 3) Pushes 'LHS | RHS' on the stack

Definition at line 310 of file Interp.h.

References clang::Result.

◆ BitXor()

template<PrimType Name, class T = typename PrimConv<Name>::T>
bool clang::interp::BitXor ( InterpState S,
CodePtr  OpPC 
)

1) Pops the RHS from the stack.

2) Pops the LHS from the stack. 3) Pushes 'LHS ^ RHS' on the stack

Definition at line 327 of file Interp.h.

References clang::Result.

◆ Call()

bool clang::interp::Call ( InterpState S,
CodePtr PC,
const Function Func 
)
inline

Definition at line 1493 of file Interp.h.

References Call(), CheckCallable(), CheckInvoke(), clang::interp::Function::hasThisPointer(), and Interpret().

Referenced by Call().

◆ CallBI()

bool clang::interp::CallBI ( InterpState S,
CodePtr PC,
const Function Func 
)
inline

Definition at line 1527 of file Interp.h.

References clang::interp::Function::getBuiltinID(), and InterpretBuiltin().

◆ Cast()

template<PrimType TIn, PrimType TOut>
bool clang::interp::Cast ( InterpState S,
CodePtr  OpPC 
)

Definition at line 1299 of file Interp.h.

◆ CastFloatingIntegral()

template<PrimType Name, class T = typename PrimConv<Name>::T>
bool clang::interp::CastFloatingIntegral ( InterpState S,
CodePtr  OpPC 
)

◆ CastFP()

bool clang::interp::CastFP ( InterpState S,
CodePtr  OpPC,
const llvm::fltSemantics *  Sem,
llvm::RoundingMode  RM 
)

1) Pops a Floating from the stack.

2) Pushes a new floating on the stack that uses the given semantics. Not templated, so implemented in Interp.cpp.

Definition at line 487 of file Interp.cpp.

References clang::Result, and clang::interp::Floating::toSemantics().

◆ CastIntegralFloating()

template<PrimType Name, class T = typename PrimConv<Name>::T>
bool clang::interp::CastIntegralFloating ( InterpState S,
CodePtr  OpPC,
const llvm::fltSemantics *  Sem,
llvm::RoundingMode  RM 
)

◆ CheckArray()

bool clang::interp::CheckArray ( InterpState S,
CodePtr  OpPC,
const Pointer Ptr 
)

Checks if the array is offsetable.

Definition at line 149 of file Interp.cpp.

References clang::interp::Pointer::isUnknownSizeArray().

Referenced by OffsetHelper().

◆ CheckArrayInitialized()

static bool clang::interp::CheckArrayInitialized ( InterpState S,
CodePtr  OpPC,
const Pointer BasePtr,
const ConstantArrayType CAT 
)
static

◆ CheckCallable()

bool clang::interp::CheckCallable ( InterpState S,
CodePtr  OpPC,
const Function F 
)

◆ CheckConst()

bool clang::interp::CheckConst ( InterpState S,
CodePtr  OpPC,
const Pointer Ptr 
)

Checks if a pointer points to const storage.

Definition at line 214 of file Interp.cpp.

References clang::interp::Pointer::block(), clang::interp::Pointer::getType(), clang::interp::Pointer::isConst(), and clang::interp::Pointer::isLive().

Referenced by CheckStore().

◆ CheckCtorCall()

bool clang::interp::CheckCtorCall ( InterpState S,
CodePtr  OpPC,
const Pointer This 
)

Checks that all fields are initialized after a constructor call.

Definition at line 446 of file Interp.cpp.

References CheckFieldsInitialized(), and This().

Referenced by CheckGlobalCtor().

◆ CheckDivRem()

template<typename T >
bool clang::interp::CheckDivRem ( InterpState S,
CodePtr  OpPC,
const T &  LHS,
const T &  RHS 
)

Checks if Div/Rem operation on LHS and RHS is valid.

Definition at line 122 of file Interp.h.

References clang::Expr::getType(), and toString().

Referenced by Div(), Divf(), and Rem().

◆ CheckExtern()

bool clang::interp::CheckExtern ( InterpState S,
CodePtr  OpPC,
const Pointer Ptr 
)

Checks if the variable has externally defined storage.

Definition at line 136 of file Interp.cpp.

References clang::interp::Descriptor::asValueDecl(), clang::interp::Pointer::getDeclDesc(), and clang::interp::Pointer::isExtern().

Referenced by CheckInvoke(), CheckLoad(), CheckStore(), and GetPtrField().

◆ CheckFieldsInitialized()

static bool clang::interp::CheckFieldsInitialized ( InterpState S,
CodePtr  OpPC,
const Pointer BasePtr,
const Record R 
)
static

◆ CheckFloatResult()

bool clang::interp::CheckFloatResult ( InterpState S,
CodePtr  OpPC,
APFloat::opStatus  Status 
)

◆ CheckGlobalCtor()

bool clang::interp::CheckGlobalCtor ( InterpState S,
CodePtr PC 
)
inline

Definition at line 1488 of file Interp.h.

References CheckCtorCall().

◆ CheckInit()

bool clang::interp::CheckInit ( InterpState S,
CodePtr  OpPC,
const Pointer Ptr 
)

Checks if a value can be initialized.

Definition at line 288 of file Interp.cpp.

References clang::AK_Assign, CheckLive(), and CheckRange().

Referenced by InitElem(), InitElemPop(), and InitPop().

◆ CheckInvoke()

bool clang::interp::CheckInvoke ( InterpState S,
CodePtr  OpPC,
const Pointer Ptr 
)

Checks if a method can be invoked on an object.

Definition at line 278 of file Interp.cpp.

References clang::AK_MemberCall, CheckExtern(), CheckLive(), and CheckRange().

Referenced by Call().

◆ CheckLive()

bool clang::interp::CheckLive ( InterpState S,
CodePtr  OpPC,
const Pointer Ptr,
AccessKinds  AK 
)

◆ CheckLoad()

bool clang::interp::CheckLoad ( InterpState S,
CodePtr  OpPC,
const Pointer Ptr 
)

Checks if a value can be loaded from a block.

Definition at line 246 of file Interp.cpp.

References clang::AK_Read, CheckActive(), CheckExtern(), CheckInitialized(), CheckLive(), CheckMutable(), CheckRange(), and CheckTemporary().

Referenced by GetField(), GetFieldPop(), GetLocal(), GetThisField(), Load(), and LoadPop().

◆ CheckMutable()

bool clang::interp::CheckMutable ( InterpState S,
CodePtr  OpPC,
const Pointer Ptr 
)

Checks if a pointer points to a mutable field.

Definition at line 233 of file Interp.cpp.

References clang::AK_Read, clang::interp::Pointer::getField(), clang::interp::Pointer::isLive(), and clang::interp::Pointer::isMutable().

Referenced by CheckLoad().

◆ CheckNull()

bool clang::interp::CheckNull ( InterpState S,
CodePtr  OpPC,
const Pointer Ptr,
CheckSubobjectKind  CSK 
)

◆ CheckPure()

bool clang::interp::CheckPure ( InterpState S,
CodePtr  OpPC,
const CXXMethodDecl MD 
)

Checks if a method is pure virtual.

Definition at line 362 of file Interp.cpp.

References clang::Decl::getLocation(), and clang::FunctionDecl::isPure().

◆ CheckRange() [1/2]

bool clang::interp::CheckRange ( InterpState S,
CodePtr  OpPC,
const Pointer Ptr,
AccessKinds  AK 
)

◆ CheckRange() [2/2]

bool clang::interp::CheckRange ( InterpState S,
CodePtr  OpPC,
const Pointer Ptr,
CheckSubobjectKind  CSK 
)

Checks if a field from which a pointer is going to be derived is valid.

Definition at line 205 of file Interp.cpp.

References clang::interp::Pointer::isElementPastEnd().

◆ CheckShift()

template<typename RT >
bool clang::interp::CheckShift ( InterpState S,
CodePtr  OpPC,
const RT &  RHS,
unsigned  Bits 
)

Checks if the shift operation is legal.

Definition at line 101 of file Interp.h.

References clang::Expr::getType().

◆ CheckStore()

bool clang::interp::CheckStore ( InterpState S,
CodePtr  OpPC,
const Pointer Ptr 
)

Checks if a value can be stored in a block.

Definition at line 264 of file Interp.cpp.

References clang::AK_Assign, CheckConst(), CheckExtern(), CheckGlobal(), CheckLive(), and CheckRange().

Referenced by SetField(), SetThisField(), Store(), StoreBitField(), StoreBitFieldPop(), and StorePop().

◆ CheckThis()

bool clang::interp::CheckThis ( InterpState S,
CodePtr  OpPC,
const Pointer This 
)

◆ CmpHelper()

template<typename T >
bool clang::interp::CmpHelper ( InterpState S,
CodePtr  OpPC,
CompareFn  Fn 
)

Definition at line 543 of file Interp.h.

◆ CmpHelper< Pointer >()

template<>
bool clang::interp::CmpHelper< Pointer > ( InterpState S,
CodePtr  OpPC,
CompareFn  Fn 
)
inline

◆ CmpHelperEQ()

template<typename T >
bool clang::interp::CmpHelperEQ ( InterpState S,
CodePtr  OpPC,
CompareFn  Fn 
)

Definition at line 552 of file Interp.h.

◆ CmpHelperEQ< Pointer >()

template<>
bool clang::interp::CmpHelperEQ< Pointer > ( InterpState S,
CodePtr  OpPC,
CompareFn  Fn 
)
inline

◆ Comp()

template<PrimType Name, class T = typename PrimConv<Name>::T>
bool clang::interp::Comp ( InterpState S,
CodePtr  OpPC 
)

1) Pops the value from the stack.

2) Pushes the bitwise complemented value on the stack (~V).

Definition at line 525 of file Interp.h.

References clang::Result.

◆ Compare()

template<typename T >
ComparisonCategoryResult clang::interp::Compare ( const T &  X,
const T &  Y 
)

◆ Const()

template<PrimType Name, class T = typename PrimConv<Name>::T>
bool clang::interp::Const ( InterpState S,
CodePtr  OpPC,
const T &  Arg 
)

Definition at line 685 of file Interp.h.

◆ Dec()

template<PrimType Name, class T = typename PrimConv<Name>::T>
bool clang::interp::Dec ( InterpState S,
CodePtr  OpPC 
)

1) Pops a pointer from the stack 2) Load the value from the pointer 3) Writes the value decreased by one back to the pointer 4) Pushes the original (pre-dec) value on the stack.

Definition at line 504 of file Interp.h.

◆ DecPop()

template<PrimType Name, class T = typename PrimConv<Name>::T>
bool clang::interp::DecPop ( InterpState S,
CodePtr  OpPC 
)

1) Pops a pointer from the stack 2) Load the value from the pointer 3) Writes the value decreased by one back to the pointer

Definition at line 515 of file Interp.h.

◆ DecPtr()

static bool clang::interp::DecPtr ( InterpState S,
CodePtr  OpPC 
)
inlinestatic

Definition at line 1264 of file Interp.h.

◆ Destroy()

bool clang::interp::Destroy ( InterpState S,
CodePtr  OpPC,
uint32_t  I 
)
inline

Definition at line 1290 of file Interp.h.

◆ DiagnoseUninitializedSubobject()

static void clang::interp::DiagnoseUninitializedSubobject ( InterpState S,
const SourceInfo SI,
QualType  SubObjType,
SourceLocation  SubObjLoc 
)
static

Definition at line 371 of file Interp.cpp.

References clang::SourceLocation::isValid().

Referenced by CheckArrayInitialized(), and CheckFieldsInitialized().

◆ Div()

template<PrimType Name, class T = typename PrimConv<Name>::T>
bool clang::interp::Div ( InterpState S,
CodePtr  OpPC 
)

1) Pops the RHS from the stack.

2) Pops the LHS from the stack. 3) Pushes 'LHS / RHS' on the stack

Definition at line 364 of file Interp.h.

References CheckDivRem(), and clang::Result.

◆ Divf()

bool clang::interp::Divf ( InterpState S,
CodePtr  OpPC,
llvm::RoundingMode  RM 
)
inline

◆ Dup()

template<PrimType Name, class T = typename PrimConv<Name>::T>
bool clang::interp::Dup ( InterpState S,
CodePtr  OpPC 
)

Definition at line 669 of file Interp.h.

◆ EQ()

template<PrimType Name, class T = typename PrimConv<Name>::T>
bool clang::interp::EQ ( InterpState S,
CodePtr  OpPC 
)

Definition at line 607 of file Interp.h.

References clang::Equal.

◆ ExpandPtr()

bool clang::interp::ExpandPtr ( InterpState S,
CodePtr  OpPC 
)
inline

Definition at line 1452 of file Interp.h.

References clang::interp::Pointer::expand().

◆ GE()

template<PrimType Name, class T = typename PrimConv<Name>::T>
bool clang::interp::GE ( InterpState S,
CodePtr  OpPC 
)

Definition at line 643 of file Interp.h.

References clang::Equal, and clang::Greater.

◆ GetField()

template<PrimType Name, class T = typename PrimConv<Name>::T>
bool clang::interp::GetField ( InterpState S,
CodePtr  OpPC,
uint32_t  I 
)

1) Peeks a pointer on the stack 2) Pushes the value of the pointer's field on the stack

Definition at line 727 of file Interp.h.

References clang::interp::Pointer::atField(), CheckLoad(), CheckNull(), CheckRange(), and clang::CSK_Field.

◆ GetFieldPop()

template<PrimType Name, class T = typename PrimConv<Name>::T>
bool clang::interp::GetFieldPop ( InterpState S,
CodePtr  OpPC,
uint32_t  I 
)

1) Pops a pointer from the stack 2) Pushes the value of the pointer's field on the stack

Definition at line 758 of file Interp.h.

References clang::interp::Pointer::atField(), CheckLoad(), CheckNull(), CheckRange(), and clang::CSK_Field.

◆ GetGlobal()

template<PrimType Name, class T = typename PrimConv<Name>::T>
bool clang::interp::GetGlobal ( InterpState S,
CodePtr  OpPC,
uint32_t  I 
)

Definition at line 801 of file Interp.h.

◆ GetLocal()

template<PrimType Name, class T = typename PrimConv<Name>::T>
bool clang::interp::GetLocal ( InterpState S,
CodePtr  OpPC,
uint32_t  I 
)

Definition at line 695 of file Interp.h.

References CheckLoad(), and clang::interp::Pointer::deref().

◆ GetParam()

template<PrimType Name, class T = typename PrimConv<Name>::T>
bool clang::interp::GetParam ( InterpState S,
CodePtr  OpPC,
uint32_t  I 
)

Definition at line 710 of file Interp.h.

◆ GetPtrActiveField()

bool clang::interp::GetPtrActiveField ( InterpState S,
CodePtr  OpPC,
uint32_t  Off 
)
inline

◆ GetPtrActiveThisField()

bool clang::interp::GetPtrActiveThisField ( InterpState S,
CodePtr  OpPC,
uint32_t  Off 
)
inline

Definition at line 971 of file Interp.h.

References CheckThis(), and This().

◆ GetPtrBase()

bool clang::interp::GetPtrBase ( InterpState S,
CodePtr  OpPC,
uint32_t  Off 
)
inline

Definition at line 984 of file Interp.h.

References clang::interp::Pointer::atField(), CheckNull(), and clang::CSK_Base.

◆ GetPtrBasePop()

bool clang::interp::GetPtrBasePop ( InterpState S,
CodePtr  OpPC,
uint32_t  Off 
)
inline

Definition at line 992 of file Interp.h.

References clang::interp::Pointer::atField(), CheckNull(), and clang::CSK_Base.

◆ GetPtrField()

bool clang::interp::GetPtrField ( InterpState S,
CodePtr  OpPC,
uint32_t  Off 
)
inline

1) Pops a Pointer from the stack 2) Pushes Pointer.atField(Off) on the stack

Definition at line 936 of file Interp.h.

References clang::interp::Pointer::atField(), CheckExtern(), CheckNull(), CheckRange(), and clang::CSK_Field.

◆ GetPtrGlobal()

bool clang::interp::GetPtrGlobal ( InterpState S,
CodePtr  OpPC,
uint32_t  I 
)
inline

Definition at line 929 of file Interp.h.

◆ GetPtrLocal()

bool clang::interp::GetPtrLocal ( InterpState S,
CodePtr  OpPC,
uint32_t  I 
)
inline

Definition at line 916 of file Interp.h.

◆ GetPtrParam()

bool clang::interp::GetPtrParam ( InterpState S,
CodePtr  OpPC,
uint32_t  I 
)
inline

Definition at line 921 of file Interp.h.

◆ GetPtrThisBase()

bool clang::interp::GetPtrThisBase ( InterpState S,
CodePtr  OpPC,
uint32_t  Off 
)
inline

Definition at line 1000 of file Interp.h.

References CheckThis(), and This().

◆ GetPtrThisField()

bool clang::interp::GetPtrThisField ( InterpState S,
CodePtr  OpPC,
uint32_t  Off 
)
inline

Definition at line 948 of file Interp.h.

References CheckThis(), and This().

◆ GetPtrThisVirtBase()

bool clang::interp::GetPtrThisVirtBase ( InterpState S,
CodePtr  OpPC,
const RecordDecl D 
)
inline

Definition at line 1028 of file Interp.h.

References CheckThis(), This(), and VirtBaseHelper().

◆ GetPtrVirtBase()

bool clang::interp::GetPtrVirtBase ( InterpState S,
CodePtr  OpPC,
const RecordDecl D 
)
inline

Definition at line 1021 of file Interp.h.

References CheckNull(), clang::CSK_Base, and VirtBaseHelper().

◆ getSwappedBytes()

Floating clang::interp::getSwappedBytes ( Floating  F)

Definition at line 19 of file Floating.cpp.

◆ GetThisField()

template<PrimType Name, class T = typename PrimConv<Name>::T>
bool clang::interp::GetThisField ( InterpState S,
CodePtr  OpPC,
uint32_t  I 
)

Definition at line 772 of file Interp.h.

References CheckLoad(), CheckThis(), and This().

◆ GT()

template<PrimType Name, class T = typename PrimConv<Name>::T>
bool clang::interp::GT ( InterpState S,
CodePtr  OpPC 
)

Definition at line 636 of file Interp.h.

References clang::Greater.

◆ Inc()

template<PrimType Name, class T = typename PrimConv<Name>::T>
bool clang::interp::Inc ( InterpState S,
CodePtr  OpPC 
)

1) Pops a pointer from the stack 2) Load the value from the pointer 3) Writes the value increased by one back to the pointer 4) Pushes the original (pre-inc) value on the stack.

Definition at line 481 of file Interp.h.

◆ IncDecHelper()

template<typename T , IncDecOp Op, PushVal DoPush>
bool clang::interp::IncDecHelper ( InterpState S,
CodePtr  OpPC,
const Pointer Ptr 
)

◆ IncDecPtrHelper()

template<ArithOp Op>
static bool clang::interp::IncDecPtrHelper ( InterpState S,
CodePtr  OpPC 
)
inlinestatic

Definition at line 1242 of file Interp.h.

References clang::interp::Pointer::deref(), and P.

◆ IncPop()

template<PrimType Name, class T = typename PrimConv<Name>::T>
bool clang::interp::IncPop ( InterpState S,
CodePtr  OpPC 
)

1) Pops a pointer from the stack 2) Load the value from the pointer 3) Writes the value increased by one back to the pointer

Definition at line 492 of file Interp.h.

◆ IncPtr()

static bool clang::interp::IncPtr ( InterpState S,
CodePtr  OpPC 
)
inlinestatic

Definition at line 1260 of file Interp.h.

◆ InitBitField()

template<PrimType Name, class T = typename PrimConv<Name>::T>
bool clang::interp::InitBitField ( InterpState S,
CodePtr  OpPC,
const Record::Field F 
)

◆ InitElem()

template<PrimType Name, class T = typename PrimConv<Name>::T>
bool clang::interp::InitElem ( InterpState S,
CodePtr  OpPC,
uint32_t  Idx 
)

1) Pops the value from the stack 2) Peeks a pointer and gets its index \Idx 3) Sets the value on the pointer, leaving the pointer on the stack.

Definition at line 1131 of file Interp.h.

References CheckInit().

◆ InitElemPop()

template<PrimType Name, class T = typename PrimConv<Name>::T>
bool clang::interp::InitElemPop ( InterpState S,
CodePtr  OpPC,
uint32_t  Idx 
)

The same as InitElem, but pops the pointer as well.

Definition at line 1143 of file Interp.h.

References CheckInit().

◆ InitField()

template<PrimType Name, class T = typename PrimConv<Name>::T>
bool clang::interp::InitField ( InterpState S,
CodePtr  OpPC,
uint32_t  I 
)

1) Pops the value from the stack 2) Peeks a pointer from the stack 3) Pushes the value to field I of the pointer on the stack

Definition at line 882 of file Interp.h.

◆ InitFieldActive()

template<PrimType Name, class T = typename PrimConv<Name>::T>
bool clang::interp::InitFieldActive ( InterpState S,
CodePtr  OpPC,
uint32_t  I 
)

Definition at line 902 of file Interp.h.

◆ InitGlobal()

template<PrimType Name, class T = typename PrimConv<Name>::T>
bool clang::interp::InitGlobal ( InterpState S,
CodePtr  OpPC,
uint32_t  I 
)

Definition at line 816 of file Interp.h.

◆ InitGlobalTemp()

template<PrimType Name, class T = typename PrimConv<Name>::T>
bool clang::interp::InitGlobalTemp ( InterpState S,
CodePtr  OpPC,
uint32_t  I,
const LifetimeExtendedTemporaryDecl Temp 
)

1) Converts the value on top of the stack to an APValue 2) Sets that APValue on \Temp 3) Initialized global with index \I with that

Definition at line 825 of file Interp.h.

References clang::LifetimeExtendedTemporaryDecl::getOrCreateValue().

◆ InitPop()

template<PrimType Name, class T = typename PrimConv<Name>::T>
bool clang::interp::InitPop ( InterpState S,
CodePtr  OpPC 
)

Definition at line 1117 of file Interp.h.

References CheckInit(), and clang::interp::Pointer::initialize().

◆ InitThisBitField()

template<PrimType Name, class T = typename PrimConv<Name>::T>
bool clang::interp::InitThisBitField ( InterpState S,
CodePtr  OpPC,
const Record::Field F 
)

◆ InitThisField()

template<PrimType Name, class T = typename PrimConv<Name>::T>
bool clang::interp::InitThisField ( InterpState S,
CodePtr  OpPC,
uint32_t  I 
)

Definition at line 838 of file Interp.h.

References CheckThis(), and This().

◆ InitThisFieldActive()

template<PrimType Name, class T = typename PrimConv<Name>::T>
bool clang::interp::InitThisFieldActive ( InterpState S,
CodePtr  OpPC,
uint32_t  I 
)

Definition at line 865 of file Interp.h.

References CheckThis(), and This().

◆ InRange()

template<PrimType Name, class T = typename PrimConv<Name>::T>
bool clang::interp::InRange ( InterpState S,
CodePtr  OpPC 
)

Definition at line 655 of file Interp.h.

◆ Interpret()

bool clang::interp::Interpret ( InterpState S,
APValue Result 
)

Interpreter entry point.

Definition at line 495 of file Interp.cpp.

References clang::interp::CodePtr::read().

Referenced by Call().

◆ InterpretBuiltin()

bool clang::interp::InterpretBuiltin ( InterpState S,
CodePtr PC,
unsigned  BuiltinID 
)

Interpret a builtin function.

Definition at line 16 of file InterpBuiltin.cpp.

References clang::interp::Boolean::from().

Referenced by CallBI().

◆ Inv()

template<PrimType Name, class T = typename PrimConv<Name>::T>
bool clang::interp::Inv ( InterpState S,
CodePtr  OpPC 
)

Definition at line 398 of file Interp.h.

References clang::interp::Boolean::inv().

◆ LE()

template<PrimType Name, class T = typename PrimConv<Name>::T>
bool clang::interp::LE ( InterpState S,
CodePtr  OpPC 
)

Definition at line 628 of file Interp.h.

References clang::Equal, and clang::Less.

Referenced by clang::interp::ByteCodeExprGen< Emitter >::VisitIntegerLiteral().

◆ Load()

template<PrimType Name, class T = typename PrimConv<Name>::T>
bool clang::interp::Load ( InterpState S,
CodePtr  OpPC 
)

Definition at line 1043 of file Interp.h.

References CheckLoad(), and clang::interp::Pointer::deref().

◆ LoadPop()

template<PrimType Name, class T = typename PrimConv<Name>::T>
bool clang::interp::LoadPop ( InterpState S,
CodePtr  OpPC 
)

Definition at line 1052 of file Interp.h.

References CheckLoad(), and clang::interp::Pointer::deref().

◆ LT()

template<PrimType Name, class T = typename PrimConv<Name>::T>
bool clang::interp::LT ( InterpState S,
CodePtr  OpPC 
)

Definition at line 621 of file Interp.h.

References clang::Less.

◆ Mul()

template<PrimType Name, class T = typename PrimConv<Name>::T>
bool clang::interp::Mul ( InterpState S,
CodePtr  OpPC 
)

Definition at line 273 of file Interp.h.

◆ Mulf()

bool clang::interp::Mulf ( InterpState S,
CodePtr  OpPC,
llvm::RoundingMode  RM 
)
inline

Definition at line 280 of file Interp.h.

References CheckFloatResult(), clang::interp::Floating::mul(), and clang::Result.

◆ NarrowPtr()

bool clang::interp::NarrowPtr ( InterpState S,
CodePtr  OpPC 
)
inline

Definition at line 1446 of file Interp.h.

References clang::interp::Pointer::narrow().

Referenced by ArrayElemPtr(), and ArrayElemPtrPop().

◆ NE()

template<PrimType Name, class T = typename PrimConv<Name>::T>
bool clang::interp::NE ( InterpState S,
CodePtr  OpPC 
)

Definition at line 614 of file Interp.h.

References clang::Equal.

Referenced by ctorArrayTy(), dtorArrayTy(), and moveArrayTy().

◆ Neg()

template<PrimType Name, class T = typename PrimConv<Name>::T>
bool clang::interp::Neg ( InterpState S,
CodePtr  OpPC 
)

Definition at line 414 of file Interp.h.

References clang::Result.

◆ NoRet()

bool clang::interp::NoRet ( InterpState S,
CodePtr  OpPC 
)
inline

Definition at line 1436 of file Interp.h.

◆ Null()

template<PrimType Name, class T = typename PrimConv<Name>::T>
bool clang::interp::Null ( InterpState S,
CodePtr  OpPC 
)
inline

Definition at line 1363 of file Interp.h.

◆ OffsetHelper()

template<class T , ArithOp Op>
bool clang::interp::OffsetHelper ( InterpState S,
CodePtr  OpPC,
const T &  Offset,
const Pointer Ptr 
)

◆ operator<<() [1/4]

llvm::raw_ostream & clang::interp::operator<< ( llvm::raw_ostream &  OS,
const Boolean B 
)
inline

Definition at line 154 of file Boolean.h.

References OS, and clang::interp::Boolean::print().

◆ operator<<() [2/4]

llvm::raw_ostream & clang::interp::operator<< ( llvm::raw_ostream &  OS,
const Pointer P 
)
inline

Definition at line 383 of file Pointer.h.

References OS, and P.

◆ operator<<() [3/4]

llvm::raw_ostream & clang::interp::operator<< ( llvm::raw_ostream &  OS,
Floating  F 
)

Definition at line 14 of file Floating.cpp.

References OS, and clang::interp::Floating::print().

◆ operator<<() [4/4]

template<unsigned Bits, bool Signed>
llvm::raw_ostream & clang::interp::operator<< ( llvm::raw_ostream &  OS,
Integral< Bits, Signed I 
)

Definition at line 284 of file Integral.h.

References OS, and clang::interp::Integral< Bits, Signed >::print().

◆ Pop()

template<PrimType Name, class T = typename PrimConv<Name>::T>
bool clang::interp::Pop ( InterpState S,
CodePtr  OpPC 
)

Definition at line 675 of file Interp.h.

◆ primSize()

size_t clang::interp::primSize ( PrimType  Type)

Returns the size of a primitive type in bytes.

Definition at line 20 of file PrimType.cpp.

References TYPE_SWITCH.

Referenced by clang::interp::ByteCodeEmitter::compileFunc(), clang::interp::Program::createDescriptor(), and clang::interp::InterpFrame::describe().

◆ ReadArg()

template<typename T >
T clang::interp::ReadArg ( InterpState S,
CodePtr OpPC 
)
inline

Definition at line 1545 of file Interp.h.

References clang::interp::CodePtr::read().

◆ Rem()

template<PrimType Name, class T = typename PrimConv<Name>::T>
bool clang::interp::Rem ( InterpState S,
CodePtr  OpPC 
)

1) Pops the RHS from the stack.

2) Pops the LHS from the stack. 3) Pushes 'LHS % RHS' on the stack (the remainder of dividing LHS by RHS).

Definition at line 344 of file Interp.h.

References CheckDivRem(), and clang::Result.

◆ Ret()

template<PrimType Name, bool Builtin = false, class T = typename PrimConv<Name>::T>
bool clang::interp::Ret ( InterpState S,
CodePtr PC,
APValue Result 
)

Definition at line 159 of file Interp.h.

References clang::Result, and Ret().

Referenced by Ret().

◆ ReturnValue()

template<typename T >
bool clang::interp::ReturnValue ( const T &  V,
APValue R 
)

Convert a value to an APValue.

Definition at line 43 of file Interp.h.

References V.

◆ RetVoid()

template<bool Builtin = false>
bool clang::interp::RetVoid ( InterpState S,
CodePtr PC,
APValue Result 
)
inline

Definition at line 182 of file Interp.h.

◆ RVOPtr()

bool clang::interp::RVOPtr ( InterpState S,
CodePtr  OpPC 
)
inline

Definition at line 1386 of file Interp.h.

◆ SetField()

template<PrimType Name, class T = typename PrimConv<Name>::T>
bool clang::interp::SetField ( InterpState S,
CodePtr  OpPC,
uint32_t  I 
)

Definition at line 741 of file Interp.h.

References CheckNull(), CheckRange(), CheckStore(), and clang::CSK_Field.

◆ SetGlobal()

template<PrimType Name, class T = typename PrimConv<Name>::T>
bool clang::interp::SetGlobal ( InterpState S,
CodePtr  OpPC,
uint32_t  I 
)

Definition at line 810 of file Interp.h.

◆ SetLocal()

template<PrimType Name, class T = typename PrimConv<Name>::T>
bool clang::interp::SetLocal ( InterpState S,
CodePtr  OpPC,
uint32_t  I 
)

Definition at line 704 of file Interp.h.

◆ SetParam()

template<PrimType Name, class T = typename PrimConv<Name>::T>
bool clang::interp::SetParam ( InterpState S,
CodePtr  OpPC,
uint32_t  I 
)

Definition at line 719 of file Interp.h.

◆ SetThisField()

template<PrimType Name, class T = typename PrimConv<Name>::T>
bool clang::interp::SetThisField ( InterpState S,
CodePtr  OpPC,
uint32_t  I 
)

Definition at line 786 of file Interp.h.

References CheckStore(), CheckThis(), and This().

◆ Shl()

template<PrimType NameL, PrimType NameR>
bool clang::interp::Shl ( InterpState S,
CodePtr  OpPC 
)
inline

Definition at line 1416 of file Interp.h.

References LT.

◆ Shr()

template<PrimType NameL, PrimType NameR>
bool clang::interp::Shr ( InterpState S,
CodePtr  OpPC 
)
inline

Definition at line 1399 of file Interp.h.

References LT.

◆ Store()

template<PrimType Name, class T = typename PrimConv<Name>::T>
bool clang::interp::Store ( InterpState S,
CodePtr  OpPC 
)

Definition at line 1061 of file Interp.h.

References CheckStore(), and clang::interp::Pointer::initialize().

◆ StoreBitField()

template<PrimType Name, class T = typename PrimConv<Name>::T>
bool clang::interp::StoreBitField ( InterpState S,
CodePtr  OpPC 
)

Definition at line 1085 of file Interp.h.

References CheckStore(), and clang::interp::Pointer::initialize().

◆ StoreBitFieldPop()

template<PrimType Name, class T = typename PrimConv<Name>::T>
bool clang::interp::StoreBitFieldPop ( InterpState S,
CodePtr  OpPC 
)

Definition at line 1101 of file Interp.h.

References CheckStore(), and clang::interp::Pointer::initialize().

◆ StorePop()

template<PrimType Name, class T = typename PrimConv<Name>::T>
bool clang::interp::StorePop ( InterpState S,
CodePtr  OpPC 
)

Definition at line 1073 of file Interp.h.

References CheckStore(), and clang::interp::Pointer::initialize().

◆ Sub()

template<PrimType Name, class T = typename PrimConv<Name>::T>
bool clang::interp::Sub ( InterpState S,
CodePtr  OpPC 
)

Definition at line 255 of file Interp.h.

◆ Subf()

bool clang::interp::Subf ( InterpState S,
CodePtr  OpPC,
llvm::RoundingMode  RM 
)
inline

Definition at line 262 of file Interp.h.

References CheckFloatResult(), clang::Result, and clang::interp::Floating::sub().

◆ SubOffset()

template<PrimType Name, class T = typename PrimConv<Name>::T>
bool clang::interp::SubOffset ( InterpState S,
CodePtr  OpPC 
)

Definition at line 1235 of file Interp.h.

References Offset.

◆ SubPtr()

template<PrimType Name, class T = typename PrimConv<Name>::T>
bool clang::interp::SubPtr ( InterpState S,
CodePtr  OpPC 
)
inline

1) Pops a Pointer from the stack.

2) Pops another Pointer from the stack. 3) Pushes the different of the indices of the two pointers on the stack.

Definition at line 1272 of file Interp.h.

References clang::interp::Pointer::getIndex(), and clang::interp::Pointer::hasSameArray().

◆ This()

bool clang::interp::This ( InterpState S,
CodePtr  OpPC 
)
inline

◆ VirtBaseHelper()

bool clang::interp::VirtBaseHelper ( InterpState S,
CodePtr  OpPC,
const RecordDecl Decl,
const Pointer Ptr 
)
inline

Definition at line 1010 of file Interp.h.

Referenced by GetPtrThisVirtBase(), and GetPtrVirtBase().

◆ Zero()

template<PrimType Name, class T = typename PrimConv<Name>::T>
bool clang::interp::Zero ( InterpState S,
CodePtr  OpPC 
)

Definition at line 1357 of file Interp.h.