clang
3.7.0
|
Represents a prvalue temporary that is written into memory so that a reference can bind to it. More...
#include <ExprCXX.h>
Public Member Functions | |
MaterializeTemporaryExpr (QualType T, Expr *Temporary, bool BoundToLvalueReference) | |
MaterializeTemporaryExpr (EmptyShell Empty) | |
Stmt * | getTemporary () const |
Expr * | GetTemporaryExpr () const |
Retrieve the temporary-generating subexpression whose value will be materialized into a glvalue. More... | |
StorageDuration | getStorageDuration () const |
Retrieve the storage duration for the materialized temporary. More... | |
const ValueDecl * | getExtendingDecl () const |
Get the declaration which triggered the lifetime-extension of this temporary, if any. More... | |
void | setExtendingDecl (const ValueDecl *ExtendedBy, unsigned ManglingNumber) |
unsigned | getManglingNumber () const |
bool | isBoundToLvalueReference () const |
Determine whether this materialized temporary is bound to an lvalue reference; otherwise, it's bound to an rvalue reference. More... | |
SourceLocation | getLocStart () const LLVM_READONLY |
SourceLocation | getLocEnd () const LLVM_READONLY |
child_range | children () |
![]() | |
QualType | getType () const |
void | setType (QualType t) |
bool | isValueDependent () const |
void | setValueDependent (bool VD) |
Set whether this expression is value-dependent or not. More... | |
bool | isTypeDependent () const |
void | setTypeDependent (bool TD) |
Set whether this expression is type-dependent or not. More... | |
bool | isInstantiationDependent () const |
Whether this expression is instantiation-dependent, meaning that it depends in some way on a template parameter, even if neither its type nor (constant) value can change due to the template instantiation. More... | |
void | setInstantiationDependent (bool ID) |
Set whether this expression is instantiation-dependent or not. More... | |
bool | containsUnexpandedParameterPack () const |
Whether this expression contains an unexpanded parameter pack (for C++11 variadic templates). More... | |
void | setContainsUnexpandedParameterPack (bool PP=true) |
Set the bit that describes whether this expression contains an unexpanded parameter pack. More... | |
SourceLocation | getExprLoc () const LLVM_READONLY |
bool | isUnusedResultAWarning (const Expr *&WarnExpr, SourceLocation &Loc, SourceRange &R1, SourceRange &R2, ASTContext &Ctx) const |
bool | isLValue () const |
bool | isRValue () const |
bool | isXValue () const |
bool | isGLValue () const |
LValueClassification | ClassifyLValue (ASTContext &Ctx) const |
Reasons why an expression might not be an l-value. More... | |
isModifiableLvalueResult | isModifiableLvalue (ASTContext &Ctx, SourceLocation *Loc=nullptr) const |
Classification | Classify (ASTContext &Ctx) const |
Classify - Classify this expression according to the C++11 expression taxonomy. More... | |
Classification | ClassifyModifiable (ASTContext &Ctx, SourceLocation &Loc) const |
ClassifyModifiable - Classify this expression according to the C++11 expression taxonomy, and see if it is valid on the left side of an assignment. More... | |
ExprValueKind | getValueKind () const |
getValueKind - The value kind that this expression produces. More... | |
ExprObjectKind | getObjectKind () const |
bool | isOrdinaryOrBitFieldObject () const |
void | setValueKind (ExprValueKind Cat) |
setValueKind - Set the value kind produced by this expression. More... | |
void | setObjectKind (ExprObjectKind Cat) |
setObjectKind - Set the object kind produced by this expression. More... | |
bool | refersToBitField () const |
Returns true if this expression is a gl-value that potentially refers to a bit-field. More... | |
FieldDecl * | getSourceBitField () |
If this expression refers to a bit-field, retrieve the declaration of that bit-field. More... | |
const FieldDecl * | getSourceBitField () const |
const ObjCPropertyRefExpr * | getObjCProperty () const |
If this expression is an l-value for an Objective C property, find the underlying property reference expression. More... | |
bool | isObjCSelfExpr () const |
Check if this expression is the ObjC 'self' implicit parameter. More... | |
bool | refersToVectorElement () const |
Returns whether this expression refers to a vector element. More... | |
bool | hasPlaceholderType () const |
Returns whether this expression has a placeholder type. More... | |
bool | hasPlaceholderType (BuiltinType::Kind K) const |
Returns whether this expression has a specific placeholder type. More... | |
bool | isKnownToHaveBooleanValue () const |
bool | isIntegerConstantExpr (llvm::APSInt &Result, const ASTContext &Ctx, SourceLocation *Loc=nullptr, bool isEvaluated=true) const |
bool | isIntegerConstantExpr (const ASTContext &Ctx, SourceLocation *Loc=nullptr) const |
bool | isCXX98IntegralConstantExpr (const ASTContext &Ctx) const |
bool | isCXX11ConstantExpr (const ASTContext &Ctx, APValue *Result=nullptr, SourceLocation *Loc=nullptr) const |
bool | isConstantInitializer (ASTContext &Ctx, bool ForRef, const Expr **Culprit=nullptr) const |
bool | EvaluateAsRValue (EvalResult &Result, const ASTContext &Ctx) const |
bool | EvaluateAsBooleanCondition (bool &Result, const ASTContext &Ctx) const |
bool | EvaluateAsInt (llvm::APSInt &Result, const ASTContext &Ctx, SideEffectsKind AllowSideEffects=SE_NoSideEffects) const |
bool | isEvaluatable (const ASTContext &Ctx) const |
bool | HasSideEffects (const ASTContext &Ctx, bool IncludePossibleEffects=true) const |
bool | hasNonTrivialCall (const ASTContext &Ctx) const |
Determine whether this expression involves a call to any function that is not trivial. More... | |
llvm::APSInt | EvaluateKnownConstInt (const ASTContext &Ctx, SmallVectorImpl< PartialDiagnosticAt > *Diag=nullptr) const |
void | EvaluateForOverflow (const ASTContext &Ctx) const |
bool | EvaluateAsLValue (EvalResult &Result, const ASTContext &Ctx) const |
bool | EvaluateAsInitializer (APValue &Result, const ASTContext &Ctx, const VarDecl *VD, SmallVectorImpl< PartialDiagnosticAt > &Notes) const |
bool | EvaluateWithSubstitution (APValue &Value, ASTContext &Ctx, const FunctionDecl *Callee, ArrayRef< const Expr * > Args) const |
NullPointerConstantKind | isNullPointerConstant (ASTContext &Ctx, NullPointerConstantValueDependence NPC) const |
bool | isOBJCGCCandidate (ASTContext &Ctx) const |
bool | isBoundMemberFunction (ASTContext &Ctx) const |
Returns true if this expression is a bound member function. More... | |
Expr * | IgnoreImpCasts () LLVM_READONLY |
Expr * | IgnoreImplicit () LLVM_READONLY |
const Expr * | IgnoreImplicit () const LLVM_READONLY |
Expr * | IgnoreParens () LLVM_READONLY |
Expr * | IgnoreParenCasts () LLVM_READONLY |
Expr * | IgnoreCasts () LLVM_READONLY |
Ignore casts. Strip off any CastExprs, returning their operand. More... | |
Expr * | IgnoreParenImpCasts () LLVM_READONLY |
Expr * | IgnoreConversionOperator () LLVM_READONLY |
const Expr * | IgnoreConversionOperator () const LLVM_READONLY |
const Expr * | IgnoreParenImpCasts () const LLVM_READONLY |
Expr * | IgnoreParenLValueCasts () LLVM_READONLY |
const Expr * | IgnoreParenLValueCasts () const LLVM_READONLY |
Expr * | IgnoreParenNoopCasts (ASTContext &Ctx) LLVM_READONLY |
Expr * | ignoreParenBaseCasts () LLVM_READONLY |
Ignore parentheses and derived-to-base casts. More... | |
const Expr * | ignoreParenBaseCasts () const LLVM_READONLY |
bool | isDefaultArgument () const |
Determine whether this expression is a default function argument. More... | |
bool | isTemporaryObject (ASTContext &Ctx, const CXXRecordDecl *TempTy) const |
Determine whether the result of this expression is a temporary object of the given class type. More... | |
bool | isImplicitCXXThis () const |
Whether this expression is an implicit reference to 'this' in C++. More... | |
const Expr * | IgnoreImpCasts () const LLVM_READONLY |
const Expr * | IgnoreParens () const LLVM_READONLY |
const Expr * | IgnoreParenCasts () const LLVM_READONLY |
const Expr * | IgnoreCasts () const LLVM_READONLY |
Strip off casts, but keep parentheses. More... | |
const Expr * | IgnoreParenNoopCasts (ASTContext &Ctx) const LLVM_READONLY |
const CXXRecordDecl * | getBestDynamicClassType () const |
For an expression of class type or pointer to class type, return the most derived class decl the expression is known to refer to. More... | |
const Expr * | skipRValueSubobjectAdjustments (SmallVectorImpl< const Expr * > &CommaLHS, SmallVectorImpl< SubobjectAdjustment > &Adjustments) const |
Static Public Member Functions | |
static bool | classof (const Stmt *T) |
![]() | |
static ExprValueKind | getValueKindForType (QualType T) |
static bool | isPotentialConstantExpr (const FunctionDecl *FD, SmallVectorImpl< PartialDiagnosticAt > &Diags) |
static bool | isPotentialConstantExprUnevaluated (Expr *E, const FunctionDecl *FD, SmallVectorImpl< PartialDiagnosticAt > &Diags) |
static QualType | findBoundMemberType (const Expr *expr) |
Given an expression of bound-member type, find the type of the member. Returns null if this is an overloaded bound member expression. More... | |
static bool | hasAnyTypeDependentArguments (ArrayRef< Expr * > Exprs) |
static bool | classof (const Stmt *T) |
Friends | |
class | ASTStmtReader |
class | ASTStmtWriter |
Represents a prvalue temporary that is written into memory so that a reference can bind to it.
Prvalue expressions are materialized when they need to have an address in memory for a reference to bind to. This happens when binding a reference to the result of a conversion, e.g.,
Here, 1.0 is implicitly converted to an int
. That resulting int
is then materialized via a MaterializeTemporaryExpr
, and the reference binds to the temporary. MaterializeTemporaryExprs
are always glvalues (either an lvalue or an xvalue, depending on the kind of reference binding to it), maintaining the invariant that references always bind to glvalues.
Reference binding and copy-elision can both extend the lifetime of a temporary. When either happens, the expression will also track the declaration which is responsible for the lifetime extension.
|
inline |
|
inline |
|
inline |
Get the declaration which triggered the lifetime-extension of this temporary, if any.
Definition at line 3803 of file ExprCXX.h.
References State.
Referenced by clang::CodeGen::CodeGenFunction::EmitMaterializeTemporaryExpr(), clang::CodeGen::CodeGenModule::GetAddrOfGlobalTemporary(), getStorageDuration(), and pushTemporaryCleanup().
|
inline |
Definition at line 3823 of file ExprCXX.h.
References getTemporary().
|
inline |
Definition at line 3820 of file ExprCXX.h.
References getTemporary().
|
inline |
Definition at line 3810 of file ExprCXX.h.
References State.
Referenced by clang::CodeGen::CodeGenModule::GetAddrOfGlobalTemporary().
|
inline |
Retrieve the storage duration for the materialized temporary.
Definition at line 3790 of file ExprCXX.h.
References getExtendingDecl(), clang::SD_Automatic, and clang::SD_FullExpression.
Referenced by createReferenceTemporary(), clang::CodeGen::CodeGenModule::GetAddrOfGlobalTemporary(), clang::ASTContext::getMaterializedTemporaryValue(), clang::InitializationSequence::Perform(), and pushTemporaryCleanup().
|
inline |
Definition at line 3780 of file ExprCXX.h.
References State.
Referenced by getLocEnd(), getLocStart(), and GetTemporaryExpr().
|
inline |
Retrieve the temporary-generating subexpression whose value will be materialized into a glvalue.
Definition at line 3787 of file ExprCXX.h.
References getTemporary().
Referenced by clang::ento::ExprEngine::CreateCXXTemporaryObject(), DiagnoseForRangeReferenceVariableCopies(), clang::CodeGen::CodeGenFunction::EmitMaterializeTemporaryExpr(), clang::CodeGen::CodeGenModule::GetAddrOfGlobalTemporary(), and clang::consumed::ConsumedStmtVisitor::VisitMaterializeTemporaryExpr().
|
inline |
Determine whether this materialized temporary is bound to an lvalue reference; otherwise, it's bound to an rvalue reference.
Definition at line 3816 of file ExprCXX.h.
References clang::Expr::getValueKind(), and clang::VK_LValue.
void MaterializeTemporaryExpr::setExtendingDecl | ( | const ValueDecl * | ExtendedBy, |
unsigned | ManglingNumber | ||
) |
Definition at line 1474 of file ExprCXX.cpp.
References clang::Decl::getASTContext(), and State.
|
friend |
|
friend |