|
clang 24.0.0git
|
Interpreter context. More...
#include "/work/as-worker-4/publish-doxygen-docs/llvm-project/clang/lib/AST/ByteCode/InterpState.h"
Public Member Functions | |
| InterpState (const EvalSettings &Settings, Program &P, InterpStack &Stk, FrameAllocator &FrameAlloc, Context &Ctx, SourceMapper *M=nullptr) | |
| InterpState (const EvalSettings &Settings, Program &P, InterpStack &Stk, FrameAllocator &FA, Context &Ctx, const Function *Func) | |
| InterpState (Expr::EvalStatus &Status, Program &P, InterpStack &Stk, FrameAllocator &FA, Context &Ctx, SourceMapper *M) | |
| ~InterpState () | |
| void | cleanup () |
| InterpState (const InterpState &)=delete | |
| InterpState & | operator= (const InterpState &)=delete |
| bool | diagnosing () const |
| const Frame * | getCurrentFrame () override |
| unsigned | getCallStackDepth () override |
| bool | stepsLeft () const override |
| bool | inConstantContext () const |
| void | deallocate (Block *B) |
| Deallocates a pointer. | |
| SourceInfo | getSource (CodePtr PC) const |
| Delegates source mapping to the mapper. | |
| Context & | getContext () const |
| void | setEvalLocation (SourceLocation SL) |
| DynamicAllocator & | getAllocator () |
| bool | maybeDiagnoseDanglingAllocations () |
| Diagnose any dynamic allocations that haven't been freed yet. | |
| StdAllocatorCaller | getStdAllocatorCaller (StringRef Name) const |
| void * | allocate (size_t Size, unsigned Align=8) const |
| template<typename T> | |
| T * | allocate (size_t Num=1) const |
| template<typename T> | |
| T | allocAP (unsigned BitWidth) |
| Floating | allocFloat (const llvm::fltSemantics &Sem) |
| const CXXRecordDecl ** | allocMemberPointerPath (unsigned Length) |
| PointerPathEntry * | allocPointerPath (unsigned Length, const PointerPathEntry *OldPP) |
| PointerPathEntry * | extendPointerPath (unsigned NewLength, const PointerPathEntry *OldPP, PointerPathEntry NewEntry) |
Allocate a new pointer path of Length NewLength. | |
| bool | noteStep (CodePtr OpPC) |
| Note that a step has been executed. | |
| bool | initializingBlock (const Block *B) const |
| bool | lifetimeStartedInEvaluation (const Block *B) const |
| bool | checkingConstantDestruction () const |
| Return if we're checking if a global variable has a constant destructor. | |
| bool | checkingConstantDestruction (const Pointer &Ptr) const |
| Return if we're checking if a global variable has a constant destructor and the given pointer is pointing to the variable we're checking that for. | |
| bool | checkingConstantDestruction (const VarDecl *VD) const |
| unsigned | newStringID () |
| template<typename... Ts> | |
| InterpFrame * | allocFrame (const Function *F, Ts &&...Args) |
| Allocate memory and create a new InterpFrame for the given function. | |
| void | resetCurrentFrame () |
| Free resources associated with the current frame and set the caller to be the new current frame. | |
| Public Member Functions inherited from clang::interp::State | |
| State (ASTContext &ASTCtx, Expr::EvalStatus &EvalStatus) | |
| virtual | ~State () |
| Expr::EvalStatus & | getEvalStatus () const |
| ASTContext & | getASTContext () const |
| const LangOptions & | getLangOpts () const |
| bool | emitRelaxedDiag (SourceLocation Loc, diag::kind DiagId) |
If DiagId should be relaxed as per the current evaluation settings, emit it as a warning instead of an error. | |
| bool | noteSideEffect () const |
| Note that we have had a side-effect, and determine whether we should keep evaluating. | |
| bool | keepEvaluatingAfterFailure () const |
| Should we continue evaluation as much as possible after encountering a construct which can't be reduced to a value? | |
| bool | keepEvaluatingAfterSideEffect () const |
| Should we continue evaluation after encountering a side-effect that we couldn't model? | |
| bool | noteUndefinedBehavior () const |
| Note that we hit something that was technically undefined behavior, but that we can evaluate past it (such as signed overflow or floating-point division by zero.) | |
| bool | checkingPotentialConstantExpression () const |
| Are we checking whether the expression is a potential constant expression? | |
| bool | checkingForUndefinedBehavior () const |
| Are we checking an expression for overflow? | |
| OptionalDiagnostic | FFDiag (SourceLocation Loc, diag::kind DiagId=diag::note_invalid_subexpr_in_const_expr, unsigned ExtraNotes=0) |
| Diagnose that the evaluation could not be folded (FF => FoldFailure) | |
| OptionalDiagnostic | FFDiag (const Expr *E, diag::kind DiagId=diag::note_invalid_subexpr_in_const_expr, unsigned ExtraNotes=0) |
| OptionalDiagnostic | FFDiag (SourceInfo SI, diag::kind DiagId=diag::note_invalid_subexpr_in_const_expr, unsigned ExtraNotes=0) |
| OptionalDiagnostic | CCEDiag (SourceLocation Loc, diag::kind DiagId=diag::note_invalid_subexpr_in_const_expr, unsigned ExtraNotes=0) |
| Diagnose that the evaluation does not produce a C++11 core constant expression. | |
| OptionalDiagnostic | CCEDiag (const Expr *E, diag::kind DiagId=diag::note_invalid_subexpr_in_const_expr, unsigned ExtraNotes=0) |
| OptionalDiagnostic | CCEDiag (SourceInfo SI, diag::kind DiagId=diag::note_invalid_subexpr_in_const_expr, unsigned ExtraNotes=0) |
| OptionalDiagnostic | Note (SourceLocation Loc, diag::kind DiagId) |
| Add a note to a prior diagnostic. | |
| OptionalDiagnostic | Note (SourceInfo Loc, diag::kind DiagId) |
| DiagnosticBuilder | report (SourceLocation Loc, diag::kind DiagId) |
| Directly reports a diagnostic message. | |
Public Attributes | |
| CodePtr | PC |
| Program & | P |
| Reference to the module containing all bytecode. | |
| InterpStack & | Stk |
| Temporary stack. | |
| Context & | Ctx |
| Interpreter Context. | |
| InterpFrame | BottomFrame |
| Bottom function frame. | |
| InterpFrame * | Current = nullptr |
| The current frame. | |
| SourceLocation | EvalLocation |
| Source location of the evaluating expression. | |
| const VarDecl * | EvaluatingDecl = nullptr |
| Declaration we're initializing/evaluting, if any. | |
| unsigned | StepsLeft = 1 |
| Steps left during evaluation. | |
| const bool | InfiniteSteps = false |
| Whether infinite evaluation steps have been requested. | |
| const unsigned | EvalID |
| ID identifying this evaluation. | |
| unsigned | StringID = 0 |
| EvaluationKind | EvalKind = EvaluationKind::None |
| SmallVectorImpl< PartialDiagnosticAt > * | PrevDiags = nullptr |
| Things needed to do speculative execution. | |
| bool | PrevDiagsEmitted = false |
| unsigned | SpeculationDepth = 0 |
| unsigned | DiagIgnoreDepth = 0 |
| std::optional< bool > | ConstantContextOverride |
| llvm::SmallVector< std::pair< const Expr *, const LifetimeExtendedTemporaryDecl * > > | SeenGlobalTemporaries |
| llvm::SmallVector< PtrView > | InitializingPtrs |
| List of blocks we're currently running either constructors or destructors for. | |
| Public Attributes inherited from clang::interp::State | |
| bool | InConstantContext = false |
| Whether or not we're in a context where the front end requires a constant value. | |
| bool | CheckingPotentialConstantExpression = false |
| Whether we're checking that an expression is a potential constant expression. | |
| bool | CheckingForUndefinedBehavior = false |
| Whether we're checking for an expression that has undefined behavior. | |
| EvaluationMode | EvalMode |
| ASTContext & | Ctx |
| Expr::EvalStatus & | EvalStatus |
Friends | |
| class | EvaluationResult |
| class | InterpStateCCOverride |
Interpreter context.
Definition at line 47 of file InterpState.h.
| InterpState::InterpState | ( | const EvalSettings & | Settings, |
| Program & | P, | ||
| InterpStack & | Stk, | ||
| FrameAllocator & | FrameAlloc, | ||
| Context & | Ctx, | ||
| SourceMapper * | M = nullptr ) |
Definition at line 22 of file InterpState.cpp.
References BottomFrame, clang::interp::EvalSettings::CheckingForUndefinedBehavior, clang::interp::State::CheckingForUndefinedBehavior, clang::interp::EvalSettings::CheckingPotentialConstantExpression, clang::interp::State::CheckingPotentialConstantExpression, Ctx, Current, EvalID, clang::interp::EvalSettings::EvalMode, clang::interp::State::EvalMode, clang::interp::State::EvalStatus, clang::interp::State::getASTContext(), clang::interp::State::getLangOpts(), clang::interp::EvalSettings::InConstantContext, clang::interp::State::InConstantContext, InfiniteSteps, P, clang::interp::State::State(), StepsLeft, and Stk.
Referenced by InterpState(), and operator=().
| InterpState::InterpState | ( | const EvalSettings & | Settings, |
| Program & | P, | ||
| InterpStack & | Stk, | ||
| FrameAllocator & | FA, | ||
| Context & | Ctx, | ||
| const Function * | Func ) |
Definition at line 36 of file InterpState.cpp.
References BottomFrame, clang::interp::EvalSettings::CheckingForUndefinedBehavior, clang::interp::State::CheckingForUndefinedBehavior, clang::interp::EvalSettings::CheckingPotentialConstantExpression, clang::interp::State::CheckingPotentialConstantExpression, Ctx, Current, EvalID, clang::interp::EvalSettings::EvalMode, clang::interp::State::EvalMode, clang::interp::State::EvalStatus, clang::Func, clang::interp::State::getASTContext(), clang::interp::State::getLangOpts(), clang::interp::EvalSettings::InConstantContext, clang::interp::State::InConstantContext, InfiniteSteps, clang::nullptr, P, clang::interp::State::State(), StepsLeft, and Stk.
| InterpState::InterpState | ( | Expr::EvalStatus & | Status, |
| Program & | P, | ||
| InterpStack & | Stk, | ||
| FrameAllocator & | FA, | ||
| Context & | Ctx, | ||
| SourceMapper * | M ) |
Definition at line 50 of file InterpState.cpp.
References BottomFrame, clang::interp::State::CheckingForUndefinedBehavior, clang::interp::State::CheckingPotentialConstantExpression, clang::ConstantExpression, Ctx, Current, EvalID, clang::interp::State::EvalMode, clang::interp::State::getASTContext(), clang::interp::State::getLangOpts(), clang::interp::State::InConstantContext, InfiniteSteps, P, clang::interp::State::State(), StepsLeft, and Stk.
| InterpState::~InterpState | ( | ) |
Definition at line 70 of file InterpState.cpp.
|
delete |
References InterpState().
Definition at line 112 of file InterpState.h.
References allocate(), and clang::T.
Referenced by clang::interp::AddSubMulHelper(), clang::interp::assignIntegral(), clang::interp::BitAnd(), clang::interp::BitCastPrim(), clang::interp::BitOr(), clang::interp::BitXor(), clang::interp::CastAP(), clang::interp::CastAPS(), clang::interp::CastPointerIntegralAP(), clang::interp::CastPointerIntegralAPS(), clang::interp::Comp(), clang::interp::Const(), clang::interp::Div(), clang::interp::Divc(), clang::interp::DoBitCastPtr(), clang::interp::floatAPCast(), clang::interp::IncDecHelper(), clang::interp::InitBitField(), clang::interp::InitBitFieldActivate(), clang::interp::Mulc(), clang::interp::Neg(), clang::interp::pushInteger(), clang::interp::Rem(), clang::interp::Shl(), clang::interp::Shr(), clang::interp::ZeroIntAP(), and clang::interp::ZeroIntAPS().
Definition at line 108 of file InterpState.h.
References allocate(), clang::Num, and clang::T.
Definition at line 103 of file InterpState.h.
Referenced by allocAP(), allocate(), allocFloat(), allocMemberPointerPath(), allocPointerPath(), and extendPointerPath().
|
inline |
Definition at line 121 of file InterpState.h.
References allocate(), and clang::interp::Floating::singleWord().
Referenced by clang::interp::abs(), clang::interp::Addf(), clang::interp::BitCastPrim(), clang::interp::CastFixedPointFloating(), clang::interp::CastFP(), clang::interp::CastIntegralFloating(), clang::interp::ConstFloat(), clang::interp::Divc(), clang::interp::Divf(), clang::interp::IncDecFloatHelper(), clang::interp::interp__builtin_copysign(), clang::interp::interp__builtin_elementwise_triop_fp(), clang::interp::interp__builtin_fmax(), clang::interp::interp__builtin_fmin(), clang::interp::interp__builtin_ia32_cvtpd2ps(), clang::interp::interp__builtin_ia32_cvtsd2ss(), clang::interp::interp__builtin_inf(), clang::interp::interp__builtin_nan(), clang::interp::Mulc(), clang::interp::Mulf(), clang::interp::Neg(), clang::interp::ReadArg< Floating >(), and clang::interp::Subf().
|
inline |
Allocate memory and create a new InterpFrame for the given function.
Definition at line 206 of file InterpState.h.
References clang::interp::InterpFrame::allocSize().
Referenced by clang::interp::Call(), and clang::interp::CallVar().
|
inline |
Definition at line 131 of file InterpState.h.
References allocate().
Referenced by clang::interp::appendToMemberPointer(), clang::interp::castBackMemberPointer(), and clang::interp::CopyMemberPtrPath().
|
inline |
Definition at line 135 of file InterpState.h.
References allocate().
Referenced by clang::interp::addSubOffsetOpaque().
|
inline |
Return if we're checking if a global variable has a constant destructor.
Definition at line 190 of file InterpState.h.
References clang::interp::Dtor, and EvalKind.
Referenced by clang::interp::CheckConstant(), clang::interp::CheckConstant(), clang::interp::CheckConstant(), clang::interp::checkDestructor(), checkingConstantDestruction(), clang::interp::CheckMutable(), and CheckTemporary().
Return if we're checking if a global variable has a constant destructor and the given pointer is pointing to the variable we're checking that for.
Definition at line 195 of file InterpState.h.
References checkingConstantDestruction().
Definition at line 198 of file InterpState.h.
References clang::interp::Dtor, EvalKind, and EvaluatingDecl.
| void InterpState::cleanup | ( | ) |
Definition at line 86 of file InterpState.cpp.
| void InterpState::deallocate | ( | Block * | B | ) |
Deallocates a pointer.
Definition at line 95 of file InterpState.cpp.
References clang::interp::Block::getSize(), clang::interp::Block::hasPointers(), clang::interp::Block::invokeDtor(), clang::interp::Block::isDead(), clang::interp::Block::isDynamic(), clang::interp::Block::isInitialized(), clang::interp::Block::isStatic(), and clang::interp::Block::rawData().
Referenced by clang::interp::Destroy().
|
inline |
Definition at line 66 of file InterpState.h.
References clang::Expr::EvalStatus::Diag, and clang::interp::State::getEvalStatus().
Referenced by clang::interp::CheckDeclRef(), clang::interp::CheckThis(), clang::interp::convertDoubleToFloatStrict(), clang::interp::diagnoseCallableDecl(), clang::interp::diagnoseDummy(), clang::interp::diagnoseNonConstexprBuiltin(), diagnoseNonConstVariable(), diagnoseUnknownDecl(), clang::interp::Invalid(), and clang::interp::PushIgnoreDiags().
|
inline |
Allocate a new pointer path of Length NewLength.
NewLength - 1 elements are copied form OldPP.
Definition at line 146 of file InterpState.h.
References allocate().
Referenced by clang::interp::arrayElemPtrOpaque(), clang::interp::getBase(), clang::interp::getField(), and clang::interp::virtBaseHelper().
|
inline |
Definition at line 86 of file InterpState.h.
Referenced by clang::interp::Alloc(), clang::interp::AllocCN(), clang::interp::AllocN(), clang::interp::Free(), clang::interp::interp__builtin_operator_delete(), and clang::interp::interp__builtin_operator_new().
|
inlineoverridevirtual |
|
inline |
Definition at line 82 of file InterpState.h.
References Ctx.
Referenced by clang::interp::CallVirt(), clang::interp::compileFunction(), clang::interp::diagnoseTypeIdField(), clang::interp::DoBitCast(), clang::interp::DoBitCastPtr(), clang::interp::DoMemcpy(), clang::interp::getBase(), clang::interp::getField(), clang::interp::GetMemberPtrDecl(), clang::interp::GetTypeidPtr(), clang::interp::interp__builtin_addressof(), clang::interp::interp__builtin_carryop(), clang::interp::interp__builtin_elementwise_abs(), clang::interp::interp__builtin_elementwise_countzeroes(), clang::interp::interp__builtin_elementwise_int_binop(), clang::interp::interp__builtin_elementwise_int_unaryop(), clang::interp::interp__builtin_elementwise_maxmin(), clang::interp::interp__builtin_elementwise_triop(), clang::interp::interp__builtin_expect(), clang::interp::interp__builtin_fpclassify(), clang::interp::interp__builtin_ia32_addcarry_subborrow(), clang::interp::interp__builtin_ia32_dbpsadbw(), clang::interp::interp__builtin_ia32_gfni_affine(), clang::interp::interp__builtin_ia32_gfni_mul(), clang::interp::interp__builtin_ia32_movmsk_op(), clang::interp::interp__builtin_ia32_mpsadbw(), clang::interp::interp__builtin_ia32_multishiftqb(), clang::interp::interp__builtin_ia32_pack(), clang::interp::interp__builtin_ia32_pclmulqdq(), clang::interp::interp__builtin_ia32_phminposuw(), clang::interp::interp__builtin_ia32_pmul(), clang::interp::interp__builtin_ia32_psadbw(), clang::interp::interp__builtin_ia32_pternlog(), clang::interp::interp__builtin_ia32_shift_with_count(), clang::interp::interp__builtin_ia32_shufbitqmb_mask(), clang::interp::interp__builtin_ia32_shuffle_generic(), clang::interp::interp__builtin_ia32_test_op(), clang::interp::interp__builtin_ia32_vcvtps2ph(), clang::interp::interp__builtin_ia32_vpconflict(), clang::interp::interp__builtin_ia32_vpdp(), clang::interp::interp__builtin_infer_alloc_token(), clang::interp::interp__builtin_memchr(), clang::interp::interp__builtin_memcmp(), clang::interp::interp__builtin_operator_delete(), clang::interp::interp__builtin_operator_new(), clang::interp::interp__builtin_overflowop(), clang::interp::interp__builtin_stdc_memreverse8(), clang::interp::interp__builtin_strcmp(), clang::interp::interp__builtin_vector_reduce(), clang::interp::interp_builtin_horizontal_int_binop(), clang::interp::interp_builtin_ia32_cvt_vector_to_int(), clang::interp::popToAPSInt(), clang::interp::popToAPSInt(), clang::interp::popToUInt64(), clang::interp::pushInteger(), and clang::interp::runRecordDestructor().
|
overridevirtual |
|
inline |
| StdAllocatorCaller InterpState::getStdAllocatorCaller | ( | StringRef | Name | ) | const |
Definition at line 142 of file InterpState.cpp.
References clang::cast(), Current, clang::Func, clang::IdentifierInfo::isStr(), clang::TemplateArgumentList::size(), and clang::TemplateArgument::Type.
Referenced by clang::interp::CheckBitCast(), clang::interp::interp__builtin_operator_delete(), clang::interp::interp__builtin_operator_new(), and clang::interp::PtrPtrCast().
| bool InterpState::inConstantContext | ( | ) | const |
Definition at line 63 of file InterpState.cpp.
References ConstantContextOverride, and clang::interp::State::InConstantContext.
Referenced by clang::interp::ArrayDecay(), clang::interp::arrayElemPtr(), clang::interp::BCP(), clang::interp::CheckEnumValue(), clang::interp::CheckFinalLoad(), clang::interp::CheckFloatStatus(), clang::interp::CheckNewTypeMismatch(), clang::interp::CmpHelperEQ< Pointer >(), diagnoseUnknownDecl(), clang::interp::getField(), clang::interp::IncDecHelper(), clang::interp::interp__builtin_is_constant_evaluated(), clang::interp::interp__builtin_is_within_lifetime(), clang::interp::IsConstantContext(), and clang::interp::SizelessVectorElementSize().
Definition at line 170 of file InterpState.h.
References InitializingPtrs, and V.
Referenced by clang::interp::CheckVolatile(), and clang::interp::interp__builtin_is_within_lifetime().
Definition at line 177 of file InterpState.h.
References clang::interp::Descriptor::asVarDecl(), clang::interp::Dtor, EvalID, EvalKind, EvaluatingDecl, clang::interp::Block::getDescriptor(), clang::interp::Block::getEvalID(), and clang::interp::None.
Referenced by clang::interp::CheckMutable().
| bool InterpState::maybeDiagnoseDanglingAllocations | ( | ) |
Diagnose any dynamic allocations that haven't been freed yet.
Will return false if there were any allocations to diagnose, true otherwise.
Definition at line 123 of file InterpState.cpp.
References clang::interp::State::CCEDiag(), clang::interp::State::checkingPotentialConstantExpression(), and clang::interp::State::getLangOpts().
Referenced by clang::interp::CheckAllocations().
|
inline |
Definition at line 202 of file InterpState.h.
References StringID.
Referenced by clang::interp::GetStringPtr().
Note that a step has been executed.
If there are no more steps remaining, diagnoses and returns false.
Definition at line 159 of file InterpState.h.
References InfiniteSteps, and StepsLeft.
|
delete |
References InterpState().
|
inline |
Free resources associated with the current frame and set the caller to be the new current frame.
Definition at line 217 of file InterpState.h.
References clang::interp::InterpFrame::allocSize(), and Current.
Referenced by clang::interp::Call(), and clang::interp::CallVar().
|
inline |
Definition at line 84 of file InterpState.h.
References EvalLocation.
|
inlineoverridevirtual |
Implements clang::interp::State.
Definition at line 73 of file InterpState.h.
|
friend |
Definition at line 227 of file InterpState.h.
References EvaluationResult.
Referenced by EvaluationResult.
|
friend |
Definition at line 228 of file InterpState.h.
References InterpStateCCOverride.
Referenced by InterpStateCCOverride.
| InterpFrame clang::interp::InterpState::BottomFrame |
Bottom function frame.
Definition at line 251 of file InterpState.h.
Referenced by InterpState(), InterpState(), and InterpState().
| std::optional<bool> clang::interp::InterpState::ConstantContextOverride |
Definition at line 277 of file InterpState.h.
Referenced by inConstantContext(), clang::interp::PopCC(), and clang::interp::PushCC().
| Context& clang::interp::InterpState::Ctx |
Definition at line 249 of file InterpState.h.
Referenced by clang::interp::CallPtr(), clang::interp::CastMemberPtrPtr(), clang::interp::CheckNonNullArgs(), clang::interp::getBase(), getContext(), clang::interp::getField(), clang::interp::interp__builtin_assume_aligned(), clang::interp::interp__builtin_elementwise_triop_fp(), clang::interp::interp__builtin_ia32_addsub(), clang::interp::interp__builtin_is_aligned_up_down(), clang::interp::interp__builtin_operator_new(), clang::interp::interp_builtin_horizontal_fp_binop(), InterpState(), InterpState(), and InterpState().
| InterpFrame* clang::interp::InterpState::Current = nullptr |
The current frame.
Definition at line 253 of file InterpState.h.
Referenced by clang::interp::ActivateThisField(), clang::interp::AddSubMulHelper(), clang::interp::addSubOffsetOpaque(), clang::interp::AllocCN(), clang::interp::AllocN(), clang::interp::allowNullSubObj(), clang::interp::ArrayDecay(), clang::interp::Assume(), clang::interp::BitCastPrim(), clang::interp::Call(), clang::interp::CallPtr(), clang::interp::CallVar(), clang::interp::CallVirt(), clang::interp::CastFloatingIntegral(), clang::interp::CheckActive(), clang::interp::CheckArray(), clang::interp::CheckArrayDestSize(), clang::interp::CheckArraySize(), clang::interp::CheckArraySize(), clang::interp::CheckBitCast(), clang::interp::CheckBitCast(), CheckBitcastType(), clang::interp::CheckCallable(), clang::interp::CheckCallDepth(), clang::interp::CheckConst(), clang::interp::CheckConstant(), clang::interp::checkConstructor(), clang::interp::CheckDeleteSource(), clang::interp::checkDestructor(), clang::interp::CheckDivRem(), clang::interp::CheckDowncast(), clang::interp::CheckDynamicMemoryAllocation(), clang::interp::CheckFloatResult(), clang::interp::CheckFloatStatus(), clang::interp::CheckFunctionDecl(), CheckGlobal(), clang::interp::CheckGlobalLoad(), clang::interp::CheckLifetime(), clang::interp::CheckLiteralType(), clang::interp::CheckLive(), clang::interp::CheckLoad(), clang::interp::CheckLoad(), clang::interp::CheckLocalLoad(), clang::interp::CheckMutable(), clang::interp::CheckNewDeleteForms(), clang::interp::CheckNewTypeMismatch(), clang::interp::CheckNonNullArg(), clang::interp::CheckNonNullArgs(), clang::interp::CheckNull(), clang::interp::CheckNull(), clang::interp::CheckPlacementNew(), clang::interp::CheckPointerToIntegralCast(), clang::interp::CheckPseudoDtor(), clang::interp::CheckRange(), clang::interp::CheckRange(), clang::interp::CheckRange(), clang::interp::CheckSubobject(), CheckTemporary(), clang::interp::CheckThis(), clang::interp::CheckVolatile(), clang::interp::CheckWeak(), clang::interp::cleanupAfterFunctionCall(), clang::interp::CMP3(), clang::interp::CmpHelper< Pointer >(), clang::interp::CmpHelperEQ< MemberPointer >(), clang::interp::CmpHelperEQ< Pointer >(), clang::interp::CtorCheck(), clang::interp::DefaultInit(), clang::interp::Destroy(), clang::interp::diagnoseArrayIndex(), clang::interp::diagnoseCallableDecl(), clang::interp::diagnoseDummy(), clang::interp::diagnoseEnumValue(), diagnoseMissingInitializer(), clang::interp::diagnoseNonConstexprBuiltin(), diagnoseNonConstVariable(), clang::interp::diagnoseShiftFailure(), clang::interp::diagnoseTypeIdField(), clang::interp::diagnoseUninitialized(), diagnoseUnknownDecl(), clang::interp::DiagTypeid(), clang::interp::Divc(), clang::interp::DoBitCastPtr(), clang::interp::DoShift(), clang::interp::DoShiftAP(), clang::interp::DynamicCast(), clang::interp::EnableLocal(), clang::interp::FnPtrCast(), clang::interp::Free(), getCallStackDepth(), getCurrentFrame(), clang::interp::getDynamicDecl(), clang::interp::GetIntPtr(), clang::interp::GetLocal(), clang::interp::GetLocalEnabled(), clang::interp::GetParam(), clang::interp::GetPtrDerivedPop(), clang::interp::GetPtrLocal(), clang::interp::GetPtrParam(), clang::interp::GetPtrThisBase(), clang::interp::GetPtrThisField(), clang::interp::GetPtrThisVirtBase(), clang::interp::GetRefLocal(), getStdAllocatorCaller(), clang::interp::GetThisField(), clang::interp::GetTypeidPtr(), clang::interp::handleFixedPointOverflow(), clang::interp::handleOverflow(), clang::interp::handleReference(), clang::interp::IncDecHelper(), clang::interp::InitElem(), clang::interp::InitElemPop(), clang::interp::InitScope(), clang::interp::InitThisBitField(), clang::interp::InitThisBitFieldActivate(), clang::interp::InitThisField(), clang::interp::InitThisFieldActivate(), clang::interp::interp__builtin_elementwise_countzeroes(), clang::interp::interp__builtin_ia32_vcvtps2ph(), clang::interp::interp__builtin_is_constant_evaluated(), clang::interp::interp__builtin_is_within_lifetime(), clang::interp::interp__builtin_memchr(), clang::interp::interp__builtin_memcmp(), clang::interp::interp__builtin_memcpy(), clang::interp::interp__builtin_operator_delete(), clang::interp::interp__builtin_operator_new(), clang::interp::interp__builtin_stdc_memreverse8(), clang::interp::interp__builtin_strcmp(), clang::interp::Interpret(), clang::interp::InterpretBuiltin(), clang::interp::InterpretOffsetOf(), InterpState(), InterpState(), InterpState(), clang::interp::Invalid(), clang::interp::InvalidCast(), clang::interp::InvalidDeclRef(), clang::interp::InvalidNewDeleteExpr(), clang::interp::InvalidShuffleVectorIndex(), clang::interp::InvalidStore(), clang::interp::Neg(), clang::interp::NoRet(), clang::interp::PopMSVCCE(), clang::interp::PtrPtrCast(), clang::interp::PushMSVCCE(), resetCurrentFrame(), clang::interp::Ret(), clang::interp::RetVoid(), clang::interp::runRecordDestructor(), clang::interp::RVOPtr(), clang::interp::SetLocal(), clang::interp::SetParam(), clang::interp::ShiftFixedPoint(), clang::interp::SizelessVectorElementSize(), clang::interp::StartThisLifetime(), clang::interp::StartThisLifetime1(), clang::interp::SubPtr(), clang::interp::This(), clang::interp::TrivialCopy(), clang::interp::Unsupported(), and ~InterpState().
| unsigned clang::interp::InterpState::DiagIgnoreDepth = 0 |
Definition at line 276 of file InterpState.h.
Referenced by clang::interp::PopIgnoreDiags(), and clang::interp::PushIgnoreDiags().
| const unsigned clang::interp::InterpState::EvalID |
ID identifying this evaluation.
Definition at line 264 of file InterpState.h.
Referenced by clang::interp::Alloc(), clang::interp::AllocCN(), clang::interp::AllocN(), CheckTemporary(), InterpState(), InterpState(), InterpState(), and lifetimeStartedInEvaluation().
| EvaluationKind clang::interp::InterpState::EvalKind = EvaluationKind::None |
Definition at line 268 of file InterpState.h.
Referenced by checkingConstantDestruction(), checkingConstantDestruction(), and lifetimeStartedInEvaluation().
| SourceLocation clang::interp::InterpState::EvalLocation |
Source location of the evaluating expression.
Definition at line 255 of file InterpState.h.
Referenced by setEvalLocation().
Declaration we're initializing/evaluting, if any.
Definition at line 257 of file InterpState.h.
Referenced by clang::interp::CheckConstant(), clang::interp::CheckDecl(), clang::interp::CheckExtern(), checkingConstantDestruction(), clang::interp::CheckLiteralType(), clang::interp::diagnoseUninitialized(), clang::interp::GetRefGlobal(), clang::interp::interp__builtin_is_within_lifetime(), and lifetimeStartedInEvaluation().
Whether infinite evaluation steps have been requested.
If this is false, we use the StepsLeft value above.
Definition at line 262 of file InterpState.h.
Referenced by InterpState(), InterpState(), InterpState(), and noteStep().
| llvm::SmallVector<PtrView> clang::interp::InterpState::InitializingPtrs |
List of blocks we're currently running either constructors or destructors for.
Definition at line 285 of file InterpState.h.
Referenced by clang::interp::Call(), clang::interp::CheckConst(), clang::interp::DynamicCast(), clang::interp::EndInit(), clang::interp::getDynamicDecl(), initializingBlock(), clang::interp::StartFieldInit(), and clang::interp::StartInit().
| Program& clang::interp::InterpState::P |
Reference to the module containing all bytecode.
Definition at line 245 of file InterpState.h.
Referenced by CheckGlobal(), clang::interp::compileFunction(), clang::interp::copyPrimitiveMemory(), clang::interp::copyPrimitiveMemory(), clang::interp::GetGlobal(), clang::interp::GetGlobalUnchecked(), clang::interp::GetIntPtr(), clang::interp::GetPtrGlobal(), clang::interp::GetRefGlobal(), clang::interp::InitGlobal(), clang::interp::InitGlobalTemp(), clang::interp::interp__builtin_operator_new(), InterpState(), InterpState(), InterpState(), and ~InterpState().
| CodePtr clang::interp::InterpState::PC |
Definition at line 243 of file InterpState.h.
Referenced by clang::interp::BCP(), clang::interp::Call(), clang::interp::CallVar(), getSource(), clang::interp::Interpret(), Jf(), Jmp(), Jt(), clang::interp::Ret(), clang::interp::RetVoid(), and clang::interp::TrivialCopy().
| SmallVectorImpl<PartialDiagnosticAt>* clang::interp::InterpState::PrevDiags = nullptr |
Things needed to do speculative execution.
Definition at line 271 of file InterpState.h.
Referenced by clang::interp::PopIgnoreDiags(), and clang::interp::PushIgnoreDiags().
Definition at line 272 of file InterpState.h.
Referenced by clang::interp::PopIgnoreDiags(), and clang::interp::PushIgnoreDiags().
| llvm::SmallVector< std::pair<const Expr *, const LifetimeExtendedTemporaryDecl *> > clang::interp::InterpState::SeenGlobalTemporaries |
Definition at line 281 of file InterpState.h.
Referenced by clang::interp::InitGlobalTemp(), and clang::interp::InitGlobalTempComp().
| unsigned clang::interp::InterpState::SpeculationDepth = 0 |
Definition at line 274 of file InterpState.h.
Referenced by clang::interp::BCP(), clang::interp::EndSpeculation(), and clang::interp::StartSpeculation().
| unsigned clang::interp::InterpState::StepsLeft = 1 |
Steps left during evaluation.
Definition at line 259 of file InterpState.h.
Referenced by InterpState(), InterpState(), InterpState(), and noteStep().
| InterpStack& clang::interp::InterpState::Stk |
Temporary stack.
Definition at line 247 of file InterpState.h.
Referenced by clang::interp::Activate(), clang::interp::Add(), clang::interp::Addf(), clang::interp::AddOffset(), clang::interp::AddrOf(), clang::interp::AddSubMulHelper(), clang::interp::AddSubNonNumber(), clang::interp::Alloc(), clang::interp::AllocCN(), clang::interp::AllocN(), clang::interp::appendToMemberPointer(), clang::interp::ArrayDecay(), clang::interp::ArrayElem(), clang::interp::ArrayElemPop(), clang::interp::ArrayElemPtr(), clang::interp::arrayElemPtr(), clang::interp::arrayElemPtrOpaque(), clang::interp::ArrayElemPtrPop(), clang::interp::Assume(), clang::interp::BCP(), clang::interp::BitAnd(), clang::interp::BitCast(), clang::interp::BitCastPrim(), clang::interp::BitOr(), clang::interp::BitXor(), clang::interp::Call(), clang::interp::CallPtr(), clang::interp::CallVar(), clang::interp::CallVirt(), clang::interp::Cast(), clang::interp::CastAddressSpace(), clang::interp::CastAP(), clang::interp::CastAPS(), clang::interp::CastAPToOffsetIndex(), clang::interp::castBackMemberPointer(), clang::interp::CastFixedPoint(), clang::interp::CastFixedPointFloating(), clang::interp::CastFixedPointIntegral(), clang::interp::CastFloatingFixedPoint(), clang::interp::CastFloatingIntegral(), clang::interp::CastFloatingIntegralAP(), clang::interp::CastFloatingIntegralAPS(), clang::interp::CastFP(), clang::interp::CastIntegralFixedPoint(), clang::interp::CastIntegralFloating(), clang::interp::CastMemberPtrBasePop(), clang::interp::CastMemberPtrDerivedPop(), clang::interp::CastMemberPtrPtr(), clang::interp::CastPointerIntegral(), clang::interp::CastPointerIntegralAP(), clang::interp::CastPointerIntegralAPS(), clang::interp::CheckArrayDestSize(), clang::interp::CheckBitCast(), clang::interp::CheckDestruction(), clang::interp::CheckEnumValue(), clang::interp::CheckNewTypeMismatch(), clang::interp::CheckNewTypeMismatchArray(), clang::interp::CheckNonNullArg(), clang::interp::CheckNonNullArgs(), clang::interp::CheckNull(), clang::interp::CheckRefInit(), clang::interp::cleanupAfterFunctionCall(), clang::interp::CMP3(), clang::interp::CmpHelper(), clang::interp::CmpHelper< Pointer >(), clang::interp::CmpHelperEQ< MemberPointer >(), clang::interp::CmpHelperEQ< Pointer >(), clang::interp::Comp(), clang::interp::Const(), clang::interp::ConstFloat(), clang::interp::CopyArray(), clang::interp::CopyMemberPtrPath(), clang::interp::Dec(), clang::interp::DecayPtr(), clang::interp::DecBitfield(), clang::interp::Decf(), clang::interp::DecfPop(), clang::interp::DecPop(), clang::interp::DecPopBitfield(), clang::interp::DecPtr(), clang::interp::DefaultInit(), clang::interp::Div(), clang::interp::Divc(), clang::interp::Divf(), clang::interp::DoShift(), clang::interp::DoShiftAP(), clang::interp::Dump(), clang::interp::Dup(), clang::interp::DynamicCast(), clang::interp::EndLifetime(), clang::interp::ExpandPtr(), clang::interp::FinishInit(), clang::interp::FinishInitActivate(), clang::interp::FinishInitActivatePop(), clang::interp::FinishInitGlobal(), clang::interp::FinishInitPop(), clang::interp::Flip(), clang::interp::floatAPCast(), clang::interp::Free(), clang::interp::getBase(), clang::interp::GetField(), clang::interp::getField(), clang::interp::GetFieldPop(), clang::interp::GetFnPtr(), clang::interp::GetGlobal(), clang::interp::GetGlobalUnchecked(), clang::interp::GetIntPtr(), clang::interp::GetLocal(), clang::interp::GetLocalEnabled(), clang::interp::GetMemberPtr(), clang::interp::GetMemberPtrBase(), clang::interp::GetMemberPtrDecl(), clang::interp::GetOpaquePtr(), clang::interp::GetParam(), clang::interp::GetPtrBase(), clang::interp::GetPtrBasePop(), clang::interp::GetPtrDerivedPop(), clang::interp::GetPtrField(), clang::interp::GetPtrFieldPop(), clang::interp::GetPtrGlobal(), clang::interp::GetPtrLocal(), clang::interp::GetPtrParam(), clang::interp::GetPtrThisBase(), clang::interp::GetPtrThisField(), clang::interp::GetPtrVirtBase(), clang::interp::GetPtrVirtBasePop(), clang::interp::GetRefGlobal(), clang::interp::GetStringPtr(), clang::interp::GetThisField(), clang::interp::GetTypeid(), clang::interp::GetTypeidPtr(), clang::interp::handleReference(), clang::interp::Inc(), clang::interp::IncBitfield(), clang::interp::IncDecFloatHelper(), clang::interp::IncDecHelper(), clang::interp::IncDecPtrHelper(), clang::interp::Incf(), clang::interp::IncfPop(), clang::interp::IncPop(), clang::interp::IncPopBitfield(), clang::interp::IncPtr(), clang::interp::Init(), clang::interp::InitBitField(), clang::interp::InitBitFieldActivate(), clang::interp::InitElem(), clang::interp::InitElemPop(), clang::interp::InitField(), clang::interp::InitFieldActivate(), clang::interp::InitGlobal(), clang::interp::InitGlobalTemp(), clang::interp::InitGlobalTempComp(), clang::interp::InitPop(), clang::interp::InitThisBitField(), clang::interp::InitThisBitFieldActivate(), clang::interp::InitThisField(), clang::interp::InitThisFieldActivate(), clang::interp::interp__builtin_arithmetic_fence(), clang::interp::interp__builtin_assume_aligned(), clang::interp::interp__builtin_atomic_lock_free(), clang::interp::interp__builtin_c11_atomic_is_lock_free(), clang::interp::interp__builtin_carryop(), clang::interp::interp__builtin_clz(), clang::interp::interp__builtin_complex(), clang::interp::interp__builtin_copysign(), clang::interp::interp__builtin_ctz(), clang::interp::interp__builtin_elementwise_abs(), clang::interp::interp__builtin_elementwise_countzeroes(), clang::interp::interp__builtin_elementwise_fp_binop(), clang::interp::interp__builtin_elementwise_int_binop(), clang::interp::interp__builtin_elementwise_int_unaryop(), clang::interp::interp__builtin_elementwise_maxmin(), clang::interp::interp__builtin_elementwise_triop(), clang::interp::interp__builtin_elementwise_triop_fp(), clang::interp::interp__builtin_expect(), clang::interp::interp__builtin_fabs(), clang::interp::interp__builtin_fmax(), clang::interp::interp__builtin_fmin(), clang::interp::interp__builtin_fpclassify(), clang::interp::interp__builtin_ia32_addcarry_subborrow(), clang::interp::interp__builtin_ia32_addsub(), clang::interp::interp__builtin_ia32_bmac(), clang::interp::interp__builtin_ia32_cmp_mask(), clang::interp::interp__builtin_ia32_cvt_mask2vec(), clang::interp::interp__builtin_ia32_cvt_vec2mask(), clang::interp::interp__builtin_ia32_cvtpd2ps(), clang::interp::interp__builtin_ia32_cvtsd2ss(), clang::interp::interp__builtin_ia32_dbpsadbw(), clang::interp::interp__builtin_ia32_extract_vector(), clang::interp::interp__builtin_ia32_extract_vector_masked(), clang::interp::interp__builtin_ia32_gfni_affine(), clang::interp::interp__builtin_ia32_gfni_mul(), clang::interp::interp__builtin_ia32_insert_subvector(), clang::interp::interp__builtin_ia32_movmsk_op(), clang::interp::interp__builtin_ia32_mpsadbw(), clang::interp::interp__builtin_ia32_multishiftqb(), clang::interp::interp__builtin_ia32_pack(), clang::interp::interp__builtin_ia32_pclmulqdq(), clang::interp::interp__builtin_ia32_phminposuw(), clang::interp::interp__builtin_ia32_pmul(), clang::interp::interp__builtin_ia32_psadbw(), clang::interp::interp__builtin_ia32_pternlog(), clang::interp::interp__builtin_ia32_select(), clang::interp::interp__builtin_ia32_select_scalar(), clang::interp::interp__builtin_ia32_shift_with_count(), clang::interp::interp__builtin_ia32_shufbitqmb_mask(), clang::interp::interp__builtin_ia32_shuffle_generic(), clang::interp::interp__builtin_ia32_test_op(), clang::interp::interp__builtin_ia32_vcvtps2ph(), clang::interp::interp__builtin_ia32_vec_ext(), clang::interp::interp__builtin_ia32_vec_set(), clang::interp::interp__builtin_ia32_vpconflict(), clang::interp::interp__builtin_ia32_vpdp(), clang::interp::interp__builtin_inf(), clang::interp::interp__builtin_infer_alloc_token(), clang::interp::interp__builtin_is_aligned_up_down(), clang::interp::interp__builtin_is_constant_evaluated(), clang::interp::interp__builtin_is_within_lifetime(), clang::interp::interp__builtin_isfinite(), clang::interp::interp__builtin_isfpclass(), clang::interp::interp__builtin_isinf(), clang::interp::interp__builtin_isnan(), clang::interp::interp__builtin_isnormal(), clang::interp::interp__builtin_issignaling(), clang::interp::interp__builtin_issubnormal(), clang::interp::interp__builtin_iszero(), clang::interp::interp__builtin_memchr(), clang::interp::interp__builtin_memcmp(), clang::interp::interp__builtin_memcpy(), clang::interp::interp__builtin_nan(), clang::interp::interp__builtin_object_size(), clang::interp::interp__builtin_operator_delete(), clang::interp::interp__builtin_operator_new(), clang::interp::interp__builtin_overflowop(), clang::interp::interp__builtin_popcount(), clang::interp::interp__builtin_ptrauth_string_discriminator(), clang::interp::interp__builtin_scalar_fp_round_mask_binop(), clang::interp::interp__builtin_signbit(), clang::interp::interp__builtin_stdc_memreverse8(), clang::interp::interp__builtin_strcmp(), clang::interp::interp__builtin_strlen(), clang::interp::interp__builtin_vector_reduce(), clang::interp::interp_builtin_horizontal_fp_binop(), clang::interp::interp_builtin_horizontal_int_binop(), clang::interp::interp_builtin_ia32_cvt_scalar_to_int(), clang::interp::interp_builtin_ia32_cvt_vector_to_int(), clang::interp::interp_floating_comparison(), InterpState(), InterpState(), InterpState(), clang::interp::Inv(), clang::interp::IsBaseClass(), clang::interp::IsConstantContext(), clang::interp::IsNonNull(), Jf(), Jt(), clang::interp::Load(), clang::interp::LoadPop(), clang::interp::LoadPopL(), clang::interp::MarkDestroyed(), clang::interp::Memcpy(), clang::interp::Mul(), clang::interp::Mulc(), clang::interp::Mulf(), clang::interp::NarrowPtr(), clang::interp::Neg(), clang::interp::Null(), clang::interp::OffsetOf(), clang::interp::Pop(), clang::interp::popToAPSInt(), clang::interp::popToAPSInt(), clang::interp::PreDec(), clang::interp::PreDecBitfield(), clang::interp::PreInc(), clang::interp::PreIncBitfield(), clang::interp::PseudoDtor(), clang::interp::PtrPtrCast(), clang::interp::pushInteger(), clang::interp::ReflectValue(), clang::interp::Rem(), clang::interp::Ret(), clang::interp::RetVoid(), clang::interp::runRecordDestructor(), clang::interp::RVOPtr(), clang::interp::SetLocal(), clang::interp::SetParam(), clang::interp::ShiftFixedPoint(), clang::interp::Shl(), clang::interp::Shr(), clang::interp::StartFieldInit(), clang::interp::StartInit(), clang::interp::Store(), clang::interp::StoreActivate(), clang::interp::StoreActivatePop(), clang::interp::StoreBitField(), clang::interp::StoreBitFieldActivate(), clang::interp::StoreBitFieldActivatePop(), clang::interp::StoreBitFieldPop(), clang::interp::StorePop(), clang::interp::Sub(), clang::interp::Subf(), clang::interp::SubOffset(), clang::interp::SubPtr(), clang::interp::This(), clang::interp::ToMemberPtr(), clang::interp::TrivialCopy(), clang::interp::virtBaseHelper(), clang::interp::Zero(), clang::interp::ZeroIntAP(), and clang::interp::ZeroIntAPS().
| unsigned clang::interp::InterpState::StringID = 0 |
Definition at line 266 of file InterpState.h.
Referenced by newStringID().