|
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 | enterFrame (InterpFrame *F) |
| Set the given frame as the current one. | |
| void | exitFrame () |
| 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, SemaProxy *SProxy, Expr::EvalStatus &EvalStatus) | |
| virtual | ~State () |
| Expr::EvalStatus & | getEvalStatus () const |
| ASTContext & | getASTContext () const |
| SemaProxy * | getSemaProxy () 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 | FrameDepth = 0 |
| 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 |
| SemaProxy * | SProxy |
| 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::SProxy, 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::SProxy, 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 51 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, clang::nullptr, P, clang::interp::State::State(), StepsLeft, and Stk.
| InterpState::~InterpState | ( | ) |
Definition at line 71 of file InterpState.cpp.
|
delete |
References InterpState().
Definition at line 123 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 119 of file InterpState.h.
References allocate(), clang::Num, and clang::T.
Definition at line 114 of file InterpState.h.
Referenced by allocAP(), allocate(), allocFloat(), allocMemberPointerPath(), allocPointerPath(), and extendPointerPath().
|
inline |
Definition at line 132 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 217 of file InterpState.h.
References clang::interp::InterpFrame::allocSize().
Referenced by clang::interp::Call(), and clang::interp::CallVar().
|
inline |
Definition at line 142 of file InterpState.h.
References allocate().
Referenced by clang::interp::appendToMemberPointer(), clang::interp::castBackMemberPointer(), and clang::interp::CopyMemberPtrPath().
|
inline |
Definition at line 146 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 201 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 clang::interp::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 206 of file InterpState.h.
References checkingConstantDestruction().
Definition at line 209 of file InterpState.h.
References clang::interp::Dtor, EvalKind, and EvaluatingDecl.
| void InterpState::cleanup | ( | ) |
Definition at line 87 of file InterpState.cpp.
|
inline |
Deallocates a pointer.
Definition at line 75 of file InterpState.h.
References clang::interp::Block::hasPointers(), and clang::interp::Block::invokeDtor().
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 |
Set the given frame as the current one.
Definition at line 227 of file InterpState.h.
References Current, and FrameDepth.
Referenced by clang::interp::Call(), and clang::interp::CallVar().
|
inline |
Free resources associated with the current frame and set the caller to be the new current frame.
Definition at line 234 of file InterpState.h.
References clang::interp::InterpFrame::allocSize(), Current, and FrameDepth.
Referenced by clang::interp::Call(), and clang::interp::CallVar().
|
inline |
Allocate a new pointer path of Length NewLength.
NewLength - 1 elements are copied form OldPP.
Definition at line 157 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 97 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 |
Implements clang::interp::State.
Definition at line 70 of file InterpState.h.
References FrameDepth.
|
inline |
Definition at line 93 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_load8(), 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 134 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 64 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::CheckFloatStatus(), clang::interp::CmpHelperEQ< Pointer >(), clang::interp::compileFunction(), diagnoseUnknownDecl(), clang::interp::getField(), clang::interp::interp__builtin_is_constant_evaluated(), clang::interp::interp__builtin_is_within_lifetime(), clang::interp::IsConstantContext(), and clang::interp::SizelessVectorElementSize().
Definition at line 181 of file InterpState.h.
References InitializingPtrs, and V.
Referenced by clang::interp::CheckVolatile(), and clang::interp::interp__builtin_is_within_lifetime().
Definition at line 188 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 115 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 213 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 170 of file InterpState.h.
References InfiniteSteps, and StepsLeft.
|
delete |
References InterpState().
|
inline |
Definition at line 95 of file InterpState.h.
References EvalLocation.
|
inlineoverridevirtual |
Implements clang::interp::State.
Definition at line 71 of file InterpState.h.
|
friend |
Definition at line 246 of file InterpState.h.
References EvaluationResult.
Referenced by EvaluationResult.
|
friend |
Definition at line 247 of file InterpState.h.
References InterpStateCCOverride.
Referenced by InterpStateCCOverride.
| InterpFrame clang::interp::InterpState::BottomFrame |
Bottom function frame.
Definition at line 273 of file InterpState.h.
Referenced by InterpState(), InterpState(), and InterpState().
| std::optional<bool> clang::interp::InterpState::ConstantContextOverride |
Definition at line 300 of file InterpState.h.
Referenced by inConstantContext(), clang::interp::PopCC(), and clang::interp::PushCC().
| Context& clang::interp::InterpState::Ctx |
Definition at line 271 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 275 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::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(), clang::interp::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::compileFunction(), 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::diagnoseUnreadableObject(), clang::interp::DiagTypeid(), clang::interp::Divc(), clang::interp::DoBitCastPtr(), clang::interp::DoShift(), clang::interp::DoShiftAP(), clang::interp::DynamicCast(), clang::interp::EnableLocal(), enterFrame(), exitFrame(), clang::interp::FnPtrCast(), clang::interp::Free(), 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::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_within_lifetime(), clang::interp::interp__builtin_load8(), 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::InvalidTargetLabel(), clang::interp::Neg(), clang::interp::NoRet(), clang::interp::PopMSVCCE(), clang::interp::PtrPtrCast(), clang::interp::PushMSVCCE(), 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 299 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 286 of file InterpState.h.
Referenced by clang::interp::Alloc(), clang::interp::AllocCN(), clang::interp::AllocN(), clang::interp::CheckTemporary(), InterpState(), InterpState(), InterpState(), and lifetimeStartedInEvaluation().
| EvaluationKind clang::interp::InterpState::EvalKind = EvaluationKind::None |
Definition at line 291 of file InterpState.h.
Referenced by checkingConstantDestruction(), checkingConstantDestruction(), and lifetimeStartedInEvaluation().
| SourceLocation clang::interp::InterpState::EvalLocation |
Source location of the evaluating expression.
Definition at line 277 of file InterpState.h.
Referenced by setEvalLocation().
Declaration we're initializing/evaluting, if any.
Definition at line 279 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().
| unsigned clang::interp::InterpState::FrameDepth = 0 |
Definition at line 287 of file InterpState.h.
Referenced by clang::interp::CheckCallDepth(), enterFrame(), exitFrame(), getCallStackDepth(), and clang::interp::interp__builtin_is_constant_evaluated().
Whether infinite evaluation steps have been requested.
If this is false, we use the StepsLeft value above.
Definition at line 284 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 308 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 267 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 265 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 294 of file InterpState.h.
Referenced by clang::interp::PopIgnoreDiags(), and clang::interp::PushIgnoreDiags().
Definition at line 295 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 304 of file InterpState.h.
Referenced by clang::interp::InitGlobalTemp(), and clang::interp::InitGlobalTempComp().
| unsigned clang::interp::InterpState::SpeculationDepth = 0 |
Definition at line 297 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 281 of file InterpState.h.
Referenced by InterpState(), InterpState(), InterpState(), and noteStep().
| InterpStack& clang::interp::InterpState::Stk |
Temporary stack.
Definition at line 269 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_load8(), clang::interp::interp__builtin_memchr(), clang::interp::interp__builtin_memcmp(), clang::interp::interp__builtin_memcpy(), clang::interp::interp__builtin_meta_is_type(), 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 289 of file InterpState.h.
Referenced by newStringID().