clang 20.0.0git
Public Types | Public Member Functions | Static Public Member Functions | Public Attributes | Protected Member Functions | List of all members
clang::sema::CapturingScopeInfo Class Reference

#include "clang/Sema/ScopeInfo.h"

Inheritance diagram for clang::sema::CapturingScopeInfo:
Inheritance graph
[legend]

Public Types

enum  ImplicitCaptureStyle {
  ImpCap_None , ImpCap_LambdaByval , ImpCap_LambdaByref , ImpCap_Block ,
  ImpCap_CapturedRegion
}
 
- Public Types inherited from clang::sema::FunctionScopeInfo
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).
 
using WeakUseVector = SmallVector< WeakUseTy, 4 >
 Used to collect uses of a particular weak object in a function body.
 
using WeakObjectUseMap = llvm::SmallDenseMap< WeakObjectProfileTy, WeakUseVector, 8, WeakObjectProfileTy::DenseMapInfo >
 Used to collect all uses of weak objects in a function body.
 

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.
 
CapturegetCXXThisCapture ()
 Retrieve the capture of C++ 'this', if it has been captured.
 
bool isCaptured (ValueDecl *Var) const
 Determine whether the given variable has been captured.
 
bool isVLATypeCaptured (const VariableArrayType *VAT) const
 Determine whether the given variable-array type has been captured.
 
CapturegetCapture (ValueDecl *Var)
 Retrieve the capture of the given variable, if it has been captured already.
 
const CapturegetCapture (ValueDecl *Var) const
 
- Public Member Functions inherited from clang::sema::FunctionScopeInfo
 FunctionScopeInfo (DiagnosticsEngine &Diag)
 
virtual ~FunctionScopeInfo ()
 
bool hasUnrecoverableErrorOccurred () const
 Determine whether an unrecoverable error has occurred within this function.
 
template<typename ExprT >
void recordUseOfWeak (const ExprT *E, bool IsRead=true)
 Record that a weak object was accessed.
 
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.
 
const WeakObjectUseMapgetWeakObjectUses () 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.
 
bool isPlainFunction () const
 

Static Public Member Functions

static bool classof (const FunctionScopeInfo *FSI)
 

Public Attributes

ImplicitCaptureStyle ImpCaptureStyle
 
llvm::DenseMap< ValueDecl *, unsignedCaptureMap
 CaptureMap - A map of captured variables to (index+1) into Captures.
 
unsigned CXXThisCaptureIndex = 0
 CXXThisCaptureIndex - The (index+1) of the capture of 'this'; zero if 'this' is not captured.
 
SmallVector< Capture, 4 > Captures
 Captures - The captures.
 
bool HasImplicitReturnType = false
 
QualType ReturnType
 ReturnType - The target type of return statements in this context, or null if unknown.
 
- Public Attributes inherited from clang::sema::FunctionScopeInfo
ScopeKind Kind: 3
 What kind of scope we are describing.
 
bool HasBranchProtectedScope: 1
 Whether this function contains a VLA, @try, try, C++ initializer, or anything else that can't be jumped past.
 
bool HasBranchIntoScope: 1
 Whether this function contains any switches or direct gotos.
 
bool HasIndirectGoto: 1
 Whether this function contains any indirect gotos.
 
bool HasMustTail: 1
 Whether this function contains any statement marked with [[clang::musttail]].
 
bool HasDroppedStmt: 1
 Whether a statement was dropped because it was invalid.
 
bool HasOMPDeclareReductionCombiner: 1
 True if current scope is for OpenMP declare reduction combiner.
 
bool HasFallthroughStmt: 1
 Whether there is a fallthrough statement in this function.
 
bool UsesFPIntrin: 1
 Whether this function uses constrained floating point intrinsics.
 
bool HasPotentialAvailabilityViolations: 1
 Whether we make reference to a declaration that could be unavailable.
 
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)).
 
bool ObjCIsDesignatedInit: 1
 True when this is a method marked as a designated initializer.
 
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.
 
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.
 
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'.
 
bool NeedsCoroutineSuspends: 1
 True only when this function has not already built, or attempted to build, the initial and final coroutine suspend points.
 
unsigned char FirstCoroutineStmtKind: 2
 An enumeration representing the kind of the first coroutine statement in the function.
 
bool FoundImmediateEscalatingExpression: 1
 Whether we found an immediate-escalating expression.
 
SourceLocation FirstCoroutineStmtLoc
 First coroutine statement in the current function.
 
SourceLocation FirstReturnLoc
 First 'return' statement in the current function.
 
SourceLocation FirstCXXOrObjCTryLoc
 First C++ 'try' or ObjC @try statement in the current function.
 
enum clang::sema::FunctionScopeInfo:: { ... }  FirstTryType = Unknown
 
SourceLocation FirstSEHTryLoc
 First SEH '__try' statement in the current function.
 
SourceLocation FirstVLALoc
 First use of a VLA within the current function.
 
SmallVector< SwitchInfo, 8 > SwitchStack
 SwitchStack - This is the current set of active switch statements in the block.
 
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.
 
VarDeclCoroutinePromise = nullptr
 The promise object for this coroutine, if any.
 
llvm::SmallMapVector< ParmVarDecl *, Stmt *, 4 > CoroutineParameterMoves
 A mapping between the coroutine function parameters that were moved to the coroutine frame, and their move statements.
 
std::pair< Stmt *, Stmt * > CoroutineSuspends
 The initial and final coroutine suspend points.
 
SmallVector< CompoundScopeInfo, 4 > CompoundScopes
 The stack of currently active compound statement scopes in the function.
 
llvm::SmallPtrSet< const BlockDecl *, 1 > Blocks
 The set of blocks that are introduced in this function.
 
llvm::TinyPtrVector< VarDecl * > ByrefBlockVars
 The set of __block variables that are introduced in this function.
 
SmallVector< PossiblyUnreachableDiag, 4 > PossiblyUnreachableDiags
 A list of PartialDiagnostics created but delayed within the current function scope.
 
llvm::SmallPtrSet< const ParmVarDecl *, 8 > ModifiedNonNullParams
 A list of parameters which have the nonnull attribute and are modified in the function.
 
llvm::SmallVector< AddrLabelExpr *, 4 > AddrLabels
 The set of GNU address of label extension "&&label".
 

Protected Member Functions

 CapturingScopeInfo (const CapturingScopeInfo &)=default
 
- Protected Member Functions inherited from clang::sema::FunctionScopeInfo
 FunctionScopeInfo (const FunctionScopeInfo &)=default
 

Additional Inherited Members

- Protected Types inherited from clang::sema::FunctionScopeInfo
enum  ScopeKind { SK_Function , SK_Block , SK_Lambda , SK_CapturedRegion }
 

Detailed Description

Definition at line 698 of file ScopeInfo.h.

Member Enumeration Documentation

◆ ImplicitCaptureStyle

Enumerator
ImpCap_None 
ImpCap_LambdaByval 
ImpCap_LambdaByref 
ImpCap_Block 
ImpCap_CapturedRegion 

Definition at line 703 of file ScopeInfo.h.

Constructor & Destructor Documentation

◆ CapturingScopeInfo() [1/2]

clang::sema::CapturingScopeInfo::CapturingScopeInfo ( const CapturingScopeInfo )
protecteddefault

◆ CapturingScopeInfo() [2/2]

clang::sema::CapturingScopeInfo::CapturingScopeInfo ( DiagnosticsEngine Diag,
ImplicitCaptureStyle  Style 
)
inline

Definition at line 710 of file ScopeInfo.h.

Member Function Documentation

◆ addCapture()

void clang::sema::CapturingScopeInfo::addCapture ( ValueDecl Var,
bool  isBlock,
bool  isByref,
bool  isNested,
SourceLocation  Loc,
SourceLocation  EllipsisLoc,
QualType  CaptureType,
bool  Invalid 
)
inline

◆ addThisCapture()

void clang::sema::CapturingScopeInfo::addThisCapture ( bool  isNested,
SourceLocation  Loc,
QualType  CaptureType,
bool  ByCopy 
)
inline

◆ addVLATypeCapture()

void clang::sema::CapturingScopeInfo::addVLATypeCapture ( SourceLocation  Loc,
const VariableArrayType VLAType,
QualType  CaptureType 
)
inline

◆ classof()

static bool clang::sema::CapturingScopeInfo::classof ( const FunctionScopeInfo FSI)
inlinestatic

◆ getCapture() [1/2]

Capture & clang::sema::CapturingScopeInfo::getCapture ( ValueDecl Var)
inline

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(), and clang::Sema::tryCaptureVariable().

◆ getCapture() [2/2]

const Capture & clang::sema::CapturingScopeInfo::getCapture ( ValueDecl Var) const
inline

Definition at line 770 of file ScopeInfo.h.

References CaptureMap, and Captures.

◆ getCXXThisCapture()

Capture & clang::sema::CapturingScopeInfo::getCXXThisCapture ( )
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().

◆ isCaptured()

bool clang::sema::CapturingScopeInfo::isCaptured ( ValueDecl Var) const
inline

Determine whether the given variable has been captured.

Definition at line 758 of file ScopeInfo.h.

References CaptureMap.

Referenced by getCapture(), and getStackIndexOfNearestEnclosingCaptureReadyLambda().

◆ isCXXThisCaptured()

bool clang::sema::CapturingScopeInfo::isCXXThisCaptured ( ) const
inline

◆ isVLATypeCaptured()

bool CapturingScopeInfo::isVLATypeCaptured ( const VariableArrayType VAT) const

Determine whether the given variable-array type has been captured.

Definition at line 229 of file ScopeInfo.cpp.

Referenced by captureVariablyModifiedType().

Member Data Documentation

◆ CaptureMap

llvm::DenseMap<ValueDecl *, unsigned> clang::sema::CapturingScopeInfo::CaptureMap

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().

◆ Captures

SmallVector<Capture, 4> clang::sema::CapturingScopeInfo::Captures

◆ CXXThisCaptureIndex

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 clang::Sema::ActOnBlockStmtExpr(), getCXXThisCapture(), and isCXXThisCaptured().

◆ HasImplicitReturnType

bool clang::sema::CapturingScopeInfo::HasImplicitReturnType = false

◆ ImpCaptureStyle

ImplicitCaptureStyle clang::sema::CapturingScopeInfo::ImpCaptureStyle

◆ ReturnType

QualType clang::sema::CapturingScopeInfo::ReturnType

The documentation for this class was generated from the following files: