clang
19.0.0git
|
#include "clang/Sema/ScopeInfo.h"
Public Types | |
enum | ImplicitCaptureStyle { ImpCap_None , ImpCap_LambdaByval , ImpCap_LambdaByref , ImpCap_Block , ImpCap_CapturedRegion } |
![]() | |
enum | { TryLocIsCXX , TryLocIsObjC , Unknown } |
using | SwitchInfo = llvm::PointerIntPair< SwitchStmt *, 1, bool > |
A SwitchStmt, along with a flag indicating if its list of case statements is incomplete (because we dropped an invalid one while parsing). More... | |
using | WeakUseVector = SmallVector< WeakUseTy, 4 > |
Used to collect uses of a particular weak object in a function body. More... | |
using | WeakObjectUseMap = llvm::SmallDenseMap< WeakObjectProfileTy, WeakUseVector, 8, WeakObjectProfileTy::DenseMapInfo > |
Used to collect all uses of weak objects in a function body. More... | |
Public Member Functions | |
CapturingScopeInfo (DiagnosticsEngine &Diag, ImplicitCaptureStyle Style) | |
void | addCapture (ValueDecl *Var, bool isBlock, bool isByref, bool isNested, SourceLocation Loc, SourceLocation EllipsisLoc, QualType CaptureType, bool Invalid) |
void | addVLATypeCapture (SourceLocation Loc, const VariableArrayType *VLAType, QualType CaptureType) |
void | addThisCapture (bool isNested, SourceLocation Loc, QualType CaptureType, bool ByCopy) |
bool | isCXXThisCaptured () const |
Determine whether the C++ 'this' is captured. More... | |
Capture & | getCXXThisCapture () |
Retrieve the capture of C++ 'this', if it has been captured. More... | |
bool | isCaptured (ValueDecl *Var) const |
Determine whether the given variable has been captured. More... | |
bool | isVLATypeCaptured (const VariableArrayType *VAT) const |
Determine whether the given variable-array type has been captured. More... | |
Capture & | getCapture (ValueDecl *Var) |
Retrieve the capture of the given variable, if it has been captured already. More... | |
const Capture & | getCapture (ValueDecl *Var) const |
![]() | |
FunctionScopeInfo (DiagnosticsEngine &Diag) | |
virtual | ~FunctionScopeInfo () |
bool | hasUnrecoverableErrorOccurred () const |
Determine whether an unrecoverable error has occurred within this function. More... | |
template<typename ExprT > | |
void | recordUseOfWeak (const ExprT *E, bool IsRead=true) |
Record that a weak object was accessed. More... | |
void | recordUseOfWeak (const ObjCMessageExpr *Msg, const ObjCPropertyDecl *Prop) |
void | markSafeWeakUse (const Expr *E) |
Record that a given expression is a "safe" access of a weak object (e.g. More... | |
const WeakObjectUseMap & | getWeakObjectUses () const |
void | setHasBranchIntoScope () |
void | setHasBranchProtectedScope () |
void | setHasIndirectGoto () |
void | setHasMustTail () |
void | setHasDroppedStmt () |
void | setHasOMPDeclareReductionCombiner () |
void | setHasFallthroughStmt () |
void | setUsesFPIntrin () |
void | setHasCXXTry (SourceLocation TryLoc) |
void | setHasObjCTry (SourceLocation TryLoc) |
void | setHasSEHTry (SourceLocation TryLoc) |
void | setHasVLA (SourceLocation VLALoc) |
bool | NeedsScopeChecking () const |
void | addBlock (const BlockDecl *BD) |
void | addByrefBlockVar (VarDecl *VD) |
bool | isCoroutine () const |
void | setFirstCoroutineStmt (SourceLocation Loc, StringRef Keyword) |
StringRef | getFirstCoroutineStmtKeyword () const |
void | setNeedsCoroutineSuspends (bool value=true) |
bool | hasInvalidCoroutineSuspends () const |
void | setCoroutineSuspends (Stmt *Initial, Stmt *Final) |
void | Clear () |
Clear out the information in this function scope, making it suitable for reuse. More... | |
bool | isPlainFunction () const |
Static Public Member Functions | |
static bool | classof (const FunctionScopeInfo *FSI) |
Public Attributes | |
ImplicitCaptureStyle | ImpCaptureStyle |
llvm::DenseMap< ValueDecl *, unsigned > | CaptureMap |
CaptureMap - A map of captured variables to (index+1) into Captures. More... | |
unsigned | CXXThisCaptureIndex = 0 |
CXXThisCaptureIndex - The (index+1) of the capture of 'this'; zero if 'this' is not captured. More... | |
SmallVector< Capture, 4 > | Captures |
Captures - The captures. More... | |
bool | HasImplicitReturnType = false |
QualType | ReturnType |
ReturnType - The target type of return statements in this context, or null if unknown. More... | |
![]() | |
ScopeKind | Kind: 3 |
What kind of scope we are describing. More... | |
bool | HasBranchProtectedScope: 1 |
Whether this function contains a VLA, @try, try, C++ initializer, or anything else that can't be jumped past. More... | |
bool | HasBranchIntoScope: 1 |
Whether this function contains any switches or direct gotos. More... | |
bool | HasIndirectGoto: 1 |
Whether this function contains any indirect gotos. More... | |
bool | HasMustTail: 1 |
Whether this function contains any statement marked with [[clang::musttail]]. More... | |
bool | HasDroppedStmt: 1 |
Whether a statement was dropped because it was invalid. More... | |
bool | HasOMPDeclareReductionCombiner: 1 |
True if current scope is for OpenMP declare reduction combiner. More... | |
bool | HasFallthroughStmt: 1 |
Whether there is a fallthrough statement in this function. More... | |
bool | UsesFPIntrin: 1 |
Whether this function uses constrained floating point intrinsics. More... | |
bool | HasPotentialAvailabilityViolations: 1 |
Whether we make reference to a declaration that could be unavailable. More... | |
bool | ObjCShouldCallSuper: 1 |
A flag that is set when parsing a method that must call super's implementation, such as -dealloc , -finalize , or any method marked with attribute ((objc_requires_super)). More... | |
bool | ObjCIsDesignatedInit: 1 |
True when this is a method marked as a designated initializer. More... | |
bool | ObjCWarnForNoDesignatedInitChain: 1 |
This starts true for a method marked as designated initializer and will be set to false if there is an invocation to a designated initializer of the super class. More... | |
bool | ObjCIsSecondaryInit: 1 |
True when this is an initializer method not marked as a designated initializer within a class that has at least one initializer marked as a designated initializer. More... | |
bool | ObjCWarnForNoInitDelegation: 1 |
This starts true for a secondary initializer method and will be set to false if there is an invocation of an initializer on 'self'. More... | |
bool | NeedsCoroutineSuspends: 1 |
True only when this function has not already built, or attempted to build, the initial and final coroutine suspend points. More... | |
unsigned char | FirstCoroutineStmtKind: 2 |
An enumeration representing the kind of the first coroutine statement in the function. More... | |
bool | FoundImmediateEscalatingExpression: 1 |
Whether we found an immediate-escalating expression. More... | |
SourceLocation | FirstCoroutineStmtLoc |
First coroutine statement in the current function. More... | |
SourceLocation | FirstReturnLoc |
First 'return' statement in the current function. More... | |
SourceLocation | FirstCXXOrObjCTryLoc |
First C++ 'try' or ObjC @try statement in the current function. More... | |
enum clang::sema::FunctionScopeInfo:: { ... } | FirstTryType = Unknown |
SourceLocation | FirstSEHTryLoc |
First SEH '__try' statement in the current function. More... | |
SourceLocation | FirstVLALoc |
First use of a VLA within the current function. More... | |
SmallVector< SwitchInfo, 8 > | SwitchStack |
SwitchStack - This is the current set of active switch statements in the block. More... | |
SmallVector< ReturnStmt *, 4 > | Returns |
The list of return statements that occur within the function or block, if there is any chance of applying the named return value optimization, or if we need to infer a return type. More... | |
VarDecl * | CoroutinePromise = nullptr |
The promise object for this coroutine, if any. More... | |
llvm::SmallMapVector< ParmVarDecl *, Stmt *, 4 > | CoroutineParameterMoves |
A mapping between the coroutine function parameters that were moved to the coroutine frame, and their move statements. More... | |
std::pair< Stmt *, Stmt * > | CoroutineSuspends |
The initial and final coroutine suspend points. More... | |
SmallVector< CompoundScopeInfo, 4 > | CompoundScopes |
The stack of currently active compound statement scopes in the function. More... | |
llvm::SmallPtrSet< const BlockDecl *, 1 > | Blocks |
The set of blocks that are introduced in this function. More... | |
llvm::TinyPtrVector< VarDecl * > | ByrefBlockVars |
The set of __block variables that are introduced in this function. More... | |
SmallVector< PossiblyUnreachableDiag, 4 > | PossiblyUnreachableDiags |
A list of PartialDiagnostics created but delayed within the current function scope. More... | |
llvm::SmallPtrSet< const ParmVarDecl *, 8 > | ModifiedNonNullParams |
A list of parameters which have the nonnull attribute and are modified in the function. More... | |
llvm::SmallVector< AddrLabelExpr *, 4 > | AddrLabels |
The set of GNU address of label extension "&&label". More... | |
Protected Member Functions | |
CapturingScopeInfo (const CapturingScopeInfo &)=default | |
![]() | |
FunctionScopeInfo (const FunctionScopeInfo &)=default | |
Additional Inherited Members | |
![]() | |
enum | ScopeKind { SK_Function , SK_Block , SK_Lambda , SK_CapturedRegion } |
Definition at line 698 of file ScopeInfo.h.
Enumerator | |
---|---|
ImpCap_None | |
ImpCap_LambdaByval | |
ImpCap_LambdaByref | |
ImpCap_Block | |
ImpCap_CapturedRegion |
Definition at line 703 of file ScopeInfo.h.
|
protecteddefault |
|
inline |
Definition at line 710 of file ScopeInfo.h.
|
inline |
Definition at line 731 of file ScopeInfo.h.
References CaptureMap, Captures, and Loc.
Referenced by clang::Sema::addInitCapture(), and clang::Sema::RebuildLambdaScopeInfo().
|
inline |
Definition at line 1093 of file ScopeInfo.h.
References Loc, and clang::sema::Capture::ThisCapture.
Referenced by clang::Sema::CheckCXXThisCapture(), and clang::Sema::RebuildLambdaScopeInfo().
|
inline |
Definition at line 739 of file ScopeInfo.h.
References Captures, Loc, and clang::sema::Capture::VLACapture.
Referenced by clang::Sema::RebuildLambdaScopeInfo().
|
inlinestatic |
Definition at line 777 of file ScopeInfo.h.
References clang::sema::FunctionScopeInfo::Kind, clang::sema::FunctionScopeInfo::SK_Block, clang::sema::FunctionScopeInfo::SK_CapturedRegion, and clang::sema::FunctionScopeInfo::SK_Lambda.
Retrieve the capture of the given variable, if it has been captured already.
Definition at line 765 of file ScopeInfo.h.
References CaptureMap, Captures, and isCaptured().
Referenced by isVariableAlreadyCapturedInScopeInfo().
Definition at line 770 of file ScopeInfo.h.
References CaptureMap, and Captures.
|
inline |
Retrieve the capture of C++ 'this', if it has been captured.
Definition at line 752 of file ScopeInfo.h.
References Captures, CXXThisCaptureIndex, and isCXXThisCaptured().
Referenced by clang::Sema::ActOnLambdaExpressionAfterIntroducer(), adjustCVQualifiersForCXXThisWithinLambda(), and buildLambdaCaptureFixit().
Determine whether the given variable has been captured.
Definition at line 758 of file ScopeInfo.h.
References CaptureMap.
Referenced by getCapture(), and getStackIndexOfNearestEnclosingCaptureReadyLambda().
|
inline |
Determine whether the C++ 'this' is captured.
Definition at line 749 of file ScopeInfo.h.
References CXXThisCaptureIndex.
Referenced by clang::Sema::ActOnLambdaExpressionAfterIntroducer(), adjustCVQualifiersForCXXThisWithinLambda(), buildLambdaCaptureFixit(), buildLambdaThisCaptureFixit(), clang::Sema::DiagnoseShadowingLambdaDecls(), getCXXThisCapture(), and getStackIndexOfNearestEnclosingCaptureReadyLambda().
bool CapturingScopeInfo::isVLATypeCaptured | ( | const VariableArrayType * | VAT | ) | const |
Determine whether the given variable-array type has been captured.
Definition at line 228 of file ScopeInfo.cpp.
CaptureMap - A map of captured variables to (index+1) into Captures.
Definition at line 714 of file ScopeInfo.h.
Referenced by addCapture(), getCapture(), isCaptured(), and isVariableAlreadyCapturedInScopeInfo().
SmallVector<Capture, 4> clang::sema::CapturingScopeInfo::Captures |
Captures - The captures.
Definition at line 721 of file ScopeInfo.h.
Referenced by clang::Sema::ActOnLambdaExpressionAfterIntroducer(), addCapture(), addVLATypeCapture(), buildLambdaCaptureFixit(), clang::Sema::BuildLambdaExpr(), clang::sema::LambdaScopeInfo::finishedExplicitCaptures(), getCapture(), getCaptureLocation(), and getCXXThisCapture().
unsigned clang::sema::CapturingScopeInfo::CXXThisCaptureIndex = 0 |
CXXThisCaptureIndex - The (index+1) of the capture of 'this'; zero if 'this' is not captured.
Definition at line 718 of file ScopeInfo.h.
Referenced by getCXXThisCapture(), and isCXXThisCaptured().
Definition at line 725 of file ScopeInfo.h.
Referenced by clang::Sema::ActOnCapScopeReturnStmt(), clang::Sema::BuildLambdaExpr(), and clang::Sema::deduceClosureReturnType().
ImplicitCaptureStyle clang::sema::CapturingScopeInfo::ImpCaptureStyle |
Definition at line 708 of file ScopeInfo.h.
Referenced by clang::Sema::ActOnLambdaExpressionAfterIntroducer(), buildLambdaCaptureFixit(), clang::Sema::BuildLambdaExpr(), clang::Sema::buildLambdaScope(), buildLambdaThisCaptureFixit(), getStackIndexOfNearestEnclosingCaptureReadyLambda(), and clang::Sema::RebuildLambdaScopeInfo().
QualType clang::sema::CapturingScopeInfo::ReturnType |
ReturnType - The target type of return statements in this context, or null if unknown.
Definition at line 729 of file ScopeInfo.h.
Referenced by clang::Sema::ActOnCapScopeReturnStmt(), clang::Sema::deduceClosureReturnType(), and clang::Sema::RebuildLambdaScopeInfo().