clang 20.0.0git
|
Classes | |
class | ArrayIndexScope |
struct | BitcastBuffer |
Track what bits have been initialized to known values and which ones have indeterminate value. More... | |
struct | BitRange |
A bit range. Both Start and End are inclusive. More... | |
struct | Bits |
A quantity in bits. More... | |
class | Block |
A memory block, either on the stack or in the heap. More... | |
struct | BlockPointer |
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... | |
struct | Bytes |
A quantity in bytes. More... | |
class | CodePtr |
Pointer into the code segment. More... | |
class | Compiler |
Compilation context for expressions. 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 | DestructorScope |
class | DynamicAllocator |
Manages dynamic memory allocations done during bytecode interpretation. More... | |
class | EvalEmitter |
An emitter which evaluates opcodes as they are emitted. More... | |
class | EvaluationResult |
Defines the result of an evaluation. More... | |
class | FixedPoint |
Wrapper around fixed point types. More... | |
class | Floating |
class | Frame |
Base class for stack frames, shared between VM and walker. More... | |
class | Function |
Bytecode function. More... | |
class | FunctionPointer |
struct | GlobalInlineDescriptor |
Descriptor used for global variables. More... | |
struct | InitLink |
class | InitLinkScope |
struct | InitMap |
Bitfield tracking the initialisation status of elements of primitive arrays. More... | |
class | InitStackScope |
struct | InlineDescriptor |
Inline descriptor embedded in structures and arrays. More... | |
class | Integral |
Wrapper around numeric types. More... | |
class | IntegralAP |
class | InterpFrame |
Frame storing local variables. More... | |
class | InterpStack |
Stack frame storing temporaries and parameters. More... | |
class | InterpState |
Interpreter context. More... | |
class | InterpStateCCOverride |
struct | IntPointer |
class | LabelScope |
Scope managing label targets. More... | |
class | LocalScope |
Generic scope for local variables. More... | |
class | LoopScope |
Sets the context for break/continue statements. More... | |
class | MemberPointer |
class | OptionScope |
Scope used to handle initialization methods. More... | |
struct | ParamOffset |
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_FixedPoint > |
struct | PrimConv< PT_Float > |
struct | PrimConv< PT_FnPtr > |
struct | PrimConv< PT_IntAP > |
struct | PrimConv< PT_IntAPS > |
struct | PrimConv< PT_MemberPtr > |
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... | |
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 | SourceLocScope |
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 | StmtExprScope |
class | SwitchScope |
struct | VarCreationState |
State encapsulating if a the variable creation has been successful, unsuccessful, or no variable has been created at all. More... | |
class | VariableScope |
Scope chain managing the variable lifetimes. More... | |
Typedefs | |
using | DeclTy = llvm::PointerUnion< const Decl *, const Expr * > |
using | InitMapPtr = std::optional< std::pair< bool, std::shared_ptr< InitMap > > > |
using | BlockCtorFn = void(*)(Block *Storage, std::byte *FieldPtr, bool IsConst, bool IsMutable, bool IsActive, bool InUnion, const Descriptor *FieldDesc) |
Invoked whenever a block is created. | |
using | BlockDtorFn = void(*)(Block *Storage, std::byte *FieldPtr, const Descriptor *FieldDesc) |
Invoked when a block is destroyed. | |
using | BlockMoveFn = void(*)(Block *Storage, std::byte *SrcFieldPtr, std::byte *DstFieldPtr, const Descriptor *FieldDesc) |
Invoked when a block with pointers referencing it goes out of scope. | |
using | APInt = llvm::APInt |
using | APSInt = llvm::APSInt |
using | APFloat = llvm::APFloat |
using | FunctionDeclTy = llvm::PointerUnion< const FunctionDecl *, const BlockExpr * > |
using | FixedPointSemantics = llvm::FixedPointSemantics |
using | CompareFn = llvm::function_ref< bool(ComparisonCategoryResult)> |
using | SourceMap = std::vector< std::pair< unsigned, SourceInfo > > |
Enumerations | |
enum class | Endian { Little , Big } |
enum class | GlobalInitState { Initialized , NoInitializer , InitializerFailed } |
enum class | ShiftDir { Left , Right } |
enum class | ArithOp { Add , Sub } |
enum class | PushVal : bool { No , Yes } |
enum class | IncDecOp { Inc , Dec } |
enum | Opcode : uint32_t |
enum class | Storage { Block , Int , Fn } |
enum | PrimType : unsigned { PT_Sint8 = 0 , PT_Uint8 = 1 , PT_Sint16 = 2 , PT_Uint16 = 3 , PT_Sint32 = 4 , PT_Uint32 = 5 , PT_Sint64 = 6 , PT_Uint64 = 7 , PT_IntAP = 8 , PT_IntAPS = 9 , PT_Bool = 10 , PT_FixedPoint = 11 , PT_Float = 12 , PT_Ptr = 13 , PT_FnPtr = 14 , PT_MemberPtr = 15 } |
Enumeration of the primitive types of the VM. More... | |
enum class | CastKind : uint8_t { Reinterpret , Atomic } |
Functions | |
llvm::raw_ostream & | operator<< (llvm::raw_ostream &OS, const Boolean &B) |
static void | DiagnoseUninitializedSubobject (InterpState &S, SourceLocation Loc, const FieldDecl *SubObjDecl) |
static bool | CheckFieldsInitialized (InterpState &S, SourceLocation Loc, const Pointer &BasePtr, const Record *R) |
static bool | CheckArrayInitialized (InterpState &S, SourceLocation Loc, const Pointer &BasePtr, const ConstantArrayType *CAT) |
static void | collectBlocks (const Pointer &Ptr, llvm::SetVector< const Block * > &Blocks) |
FixedPoint | getSwappedBytes (FixedPoint F) |
llvm::raw_ostream & | operator<< (llvm::raw_ostream &OS, FixedPoint F) |
llvm::raw_ostream & | operator<< (llvm::raw_ostream &OS, Floating F) |
Floating | getSwappedBytes (Floating F) |
llvm::raw_ostream & | operator<< (llvm::raw_ostream &OS, FunctionPointer FP) |
template<unsigned Bits, bool Signed> | |
llvm::raw_ostream & | operator<< (llvm::raw_ostream &OS, Integral< Bits, Signed > I) |
template<bool Signed> | |
llvm::raw_ostream & | operator<< (llvm::raw_ostream &OS, IntegralAP< Signed > I) |
template<bool Signed> | |
IntegralAP< Signed > | getSwappedBytes (IntegralAP< Signed > F) |
static void | popArg (InterpState &S, const Expr *Arg) |
void | cleanupAfterFunctionCall (InterpState &S, CodePtr OpPC, const Function *Func) |
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 | CheckConstant (InterpState &S, CodePtr OpPC, const Descriptor *Desc) |
Checks if the Descriptor is of a constexpr or const global variable. | |
static bool | CheckConstant (InterpState &S, CodePtr OpPC, const Pointer &Ptr) |
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 | CheckSubobject (InterpState &S, CodePtr OpPC, const Pointer &Ptr, CheckSubobjectKind CSK) |
Checks if Ptr is a one-past-the-end pointer. | |
bool | CheckDowncast (InterpState &S, CodePtr OpPC, const Pointer &Ptr, uint32_t Offset) |
Checks if the dowcast using the given offset is possible with the given pointer. | |
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. | |
static bool | CheckVolatile (InterpState &S, CodePtr OpPC, const Pointer &Ptr, AccessKinds AK) |
bool | CheckInitialized (InterpState &S, CodePtr OpPC, const Pointer &Ptr, AccessKinds AK) |
bool | CheckGlobalInitialized (InterpState &S, CodePtr OpPC, const Pointer &Ptr) |
Check if a global variable is initialized. | |
static bool | CheckWeak (InterpState &S, CodePtr OpPC, const Pointer &Ptr) |
bool | CheckLoad (InterpState &S, CodePtr OpPC, const Pointer &Ptr, AccessKinds AK=AK_Read) |
Checks if a value can be loaded from a block. | |
bool | CheckFinalLoad (InterpState &S, CodePtr OpPC, const Pointer &Ptr) |
This is not used by any of the opcodes directly. | |
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 | CheckCallDepth (InterpState &S, CodePtr OpPC) |
Checks if calling the currently active function would exceed the allowed call depth. | |
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. | |
bool | CheckFloatResult (InterpState &S, CodePtr OpPC, const Floating &Result, APFloat::opStatus Status, FPOptions FPO) |
Checks if the result of a floating-point operation is valid in the current context. | |
bool | CheckDynamicMemoryAllocation (InterpState &S, CodePtr OpPC) |
Checks if dynamic memory allocation is available in the current language mode. | |
bool | CheckNewDeleteForms (InterpState &S, CodePtr OpPC, DynamicAllocator::Form AllocForm, DynamicAllocator::Form DeleteForm, const Descriptor *D, const Expr *NewExpr) |
Diagnose mismatched new[]/delete or new/delete[] pairs. | |
bool | CheckDeleteSource (InterpState &S, CodePtr OpPC, const Expr *Source, const Pointer &Ptr) |
Check the source of the pointer passed to delete/delete[] has actually been heap allocated by us. | |
bool | CheckDeclRef (InterpState &S, CodePtr OpPC, const DeclRefExpr *DR) |
We aleady know the given DeclRefExpr is invalid for some reason, now figure out why and print appropriate diagnostics. | |
bool | CheckDummy (InterpState &S, CodePtr OpPC, const Pointer &Ptr, AccessKinds AK) |
Checks if a pointer is a dummy pointer. | |
bool | CheckNonNullArgs (InterpState &S, CodePtr OpPC, const Function *F, const CallExpr *CE, unsigned ArgSize) |
Checks if all the arguments annotated as 'nonnull' are in fact not null. | |
static bool | runRecordDestructor (InterpState &S, CodePtr OpPC, const Pointer &BasePtr, const Descriptor *Desc) |
static bool | RunDestructors (InterpState &S, CodePtr OpPC, const Block *B) |
static bool | hasVirtualDestructor (QualType T) |
bool | Free (InterpState &S, CodePtr OpPC, bool DeleteIsArrayForm, bool IsGlobalDelete) |
void | diagnoseEnumValue (InterpState &S, CodePtr OpPC, const EnumDecl *ED, const APSInt &Value) |
bool | CheckLiteralType (InterpState &S, CodePtr OpPC, const Type *T) |
static bool | checkConstructor (InterpState &S, CodePtr OpPC, const Function *Func, const Pointer &ThisPtr) |
bool | CallVar (InterpState &S, CodePtr OpPC, const Function *Func, uint32_t VarArgSize) |
bool | Call (InterpState &S, CodePtr OpPC, const Function *Func, uint32_t VarArgSize) |
bool | CallVirt (InterpState &S, CodePtr OpPC, const Function *Func, uint32_t VarArgSize) |
bool | CallBI (InterpState &S, CodePtr OpPC, const Function *Func, const CallExpr *CE, uint32_t BuiltinID) |
bool | CallPtr (InterpState &S, CodePtr OpPC, uint32_t ArgSize, const CallExpr *CE) |
bool | CheckNewTypeMismatch (InterpState &S, CodePtr OpPC, const Expr *E, std::optional< uint64_t > ArraySize=std::nullopt) |
Check if the initializer and storage types of a placement-new expression match. | |
bool | InvalidNewDeleteExpr (InterpState &S, CodePtr OpPC, const Expr *E) |
bool | handleFixedPointOverflow (InterpState &S, CodePtr OpPC, const FixedPoint &FP) |
bool | InvalidShuffleVectorIndex (InterpState &S, CodePtr OpPC, uint32_t Index) |
bool | CheckPointerToIntegralCast (InterpState &S, CodePtr OpPC, const Pointer &Ptr, unsigned BitWidth) |
bool | CastPointerIntegralAP (InterpState &S, CodePtr OpPC, uint32_t BitWidth) |
bool | CastPointerIntegralAPS (InterpState &S, CodePtr OpPC, uint32_t BitWidth) |
bool | CheckBitCast (InterpState &S, CodePtr OpPC, bool HasIndeterminateBits, bool TargetIsUCharOrByte) |
bool | Interpret (InterpState &S) |
Interpreter entry point. | |
bool | SetThreeWayComparisonField (InterpState &S, CodePtr OpPC, const Pointer &Ptr, const APSInt &IntValue) |
Sets the given integral value to the pointer, which is of a std::{weak,partial,strong}_ordering type. | |
bool | DoMemcpy (InterpState &S, CodePtr OpPC, const Pointer &Src, Pointer &Dest) |
Copy the contents of Src into Dest. | |
template<typename T > | |
static bool | handleOverflow (InterpState &S, CodePtr OpPC, const T &SrcValue) |
template<ShiftDir Dir, typename LT , typename RT > | |
bool | CheckShift (InterpState &S, CodePtr OpPC, const LT &LHS, 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. | |
template<typename SizeT > | |
bool | CheckArraySize (InterpState &S, CodePtr OpPC, SizeT *NumElements, unsigned ElemSize, bool IsNoThrow) |
bool | InterpretBuiltin (InterpState &S, CodePtr OpPC, const Function *F, const CallExpr *Call, uint32_t BuiltinID) |
Interpret a builtin function. | |
bool | InterpretOffsetOf (InterpState &S, CodePtr OpPC, const OffsetOfExpr *E, llvm::ArrayRef< int64_t > ArrayIndices, int64_t &Result) |
Interpret an offsetof operation. | |
bool | Invalid (InterpState &S, CodePtr OpPC) |
Just emit a diagnostic. | |
template<PrimType Name, class T = typename PrimConv<Name>::T> | |
bool | Ret (InterpState &S, CodePtr &PC) |
bool | RetVoid (InterpState &S, CodePtr &PC) |
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) |
static llvm::RoundingMode | getRoundingMode (FPOptions FPO) |
bool | Addf (InterpState &S, CodePtr OpPC, uint32_t FPOI) |
template<PrimType Name, class T = typename PrimConv<Name>::T> | |
bool | Sub (InterpState &S, CodePtr OpPC) |
bool | Subf (InterpState &S, CodePtr OpPC, uint32_t FPOI) |
template<PrimType Name, class T = typename PrimConv<Name>::T> | |
bool | Mul (InterpState &S, CodePtr OpPC) |
bool | Mulf (InterpState &S, CodePtr OpPC, uint32_t FPOI) |
template<PrimType Name, class T = typename PrimConv<Name>::T> | |
bool | Mulc (InterpState &S, CodePtr OpPC) |
template<PrimType Name, class T = typename PrimConv<Name>::T> | |
bool | Divc (InterpState &S, CodePtr OpPC) |
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, uint32_t FPOI) |
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<IncDecOp Op, PushVal DoPush> | |
bool | IncDecFloatHelper (InterpState &S, CodePtr OpPC, const Pointer &Ptr, uint32_t FPOI) |
bool | Incf (InterpState &S, CodePtr OpPC, uint32_t FPOI) |
bool | IncfPop (InterpState &S, CodePtr OpPC, uint32_t FPOI) |
bool | Decf (InterpState &S, CodePtr OpPC, uint32_t FPOI) |
bool | DecfPop (InterpState &S, CodePtr OpPC, uint32_t FPOI) |
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< FunctionPointer > (InterpState &S, CodePtr OpPC, CompareFn Fn) |
Function pointers cannot be compared in an ordered way. | |
template<> | |
bool | CmpHelperEQ< FunctionPointer > (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<> | |
bool | CmpHelperEQ< MemberPointer > (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 | CMP3 (InterpState &S, CodePtr OpPC, const ComparisonCategoryInfo *CmpInfo) |
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 TopName, PrimType BottomName> | |
bool | Flip (InterpState &S, CodePtr OpPC) |
[Value1, Value2] -> [Value2, Value1] | |
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) |
1) Pops the value from the stack. | |
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 | GetGlobalUnchecked (InterpState &S, CodePtr OpPC, uint32_t I) |
Same as GetGlobal, but without the checks. | |
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) Initializes global with index \I with that | |
bool | InitGlobalTempComp (InterpState &S, CodePtr OpPC, 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, uint32_t FieldOffset) |
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) |
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) Peeks a Pointer 2) Pushes Pointer.atField(Off) on the stack | |
bool | GetPtrFieldPop (InterpState &S, CodePtr OpPC, uint32_t Off) |
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 | GetPtrDerivedPop (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 | GetMemberPtrBasePop (InterpState &S, CodePtr OpPC, int32_t Off) |
bool | GetPtrThisBase (InterpState &S, CodePtr OpPC, uint32_t Off) |
bool | FinishInitPop (InterpState &S, CodePtr OpPC) |
bool | FinishInit (InterpState &S, CodePtr OpPC) |
bool | Dump (InterpState &S, CodePtr OpPC) |
bool | VirtBaseHelper (InterpState &S, CodePtr OpPC, const RecordDecl *Decl, const Pointer &Ptr) |
bool | GetPtrVirtBasePop (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 | Init (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. | |
bool | Memcpy (InterpState &S, CodePtr OpPC) |
bool | ToMemberPtr (InterpState &S, CodePtr OpPC) |
bool | CastMemberPtrPtr (InterpState &S, CodePtr OpPC) |
template<class T , ArithOp Op> | |
bool | OffsetHelper (InterpState &S, CodePtr OpPC, const T &Offset, const Pointer &Ptr, bool IsPointerArith=false) |
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, const Pointer &Ptr) |
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) |
bool | InitScope (InterpState &S, CodePtr OpPC, uint32_t I) |
template<PrimType TIn, PrimType TOut> | |
bool | Cast (InterpState &S, CodePtr OpPC) |
bool | CastFP (InterpState &S, CodePtr OpPC, const llvm::fltSemantics *Sem, llvm::RoundingMode RM) |
1) Pops a Floating from the stack. | |
bool | CastFixedPoint (InterpState &S, CodePtr OpPC, uint32_t FPS) |
template<PrimType Name, class T = typename PrimConv<Name>::T> | |
bool | CastAP (InterpState &S, CodePtr OpPC, uint32_t BitWidth) |
Like Cast(), but we cast to an arbitrary-bitwidth integral, so we need to know what bitwidth the result should be. | |
template<PrimType Name, class T = typename PrimConv<Name>::T> | |
bool | CastAPS (InterpState &S, CodePtr OpPC, uint32_t BitWidth) |
template<PrimType Name, class T = typename PrimConv<Name>::T> | |
bool | CastIntegralFloating (InterpState &S, CodePtr OpPC, const llvm::fltSemantics *Sem, uint32_t FPOI) |
template<PrimType Name, class T = typename PrimConv<Name>::T> | |
bool | CastFloatingIntegral (InterpState &S, CodePtr OpPC, uint32_t FPOI) |
static bool | CastFloatingIntegralAP (InterpState &S, CodePtr OpPC, uint32_t BitWidth, uint32_t FPOI) |
static bool | CastFloatingIntegralAPS (InterpState &S, CodePtr OpPC, uint32_t BitWidth, uint32_t FPOI) |
template<PrimType Name, class T = typename PrimConv<Name>::T> | |
bool | CastPointerIntegral (InterpState &S, CodePtr OpPC) |
template<PrimType Name, class T = typename PrimConv<Name>::T> | |
static bool | CastIntegralFixedPoint (InterpState &S, CodePtr OpPC, uint32_t FPS) |
static bool | CastFloatingFixedPoint (InterpState &S, CodePtr OpPC, uint32_t FPS) |
static bool | CastFixedPointFloating (InterpState &S, CodePtr OpPC, const llvm::fltSemantics *Sem) |
template<PrimType Name, class T = typename PrimConv<Name>::T> | |
static bool | CastFixedPointIntegral (InterpState &S, CodePtr OpPC) |
static bool | PtrPtrCast (InterpState &S, CodePtr OpPC, bool SrcIsVoidPtr) |
template<PrimType Name, class T = typename PrimConv<Name>::T> | |
bool | Zero (InterpState &S, CodePtr OpPC) |
static bool | ZeroIntAP (InterpState &S, CodePtr OpPC, uint32_t BitWidth) |
static bool | ZeroIntAPS (InterpState &S, CodePtr OpPC, uint32_t BitWidth) |
template<PrimType Name, class T = typename PrimConv<Name>::T> | |
bool | Null (InterpState &S, CodePtr OpPC, uint64_t Value, const Descriptor *Desc) |
template<PrimType Name, class T = typename PrimConv<Name>::T> | |
bool | IsNonNull (InterpState &S, CodePtr OpPC) |
bool | This (InterpState &S, CodePtr OpPC) |
bool | RVOPtr (InterpState &S, CodePtr OpPC) |
template<class LT , class RT , ShiftDir Dir> | |
bool | DoShift (InterpState &S, CodePtr OpPC, LT &LHS, RT &RHS) |
template<PrimType NameL, PrimType NameR> | |
bool | Shr (InterpState &S, CodePtr OpPC) |
template<PrimType NameL, PrimType NameR> | |
bool | Shl (InterpState &S, CodePtr OpPC) |
static bool | ShiftFixedPoint (InterpState &S, CodePtr OpPC, bool Left) |
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) |
template<PrimType Name, class T = typename PrimConv<Name>::T> | |
bool | ArrayElem (InterpState &S, CodePtr OpPC, uint32_t Index) |
template<PrimType Name, class T = typename PrimConv<Name>::T> | |
bool | ArrayElemPop (InterpState &S, CodePtr OpPC, uint32_t Index) |
template<PrimType Name, class T = typename PrimConv<Name>::T> | |
bool | CopyArray (InterpState &S, CodePtr OpPC, uint32_t SrcIndex, uint32_t DestIndex, uint32_t Size) |
bool | ArrayDecay (InterpState &S, CodePtr OpPC) |
Just takes a pointer and checks if it's an incomplete array type. | |
bool | GetFnPtr (InterpState &S, CodePtr OpPC, const Function *Func) |
template<PrimType Name, class T = typename PrimConv<Name>::T> | |
bool | GetIntPtr (InterpState &S, CodePtr OpPC, const Descriptor *Desc) |
bool | GetMemberPtr (InterpState &S, CodePtr OpPC, const ValueDecl *D) |
bool | GetMemberPtrBase (InterpState &S, CodePtr OpPC) |
bool | GetMemberPtrDecl (InterpState &S, CodePtr OpPC) |
bool | Unsupported (InterpState &S, CodePtr OpPC) |
bool | Error (InterpState &S, CodePtr OpPC) |
Do nothing and just abort execution. | |
bool | SideEffect (InterpState &S, CodePtr OpPC) |
bool | InvalidCast (InterpState &S, CodePtr OpPC, CastKind Kind, bool Fatal) |
Same here, but only for casts. | |
bool | InvalidDeclRef (InterpState &S, CodePtr OpPC, const DeclRefExpr *DR, bool InitializerFailed) |
bool | SizelessVectorElementSize (InterpState &S, CodePtr OpPC) |
bool | Assume (InterpState &S, CodePtr OpPC) |
template<PrimType Name, class T = typename PrimConv<Name>::T> | |
bool | OffsetOf (InterpState &S, CodePtr OpPC, const OffsetOfExpr *E) |
template<PrimType Name, class T = typename PrimConv<Name>::T> | |
bool | CheckNonNullArg (InterpState &S, CodePtr OpPC) |
template<PrimType Name, class T = typename PrimConv<Name>::T> | |
bool | CheckEnumValue (InterpState &S, CodePtr OpPC, const EnumDecl *ED) |
template<PrimType TIn, PrimType TOut> | |
bool | DecayPtr (InterpState &S, CodePtr OpPC) |
OldPtr -> Integer -> NewPtr. | |
bool | CheckDecl (InterpState &S, CodePtr OpPC, const VarDecl *VD) |
bool | Alloc (InterpState &S, CodePtr OpPC, const Descriptor *Desc) |
template<PrimType Name, class SizeT = typename PrimConv<Name>::T> | |
bool | AllocN (InterpState &S, CodePtr OpPC, PrimType T, const Expr *Source, bool IsNoThrow) |
template<PrimType Name, class SizeT = typename PrimConv<Name>::T> | |
bool | AllocCN (InterpState &S, CodePtr OpPC, const Descriptor *ElementDesc, bool IsNoThrow) |
static bool | IsConstantContext (InterpState &S, CodePtr OpPC) |
static bool | CheckAllocations (InterpState &S, CodePtr OpPC) |
template<PrimType Name, class T = typename PrimConv<Name>::T> | |
bool | CheckNewTypeMismatchArray (InterpState &S, CodePtr OpPC, const Expr *E) |
template<PrimType Name, class T = typename PrimConv<Name>::T> | |
bool | BitCastPrim (InterpState &S, CodePtr OpPC, bool TargetIsUCharOrByte, uint32_t ResultBitWidth, const llvm::fltSemantics *Sem) |
bool | BitCast (InterpState &S, CodePtr OpPC) |
template<typename T > | |
T | ReadArg (InterpState &S, CodePtr &OpPC) |
template<> | |
Floating | ReadArg< Floating > (InterpState &S, CodePtr &OpPC) |
template<> | |
IntegralAP< false > | ReadArg< IntegralAP< false > > (InterpState &S, CodePtr &OpPC) |
template<> | |
IntegralAP< true > | ReadArg< IntegralAP< true > > (InterpState &S, CodePtr &OpPC) |
static unsigned | callArgSize (const InterpState &S, const CallExpr *C) |
template<typename T > | |
static T | getParam (const InterpFrame *Frame, unsigned Index) |
static APSInt | getAPSIntParam (const InterpFrame *Frame, unsigned Index) |
static PrimType | getIntPrimType (const InterpState &S) |
static PrimType | getLongPrimType (const InterpState &S) |
static APSInt | peekToAPSInt (InterpStack &Stk, PrimType T, size_t Offset=0) |
Peek an integer value from the stack into an APSInt. | |
static void | pushInteger (InterpState &S, const APSInt &Val, QualType QT) |
Pushes Val on the stack as the type given by QT . | |
template<typename T > | |
static void | pushInteger (InterpState &S, T Val, QualType QT) |
static void | assignInteger (Pointer &Dest, PrimType ValueT, const APSInt &Value) |
static bool | retPrimValue (InterpState &S, CodePtr OpPC, std::optional< PrimType > &T) |
static void | diagnoseNonConstexprBuiltin (InterpState &S, CodePtr OpPC, unsigned ID) |
static bool | interp__builtin_is_constant_evaluated (InterpState &S, CodePtr OpPC, const InterpFrame *Frame, const CallExpr *Call) |
static bool | interp__builtin_strcmp (InterpState &S, CodePtr OpPC, const InterpFrame *Frame, const Function *Func, const CallExpr *Call) |
static bool | interp__builtin_strlen (InterpState &S, CodePtr OpPC, const InterpFrame *Frame, const Function *Func, const CallExpr *Call) |
static bool | interp__builtin_nan (InterpState &S, CodePtr OpPC, const InterpFrame *Frame, const Function *F, bool Signaling) |
static bool | interp__builtin_inf (InterpState &S, CodePtr OpPC, const InterpFrame *Frame, const Function *F) |
static bool | interp__builtin_copysign (InterpState &S, CodePtr OpPC, const InterpFrame *Frame, const Function *F) |
static bool | interp__builtin_fmin (InterpState &S, CodePtr OpPC, const InterpFrame *Frame, const Function *F, bool IsNumBuiltin) |
static bool | interp__builtin_fmax (InterpState &S, CodePtr OpPC, const InterpFrame *Frame, const Function *Func, bool IsNumBuiltin) |
static bool | interp__builtin_isnan (InterpState &S, CodePtr OpPC, const InterpFrame *Frame, const Function *F, const CallExpr *Call) |
Defined as __builtin_isnan(...), to accommodate the fact that it can take a float, double, long double, etc. | |
static bool | interp__builtin_issignaling (InterpState &S, CodePtr OpPC, const InterpFrame *Frame, const Function *F, const CallExpr *Call) |
static bool | interp__builtin_isinf (InterpState &S, CodePtr OpPC, const InterpFrame *Frame, const Function *F, bool CheckSign, const CallExpr *Call) |
static bool | interp__builtin_isfinite (InterpState &S, CodePtr OpPC, const InterpFrame *Frame, const Function *F, const CallExpr *Call) |
static bool | interp__builtin_isnormal (InterpState &S, CodePtr OpPC, const InterpFrame *Frame, const Function *F, const CallExpr *Call) |
static bool | interp__builtin_issubnormal (InterpState &S, CodePtr OpPC, const InterpFrame *Frame, const Function *F, const CallExpr *Call) |
static bool | interp__builtin_iszero (InterpState &S, CodePtr OpPC, const InterpFrame *Frame, const Function *F, const CallExpr *Call) |
static bool | interp__builtin_signbit (InterpState &S, CodePtr OpPC, const InterpFrame *Frame, const Function *F, const CallExpr *Call) |
static bool | interp_floating_comparison (InterpState &S, CodePtr OpPC, const InterpFrame *Frame, const Function *F, const CallExpr *Call) |
static bool | interp__builtin_isfpclass (InterpState &S, CodePtr OpPC, const InterpFrame *Frame, const Function *Func, const CallExpr *Call) |
First parameter to __builtin_isfpclass is the floating value, the second one is an integral value. | |
static bool | interp__builtin_fpclassify (InterpState &S, CodePtr OpPC, const InterpFrame *Frame, const Function *Func, const CallExpr *Call) |
Five int values followed by one floating value. | |
static bool | interp__builtin_fabs (InterpState &S, CodePtr OpPC, const InterpFrame *Frame, const Function *Func) |
static bool | interp__builtin_abs (InterpState &S, CodePtr OpPC, const InterpFrame *Frame, const Function *Func, const CallExpr *Call) |
static bool | interp__builtin_popcount (InterpState &S, CodePtr OpPC, const InterpFrame *Frame, const Function *Func, const CallExpr *Call) |
static bool | interp__builtin_parity (InterpState &S, CodePtr OpPC, const InterpFrame *Frame, const Function *Func, const CallExpr *Call) |
static bool | interp__builtin_clrsb (InterpState &S, CodePtr OpPC, const InterpFrame *Frame, const Function *Func, const CallExpr *Call) |
static bool | interp__builtin_bitreverse (InterpState &S, CodePtr OpPC, const InterpFrame *Frame, const Function *Func, const CallExpr *Call) |
static bool | interp__builtin_classify_type (InterpState &S, CodePtr OpPC, const InterpFrame *Frame, const Function *Func, const CallExpr *Call) |
static bool | interp__builtin_expect (InterpState &S, CodePtr OpPC, const InterpFrame *Frame, const Function *Func, const CallExpr *Call) |
static bool | interp__builtin_rotate (InterpState &S, CodePtr OpPC, const InterpFrame *Frame, const Function *Func, const CallExpr *Call, bool Right) |
rotateleft(value, amount) | |
static bool | interp__builtin_ffs (InterpState &S, CodePtr OpPC, const InterpFrame *Frame, const Function *Func, const CallExpr *Call) |
static bool | interp__builtin_addressof (InterpState &S, CodePtr OpPC, const InterpFrame *Frame, const Function *Func, const CallExpr *Call) |
static bool | interp__builtin_move (InterpState &S, CodePtr OpPC, const InterpFrame *Frame, const Function *Func, const CallExpr *Call) |
static bool | interp__builtin_eh_return_data_regno (InterpState &S, CodePtr OpPC, const InterpFrame *Frame, const Function *Func, const CallExpr *Call) |
static bool | noopPointer (InterpState &S, CodePtr OpPC, const InterpFrame *Frame, const Function *Func, const CallExpr *Call) |
Just takes the first Argument to the call and puts it on the stack. | |
static bool | interp__builtin_overflowop (InterpState &S, CodePtr OpPC, const InterpFrame *Frame, const Function *Func, const CallExpr *Call) |
static bool | interp__builtin_carryop (InterpState &S, CodePtr OpPC, const InterpFrame *Frame, const Function *Func, const CallExpr *Call) |
Three integral values followed by a pointer (lhs, rhs, carry, carryOut). | |
static bool | interp__builtin_clz (InterpState &S, CodePtr OpPC, const InterpFrame *Frame, const Function *Func, const CallExpr *Call) |
static bool | interp__builtin_ctz (InterpState &S, CodePtr OpPC, const InterpFrame *Frame, const Function *Func, const CallExpr *Call) |
static bool | interp__builtin_bswap (InterpState &S, CodePtr OpPC, const InterpFrame *Frame, const Function *Func, const CallExpr *Call) |
static bool | interp__builtin_atomic_lock_free (InterpState &S, CodePtr OpPC, const InterpFrame *Frame, const Function *Func, const CallExpr *Call) |
bool __atomic_always_lock_free(size_t, void const volatile*) bool __atomic_is_lock_free(size_t, void const volatile*) bool __c11_atomic_is_lock_free(size_t) | |
static bool | interp__builtin_complex (InterpState &S, CodePtr OpPC, const InterpFrame *Frame, const Function *Func, const CallExpr *Call) |
__builtin_complex(Float A, float B); | |
static bool | interp__builtin_is_aligned_up_down (InterpState &S, CodePtr OpPC, const InterpFrame *Frame, const Function *Func, const CallExpr *Call) |
__builtin_is_aligned() __builtin_align_up() __builtin_align_down() The first parameter is either an integer or a pointer. | |
static bool | interp__builtin_assume_aligned (InterpState &S, CodePtr OpPC, const InterpFrame *Frame, const Function *Func, const CallExpr *Call) |
__builtin_assume_aligned(Ptr, Alignment[, ExtraOffset]) | |
static bool | interp__builtin_ia32_bextr (InterpState &S, CodePtr OpPC, const InterpFrame *Frame, const Function *Func, const CallExpr *Call) |
static bool | interp__builtin_ia32_bzhi (InterpState &S, CodePtr OpPC, const InterpFrame *Frame, const Function *Func, const CallExpr *Call) |
static bool | interp__builtin_ia32_lzcnt (InterpState &S, CodePtr OpPC, const InterpFrame *Frame, const Function *Func, const CallExpr *Call) |
static bool | interp__builtin_ia32_tzcnt (InterpState &S, CodePtr OpPC, const InterpFrame *Frame, const Function *Func, const CallExpr *Call) |
static bool | interp__builtin_ia32_pdep (InterpState &S, CodePtr OpPC, const InterpFrame *Frame, const Function *Func, const CallExpr *Call) |
static bool | interp__builtin_ia32_pext (InterpState &S, CodePtr OpPC, const InterpFrame *Frame, const Function *Func, const CallExpr *Call) |
static bool | interp__builtin_ia32_addcarry_subborrow (InterpState &S, CodePtr OpPC, const InterpFrame *Frame, const Function *Func, const CallExpr *Call) |
static bool | interp__builtin_os_log_format_buffer_size (InterpState &S, CodePtr OpPC, const InterpFrame *Frame, const Function *Func, const CallExpr *Call) |
static bool | interp__builtin_ptrauth_string_discriminator (InterpState &S, CodePtr OpPC, const InterpFrame *Frame, const Function *Func, const CallExpr *Call) |
static bool | interp__builtin_constant_p (InterpState &S, CodePtr OpPC, const InterpFrame *Frame, const Function *Func, const CallExpr *Call) |
static bool | interp__builtin_operator_new (InterpState &S, CodePtr OpPC, const InterpFrame *Frame, const Function *Func, const CallExpr *Call) |
static bool | interp__builtin_operator_delete (InterpState &S, CodePtr OpPC, const InterpFrame *Frame, const Function *Func, const CallExpr *Call) |
static bool | interp__builtin_arithmetic_fence (InterpState &S, CodePtr OpPC, const InterpFrame *Frame, const Function *Func, const CallExpr *Call) |
static bool | interp__builtin_vector_reduce (InterpState &S, CodePtr OpPC, const InterpFrame *Frame, const Function *Func, const CallExpr *Call) |
static bool | interp__builtin_elementwise_popcount (InterpState &S, CodePtr OpPC, const InterpFrame *Frame, const Function *Func, const CallExpr *Call) |
Can be called with an integer or vector as the first and only parameter. | |
static bool | interp__builtin_memcpy (InterpState &S, CodePtr OpPC, const InterpFrame *Frame, const Function *Func, const CallExpr *Call) |
static bool | isOneByteCharacterType (QualType T) |
Determine if T is a character type for which we guarantee that sizeof(T) == 1. | |
static bool | interp__builtin_memcmp (InterpState &S, CodePtr OpPC, const InterpFrame *Frame, const Function *Func, const CallExpr *Call) |
static bool | copyComposite (InterpState &S, CodePtr OpPC, const Pointer &Src, Pointer &Dest, bool Activate) |
static bool | copyRecord (InterpState &S, CodePtr OpPC, const Pointer &Src, Pointer &Dest, bool Activate=false) |
static void | swapBytes (std::byte *M, size_t N) |
bool | DoBitCast (InterpState &S, CodePtr OpPC, const Pointer &Ptr, std::byte *Buff, Bits BitWidth, Bits FullBitWidth, bool &HasIndeterminateBits) |
bool | DoBitCastPtr (InterpState &S, CodePtr OpPC, const Pointer &FromPtr, Pointer &ToPtr) |
bool | DoBitCastPtr (InterpState &S, CodePtr OpPC, const Pointer &FromPtr, Pointer &ToPtr, size_t Size) |
bool | readPointerToBuffer (const Context &Ctx, const Pointer &FromPtr, BitcastBuffer &Buffer, bool ReturnOnUninit) |
bool | DoMemcpy (InterpState &S, CodePtr OpPC, const Pointer &SrcPtr, const Pointer &DestPtr, Bits Size) |
llvm::BitVector | collectNonNullArgs (const FunctionDecl *F, const llvm::ArrayRef< const Expr * > &Args) |
llvm::raw_ostream & | operator<< (llvm::raw_ostream &OS, MemberPointer FP) |
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 bool | isPtrType (PrimType T) |
llvm::raw_ostream & | operator<< (llvm::raw_ostream &OS, interp::CastKind CK) |
constexpr bool | isIntegralType (PrimType T) |
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) |
using clang::interp::APFloat = typedef llvm::APFloat |
Definition at line 23 of file Floating.h.
typedef llvm::APInt clang::interp::APInt |
Definition at line 19 of file FixedPoint.h.
typedef llvm::APSInt clang::interp::APSInt |
Definition at line 20 of file FixedPoint.h.
using clang::interp::BlockCtorFn = typedef void (*)(Block *Storage, std::byte *FieldPtr, bool IsConst, bool IsMutable, bool IsActive, bool InUnion, 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 35 of file Descriptor.h.
using clang::interp::BlockDtorFn = typedef void (*)(Block *Storage, std::byte *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 41 of file Descriptor.h.
using clang::interp::BlockMoveFn = typedef void (*)(Block *Storage, std::byte *SrcFieldPtr, std::byte *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 48 of file Descriptor.h.
using clang::interp::CompareFn = typedef llvm::function_ref<bool(ComparisonCategoryResult)> |
using clang::interp::DeclTy = typedef llvm::PointerUnion<const Decl *, const Expr *> |
Definition at line 29 of file Descriptor.h.
using clang::interp::FixedPointSemantics = typedef llvm::FixedPointSemantics |
using clang::interp::FunctionDeclTy = typedef llvm::PointerUnion<const FunctionDecl *, const BlockExpr *> |
Definition at line 59 of file Function.h.
using clang::interp::InitMapPtr = typedef std::optional<std::pair<bool, std::shared_ptr<InitMap> >> |
Definition at line 30 of file Descriptor.h.
using clang::interp::SourceMap = typedef std::vector<std::pair<unsigned, SourceInfo> > |
|
strong |
|
strong |
Enumerator | |
---|---|
Reinterpret | |
Atomic |
Definition at line 57 of file PrimType.h.
|
strong |
Enumerator | |
---|---|
Little | |
Big |
Definition at line 19 of file BitcastBuffer.h.
|
strong |
Enumerator | |
---|---|
Initialized | |
NoInitializer | |
InitializerFailed |
Definition at line 52 of file Descriptor.h.
|
strong |
enum clang::interp::Opcode : uint32_t |
enum clang::interp::PrimType : unsigned |
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_IntAP | |
PT_IntAPS | |
PT_Bool | |
PT_FixedPoint | |
PT_Float | |
PT_Ptr | |
PT_FnPtr | |
PT_MemberPtr |
Definition at line 34 of file PrimType.h.
|
strong |
|
strong |
|
strong |
bool clang::interp::Add | ( | InterpState & | S, |
CodePtr | OpPC | ||
) |
|
inline |
Definition at line 416 of file Interp.h.
References clang::interp::Floating::add(), CheckFloatResult(), clang::FPOptions::getFromOpaqueInt(), getRoundingMode(), and clang::Result.
bool clang::interp::AddOffset | ( | InterpState & | S, |
CodePtr | OpPC | ||
) |
Definition at line 2052 of file Interp.h.
References clang::interp::Pointer::expand(), and clang::T.
bool clang::interp::AddSubMulHelper | ( | InterpState & | S, |
CodePtr | OpPC, | ||
unsigned | Bits, | ||
const T & | LHS, | ||
const T & | RHS | ||
) |
Definition at line 363 of file Interp.h.
References E, clang::Expr::getExprLoc(), clang::Stmt::getSourceRange(), clang::Expr::getType(), handleFixedPointOverflow(), handleOverflow(), Loc, clang::Result, clang::T, and toString().
Aligns a size to the pointer alignment.
Definition at line 131 of file PrimType.h.
Referenced by aligned(), callArgSize(), CallPtr(), CheckNonNullArgs(), clang::interp::ByteCodeEmitter::compileFunc(), clang::interp::ByteCodeEmitter::compileObjCBlock(), clang::interp::ByteCodeEmitter::createLocal(), clang::interp::InterpFrame::describe(), clang::interp::InterpStack::dump(), emit(), clang::interp::ByteCodeEmitter::emitLabel(), emitSerialized(), clang::interp::Program::getOrCreateRecord(), clang::interp::Function::getWrittenArgSize(), interp__builtin_assume_aligned(), interp__builtin_atomic_lock_free(), interp__builtin_carryop(), interp__builtin_complex(), interp__builtin_expect(), interp__builtin_fpclassify(), interp__builtin_ia32_bextr(), interp__builtin_ia32_bzhi(), interp__builtin_ia32_pdep(), interp__builtin_ia32_pext(), interp__builtin_isfpclass(), interp__builtin_overflowop(), interp__builtin_rotate(), interp_floating_comparison(), peekToAPSInt(), clang::interp::CodePtr::read(), ReadArg< Floating >(), ReadArg< Floating >(), clang::interp::Compiler< Emitter >::VisitCallExpr(), clang::interp::Compiler< Emitter >::VisitCXXConstructExpr(), and clang::interp::Compiler< Emitter >::VisitCXXInheritedCtorInitExpr().
|
inlinestatic |
Definition at line 138 of file PrimType.h.
Definition at line 135 of file PrimType.h.
References align().
Referenced by aligned(), emit(), clang::interp::ByteCodeEmitter::emitLabel(), emitSerialized(), clang::interp::InterpStack::peek(), and clang::interp::CodePtr::read().
|
inline |
Definition at line 2938 of file Interp.h.
References CheckDynamicMemoryAllocation(), and clang::interp::DynamicAllocator::NonArray.
Referenced by clang::interp::DynamicAllocator::cleanup().
|
inline |
Definition at line 2981 of file Interp.h.
References clang::interp::DynamicAllocator::Array, CheckArraySize(), CheckDynamicMemoryAllocation(), and clang::interp::Descriptor::getSize().
|
inline |
Definition at line 2955 of file Interp.h.
References clang::interp::DynamicAllocator::Array, CheckArraySize(), CheckDynamicMemoryAllocation(), primSize(), and clang::T.
|
inline |
Just takes a pointer and checks if it's an incomplete array type.
Definition at line 2722 of file Interp.h.
References clang::interp::Pointer::atIndex(), CheckRange(), clang::CSK_ArrayToPointer, E, clang::interp::Pointer::isRoot(), clang::interp::Pointer::isUnknownSizeArray(), and clang::interp::Pointer::isZero().
|
inline |
Definition at line 2678 of file Interp.h.
References clang::interp::Pointer::atIndex(), CheckLoad(), clang::interp::Pointer::deref(), clang::interp::Pointer::getFieldDesc(), clang::interp::Descriptor::getPrimType(), and clang::T.
|
inline |
Definition at line 2690 of file Interp.h.
References clang::interp::Pointer::atIndex(), CheckLoad(), clang::interp::Pointer::deref(), clang::interp::Pointer::getFieldDesc(), clang::interp::Descriptor::getPrimType(), and clang::T.
|
inline |
Definition at line 2646 of file Interp.h.
References CheckArray(), NarrowPtr(), and clang::T.
|
inline |
Definition at line 2662 of file Interp.h.
References CheckArray(), NarrowPtr(), and clang::T.
|
static |
Definition at line 117 of file InterpBuiltin.cpp.
References clang::interp::Pointer::deref(), INT_TYPE_SWITCH_NO_BOOL, and clang::T.
Referenced by interp__builtin_carryop(), interp__builtin_ia32_addcarry_subborrow(), and interp__builtin_overflowop().
|
inline |
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 603 of file Interp.h.
References clang::Result, and clang::T.
|
inline |
Definition at line 3077 of file Interp.h.
References CheckLoad(), and DoBitCastPtr().
|
inline |
Definition at line 3033 of file Interp.h.
References CheckBitCast(), CheckLoad(), DoBitCast(), and clang::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 620 of file Interp.h.
References clang::Result, and clang::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 637 of file Interp.h.
References clang::Result, and clang::T.
bool clang::interp::Call | ( | InterpState & | S, |
CodePtr | OpPC, | ||
const Function * | Func, | ||
uint32_t | VarArgSize | ||
) |
Definition at line 1223 of file Interp.cpp.
References CheckCallable(), CheckCallDepth(), checkConstructor(), CheckInvoke(), cleanupAfterFunctionCall(), clang::Func, Interpret(), primSize(), and PT_Ptr.
|
static |
Definition at line 25 of file InterpBuiltin.cpp.
References align(), clang::C, E, and primSize().
Referenced by interp__builtin_assume_aligned(), interp__builtin_clz(), interp__builtin_ctz(), and interp__builtin_is_aligned_up_down().
bool clang::interp::CallBI | ( | InterpState & | S, |
CodePtr | OpPC, | ||
const Function * | Func, | ||
const CallExpr * | CE, | ||
uint32_t | BuiltinID | ||
) |
Definition at line 1361 of file Interp.cpp.
References clang::Func, and InterpretBuiltin().
bool clang::interp::CallPtr | ( | InterpState & | S, |
CodePtr | OpPC, | ||
uint32_t | ArgSize, | ||
const CallExpr * | CE | ||
) |
Definition at line 1387 of file Interp.cpp.
References align(), clang::Call, CallVirt(), CheckNonNullArgs(), E, clang::interp::FunctionPointer::getFunction(), clang::Stmt::getSourceRange(), clang::Expr::getType(), clang::Invalid, clang::interp::FunctionPointer::isValid(), primSize(), and PT_Ptr.
bool clang::interp::CallVar | ( | InterpState & | S, |
CodePtr | OpPC, | ||
const Function * | Func, | ||
uint32_t | VarArgSize | ||
) |
Definition at line 1176 of file Interp.cpp.
References CheckCallable(), CheckCallDepth(), CheckInvoke(), clang::Func, Interpret(), primSize(), and PT_Ptr.
bool clang::interp::CallVirt | ( | InterpState & | S, |
CodePtr | OpPC, | ||
const Function * | Func, | ||
uint32_t | VarArgSize | ||
) |
Definition at line 1287 of file Interp.cpp.
References clang::Call, E, clang::Func, clang::Type::getAsRecordDecl(), clang::interp::Pointer::getBase(), clang::Sema::getLangOpts(), clang::Type::getPointeeType(), GetPtrBasePop(), clang::FunctionDecl::getReturnType(), clang::Stmt::getSourceRange(), clang::interp::Pointer::getType(), clang::interp::Pointer::isBaseClass(), clang::Type::isPointerOrReferenceType(), clang::CXXMethodDecl::isVirtual(), primSize(), and PT_Ptr.
Referenced by CallPtr().
bool clang::interp::Cast | ( | InterpState & | S, |
CodePtr | OpPC | ||
) |
bool clang::interp::CastAP | ( | InterpState & | S, |
CodePtr | OpPC, | ||
uint32_t | BitWidth | ||
) |
Like Cast(), but we cast to an arbitrary-bitwidth integral, so we need to know what bitwidth the result should be.
Definition at line 2217 of file Interp.h.
References clang::interp::IntegralAP< Signed >::from(), and clang::T.
bool clang::interp::CastAPS | ( | InterpState & | S, |
CodePtr | OpPC, | ||
uint32_t | BitWidth | ||
) |
Definition at line 2224 of file Interp.h.
References clang::interp::IntegralAP< Signed >::from(), and clang::T.
|
inline |
Definition at line 2198 of file Interp.h.
References handleFixedPointOverflow(), and clang::Result.
|
inlinestatic |
|
inlinestatic |
Definition at line 2368 of file Interp.h.
References handleOverflow(), Int, and clang::T.
|
inlinestatic |
Definition at line 2342 of file Interp.h.
References clang::Float, clang::interp::FixedPoint::from(), handleFixedPointOverflow(), and clang::Result.
bool clang::interp::CastFloatingIntegral | ( | InterpState & | S, |
CodePtr | OpPC, | ||
uint32_t | FPOI | ||
) |
Definition at line 2246 of file Interp.h.
References CheckFloatResult(), clang::interp::Floating::convertToInteger(), E, clang::interp::Floating::getAPFloat(), clang::FPOptions::getFromOpaqueInt(), clang::Expr::getType(), clang::interp::Floating::isNonZero(), clang::Result, and clang::T.
|
inlinestatic |
Definition at line 2276 of file Interp.h.
References CheckFloatResult(), clang::interp::Floating::convertToInteger(), clang::interp::Floating::getAPFloat(), clang::FPOptions::getFromOpaqueInt(), handleOverflow(), clang::interp::Floating::isFinite(), and clang::Result.
|
inlinestatic |
Definition at line 2292 of file Interp.h.
References CheckFloatResult(), clang::interp::Floating::convertToInteger(), clang::interp::Floating::getAPFloat(), clang::FPOptions::getFromOpaqueInt(), handleOverflow(), clang::interp::Floating::isFinite(), and clang::Result.
|
inline |
1) Pops a Floating from the stack.
2) Pushes a new floating on the stack that uses the given semantics.
Definition at line 2190 of file Interp.h.
References clang::Result, and clang::interp::Floating::toSemantics().
|
inlinestatic |
Definition at line 2325 of file Interp.h.
References clang::interp::FixedPoint::from(), handleFixedPointOverflow(), Int, clang::Result, and clang::T.
bool clang::interp::CastIntegralFloating | ( | InterpState & | S, |
CodePtr | OpPC, | ||
const llvm::fltSemantics * | Sem, | ||
uint32_t | FPOI | ||
) |
Definition at line 2231 of file Interp.h.
References CheckFloatResult(), clang::interp::Floating::fromIntegral(), clang::FPOptions::getFromOpaqueInt(), getRoundingMode(), clang::Result, and clang::T.
|
inline |
bool clang::interp::CastPointerIntegral | ( | InterpState & | S, |
CodePtr | OpPC | ||
) |
Definition at line 2314 of file Interp.h.
References CheckPointerToIntegralCast(), clang::interp::Pointer::getIntegerRepresentation(), and clang::T.
bool clang::interp::CastPointerIntegralAP | ( | InterpState & | S, |
CodePtr | OpPC, | ||
uint32_t | BitWidth | ||
) |
Definition at line 1559 of file Interp.cpp.
References CheckPointerToIntegralCast(), clang::interp::IntegralAP< Signed >::from(), and clang::interp::Pointer::getIntegerRepresentation().
bool clang::interp::CastPointerIntegralAPS | ( | InterpState & | S, |
CodePtr | OpPC, | ||
uint32_t | BitWidth | ||
) |
Definition at line 1570 of file Interp.cpp.
References CheckPointerToIntegralCast(), clang::interp::IntegralAP< Signed >::from(), and clang::interp::Pointer::getIntegerRepresentation().
|
inlinestatic |
bool clang::interp::CheckArray | ( | InterpState & | S, |
CodePtr | OpPC, | ||
const Pointer & | Ptr | ||
) |
Checks if the array is offsetable.
Definition at line 298 of file Interp.cpp.
References E, and clang::interp::Pointer::isUnknownSizeArray().
Referenced by ArrayElemPtr(), ArrayElemPtrPop(), GetPtrField(), GetPtrFieldPop(), interp__builtin_strlen(), and OffsetHelper().
|
static |
Definition at line 66 of file EvaluationResult.cpp.
References clang::interp::Pointer::atIndex(), CheckArrayInitialized(), CheckFieldsInitialized(), DiagnoseUninitializedSubobject(), clang::ArrayType::getElementType(), clang::interp::Pointer::getElemRecord(), clang::interp::Pointer::getField(), clang::ConstantArrayType::getZExtSize(), clang::interp::Pointer::isInitialized(), clang::Type::isRecordType(), Loc, clang::interp::Pointer::narrow(), and clang::Result.
Referenced by CheckArrayInitialized(), CheckFieldsInitialized(), and clang::interp::EvaluationResult::checkFullyInitialized().
bool clang::interp::CheckArraySize | ( | InterpState & | S, |
CodePtr | OpPC, | ||
SizeT * | NumElements, | ||
unsigned | ElemSize, | ||
bool | IsNoThrow | ||
) |
Definition at line 251 of file Interp.h.
References clang::Sema::getASTContext(), clang::ConstantArrayType::getMaxSizeBits(), Loc, and clang::interp::Descriptor::MaxArrayElemBytes.
bool clang::interp::CheckBitCast | ( | InterpState & | S, |
CodePtr | OpPC, | ||
bool | HasIndeterminateBits, | ||
bool | TargetIsUCharOrByte | ||
) |
Definition at line 1581 of file Interp.cpp.
References E, clang::Sema::getLangOpts(), clang::Stmt::getSourceRange(), and clang::Expr::getType().
Referenced by BitCastPrim().
bool clang::interp::CheckCallable | ( | InterpState & | S, |
CodePtr | OpPC, | ||
const Function * | F | ||
) |
Checks if a method can be called.
Definition at line 679 of file Interp.cpp.
References bool, clang::interp::Function::getDecl(), clang::FunctionDecl::getDefinition(), clang::Sema::getLangOpts(), clang::Decl::getLocation(), clang::FunctionDecl::getStorageClass(), clang::Decl::hasAttr(), clang::interp::Function::hasBody(), clang::FunctionDecl::hasBody(), clang::FunctionDecl::isConstexpr(), clang::interp::Function::isConstexpr(), clang::FunctionDecl::isDefined(), clang::Decl::isInvalidDecl(), clang::interp::Function::isLambdaStaticInvoker(), clang::interp::Function::isVirtual(), Loc, and clang::SC_Extern.
bool clang::interp::CheckCallDepth | ( | InterpState & | S, |
CodePtr | OpPC | ||
) |
Checks if calling the currently active function would exceed the allowed call depth.
Definition at line 750 of file Interp.cpp.
References clang::Sema::getLangOpts().
bool clang::interp::CheckConst | ( | InterpState & | S, |
CodePtr | OpPC, | ||
const Pointer & | Ptr | ||
) |
Checks if a pointer points to const storage.
Definition at line 466 of file Interp.cpp.
References clang::interp::Pointer::block(), clang::Func, clang::interp::Pointer::getType(), clang::interp::Pointer::isBlockPointer(), clang::interp::Pointer::isConst(), clang::interp::Pointer::isLive(), clang::interp::Pointer::isMutable(), and Loc.
Referenced by CheckStore().
bool clang::interp::CheckConstant | ( | InterpState & | S, |
CodePtr | OpPC, | ||
const Descriptor * | Desc | ||
) |
Checks if the Descriptor is of a constexpr or const global variable.
Definition at line 340 of file Interp.cpp.
References clang::interp::Descriptor::asVarDecl(), D, diagnoseNonConstVariable(), clang::Sema::getASTContext(), clang::Sema::getLangOpts(), clang::Decl::getLocation(), clang::Type::getPointeeType(), clang::Invalid, clang::QualType::isConstant(), clang::Type::isIntegralOrEnumerationType(), clang::Type::isPointerOrReferenceType(), and clang::T.
Referenced by CheckConstant(), CheckFinalLoad(), CheckLoad(), and GetGlobal().
|
static |
Definition at line 398 of file Interp.cpp.
References CheckConstant(), clang::interp::Pointer::getDeclDesc(), clang::interp::Pointer::isBlockPointer(), and clang::interp::Pointer::isStatic().
|
static |
Definition at line 1157 of file Interp.cpp.
References D, clang::Func, and clang::interp::Pointer::getFieldDesc().
Referenced by Call().
|
inline |
Definition at line 2919 of file Interp.h.
References clang::Sema::getASTContext(), clang::Decl::getLocation(), clang::VarDecl::getTSCSpec(), clang::VarDecl::isLocalVarDecl(), clang::VarDecl::isStaticLocal(), clang::VarDecl::isUsableInConstantExpressions(), and clang::TSCS_unspecified.
bool clang::interp::CheckDeclRef | ( | InterpState & | S, |
CodePtr | OpPC, | ||
const DeclRefExpr * | DR | ||
) |
We aleady know the given DeclRefExpr is invalid for some reason, now figure out why and print appropriate diagnostics.
Checks why the given DeclRefExpr is invalid.
Definition at line 896 of file Interp.cpp.
References D, diagnoseUnknownDecl(), and clang::DeclRefExpr::getDecl().
Referenced by InvalidDeclRef().
bool clang::interp::CheckDeleteSource | ( | InterpState & | S, |
CodePtr | OpPC, | ||
const Expr * | Source, | ||
const Pointer & | Ptr | ||
) |
Check the source of the pointer passed to delete/delete[] has actually been heap allocated by us.
Definition at line 872 of file Interp.cpp.
References clang::Sema::getASTContext(), clang::CallExpr::getBuiltinCallee(), clang::interp::Pointer::getDeclLoc(), clang::interp::Pointer::isTemporary(), Loc, and clang::interp::Pointer::toDiagnosticString().
Referenced by Free().
bool clang::interp::CheckDowncast | ( | InterpState & | S, |
CodePtr | OpPC, | ||
const Pointer & | Ptr, | ||
uint32_t | Offset | ||
) |
Checks if the dowcast using the given offset is possible with the given pointer.
Definition at line 446 of file Interp.cpp.
References E, clang::interp::Pointer::getByteOffset(), clang::interp::Pointer::getDeclDesc(), clang::interp::Pointer::getDeclPtr(), clang::interp::Descriptor::getMetadataSize(), clang::Type::getPointeeType(), clang::Expr::getType(), and clang::interp::Pointer::getType().
Referenced by GetPtrDerivedPop().
bool clang::interp::CheckDummy | ( | InterpState & | S, |
CodePtr | OpPC, | ||
const Pointer & | Ptr, | ||
AccessKinds | AK | ||
) |
Checks if a pointer is a dummy pointer.
Definition at line 901 of file Interp.cpp.
References clang::AK_Assign, clang::AK_Decrement, clang::AK_Increment, clang::AK_Read, clang::interp::Descriptor::asValueDecl(), D, diagnoseUnknownDecl(), E, clang::interp::Pointer::getDeclDesc(), clang::Sema::getLangOpts(), and clang::interp::Pointer::isDummy().
Referenced by CheckFinalLoad(), CheckLoad(), CheckStore(), and interp__builtin_strlen().
bool clang::interp::CheckDynamicMemoryAllocation | ( | InterpState & | S, |
CodePtr | OpPC | ||
) |
Checks if dynamic memory allocation is available in the current language mode.
Definition at line 835 of file Interp.cpp.
References E, and clang::Sema::getLangOpts().
|
inline |
Definition at line 2883 of file Interp.h.
References diagnoseEnumValue(), clang::EnumDecl::isFixed(), and clang::T.
bool clang::interp::CheckExtern | ( | InterpState & | S, |
CodePtr | OpPC, | ||
const Pointer & | Ptr | ||
) |
Checks if the variable has externally defined storage.
Definition at line 283 of file Interp.cpp.
References clang::interp::Descriptor::asValueDecl(), clang::interp::Descriptor::asVarDecl(), diagnoseNonConstVariable(), clang::interp::Pointer::getDeclDesc(), clang::Sema::getLangOpts(), clang::interp::Pointer::isExtern(), and clang::interp::Pointer::isInitialized().
Referenced by CheckFinalLoad(), CheckInvoke(), CheckLoad(), CheckStore(), GetPtrField(), and GetPtrFieldPop().
|
static |
Definition at line 96 of file EvaluationResult.cpp.
References clang::interp::Pointer::atField(), clang::interp::Record::bases(), CheckArrayInitialized(), CheckFieldsInitialized(), DiagnoseUninitializedSubobject(), clang::interp::Record::fields(), clang::Type::getAsArrayTypeUnsafe(), clang::interp::Record::getDecl(), clang::interp::Pointer::getDeclDesc(), clang::interp::Descriptor::getLocation(), clang::interp::Pointer::getRecord(), clang::interp::Pointer::isActive(), clang::Type::isArrayType(), clang::Type::isIncompleteArrayType(), clang::interp::Pointer::isInitialized(), clang::Type::isRecordType(), clang::interp::Record::isUnion(), Loc, P, and clang::Result.
Referenced by CheckArrayInitialized(), CheckFieldsInitialized(), and clang::interp::EvaluationResult::checkFullyInitialized().
bool clang::interp::CheckFinalLoad | ( | InterpState & | S, |
CodePtr | OpPC, | ||
const Pointer & | Ptr | ||
) |
This is not used by any of the opcodes directly.
It's used by EvalEmitter to do the final lvalue-to-rvalue conversion.
Definition at line 618 of file Interp.cpp.
References clang::AK_Read, CheckActive(), CheckConstant(), CheckDummy(), CheckExtern(), CheckInitialized(), CheckLive(), CheckMutable(), CheckRange(), CheckTemporary(), and CheckWeak().
bool clang::interp::CheckFloatResult | ( | InterpState & | S, |
CodePtr | OpPC, | ||
const Floating & | Result, | ||
APFloat::opStatus | Status, | ||
FPOptions | FPO | ||
) |
Checks if the result of a floating-point operation is valid in the current context.
Definition at line 788 of file Interp.cpp.
References E, clang::LangOptionsBase::FPE_Ignore, clang::FPOptions::getExceptionMode(), clang::FPOptions::getRoundingMode(), and clang::Result.
Referenced by Addf(), CastFloatingIntegral(), CastFloatingIntegralAP(), CastFloatingIntegralAPS(), CastIntegralFloating(), Divf(), IncDecFloatHelper(), Mulf(), and Subf().
bool clang::interp::CheckGlobalInitialized | ( | InterpState & | S, |
CodePtr | OpPC, | ||
const Pointer & | Ptr | ||
) |
Check if a global variable is initialized.
Definition at line 559 of file Interp.cpp.
References clang::interp::Descriptor::asValueDecl(), clang::Sema::getASTContext(), clang::interp::Pointer::getDeclDesc(), clang::Sema::getLangOpts(), clang::interp::Pointer::isInitialized(), and Loc.
Referenced by clang::interp::Context::evaluateAsInitializer(), and GetGlobal().
bool clang::interp::CheckInit | ( | InterpState & | S, |
CodePtr | OpPC, | ||
const Pointer & | Ptr | ||
) |
Checks if a value can be initialized.
Definition at line 671 of file Interp.cpp.
References clang::AK_Assign, CheckLive(), and CheckRange().
Referenced by Init(), InitElem(), InitElemPop(), and InitPop().
bool clang::interp::CheckInitialized | ( | InterpState & | S, |
CodePtr | OpPC, | ||
const Pointer & | Ptr, | ||
AccessKinds | AK | ||
) |
Definition at line 533 of file Interp.cpp.
References clang::interp::Descriptor::asVarDecl(), diagnoseMissingInitializer(), clang::interp::Pointer::getDeclDesc(), clang::VarDecl::hasGlobalStorage(), clang::interp::Pointer::isInitialized(), clang::interp::Pointer::isLive(), and Loc.
Referenced by CheckFinalLoad(), CheckLoad(), DecPtr(), and IncPtr().
bool clang::interp::CheckInvoke | ( | InterpState & | S, |
CodePtr | OpPC, | ||
const Pointer & | Ptr | ||
) |
Checks if a method can be invoked on an object.
Definition at line 659 of file Interp.cpp.
References clang::AK_MemberCall, CheckExtern(), CheckLive(), CheckRange(), and clang::interp::Pointer::isDummy().
bool clang::interp::CheckLiteralType | ( | InterpState & | S, |
CodePtr | OpPC, | ||
const Type * | T | ||
) |
Definition at line 1126 of file Interp.cpp.
References E, clang::Sema::getLangOpts(), clang::Expr::getType(), and clang::T.
bool clang::interp::CheckLive | ( | InterpState & | S, |
CodePtr | OpPC, | ||
const Pointer & | Ptr, | ||
AccessKinds | AK | ||
) |
Checks if a pointer is live and accessible.
Definition at line 306 of file Interp.cpp.
References clang::CSK_Field, clang::interp::Pointer::getDeclLoc(), clang::interp::Pointer::isDynamic(), clang::interp::Pointer::isField(), clang::interp::Pointer::isLive(), clang::interp::Pointer::isTemporary(), and clang::interp::Pointer::isZero().
Referenced by CheckFinalLoad(), CheckInit(), CheckInvoke(), CheckLoad(), CheckStore(), interp__builtin_strcmp(), and interp__builtin_strlen().
bool clang::interp::CheckLoad | ( | InterpState & | S, |
CodePtr | OpPC, | ||
const Pointer & | Ptr, | ||
AccessKinds | AK | ||
) |
Checks if a value can be loaded from a block.
Definition at line 589 of file Interp.cpp.
References CheckActive(), CheckConstant(), CheckDummy(), CheckExtern(), CheckInitialized(), CheckLive(), CheckMutable(), CheckRange(), CheckTemporary(), CheckVolatile(), and CheckWeak().
Referenced by ArrayElem(), ArrayElemPop(), BitCast(), BitCastPrim(), CopyArray(), Dec(), Decf(), DecfPop(), DecPop(), GetField(), GetFieldPop(), GetLocal(), GetThisField(), Inc(), Incf(), IncfPop(), IncPop(), interp__builtin_nan(), Load(), LoadPop(), and Memcpy().
bool clang::interp::CheckMutable | ( | InterpState & | S, |
CodePtr | OpPC, | ||
const Pointer & | Ptr | ||
) |
Checks if a pointer points to a mutable field.
Definition at line 494 of file Interp.cpp.
References clang::AK_Read, clang::interp::Pointer::block(), clang::interp::Block::getEvalID(), clang::interp::Pointer::getField(), clang::Sema::getLangOpts(), clang::interp::Pointer::isLive(), clang::interp::Pointer::isMutable(), and Loc.
Referenced by CheckFinalLoad(), and CheckLoad().
bool clang::interp::CheckNewDeleteForms | ( | InterpState & | S, |
CodePtr | OpPC, | ||
DynamicAllocator::Form | AllocForm, | ||
DynamicAllocator::Form | DeleteForm, | ||
const Descriptor * | D, | ||
const Expr * | NewExpr | ||
) |
Diagnose mismatched new[]/delete or new/delete[] pairs.
Definition at line 844 of file Interp.cpp.
References D, E, clang::Sema::getASTContext(), clang::ASTContext::getConstantArrayType(), clang::Expr::getExprLoc(), clang::Stmt::getSourceRange(), and clang::Normal.
Referenced by Free(), and interp__builtin_operator_delete().
bool clang::interp::CheckNewTypeMismatch | ( | InterpState & | S, |
CodePtr | OpPC, | ||
const Expr * | E, | ||
std::optional< uint64_t > | ArraySize | ||
) |
Check if the initializer and storage types of a placement-new expression match.
Definition at line 1430 of file Interp.cpp.
References clang::AK_Construct, clang::interp::Descriptor::asExpr(), CheckActive(), CheckStore(), E, clang::Sema::getASTContext(), clang::interp::Pointer::getBase(), clang::ASTContext::getBaseElementType(), clang::ASTContext::getConstantArrayType(), clang::interp::Pointer::getFieldDesc(), clang::Type::getPointeeType(), clang::interp::Pointer::getRecord(), clang::interp::Pointer::getType(), clang::ASTContext::hasSimilarType(), clang::interp::Pointer::inUnion(), InvalidNewDeleteExpr(), clang::interp::Pointer::isActive(), clang::Type::isPointerType(), clang::interp::Record::isUnion(), and clang::Normal.
Referenced by CheckNewTypeMismatchArray().
bool clang::interp::CheckNewTypeMismatchArray | ( | InterpState & | S, |
CodePtr | OpPC, | ||
const Expr * | E | ||
) |
Definition at line 3026 of file Interp.h.
References CheckNewTypeMismatch(), E, and clang::T.
|
inline |
bool clang::interp::CheckNonNullArgs | ( | InterpState & | S, |
CodePtr | OpPC, | ||
const Function * | F, | ||
const CallExpr * | CE, | ||
unsigned | ArgSize | ||
) |
Checks if all the arguments annotated as 'nonnull' are in fact not null.
Definition at line 922 of file Interp.cpp.
References align(), collectNonNullArgs(), clang::CallExpr::getArgs(), clang::interp::Function::getDecl(), clang::CallExpr::getNumArgs(), clang::interp::Pointer::isZero(), Loc, primSize(), and PT_Ptr.
Referenced by CallPtr().
bool clang::interp::CheckNull | ( | InterpState & | S, |
CodePtr | OpPC, | ||
const Pointer & | Ptr, | ||
CheckSubobjectKind | CSK | ||
) |
Checks if a pointer is null.
Definition at line 404 of file Interp.cpp.
References clang::interp::Pointer::isZero(), and Loc.
Referenced by GetField(), GetFieldPop(), GetPtrActiveField(), GetPtrBase(), GetPtrBasePop(), GetPtrDerivedPop(), GetPtrField(), GetPtrFieldPop(), GetPtrVirtBasePop(), IncDecPtrHelper(), OffsetHelper(), and SetField().
bool clang::interp::CheckPointerToIntegralCast | ( | InterpState & | S, |
CodePtr | OpPC, | ||
const Pointer & | Ptr, | ||
unsigned | BitWidth | ||
) |
Definition at line 1541 of file Interp.cpp.
References clang::Default, E, clang::Sema::getASTContext(), clang::Sema::getLangOpts(), clang::TargetInfo::getPointerWidth(), clang::ASTContext::getTargetInfo(), clang::Invalid, clang::interp::Pointer::isBlockPointer(), clang::interp::Pointer::isDummy(), and clang::interp::Pointer::isZero().
Referenced by CastPointerIntegral(), CastPointerIntegralAP(), and CastPointerIntegralAPS().
bool clang::interp::CheckPure | ( | InterpState & | S, |
CodePtr | OpPC, | ||
const CXXMethodDecl * | MD | ||
) |
Checks if a method is pure virtual.
Definition at line 779 of file Interp.cpp.
References E, clang::Decl::getLocation(), and clang::FunctionDecl::isPureVirtual().
bool clang::interp::CheckRange | ( | InterpState & | S, |
CodePtr | OpPC, | ||
const Pointer & | Ptr, | ||
AccessKinds | AK | ||
) |
Checks if a pointer is in range.
Definition at line 415 of file Interp.cpp.
References clang::interp::Pointer::isOnePastEnd(), and Loc.
Referenced by ArrayDecay(), CheckFinalLoad(), CheckInit(), CheckInvoke(), CheckLoad(), CheckStore(), GetField(), GetFieldPop(), GetPtrActiveField(), GetPtrField(), GetPtrFieldPop(), interp__builtin_strcmp(), interp__builtin_strlen(), and SetField().
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 425 of file Interp.cpp.
References clang::interp::Pointer::isElementPastEnd(), and Loc.
bool clang::interp::CheckShift | ( | InterpState & | S, |
CodePtr | OpPC, | ||
const LT & | LHS, | ||
const RT & | RHS, | ||
unsigned | Bits | ||
) |
Checks if the shift operation is legal.
Definition at line 176 of file Interp.h.
References E, clang::Sema::getLangOpts(), clang::Expr::getType(), Left, and Loc.
bool clang::interp::CheckStore | ( | InterpState & | S, |
CodePtr | OpPC, | ||
const Pointer & | Ptr | ||
) |
Checks if a value can be stored in a block.
Definition at line 643 of file Interp.cpp.
References clang::AK_Assign, CheckConst(), CheckDummy(), CheckExtern(), CheckGlobal(), CheckLive(), and CheckRange().
Referenced by CheckNewTypeMismatch(), SetField(), SetThisField(), Store(), StoreBitField(), StoreBitFieldPop(), and StorePop().
bool clang::interp::CheckSubobject | ( | InterpState & | S, |
CodePtr | OpPC, | ||
const Pointer & | Ptr, | ||
CheckSubobjectKind | CSK | ||
) |
Checks if Ptr is a one-past-the-end pointer.
Definition at line 435 of file Interp.cpp.
References clang::interp::Pointer::isOnePastEnd(), and Loc.
Referenced by GetPtrBase(), GetPtrBasePop(), GetPtrDerivedPop(), GetPtrField(), and GetPtrFieldPop().
bool clang::interp::CheckThis | ( | InterpState & | S, |
CodePtr | OpPC, | ||
const Pointer & | This | ||
) |
Checks the 'this' pointer.
Definition at line 761 of file Interp.cpp.
References E, clang::Sema::getLangOpts(), Loc, and This().
Referenced by GetPtrActiveThisField(), GetPtrThisBase(), GetPtrThisField(), GetPtrThisVirtBase(), GetThisField(), InitThisBitField(), InitThisField(), SetThisField(), and This().
|
static |
Definition at line 512 of file Interp.cpp.
References clang::Sema::getLangOpts(), clang::interp::Pointer::getType(), clang::interp::Pointer::isBlockPointer(), clang::interp::Pointer::isLive(), clang::QualType::isVolatileQualified(), and Loc.
Referenced by CheckLoad().
|
static |
Definition at line 576 of file Interp.cpp.
References clang::interp::Descriptor::asVarDecl(), clang::interp::Pointer::getDeclDesc(), and clang::interp::Pointer::isWeak().
Referenced by CheckFinalLoad(), and CheckLoad().
void clang::interp::cleanupAfterFunctionCall | ( | InterpState & | S, |
CodePtr | OpPC, | ||
const Function * | Func | ||
) |
Definition at line 230 of file Interp.cpp.
References clang::ASTContext::BuiltinInfo, clang::Func, clang::Sema::getASTContext(), clang::Builtin::Context::hasCustomTypechecking(), popArg(), clang::T, and TYPE_SWITCH.
bool clang::interp::CMP3 | ( | InterpState & | S, |
CodePtr | OpPC, | ||
const ComparisonCategoryInfo * | CmpInfo | ||
) |
Definition at line 1133 of file Interp.h.
References clang::interp::Pointer::compare(), clang::Sema::getASTContext(), clang::ComparisonCategoryInfo::getValueInfo(), Loc, clang::ComparisonCategoryInfo::makeWeakResult(), P, SetThreeWayComparisonField(), clang::T, and clang::Unordered.
bool clang::interp::CmpHelper | ( | InterpState & | S, |
CodePtr | OpPC, | ||
CompareFn | Fn | ||
) |
|
inline |
Function pointers cannot be compared in an ordered way.
Definition at line 961 of file Interp.h.
References clang::Sema::getASTContext(), Loc, and clang::interp::FunctionPointer::toDiagnosticString().
|
inline |
Definition at line 994 of file Interp.h.
References Compare(), Fn, clang::Sema::getASTContext(), clang::interp::Pointer::getByteOffset(), clang::interp::Pointer::hasSameBase(), Loc, and clang::interp::Pointer::toDiagnosticString().
bool clang::interp::CmpHelperEQ | ( | InterpState & | S, |
CodePtr | OpPC, | ||
CompareFn | Fn | ||
) |
|
inline |
Definition at line 974 of file Interp.h.
References clang::interp::FunctionPointer::compare(), Fn, clang::interp::Boolean::from(), clang::Sema::getASTContext(), and Loc.
|
inline |
Definition at line 1084 of file Interp.h.
References clang::interp::MemberPointer::compare(), clang::Equal, Fn, clang::interp::Boolean::from(), clang::CXXMethodDecl::isVirtual(), clang::interp::MemberPointer::isZero(), Loc, and clang::Unordered.
|
inline |
Definition at line 1014 of file Interp.h.
References clang::interp::Pointer::atIndex(), Compare(), clang::Equal, Fn, clang::Sema::getASTContext(), clang::interp::Pointer::getByteOffset(), clang::interp::Pointer::getOffset(), clang::interp::Pointer::hasSameBase(), clang::interp::Pointer::isArrayRoot(), clang::interp::Pointer::isOnePastEnd(), clang::interp::Pointer::isZero(), Loc, P, clang::interp::Pointer::toDiagnosticString(), and clang::Unordered.
|
static |
Definition at line 178 of file EvaluationResult.cpp.
References clang::interp::Pointer::atField(), clang::interp::Pointer::atIndex(), clang::interp::Pointer::block(), collectBlocks(), clang::interp::Pointer::deref(), clang::interp::Descriptor::ElemRecord, clang::interp::Pointer::getFieldDesc(), clang::interp::Descriptor::getNumElems(), clang::interp::Descriptor::getPrimType(), clang::interp::Descriptor::isCompositeArray(), clang::interp::Descriptor::isPrimitive(), clang::interp::Descriptor::isPrimitiveArray(), clang::interp::Pointer::narrow(), P, and PT_Ptr.
Referenced by clang::interp::EvaluationResult::checkReturnValue(), and collectBlocks().
llvm::BitVector clang::interp::collectNonNullArgs | ( | const FunctionDecl * | F, |
const llvm::ArrayRef< const Expr * > & | Args | ||
) |
Definition at line 16 of file InterpShared.cpp.
References clang::Decl::specific_attrs().
Referenced by CheckNonNullArgs(), and clang::interp::Compiler< Emitter >::VisitCallExpr().
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 925 of file Interp.h.
References clang::Result, and clang::T.
ComparisonCategoryResult clang::interp::Compare | ( | const T & | X, |
const T & | Y | ||
) |
Helper to compare two comparable types.
Definition at line 25 of file Primitives.h.
References clang::Equal, clang::Greater, clang::Less, and X.
Referenced by CmpHelper< Pointer >(), CmpHelperEQ< Pointer >(), clang::interp::Boolean::compare(), clang::interp::Integral< Bits, Signed >::compare(), Divc(), and DoShift().
bool clang::interp::Const | ( | InterpState & | S, |
CodePtr | OpPC, | ||
const T & | Arg | ||
) |
|
inline |
Definition at line 2702 of file Interp.h.
References clang::interp::Pointer::atIndex(), CheckLoad(), clang::interp::Pointer::deref(), clang::interp::Pointer::initialize(), and clang::T.
|
static |
Definition at line 2666 of file InterpBuiltin.cpp.
References clang::interp::Pointer::atIndex(), copyComposite(), clang::interp::Pointer::deref(), clang::interp::Pointer::getFieldDesc(), clang::interp::Descriptor::getNumElems(), clang::interp::Descriptor::getPrimType(), clang::interp::Pointer::initialize(), clang::Invalid, clang::interp::Pointer::isLive(), clang::interp::Descriptor::isPrimitive(), clang::interp::Descriptor::isPrimitiveArray(), clang::interp::Descriptor::isRecord(), clang::T, and TYPE_SWITCH.
Referenced by copyComposite(), copyRecord(), and DoMemcpy().
|
static |
Definition at line 2618 of file InterpBuiltin.cpp.
References clang::interp::Pointer::activate(), clang::interp::Pointer::atField(), clang::interp::Record::bases(), copyComposite(), clang::interp::Pointer::deref(), clang::interp::Descriptor::ElemRecord, clang::interp::Record::fields(), clang::interp::Pointer::getFieldDesc(), clang::interp::Pointer::initialize(), clang::interp::Pointer::isActive(), clang::interp::Pointer::isInitialized(), clang::interp::Descriptor::isRecord(), clang::interp::Record::isUnion(), clang::T, and TYPE_SWITCH.
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 849 of file Interp.h.
References clang::AK_Decrement, and CheckLoad().
|
inline |
|
inline |
Definition at line 906 of file Interp.h.
References clang::AK_Decrement, and CheckLoad().
|
inline |
Definition at line 914 of file Interp.h.
References clang::AK_Decrement, and CheckLoad().
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 861 of file Interp.h.
References clang::AK_Decrement, and CheckLoad().
|
inlinestatic |
Definition at line 2103 of file Interp.h.
References clang::AK_Decrement, and CheckInitialized().
|
inline |
void clang::interp::diagnoseEnumValue | ( | InterpState & | S, |
CodePtr | OpPC, | ||
const EnumDecl * | ED, | ||
const APSInt & | Value | ||
) |
Definition at line 1101 of file Interp.cpp.
References clang::EnumDecl::getNumNegativeBits(), clang::EnumDecl::getValueRange(), Loc, clang::Max, and clang::Min.
Referenced by CheckEnumValue().
|
static |
Definition at line 151 of file InterpBuiltin.cpp.
References clang::ASTContext::BuiltinInfo, clang::Sema::getASTContext(), clang::Sema::getLangOpts(), clang::Builtin::Context::getName(), and Loc.
Referenced by interp__builtin_memcmp(), interp__builtin_memcpy(), interp__builtin_strcmp(), and interp__builtin_strlen().
|
static |
Definition at line 54 of file EvaluationResult.cpp.
References clang::Decl::getLocation(), and Loc.
Referenced by CheckArrayInitialized(), and CheckFieldsInitialized().
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 674 of file Interp.h.
References CheckDivRem(), handleFixedPointOverflow(), clang::Result, and clang::T.
Referenced by clang::interp::Compiler< Emitter >::VisitVectorBinOp().
|
inline |
Definition at line 521 of file Interp.h.
References clang::interp::Pointer::atIndex(), clang::C, Compare(), D, clang::interp::Pointer::deref(), E, clang::Equal, HandleComplexComplexDiv(), clang::Result, clang::T, and Zero().
|
inline |
Definition at line 697 of file Interp.h.
References CheckDivRem(), CheckFloatResult(), clang::interp::Floating::div(), clang::FPOptions::getFromOpaqueInt(), getRoundingMode(), and clang::Result.
bool clang::interp::DoBitCast | ( | InterpState & | S, |
CodePtr | OpPC, | ||
const Pointer & | Ptr, | ||
std::byte * | Buff, | ||
Bits | BitWidth, | ||
Bits | FullBitWidth, | ||
bool & | HasIndeterminateBits | ||
) |
Definition at line 323 of file InterpBuiltinBitCast.cpp.
References CheckBitcastType(), clang::interp::BitcastBuffer::copyBits(), clang::Sema::getASTContext(), clang::ASTContext::getTargetInfo(), clang::interp::Pointer::getType(), clang::interp::Pointer::isBlockPointer(), clang::interp::Bits::isFullByte(), clang::TargetInfo::isLittleEndian(), clang::interp::Pointer::isLive(), clang::interp::BitcastBuffer::rangeInitialized(), readPointerToBuffer(), clang::interp::Bits::roundToBytes(), clang::Success, swapBytes(), and clang::interp::Bits::zero().
Referenced by BitCastPrim().
bool clang::interp::DoBitCastPtr | ( | InterpState & | S, |
CodePtr | OpPC, | ||
const Pointer & | FromPtr, | ||
Pointer & | ToPtr | ||
) |
Definition at line 355 of file InterpBuiltinBitCast.cpp.
References DoBitCastPtr(), clang::Sema::getASTContext(), clang::CharUnits::getQuantity(), clang::interp::Pointer::getType(), and clang::ASTContext::getTypeSizeInChars().
Referenced by BitCast(), and DoBitCastPtr().
bool clang::interp::DoBitCastPtr | ( | InterpState & | S, |
CodePtr | OpPC, | ||
const Pointer & | FromPtr, | ||
Pointer & | ToPtr, | ||
size_t | Size | ||
) |
Definition at line 363 of file InterpBuiltinBitCast.cpp.
References BITCAST_TYPE_SWITCH_FIXED_SIZE, CheckBitcastType(), clang::interp::BitcastBuffer::copyBits(), enumeratePointerFields(), clang::Sema::getASTContext(), clang::interp::Bits::getQuantity(), clang::ASTContext::getTargetInfo(), clang::interp::Pointer::getType(), clang::if(), Initialized, clang::interp::Pointer::isBlockPointer(), clang::TargetInfo::isLittleEndian(), clang::interp::Pointer::isLive(), P, PT_Bool, clang::interp::BitcastBuffer::rangeInitialized(), readPointerToBuffer(), clang::interp::Bits::roundToBytes(), clang::interp::BitcastBuffer::size(), clang::Success, swapBytes(), and clang::T.
bool clang::interp::DoMemcpy | ( | InterpState & | S, |
CodePtr | OpPC, | ||
const Pointer & | Src, | ||
Pointer & | Dest | ||
) |
Copy the contents of Src into Dest.
Definition at line 2694 of file InterpBuiltin.cpp.
References copyComposite(), and DoMemcpy().
Referenced by DoMemcpy(), interp__builtin_memcpy(), and Memcpy().
bool clang::interp::DoMemcpy | ( | InterpState & | S, |
CodePtr | OpPC, | ||
const Pointer & | SrcPtr, | ||
const Pointer & | DestPtr, | ||
Bits | Size | ||
) |
Definition at line 452 of file InterpBuiltinBitCast.cpp.
References enumeratePointerFields(), clang::interp::Pointer::getByteOffset(), clang::interp::Pointer::isBlockPointer(), P, and clang::T.
|
inline |
|
inline |
bool clang::interp::Dup | ( | InterpState & | S, |
CodePtr | OpPC | ||
) |
bool clang::interp::EQ | ( | InterpState & | S, |
CodePtr | OpPC | ||
) |
Definition at line 1126 of file Interp.h.
References clang::Equal.
|
inline |
|
inline |
Definition at line 2631 of file Interp.h.
References clang::interp::Pointer::expand().
|
inline |
Definition at line 1698 of file Interp.h.
References clang::interp::Pointer::activate(), clang::interp::Pointer::canBeInitialized(), and clang::interp::Pointer::initialize().
|
inline |
Definition at line 1689 of file Interp.h.
References clang::interp::Pointer::activate(), clang::interp::Pointer::canBeInitialized(), and clang::interp::Pointer::initialize().
bool clang::interp::Flip | ( | InterpState & | S, |
CodePtr | OpPC | ||
) |
bool clang::interp::Free | ( | InterpState & | S, |
CodePtr | OpPC, | ||
bool | DeleteIsArrayForm, | ||
bool | IsGlobalDelete | ||
) |
Definition at line 1008 of file Interp.cpp.
References clang::interp::DynamicAllocator::Array, clang::interp::Descriptor::asExpr(), clang::interp::Pointer::block(), CheckDeleteSource(), CheckDynamicMemoryAllocation(), CheckNewDeleteForms(), clang::Type::getAsCXXRecordDecl(), clang::Sema::getASTContext(), clang::interp::Pointer::getBase(), clang::interp::Pointer::getDeclDesc(), clang::interp::Block::getDescriptor(), clang::interp::Pointer::getType(), getVirtualOperatorDelete(), hasVirtualDestructor(), clang::interp::Pointer::isArrayElement(), clang::interp::Pointer::isBaseClass(), clang::interp::Pointer::isOnePastEnd(), clang::FunctionDecl::isReplaceableGlobalAllocationFunction(), clang::interp::Pointer::isRoot(), clang::interp::Pointer::isZero(), Loc, clang::interp::DynamicAllocator::NonArray, RunDestructors(), clang::T, and clang::interp::Pointer::toDiagnosticString().
bool clang::interp::GE | ( | InterpState & | S, |
CodePtr | OpPC | ||
) |
Definition at line 1186 of file Interp.h.
References clang::Equal, and clang::Greater.
|
static |
Definition at line 42 of file InterpBuiltin.cpp.
References INT_TYPE_SWITCH, and clang::T.
Referenced by interp__builtin_ia32_addcarry_subborrow().
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 1288 of file Interp.h.
References clang::interp::Pointer::atField(), CheckLoad(), CheckNull(), CheckRange(), clang::CSK_Field, and clang::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 1320 of file Interp.h.
References clang::interp::Pointer::atField(), CheckLoad(), CheckNull(), CheckRange(), clang::CSK_Field, and clang::T.
|
inline |
Definition at line 2744 of file Interp.h.
References clang::Func.
bool clang::interp::GetGlobal | ( | InterpState & | S, |
CodePtr | OpPC, | ||
uint32_t | I | ||
) |
Definition at line 1363 of file Interp.h.
References CheckConstant(), CheckGlobalInitialized(), clang::interp::Pointer::deref(), clang::interp::Pointer::getFieldDesc(), clang::interp::Pointer::isExtern(), and clang::T.
bool clang::interp::GetGlobalUnchecked | ( | InterpState & | S, |
CodePtr | OpPC, | ||
uint32_t | I | ||
) |
Same as GetGlobal, but without the checks.
Definition at line 1381 of file Interp.h.
References clang::interp::Pointer::deref(), clang::interp::Pointer::isInitialized(), and clang::T.
|
static |
Definition at line 50 of file InterpBuiltin.cpp.
References clang::Sema::getASTContext(), clang::TargetInfo::getIntWidth(), clang::ASTContext::getTargetInfo(), PT_Sint16, and PT_Sint32.
Referenced by interp__builtin_fpclassify().
|
inline |
bool clang::interp::GetLocal | ( | InterpState & | S, |
CodePtr | OpPC, | ||
uint32_t | I | ||
) |
Definition at line 1253 of file Interp.h.
References CheckLoad(), clang::interp::Pointer::deref(), and clang::T.
|
static |
Definition at line 61 of file InterpBuiltin.cpp.
References clang::Sema::getASTContext(), clang::TargetInfo::getLongWidth(), clang::ASTContext::getTargetInfo(), PT_Sint16, PT_Sint32, and PT_Sint64.
Referenced by interp__builtin_expect().
|
inline |
|
inline |
|
inline |
|
inline |
Definition at line 2770 of file Interp.h.
References clang::Func.
|
static |
Definition at line 36 of file InterpBuiltin.cpp.
References clang::T.
bool clang::interp::GetParam | ( | InterpState & | S, |
CodePtr | OpPC, | ||
uint32_t | I | ||
) |
|
inline |
Definition at line 1595 of file Interp.h.
References clang::interp::Pointer::atField(), CheckNull(), CheckRange(), clang::CSK_Field, and clang::interp::Pointer::deactivate().
|
inline |
Definition at line 1608 of file Interp.h.
References CheckThis(), and This().
|
inline |
Definition at line 1634 of file Interp.h.
References clang::interp::Pointer::asIntPointer(), clang::interp::Pointer::atField(), clang::interp::IntPointer::baseCast(), CheckNull(), CheckSubobject(), clang::CSK_Base, clang::Sema::getASTContext(), clang::interp::Pointer::isBlockPointer(), and clang::Result.
|
inline |
Definition at line 1653 of file Interp.h.
References clang::interp::Pointer::asIntPointer(), clang::interp::Pointer::atField(), clang::interp::IntPointer::baseCast(), CheckNull(), CheckSubobject(), clang::CSK_Base, clang::Sema::getASTContext(), clang::interp::Pointer::isBlockPointer(), and clang::Result.
Referenced by CallVirt().
|
inline |
Definition at line 1621 of file Interp.h.
References clang::interp::Pointer::atFieldSub(), CheckDowncast(), CheckNull(), CheckSubobject(), and clang::CSK_Derived.
|
inline |
1) Peeks a Pointer 2) Pushes Pointer.atField(Off) on the stack
Definition at line 1529 of file Interp.h.
References clang::interp::Pointer::asIntPointer(), clang::interp::Pointer::atField(), clang::interp::IntPointer::atOffset(), clang::interp::Pointer::block(), CheckArray(), CheckExtern(), CheckNull(), CheckRange(), CheckSubobject(), clang::CSK_Field, clang::Sema::getASTContext(), clang::Sema::getLangOpts(), clang::interp::Block::getSize(), clang::interp::Pointer::isBlockPointer(), and clang::interp::Pointer::isIntegralPointer().
|
inline |
Definition at line 1557 of file Interp.h.
References clang::interp::Pointer::asIntPointer(), clang::interp::Pointer::atField(), clang::interp::IntPointer::atOffset(), clang::interp::Pointer::block(), CheckArray(), CheckExtern(), CheckNull(), CheckRange(), CheckSubobject(), clang::CSK_Field, clang::Sema::getASTContext(), clang::Sema::getLangOpts(), clang::interp::Block::getSize(), clang::interp::Pointer::isBlockPointer(), and clang::interp::Pointer::isIntegralPointer().
|
inline |
|
inline |
|
inline |
|
inline |
Definition at line 1679 of file Interp.h.
References CheckThis(), and This().
|
inline |
Definition at line 1585 of file Interp.h.
References CheckThis(), and This().
|
inline |
Definition at line 1732 of file Interp.h.
References CheckThis(), D, This(), and VirtBaseHelper().
|
inline |
Definition at line 1723 of file Interp.h.
References CheckNull(), clang::CSK_Base, D, and VirtBaseHelper().
|
inlinestatic |
Definition at line 409 of file Interp.h.
References clang::FPOptions::getRoundingMode().
Referenced by Addf(), CastIntegralFloating(), Divf(), IncDecFloatHelper(), Mulf(), Subf(), clang::interp::Compiler< Emitter >::VisitCastExpr(), and clang::interp::Compiler< Emitter >::VisitConvertVectorExpr().
|
inline |
Definition at line 162 of file FixedPoint.h.
Definition at line 19 of file Floating.cpp.
IntegralAP< Signed > clang::interp::getSwappedBytes | ( | IntegralAP< Signed > | F | ) |
Definition at line 337 of file IntegralAP.h.
bool clang::interp::GetThisField | ( | InterpState & | S, |
CodePtr | OpPC, | ||
uint32_t | I | ||
) |
Definition at line 1334 of file Interp.h.
References CheckLoad(), CheckThis(), clang::T, and This().
bool clang::interp::GT | ( | InterpState & | S, |
CodePtr | OpPC | ||
) |
Definition at line 1179 of file Interp.h.
References clang::Greater.
bool clang::interp::handleFixedPointOverflow | ( | InterpState & | S, |
CodePtr | OpPC, | ||
const FixedPoint & | FP | ||
) |
Definition at line 1520 of file Interp.cpp.
References E, clang::Sema::getASTContext(), clang::ASTContext::getDiagnostics(), clang::Expr::getExprLoc(), clang::Expr::getType(), clang::DiagnosticsEngine::Report(), and clang::interp::FixedPoint::toDiagnosticString().
Referenced by AddSubMulHelper(), CastFixedPoint(), CastFloatingFixedPoint(), CastIntegralFixedPoint(), Div(), and ShiftFixedPoint().
|
static |
Definition at line 164 of file Interp.h.
References E, and clang::Expr::getType().
Referenced by AddSubMulHelper(), CastFixedPointIntegral(), CastFloatingIntegralAP(), CastFloatingIntegralAPS(), IncDecHelper(), interp__builtin_vector_reduce(), and Neg().
Definition at line 1001 of file Interp.cpp.
References clang::Type::getAsCXXRecordDecl(), and clang::T.
Referenced by Free().
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 824 of file Interp.h.
References clang::AK_Increment, and CheckLoad().
bool clang::interp::IncDecFloatHelper | ( | InterpState & | S, |
CodePtr | OpPC, | ||
const Pointer & | Ptr, | ||
uint32_t | FPOI | ||
) |
Definition at line 870 of file Interp.h.
References CheckFloatResult(), clang::interp::Floating::decrement(), clang::interp::Pointer::deref(), clang::FPOptions::getFromOpaqueInt(), getRoundingMode(), Inc, clang::interp::Floating::increment(), clang::Result, and Yes.
bool clang::interp::IncDecHelper | ( | InterpState & | S, |
CodePtr | OpPC, | ||
const Pointer & | Ptr | ||
) |
Definition at line 767 of file Interp.h.
References clang::interp::Pointer::deref(), E, clang::Expr::getExprLoc(), clang::Sema::getLangOpts(), clang::Stmt::getSourceRange(), clang::Expr::getType(), handleOverflow(), Inc, clang::Invalid, clang::interp::Pointer::isDummy(), Loc, clang::Result, clang::T, toString(), and Yes.
|
inlinestatic |
Definition at line 2070 of file Interp.h.
References CheckNull(), clang::CSK_ArrayIndex, clang::interp::Pointer::deref(), clang::interp::Pointer::isDummy(), and P.
|
inline |
Definition at line 890 of file Interp.h.
References clang::AK_Increment, and CheckLoad().
|
inline |
Definition at line 898 of file Interp.h.
References clang::AK_Increment, and CheckLoad().
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 836 of file Interp.h.
References clang::AK_Increment, and CheckLoad().
|
inlinestatic |
Definition at line 2094 of file Interp.h.
References clang::AK_Increment, and CheckInitialized().
bool clang::interp::Init | ( | InterpState & | S, |
CodePtr | OpPC | ||
) |
Definition at line 1828 of file Interp.h.
References CheckInit(), and clang::T.
bool clang::interp::InitBitField | ( | InterpState & | S, |
CodePtr | OpPC, | ||
const Record::Field * | F | ||
) |
Definition at line 1494 of file Interp.h.
References clang::Sema::getASTContext(), and clang::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 1857 of file Interp.h.
References clang::interp::Pointer::atIndex(), CheckInit(), clang::interp::Pointer::deref(), clang::interp::Pointer::initialize(), and clang::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 1882 of file Interp.h.
References clang::interp::Pointer::atIndex(), CheckInit(), clang::interp::Pointer::deref(), clang::interp::Pointer::initialize(), and clang::T.
bool clang::interp::InitField | ( | InterpState & | S, |
CodePtr | OpPC, | ||
uint32_t | I | ||
) |
bool clang::interp::InitGlobal | ( | InterpState & | S, |
CodePtr | OpPC, | ||
uint32_t | I | ||
) |
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) Initializes global with index \I with that
Definition at line 1407 of file Interp.h.
References clang::interp::Descriptor::asExpr(), clang::interp::Pointer::deref(), clang::Sema::getASTContext(), clang::interp::Pointer::getDeclDesc(), clang::LifetimeExtendedTemporaryDecl::getOrCreateValue(), clang::interp::Pointer::initialize(), and clang::T.
|
inline |
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 1429 of file Interp.h.
References clang::Sema::getASTContext(), clang::LifetimeExtendedTemporaryDecl::getOrCreateValue(), clang::LifetimeExtendedTemporaryDecl::getTemporaryExpr(), clang::Expr::getType(), and P.
bool clang::interp::InitPop | ( | InterpState & | S, |
CodePtr | OpPC | ||
) |
Definition at line 1842 of file Interp.h.
References clang::interp::Pointer::activate(), CheckInit(), and clang::T.
|
inline |
bool clang::interp::InitThisBitField | ( | InterpState & | S, |
CodePtr | OpPC, | ||
const Record::Field * | F, | ||
uint32_t | FieldOffset | ||
) |
Definition at line 1464 of file Interp.h.
References CheckThis(), clang::Sema::getASTContext(), clang::T, and This().
bool clang::interp::InitThisField | ( | InterpState & | S, |
CodePtr | OpPC, | ||
uint32_t | I | ||
) |
Definition at line 1448 of file Interp.h.
References CheckThis(), clang::T, and This().
bool clang::interp::InRange | ( | InterpState & | S, |
CodePtr | OpPC | ||
) |
|
static |
Definition at line 624 of file InterpBuiltin.cpp.
References clang::Call, peekToAPSInt(), and pushInteger().
Referenced by InterpretBuiltin().
|
static |
Definition at line 746 of file InterpBuiltin.cpp.
References clang::Call, PT_FnPtr, and PT_Ptr.
Referenced by InterpretBuiltin().
|
static |
Definition at line 1735 of file InterpBuiltin.cpp.
Referenced by InterpretBuiltin().
|
static |
__builtin_assume_aligned(Ptr, Alignment[, ExtraOffset])
Definition at line 1246 of file InterpBuiltin.cpp.
References align(), clang::CharUnits::alignTo(), clang::interp::Descriptor::asExpr(), clang::interp::Descriptor::asValueDecl(), clang::Call, callArgSize(), E, clang::CharUnits::fromQuantity(), GetAlignOfExpr(), clang::Sema::getASTContext(), clang::ASTContext::getDeclAlign(), clang::interp::Pointer::getDeclDesc(), clang::APValue::getLValueOffset(), clang::CharUnits::getQuantity(), clang::interp::Pointer::isBlockPointer(), peekToAPSInt(), primSize(), PT_Ptr, and clang::interp::Pointer::toAPValue().
Referenced by InterpretBuiltin().
|
static |
bool __atomic_always_lock_free(size_t, void const volatile*) bool __atomic_is_lock_free(size_t, void const volatile*) bool __c11_atomic_is_lock_free(size_t)
Definition at line 1037 of file InterpBuiltin.cpp.
References align(), clang::Call, clang::CharUnits::fromQuantity(), clang::Func, clang::Type::getAs(), clang::Sema::getASTContext(), clang::interp::Pointer::getIntegerRepresentation(), clang::TargetInfo::getMaxAtomicInlineWidth(), clang::Type::getPointeeType(), clang::ASTContext::getTargetInfo(), clang::Expr::getType(), clang::ASTContext::getTypeAlignInChars(), clang::Type::isIncompleteType(), clang::interp::Pointer::isIntegralPointer(), clang::interp::Pointer::isZero(), clang::CharUnits::One(), peekToAPSInt(), primSize(), PT_Ptr, and clang::ASTContext::toCharUnitsFromBits().
Referenced by InterpretBuiltin().
|
static |
Definition at line 666 of file InterpBuiltin.cpp.
References clang::Call, peekToAPSInt(), and pushInteger().
Referenced by InterpretBuiltin().
|
static |
Definition at line 1021 of file InterpBuiltin.cpp.
References clang::Call, INT_TYPE_SWITCH, peekToAPSInt(), and clang::T.
Referenced by InterpretBuiltin().
|
static |
Three integral values followed by a pointer (lhs, rhs, carry, carryOut).
Definition at line 905 of file InterpBuiltin.cpp.
References align(), assignInteger(), clang::Call, clang::Func, clang::interp::Pointer::initialize(), peekToAPSInt(), primSize(), PT_Ptr, pushInteger(), and clang::Result.
Referenced by InterpretBuiltin().
|
static |
Definition at line 676 of file InterpBuiltin.cpp.
References clang::Call, EvaluateBuiltinClassifyType(), clang::Sema::getLangOpts(), clang::Expr::getType(), and pushInteger().
Referenced by InterpretBuiltin().
|
static |
Definition at line 657 of file InterpBuiltin.cpp.
References clang::Call, peekToAPSInt(), and pushInteger().
Referenced by InterpretBuiltin().
|
static |
Definition at line 966 of file InterpBuiltin.cpp.
References clang::Call, callArgSize(), clang::Func, peekToAPSInt(), and pushInteger().
Referenced by InterpretBuiltin().
|
static |
__builtin_complex(Float A, float B);
Definition at line 1116 of file InterpBuiltin.cpp.
References align(), primSize(), PT_Float, PT_Ptr, and clang::Result.
Referenced by InterpretBuiltin().
|
static |
Definition at line 1511 of file InterpBuiltin.cpp.
References clang::C, clang::Call, clang::interp::InterpStack::clear(), E, clang::APValue::getLValueBase(), clang::APValue::getLValueOffset(), clang::Expr::getType(), clang::Type::isAnyComplexType(), clang::Type::isFloatingType(), clang::Expr::isGLValue(), clang::Type::isIntegralOrEnumerationType(), clang::APValue::isLValue(), clang::Type::isNullPtrType(), clang::Type::isPointerType(), clang::CharUnits::isZero(), and pushInteger().
Referenced by InterpretBuiltin().
|
static |
Definition at line 380 of file InterpBuiltin.cpp.
References clang::Copy, and clang::interp::Floating::getAPFloat().
Referenced by InterpretBuiltin().
|
static |
Definition at line 998 of file InterpBuiltin.cpp.
References clang::Call, callArgSize(), clang::Func, peekToAPSInt(), and pushInteger().
Referenced by InterpretBuiltin().
|
static |
Definition at line 776 of file InterpBuiltin.cpp.
References clang::Call, clang::Sema::getASTContext(), clang::TargetInfo::getEHDataRegisterNumber(), clang::ASTContext::getTargetInfo(), peekToAPSInt(), pushInteger(), and clang::Result.
Referenced by InterpretBuiltin().
|
static |
Can be called with an integer or vector as the first and only parameter.
Definition at line 1798 of file InterpBuiltin.cpp.
References clang::interp::Pointer::atIndex(), clang::Call, clang::interp::Pointer::deref(), clang::interp::Descriptor::getElemQualType(), clang::interp::Pointer::getFieldDesc(), clang::interp::Descriptor::getNumElems(), clang::interp::Pointer::getNumElems(), clang::interp::Pointer::initialize(), INT_TYPE_SWITCH_NO_BOOL, clang::interp::Descriptor::isPrimitiveArray(), peekToAPSInt(), primSize(), PT_Ptr, pushInteger(), and clang::T.
Referenced by InterpretBuiltin().
|
static |
Definition at line 693 of file InterpBuiltin.cpp.
References align(), clang::Call, getLongPrimType(), peekToAPSInt(), primSize(), PT_Float, and pushInteger().
Referenced by InterpretBuiltin().
|
static |
Definition at line 615 of file InterpBuiltin.cpp.
References clang::interp::Floating::abs().
Referenced by InterpretBuiltin().
|
static |
Definition at line 735 of file InterpBuiltin.cpp.
References clang::Call, peekToAPSInt(), and pushInteger().
Referenced by InterpretBuiltin().
|
static |
Definition at line 417 of file InterpBuiltin.cpp.
References clang::interp::Floating::getAPFloat(), clang::interp::Floating::isNan(), clang::interp::Floating::isNegative(), clang::interp::Floating::isZero(), and clang::Result.
Referenced by InterpretBuiltin().
|
static |
Definition at line 393 of file InterpBuiltin.cpp.
References clang::interp::Floating::getAPFloat(), clang::interp::Floating::isNan(), clang::interp::Floating::isNegative(), clang::interp::Floating::isZero(), and clang::Result.
Referenced by InterpretBuiltin().
|
static |
Five int values followed by one floating value.
Definition at line 577 of file InterpBuiltin.cpp.
References align(), clang::Call, clang::interp::Floating::getCategory(), getIntPrimType(), clang::interp::Floating::isDenormal(), peekToAPSInt(), primSize(), PT_Float, and pushInteger().
Referenced by InterpretBuiltin().
|
static |
Definition at line 1446 of file InterpBuiltin.cpp.
References assignInteger(), clang::Call, clang::Func, getAPSIntParam(), pushInteger(), and clang::Result.
Referenced by InterpretBuiltin().
|
static |
Definition at line 1310 of file InterpBuiltin.cpp.
References align(), clang::Call, peekToAPSInt(), primSize(), pushInteger(), and clang::Result.
Referenced by InterpretBuiltin().
|
static |
Definition at line 1341 of file InterpBuiltin.cpp.
References align(), clang::Call, clang::Type::isIntegerType(), peekToAPSInt(), primSize(), and pushInteger().
Referenced by InterpretBuiltin().
|
static |
Definition at line 1368 of file InterpBuiltin.cpp.
References clang::Call, clang::Type::isIntegerType(), peekToAPSInt(), and pushInteger().
Referenced by InterpretBuiltin().
|
static |
Definition at line 1396 of file InterpBuiltin.cpp.
References align(), clang::Call, P, peekToAPSInt(), primSize(), pushInteger(), and clang::Result.
Referenced by InterpretBuiltin().
|
static |
Definition at line 1421 of file InterpBuiltin.cpp.
References align(), clang::Call, P, peekToAPSInt(), primSize(), pushInteger(), and clang::Result.
Referenced by InterpretBuiltin().
|
static |
Definition at line 1382 of file InterpBuiltin.cpp.
References clang::Call, clang::Type::isIntegerType(), peekToAPSInt(), and pushInteger().
Referenced by InterpretBuiltin().
|
static |
Definition at line 371 of file InterpBuiltin.cpp.
References clang::Sema::getASTContext(), clang::interp::Function::getDecl(), clang::ASTContext::getFloatTypeSemantics(), clang::interp::Floating::getInf(), and clang::FunctionDecl::getReturnType().
Referenced by InterpretBuiltin().
|
static |
__builtin_is_aligned() __builtin_align_up() __builtin_align_down() The first parameter is either an integer or a pointer.
The second parameter is the requested alignment as an integer.
Definition at line 1139 of file InterpBuiltin.cpp.
References clang::CharUnits::alignmentAtOffset(), clang::interp::Descriptor::asValueDecl(), clang::interp::Pointer::atIndex(), clang::Call, callArgSize(), clang::CharUnits::fromQuantity(), clang::Func, clang::Sema::getASTContext(), clang::interp::Pointer::getByteOffset(), clang::ASTContext::getDeclAlign(), clang::interp::Pointer::getDeclDesc(), clang::interp::Pointer::getIndex(), clang::ASTContext::getIntWidth(), clang::CharUnits::getQuantity(), isIntegralType(), peekToAPSInt(), PT_Bool, PT_Ptr, and pushInteger().
Referenced by InterpretBuiltin().
|
static |
Definition at line 162 of file InterpBuiltin.cpp.
References clang::interp::InterpFrame::Caller, clang::SemaBase::Diag(), E, clang::interp::Boolean::from(), clang::interp::InterpFrame::getCallee(), clang::interp::InterpFrame::getExpr(), clang::Expr::getExprLoc(), clang::interp::InterpFrame::getRetPC(), and clang::Stmt::getSourceRange().
Referenced by InterpretBuiltin().
|
static |
Definition at line 476 of file InterpBuiltin.cpp.
References clang::Call, clang::interp::Floating::isFinite(), and pushInteger().
Referenced by InterpretBuiltin().
|
static |
First parameter to __builtin_isfpclass is the floating value, the second one is an integral value.
Definition at line 560 of file InterpBuiltin.cpp.
References align(), clang::Call, clang::interp::Floating::classify(), peekToAPSInt(), primSize(), PT_Float, pushInteger(), and clang::Result.
Referenced by InterpretBuiltin().
|
static |
Definition at line 463 of file InterpBuiltin.cpp.
References clang::Call, clang::interp::Floating::isInf(), clang::interp::Floating::isNegative(), and pushInteger().
Referenced by InterpretBuiltin().
|
static |
Defined as __builtin_isnan(...), to accommodate the fact that it can take a float, double, long double, etc.
But for us, that's all a Floating anyway.
Definition at line 444 of file InterpBuiltin.cpp.
References clang::Call, clang::interp::Floating::isNan(), and pushInteger().
Referenced by InterpretBuiltin().
|
static |
Definition at line 485 of file InterpBuiltin.cpp.
References clang::Call, clang::interp::Floating::isNormal(), and pushInteger().
Referenced by InterpretBuiltin().
|
static |
Definition at line 453 of file InterpBuiltin.cpp.
References clang::Call, clang::interp::Floating::isSignaling(), and pushInteger().
Referenced by InterpretBuiltin().
|
static |
Definition at line 494 of file InterpBuiltin.cpp.
References clang::Call, clang::interp::Floating::isDenormal(), and pushInteger().
Referenced by InterpretBuiltin().
|
static |
Definition at line 504 of file InterpBuiltin.cpp.
References clang::Call, clang::interp::Floating::isZero(), and pushInteger().
Referenced by InterpretBuiltin().
|
static |
Definition at line 1922 of file InterpBuiltin.cpp.
References clang::ASTContext::BuiltinInfo, clang::interp::BitcastBuffer::byteSize(), clang::Call, clang::interp::BitcastBuffer::Data, diagnoseNonConstexprBuiltin(), clang::Func, clang::Sema::getASTContext(), clang::interp::Pointer::getFieldDesc(), clang::Builtin::Context::getName(), clang::CharUnits::getQuantity(), clang::interp::Bytes::getQuantity(), clang::ASTContext::getTargetInfo(), clang::interp::Descriptor::getType(), clang::interp::Pointer::getType(), clang::ASTContext::getTypeSize(), clang::ASTContext::getTypeSizeInChars(), clang::ASTContext::getWCharType(), clang::if(), INT_TYPE_SWITCH, clang::TargetInfo::isBigEndian(), clang::interp::Pointer::isDummy(), isOneByteCharacterType(), peekToAPSInt(), pushInteger(), readPointerToBuffer(), and swapBytes().
Referenced by InterpretBuiltin().
|
static |
Definition at line 1834 of file InterpBuiltin.cpp.
References clang::Call, diagnoseNonConstexprBuiltin(), DoMemcpy(), clang::interp::Pointer::elemSize(), clang::Func, clang::Sema::getASTContext(), clang::interp::Descriptor::getElemQualType(), clang::interp::Pointer::getFieldDesc(), clang::interp::Pointer::getIndex(), clang::CharUnits::getQuantity(), clang::interp::Pointer::getType(), clang::ASTContext::getTypeSizeInChars(), clang::ASTContext::hasSameUnqualifiedType(), clang::interp::Descriptor::isArray(), clang::interp::Pointer::isDummy(), clang::interp::Pointer::isZero(), peekToAPSInt(), clang::interp::Pointer::pointToSameBlock(), clang::interp::Bytes::toBits(), and clang::interp::Pointer::toDiagnosticString().
Referenced by InterpretBuiltin().
|
static |
Definition at line 765 of file InterpBuiltin.cpp.
References clang::Call, clang::Func, PT_Ptr, clang::T, and TYPE_SWITCH.
Referenced by InterpretBuiltin().
|
static |
Definition at line 310 of file InterpBuiltin.cpp.
References clang::interp::Pointer::atIndex(), CheckLoad(), clang::interp::Pointer::deref(), clang::Sema::getASTContext(), clang::interp::Function::getDecl(), clang::interp::Pointer::getFieldDesc(), clang::ASTContext::getFloatTypeSemantics(), clang::interp::Pointer::getNumElems(), clang::FunctionDecl::getReturnType(), clang::ASTContext::getTargetInfo(), clang::TargetInfo::isNan2008(), clang::interp::Descriptor::isPrimitiveArray(), and clang::Result.
Referenced by InterpretBuiltin().
|
static |
Definition at line 1698 of file InterpBuiltin.cpp.
References clang::interp::Descriptor::asExpr(), clang::interp::Pointer::block(), clang::Call, CheckNewDeleteForms(), clang::interp::Pointer::getDeclDesc(), clang::interp::Block::getDescriptor(), clang::interp::Pointer::isZero(), Loc, and clang::interp::DynamicAllocator::Operator.
Referenced by InterpretBuiltin().
|
static |
Definition at line 1577 of file InterpBuiltin.cpp.
References clang::Call, clang::Func, clang::Sema::getASTContext(), clang::Sema::getLangOpts(), clang::ConstantArrayType::getMaxSizeBits(), clang::CharUnits::getQuantity(), clang::QualType::getTypePtr(), clang::ASTContext::getTypeSizeInChars(), clang::interp::Descriptor::InlineDescMD, clang::Type::isFunctionType(), clang::Type::isIncompleteType(), clang::QualType::isNull(), clang::IdentifierInfo::isStr(), clang::CharUnits::isZero(), Loc, clang::interp::Descriptor::MaxArrayElemBytes, clang::interp::DynamicAllocator::Operator, peekToAPSInt(), clang::TemplateArgumentList::size(), and clang::TemplateArgument::Type.
Referenced by InterpretBuiltin().
|
static |
Definition at line 1484 of file InterpBuiltin.cpp.
References clang::Call, clang::analyze_os_log::computeOSLogBufferLayout(), clang::Sema::getASTContext(), clang::CharUnits::getQuantity(), pushInteger(), and clang::analyze_os_log::OSLogBufferLayout::size().
Referenced by InterpretBuiltin().
|
static |
Definition at line 798 of file InterpBuiltin.cpp.
References align(), assignInteger(), clang::Call, clang::Func, clang::Sema::getASTContext(), clang::ASTContext::getTypeSize(), clang::interp::Pointer::initialize(), clang::interp::Pointer::isDummy(), clang::Type::isSignedIntegerOrEnumerationType(), peekToAPSInt(), primSize(), PT_Ptr, and clang::Result.
Referenced by InterpretBuiltin().
|
static |
Definition at line 648 of file InterpBuiltin.cpp.
References clang::Call, peekToAPSInt(), and pushInteger().
Referenced by InterpretBuiltin().
|
static |
Definition at line 638 of file InterpBuiltin.cpp.
References clang::Call, peekToAPSInt(), and pushInteger().
Referenced by InterpretBuiltin().
|
static |
Definition at line 1495 of file InterpBuiltin.cpp.
References clang::Call, pushInteger(), and clang::Result.
Referenced by InterpretBuiltin().
|
static |
rotateleft(value, amount)
Definition at line 712 of file InterpBuiltin.cpp.
References align(), clang::Call, peekToAPSInt(), primSize(), pushInteger(), clang::Result, and Right.
Referenced by InterpretBuiltin().
|
static |
Definition at line 513 of file InterpBuiltin.cpp.
References clang::Call, clang::interp::Floating::isNegative(), and pushInteger().
Referenced by InterpretBuiltin().
|
static |
Definition at line 193 of file InterpBuiltin.cpp.
References clang::AK_Read, clang::interp::Pointer::atIndex(), clang::Call, CheckLive(), CheckRange(), clang::interp::Pointer::deref(), diagnoseNonConstexprBuiltin(), clang::Func, clang::interp::Pointer::getFieldDesc(), clang::interp::Pointer::getIndex(), clang::interp::Pointer::isDummy(), clang::interp::Descriptor::isPrimitiveArray(), peekToAPSInt(), pushInteger(), and clang::Result.
Referenced by InterpretBuiltin().
|
static |
Definition at line 254 of file InterpBuiltin.cpp.
References clang::AK_Read, clang::interp::Pointer::atIndex(), clang::Call, CheckArray(), CheckDummy(), CheckLive(), CheckRange(), clang::interp::Pointer::deref(), diagnoseNonConstexprBuiltin(), clang::Func, clang::Sema::getASTContext(), clang::interp::Descriptor::getElemSize(), clang::interp::Pointer::getFieldDesc(), clang::interp::Pointer::getIndex(), clang::interp::Descriptor::isPrimitiveArray(), and pushInteger().
Referenced by InterpretBuiltin().
|
static |
Definition at line 1744 of file InterpBuiltin.cpp.
References clang::interp::Pointer::atIndex(), clang::Call, clang::Func, clang::interp::Descriptor::getElemQualType(), clang::interp::Pointer::getFieldDesc(), clang::interp::Pointer::getNumElems(), handleOverflow(), INT_TYPE_SWITCH_NO_BOOL, clang::interp::Descriptor::isPrimitiveArray(), pushInteger(), clang::Result, and clang::T.
Referenced by InterpretBuiltin().
|
static |
Definition at line 522 of file InterpBuiltin.cpp.
References align(), clang::Call, clang::interp::Floating::compare(), clang::interp::Function::getBuiltinID(), clang::Greater, clang::Less, primSize(), PT_Float, pushInteger(), and clang::Unordered.
Referenced by InterpretBuiltin().
bool clang::interp::Interpret | ( | InterpState & | S | ) |
Interpreter entry point.
Definition at line 1602 of file Interp.cpp.
References clang::interp::CodePtr::read().
bool clang::interp::InterpretBuiltin | ( | InterpState & | S, |
CodePtr | OpPC, | ||
const Function * | F, | ||
const CallExpr * | Call, | ||
uint32_t | BuiltinID | ||
) |
Interpret a builtin function.
Definition at line 2030 of file InterpBuiltin.cpp.
References clang::Call, interp__builtin_abs(), interp__builtin_addressof(), interp__builtin_arithmetic_fence(), interp__builtin_assume_aligned(), interp__builtin_atomic_lock_free(), interp__builtin_bitreverse(), interp__builtin_bswap(), interp__builtin_carryop(), interp__builtin_classify_type(), interp__builtin_clrsb(), interp__builtin_clz(), interp__builtin_complex(), interp__builtin_constant_p(), interp__builtin_copysign(), interp__builtin_ctz(), interp__builtin_eh_return_data_regno(), interp__builtin_elementwise_popcount(), interp__builtin_expect(), interp__builtin_fabs(), interp__builtin_ffs(), interp__builtin_fmax(), interp__builtin_fmin(), interp__builtin_fpclassify(), interp__builtin_ia32_addcarry_subborrow(), interp__builtin_ia32_bextr(), interp__builtin_ia32_bzhi(), interp__builtin_ia32_lzcnt(), interp__builtin_ia32_pdep(), interp__builtin_ia32_pext(), interp__builtin_ia32_tzcnt(), interp__builtin_inf(), interp__builtin_is_aligned_up_down(), interp__builtin_is_constant_evaluated(), interp__builtin_isfinite(), interp__builtin_isfpclass(), interp__builtin_isinf(), interp__builtin_isnan(), interp__builtin_isnormal(), interp__builtin_issignaling(), interp__builtin_issubnormal(), interp__builtin_iszero(), interp__builtin_memcmp(), interp__builtin_memcpy(), interp__builtin_move(), interp__builtin_nan(), interp__builtin_operator_delete(), interp__builtin_operator_new(), interp__builtin_os_log_format_buffer_size(), interp__builtin_overflowop(), interp__builtin_parity(), interp__builtin_popcount(), interp__builtin_ptrauth_string_discriminator(), interp__builtin_rotate(), interp__builtin_signbit(), interp__builtin_strcmp(), interp__builtin_strlen(), interp__builtin_vector_reduce(), interp_floating_comparison(), InterpretBuiltin(), noopPointer(), pushInteger(), and retPrimValue().
Referenced by CallBI(), and InterpretBuiltin().
bool clang::interp::InterpretOffsetOf | ( | InterpState & | S, |
CodePtr | OpPC, | ||
const OffsetOfExpr * | E, | ||
llvm::ArrayRef< int64_t > | ArrayIndices, | ||
int64_t & | Result | ||
) |
Interpret an offsetof operation.
Definition at line 2524 of file InterpBuiltin.cpp.
References clang::OffsetOfNode::Array, clang::OffsetOfNode::Base, E, clang::OffsetOfNode::Field, clang::Type::getAs(), clang::ASTContext::getAsArrayType(), clang::Sema::getASTContext(), clang::ASTContext::getASTRecordLayout(), clang::ASTRecordLayout::getBaseClassOffset(), clang::RecordType::getDecl(), clang::ArrayType::getElementType(), clang::ASTRecordLayout::getFieldCount(), clang::FieldDecl::getFieldIndex(), clang::ASTRecordLayout::getFieldOffset(), clang::QualType::getNonReferenceType(), clang::ValueDecl::getType(), clang::CXXBaseSpecifier::getType(), clang::Expr::getType(), clang::ASTContext::getTypeSizeInChars(), clang::OffsetOfNode::Identifier, InterpretOffsetOf(), clang::Decl::isInvalidDecl(), clang::CXXBaseSpecifier::isVirtual(), Node, clang::Result, and clang::ASTContext::toCharUnitsFromBits().
Referenced by InterpretOffsetOf(), and OffsetOf().
|
inline |
|
inline |
|
inline |
Same here, but only for casts.
Definition at line 2803 of file Interp.h.
References Loc, and Reinterpret.
|
inline |
Definition at line 2816 of file Interp.h.
References CheckDeclRef(), clang::DeclRefExpr::getDecl(), InitializerFailed, and Loc.
bool clang::interp::InvalidNewDeleteExpr | ( | InterpState & | S, |
CodePtr | OpPC, | ||
const Expr * | E | ||
) |
Definition at line 1483 of file Interp.cpp.
References E, clang::Sema::getLangOpts(), clang::Stmt::getSourceRange(), and Loc.
Referenced by CheckNewTypeMismatch().
bool clang::interp::InvalidShuffleVectorIndex | ( | InterpState & | S, |
CodePtr | OpPC, | ||
uint32_t | Index | ||
) |
Definition at line 1533 of file Interp.cpp.
References Loc.
|
inlinestatic |
Definition at line 3011 of file Interp.h.
References clang::interp::Boolean::from().
Definition at line 74 of file PrimType.h.
References PT_FixedPoint, and clang::T.
Referenced by interp__builtin_is_aligned_up_down(), Neg(), clang::interp::Compiler< Emitter >::VisitCXXReinterpretCastExpr(), clang::interp::Compiler< Emitter >::VisitCXXStdInitializerListExpr(), and clang::interp::Compiler< Emitter >::VisitUnaryOperator().
|
inline |
Definition at line 2433 of file Interp.h.
References clang::interp::Boolean::from(), P, and clang::T.
Determine if T is a character type for which we guarantee that sizeof(T) == 1.
Definition at line 1918 of file InterpBuiltin.cpp.
References clang::Type::isChar8Type(), clang::Type::isCharType(), and clang::T.
Referenced by interp__builtin_memcmp().
Definition at line 53 of file PrimType.h.
References PT_FnPtr, PT_MemberPtr, PT_Ptr, and clang::T.
Referenced by DecayPtr(), clang::interp::Compiler< Emitter >::VisitBinaryOperator(), and clang::interp::Compiler< Emitter >::VisitCastExpr().
bool clang::interp::LE | ( | InterpState & | S, |
CodePtr | OpPC | ||
) |
Definition at line 1171 of file Interp.h.
References clang::Equal, and clang::Less.
Referenced by clang::interp::Compiler< Emitter >::VisitIntegerLiteral().
bool clang::interp::Load | ( | InterpState & | S, |
CodePtr | OpPC | ||
) |
Definition at line 1748 of file Interp.h.
References CheckLoad(), clang::interp::Pointer::deref(), clang::interp::Pointer::isBlockPointer(), and clang::T.
bool clang::interp::LoadPop | ( | InterpState & | S, |
CodePtr | OpPC | ||
) |
Definition at line 1759 of file Interp.h.
References CheckLoad(), clang::interp::Pointer::deref(), clang::interp::Pointer::isBlockPointer(), and clang::T.
bool clang::interp::LT | ( | InterpState & | S, |
CodePtr | OpPC | ||
) |
Definition at line 1164 of file Interp.h.
References clang::Less.
|
inline |
Definition at line 1904 of file Interp.h.
References CheckLoad(), and DoMemcpy().
bool clang::interp::Mul | ( | InterpState & | S, |
CodePtr | OpPC | ||
) |
Definition at line 447 of file Interp.h.
References clang::T.
Referenced by clang::interp::Compiler< Emitter >::VisitVectorBinOp().
|
inline |
Definition at line 466 of file Interp.h.
References clang::interp::Pointer::atIndex(), clang::C, D, clang::interp::Pointer::deref(), HandleComplexComplexMul(), clang::Result, and clang::T.
|
inline |
Definition at line 454 of file Interp.h.
References CheckFloatResult(), clang::FPOptions::getFromOpaqueInt(), getRoundingMode(), clang::interp::Floating::mul(), and clang::Result.
|
inline |
Definition at line 2625 of file Interp.h.
References clang::interp::Pointer::narrow().
Referenced by ArrayElemPtr(), and ArrayElemPtrPop().
bool clang::interp::NE | ( | InterpState & | S, |
CodePtr | OpPC | ||
) |
Definition at line 1157 of file Interp.h.
References clang::Equal.
Referenced by ctorArrayTy(), dtorArrayTy(), and moveArrayTy().
bool clang::interp::Neg | ( | InterpState & | S, |
CodePtr | OpPC | ||
) |
Definition at line 726 of file Interp.h.
References E, clang::Expr::getExprLoc(), clang::Stmt::getSourceRange(), clang::Expr::getType(), handleOverflow(), isIntegralType(), Loc, clang::Result, clang::T, and toString().
|
static |
Just takes the first Argument to the call and puts it on the stack.
Definition at line 790 of file InterpBuiltin.cpp.
Referenced by InterpretBuiltin().
|
inline |
|
inline |
bool clang::interp::OffsetHelper | ( | InterpState & | S, |
CodePtr | OpPC, | ||
const T & | Offset, | ||
const Pointer & | Ptr, | ||
bool | IsPointerArith = false |
||
) |
Definition at line 1937 of file Interp.h.
References Add, clang::interp::Pointer::asBlockPointer(), clang::interp::Pointer::asFunctionPointer(), clang::interp::Pointer::asIntPointer(), clang::interp::Pointer::atIndex(), clang::interp::BlockPointer::Base, CheckArray(), CheckNull(), clang::CSK_ArrayIndex, clang::interp::IntPointer::Desc, clang::interp::Pointer::elemSize(), clang::interp::Pointer::getByteOffset(), clang::interp::FunctionPointer::getFunction(), clang::interp::Pointer::getIndex(), clang::interp::Pointer::getIntegerRepresentation(), clang::Sema::getLangOpts(), clang::interp::Pointer::getNumElems(), clang::interp::Pointer::inArray(), clang::Invalid, clang::interp::Pointer::isBlockPointer(), clang::interp::Pointer::isFunctionPointer(), clang::interp::Pointer::isIntegralPointer(), clang::interp::Pointer::isOnePastEnd(), clang::interp::BlockPointer::Pointee, clang::Result, and V.
|
inline |
Definition at line 2853 of file Interp.h.
References E, InterpretOffsetOf(), clang::Result, and clang::T.
|
inline |
Definition at line 160 of file Boolean.h.
References clang::interp::Boolean::print().
|
inline |
|
inline |
Definition at line 164 of file FixedPoint.h.
References clang::interp::FixedPoint::print().
llvm::raw_ostream & clang::interp::operator<< | ( | llvm::raw_ostream & | OS, |
Floating | F | ||
) |
Definition at line 14 of file Floating.cpp.
References clang::interp::Floating::print().
|
inline |
Definition at line 67 of file FunctionPointer.h.
References clang::interp::FunctionPointer::print().
llvm::raw_ostream & clang::interp::operator<< | ( | llvm::raw_ostream & | OS, |
Integral< Bits, Signed > | I | ||
) |
Definition at line 333 of file Integral.h.
References clang::interp::Integral< Bits, Signed >::print().
|
inline |
Definition at line 330 of file IntegralAP.h.
References clang::interp::IntegralAP< Signed >::print().
|
inline |
Definition at line 61 of file PrimType.h.
References Atomic, and Reinterpret.
|
inline |
Definition at line 109 of file MemberPointer.h.
References clang::interp::MemberPointer::print().
|
static |
Peek an integer value from the stack into an APSInt.
Definition at line 75 of file InterpBuiltin.cpp.
References align(), INT_TYPE_SWITCH, clang::interp::InterpStack::peek(), primSize(), and clang::T.
Referenced by interp__builtin_abs(), interp__builtin_assume_aligned(), interp__builtin_atomic_lock_free(), interp__builtin_bitreverse(), interp__builtin_bswap(), interp__builtin_carryop(), interp__builtin_clrsb(), interp__builtin_clz(), interp__builtin_ctz(), interp__builtin_eh_return_data_regno(), interp__builtin_elementwise_popcount(), interp__builtin_expect(), interp__builtin_ffs(), interp__builtin_fpclassify(), interp__builtin_ia32_bextr(), interp__builtin_ia32_bzhi(), interp__builtin_ia32_lzcnt(), interp__builtin_ia32_pdep(), interp__builtin_ia32_pext(), interp__builtin_ia32_tzcnt(), interp__builtin_is_aligned_up_down(), interp__builtin_isfpclass(), interp__builtin_memcmp(), interp__builtin_memcpy(), interp__builtin_operator_new(), interp__builtin_overflowop(), interp__builtin_parity(), interp__builtin_popcount(), interp__builtin_rotate(), and interp__builtin_strcmp().
bool clang::interp::Pop | ( | InterpState & | S, |
CodePtr | OpPC | ||
) |
|
static |
Definition at line 225 of file Interp.cpp.
References PT_Ptr, clang::T, and TYPE_SWITCH.
Referenced by cleanupAfterFunctionCall().
Returns the size of a primitive type in bytes.
Definition at line 23 of file PrimType.cpp.
References clang::T, and TYPE_SWITCH.
Referenced by AllocN(), Call(), callArgSize(), CallPtr(), CallVar(), CallVirt(), CheckNonNullArgs(), clang::interp::ByteCodeEmitter::compileFunc(), clang::interp::ByteCodeEmitter::compileObjCBlock(), clang::interp::Program::createDescriptor(), clang::interp::InterpFrame::describe(), clang::interp::InterpStack::dump(), clang::interp::Function::getWrittenArgSize(), interp__builtin_assume_aligned(), interp__builtin_atomic_lock_free(), interp__builtin_carryop(), interp__builtin_complex(), interp__builtin_elementwise_popcount(), interp__builtin_expect(), interp__builtin_fpclassify(), interp__builtin_ia32_bextr(), interp__builtin_ia32_bzhi(), interp__builtin_ia32_pdep(), interp__builtin_ia32_pext(), interp__builtin_isfpclass(), interp__builtin_overflowop(), interp__builtin_rotate(), interp_floating_comparison(), peekToAPSInt(), clang::interp::Compiler< Emitter >::VisitCallExpr(), clang::interp::Compiler< Emitter >::VisitCXXConstructExpr(), and clang::interp::Compiler< Emitter >::VisitCXXInheritedCtorInitExpr().
|
inlinestatic |
Definition at line 2381 of file Interp.h.
References E, clang::Sema::getLangOpts(), and clang::interp::Pointer::isZero().
|
static |
Pushes Val
on the stack as the type given by QT
.
Definition at line 86 of file InterpBuiltin.cpp.
References clang::Sema::getASTContext(), clang::ASTContext::getTypeSize(), INT_TYPE_SWITCH, clang::Type::isSignedIntegerOrEnumerationType(), clang::Type::isUnsignedIntegerOrEnumerationType(), clang::T, and V.
Referenced by interp__builtin_abs(), interp__builtin_bitreverse(), interp__builtin_carryop(), interp__builtin_classify_type(), interp__builtin_clrsb(), interp__builtin_clz(), interp__builtin_constant_p(), interp__builtin_ctz(), interp__builtin_eh_return_data_regno(), interp__builtin_elementwise_popcount(), interp__builtin_expect(), interp__builtin_ffs(), interp__builtin_fpclassify(), interp__builtin_ia32_addcarry_subborrow(), interp__builtin_ia32_bextr(), interp__builtin_ia32_bzhi(), interp__builtin_ia32_lzcnt(), interp__builtin_ia32_pdep(), interp__builtin_ia32_pext(), interp__builtin_ia32_tzcnt(), interp__builtin_is_aligned_up_down(), interp__builtin_isfinite(), interp__builtin_isfpclass(), interp__builtin_isinf(), interp__builtin_isnan(), interp__builtin_isnormal(), interp__builtin_issignaling(), interp__builtin_issubnormal(), interp__builtin_iszero(), interp__builtin_memcmp(), interp__builtin_os_log_format_buffer_size(), interp__builtin_parity(), interp__builtin_popcount(), interp__builtin_ptrauth_string_discriminator(), interp__builtin_rotate(), interp__builtin_signbit(), interp__builtin_strcmp(), interp__builtin_strlen(), interp__builtin_vector_reduce(), interp_floating_comparison(), InterpretBuiltin(), and pushInteger().
|
static |
Definition at line 104 of file InterpBuiltin.cpp.
References pushInteger(), and clang::T.
|
inline |
Definition at line 3094 of file Interp.h.
References clang::interp::CodePtr::read(), and clang::T.
|
inline |
Definition at line 3103 of file Interp.h.
References align(), clang::interp::Floating::bytesToSerialize(), and clang::interp::Floating::deserialize().
|
inline |
|
inline |
bool clang::interp::readPointerToBuffer | ( | const Context & | Ctx, |
const Pointer & | FromPtr, | ||
BitcastBuffer & | Buffer, | ||
bool | ReturnOnUninit | ||
) |
Definition at line 257 of file InterpBuiltinBitCast.cpp.
References BITCAST_TYPE_SWITCH, clang::interp::Floating::bitcastToMemory(), enumeratePointerFields(), clang::interp::Floating::getAPFloat(), clang::interp::Context::getASTContext(), clang::interp::Bits::getQuantity(), clang::ASTContext::getTargetInfo(), clang::if(), clang::TargetInfo::isLittleEndian(), clang::interp::BitcastBuffer::markInitialized(), P, PT_Float, clang::interp::BitcastBuffer::pushData(), clang::interp::Bits::roundToBytes(), clang::interp::BitcastBuffer::size(), swapBytes(), and clang::T.
Referenced by DoBitCast(), DoBitCastPtr(), and interp__builtin_memcmp().
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 654 of file Interp.h.
References CheckDivRem(), clang::Result, and clang::T.
bool clang::interp::Ret | ( | InterpState & | S, |
CodePtr & | PC | ||
) |
Definition at line 318 of file Interp.h.
References cleanupAfterFunctionCall(), Ret(), and clang::T.
Referenced by clang::interp::Record::getName(), and Ret().
|
static |
|
inline |
Definition at line 340 of file Interp.h.
References cleanupAfterFunctionCall().
Referenced by retPrimValue().
|
static |
Definition at line 976 of file Interp.cpp.
References clang::interp::Pointer::atIndex(), clang::interp::Descriptor::ElemDesc, clang::interp::Block::getDescriptor(), clang::interp::Descriptor::getNumElems(), clang::interp::Descriptor::isCompositeArray(), clang::interp::Descriptor::isPrimitive(), clang::interp::Descriptor::isPrimitiveArray(), clang::interp::Descriptor::isRecord(), clang::interp::Pointer::narrow(), and runRecordDestructor().
Referenced by Free().
|
static |
Definition at line 949 of file Interp.cpp.
References clang::Call, clang::interp::Descriptor::ElemRecord, clang::interp::Record::getDestructor(), clang::interp::Descriptor::isRecord(), clang::FunctionDecl::isTrivial(), Loc, and clang::interp::Pointer::pointToSameBlock().
Referenced by RunDestructors().
|
inline |
bool clang::interp::SetField | ( | InterpState & | S, |
CodePtr | OpPC, | ||
uint32_t | I | ||
) |
Definition at line 1302 of file Interp.h.
References CheckNull(), CheckRange(), CheckStore(), clang::CSK_Field, and clang::T.
bool clang::interp::SetGlobal | ( | InterpState & | S, |
CodePtr | OpPC, | ||
uint32_t | I | ||
) |
bool clang::interp::SetLocal | ( | InterpState & | S, |
CodePtr | OpPC, | ||
uint32_t | I | ||
) |
bool clang::interp::SetParam | ( | InterpState & | S, |
CodePtr | OpPC, | ||
uint32_t | I | ||
) |
bool clang::interp::SetThisField | ( | InterpState & | S, |
CodePtr | OpPC, | ||
uint32_t | I | ||
) |
Definition at line 1348 of file Interp.h.
References CheckStore(), CheckThis(), clang::T, and This().
bool clang::interp::SetThreeWayComparisonField | ( | InterpState & | S, |
CodePtr | OpPC, | ||
const Pointer & | Ptr, | ||
const APSInt & | IntValue | ||
) |
Sets the given integral value to the pointer, which is of a std::{weak,partial,strong}_ordering type.
Definition at line 2599 of file InterpBuiltin.cpp.
References clang::interp::Pointer::atField(), clang::interp::Pointer::deref(), clang::interp::Record::getField(), clang::interp::Record::getNumFields(), clang::interp::Pointer::getRecord(), clang::interp::Pointer::getType(), clang::interp::Pointer::initialize(), INT_TYPE_SWITCH, clang::interp::Record::Field::Offset, SetThreeWayComparisonField(), and clang::T.
Referenced by CMP3(), and SetThreeWayComparisonField().
|
inlinestatic |
Definition at line 2575 of file Interp.h.
References E, clang::interp::FixedPoint::getSemantics(), clang::Expr::getType(), handleFixedPointOverflow(), Left, clang::Result, clang::interp::FixedPoint::shiftLeft(), and clang::interp::FixedPoint::shiftRight().
|
inline |
|
inline |
|
inline |
|
inline |
bool clang::interp::Store | ( | InterpState & | S, |
CodePtr | OpPC | ||
) |
Definition at line 1770 of file Interp.h.
References CheckStore(), clang::interp::Pointer::initialize(), and clang::T.
bool clang::interp::StoreBitField | ( | InterpState & | S, |
CodePtr | OpPC | ||
) |
Definition at line 1798 of file Interp.h.
References CheckStore(), clang::Sema::getASTContext(), clang::interp::Pointer::initialize(), and clang::T.
bool clang::interp::StoreBitFieldPop | ( | InterpState & | S, |
CodePtr | OpPC | ||
) |
Definition at line 1813 of file Interp.h.
References CheckStore(), clang::Sema::getASTContext(), clang::interp::Pointer::initialize(), and clang::T.
bool clang::interp::StorePop | ( | InterpState & | S, |
CodePtr | OpPC | ||
) |
Definition at line 1784 of file Interp.h.
References CheckStore(), clang::interp::Pointer::initialize(), and clang::T.
bool clang::interp::Sub | ( | InterpState & | S, |
CodePtr | OpPC | ||
) |
|
inline |
Definition at line 435 of file Interp.h.
References CheckFloatResult(), clang::FPOptions::getFromOpaqueInt(), getRoundingMode(), clang::Result, and clang::interp::Floating::sub().
bool clang::interp::SubOffset | ( | 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 2116 of file Interp.h.
References clang::Sema::getASTContext(), clang::ASTContext::getConstantArrayType(), clang::interp::Pointer::getIndex(), clang::interp::Pointer::getIntegerRepresentation(), clang::Sema::getLangOpts(), clang::interp::Pointer::getNumElems(), clang::interp::Pointer::hasSameBase(), clang::interp::Pointer::isBlockPointer(), clang::interp::Pointer::isElementPastEnd(), clang::interp::Pointer::isZero(), clang::Normal, P, and clang::T.
|
inlinestatic |
Definition at line 22 of file InterpBuiltinBitCast.h.
Referenced by DoBitCast(), DoBitCastPtr(), interp__builtin_memcmp(), and readPointerToBuffer().
|
inline |
Definition at line 2445 of file Interp.h.
References CheckThis(), and This().
Referenced by CheckThis(), GetPtrActiveThisField(), GetPtrThisBase(), GetPtrThisField(), GetPtrThisVirtBase(), GetThisField(), InitThisBitField(), InitThisField(), SetThisField(), and This().
|
inline |
Definition at line 1914 of file Interp.h.
References clang::Member.
|
inline |
|
inline |
Definition at line 1712 of file Interp.h.
Referenced by GetPtrThisVirtBase(), and GetPtrVirtBasePop().
bool clang::interp::Zero | ( | InterpState & | S, |
CodePtr | OpPC | ||
) |
|
inlinestatic |
Definition at line 2413 of file Interp.h.
References clang::interp::IntegralAP< Signed >::zero().
|
inlinestatic |
Definition at line 2418 of file Interp.h.
References clang::interp::IntegralAP< Signed >::zero().