clang 20.0.0git
|
This represents one expression. More...
#include "clang/AST/Expr.h"
Inherits clang::ValueStmt.
Inherited by clang::AbstractConditionalOperator, clang::AddrLabelExpr, clang::ArrayInitIndexExpr, clang::ArrayInitLoopExpr, clang::ArraySectionExpr, clang::ArraySubscriptExpr, clang::ArrayTypeTraitExpr, clang::AsTypeExpr, clang::AtomicExpr, clang::BinaryOperator, clang::BlockExpr, clang::CXXBindTemporaryExpr, clang::CXXBoolLiteralExpr, clang::CXXConstructExpr, clang::CXXDefaultArgExpr, clang::CXXDefaultInitExpr, clang::CXXDeleteExpr, clang::CXXDependentScopeMemberExpr, clang::CXXFoldExpr, clang::CXXInheritedCtorInitExpr, clang::CXXNewExpr, clang::CXXNoexceptExpr, clang::CXXNullPtrLiteralExpr, clang::CXXParenListInitExpr, clang::CXXPseudoDestructorExpr, clang::CXXRewrittenBinaryOperator, clang::CXXScalarValueInitExpr, clang::CXXStdInitializerListExpr, clang::CXXThisExpr, clang::CXXThrowExpr, clang::CXXTypeidExpr, clang::CXXUnresolvedConstructExpr, clang::CXXUuidofExpr, clang::CallExpr, clang::CastExpr, clang::CharacterLiteral, clang::ChooseExpr, clang::CompoundLiteralExpr, clang::ConceptSpecializationExpr, clang::ConvertVectorExpr, clang::CoroutineSuspendExpr, clang::DeclRefExpr, clang::DependentCoawaitExpr, clang::DependentScopeDeclRefExpr, clang::DesignatedInitExpr, clang::DesignatedInitUpdateExpr, clang::EmbedExpr, clang::ExpressionTraitExpr, clang::ExtVectorElementExpr, clang::FixedPointLiteral, clang::FloatingLiteral, clang::FullExpr, clang::FunctionParmPackExpr, clang::GNUNullExpr, clang::GenericSelectionExpr, clang::HLSLOutArgExpr, clang::ImaginaryLiteral, clang::ImplicitValueInitExpr, clang::InitListExpr, clang::IntegerLiteral, clang::LambdaExpr, clang::MSPropertyRefExpr, clang::MSPropertySubscriptExpr, clang::MaterializeTemporaryExpr, clang::MatrixSubscriptExpr, clang::MemberExpr, clang::NoInitExpr, clang::OMPArrayShapingExpr, clang::OMPIteratorExpr, clang::ObjCArrayLiteral, clang::ObjCAvailabilityCheckExpr, clang::ObjCBoolLiteralExpr, clang::ObjCBoxedExpr, clang::ObjCDictionaryLiteral, clang::ObjCEncodeExpr, clang::ObjCIndirectCopyRestoreExpr, clang::ObjCIsaExpr, clang::ObjCIvarRefExpr, clang::ObjCMessageExpr, clang::ObjCPropertyRefExpr, clang::ObjCProtocolExpr, clang::ObjCSelectorExpr, clang::ObjCStringLiteral, clang::ObjCSubscriptRefExpr, clang::OffsetOfExpr, clang::OpaqueValueExpr, clang::OpenACCAsteriskSizeExpr, clang::OverloadExpr, clang::PackExpansionExpr, clang::PackIndexingExpr, clang::ParenExpr, clang::ParenListExpr, clang::PredefinedExpr, clang::PseudoObjectExpr, clang::RecoveryExpr, clang::RequiresExpr, clang::SYCLUniqueStableNameExpr, clang::ShuffleVectorExpr, clang::SizeOfPackExpr, clang::SourceLocExpr, clang::StmtExpr, clang::StringLiteral, clang::SubstNonTypeTemplateParmExpr, clang::SubstNonTypeTemplateParmPackExpr, clang::TypeTraitExpr, clang::TypoExpr, clang::UnaryExprOrTypeTraitExpr, clang::UnaryOperator, and clang::VAArgExpr.
Classes | |
class | Classification |
The return type of classify(). More... | |
struct | EvalResult |
EvalResult is a struct with detailed info about an evaluated expression. More... | |
struct | EvalStatus |
EvalStatus is a struct with detailed info about an evaluation in progress. More... | |
Public Member Functions | |
Expr ()=delete | |
Expr (const Expr &)=delete | |
Expr (Expr &&)=delete | |
Expr & | operator= (const Expr &)=delete |
Expr & | operator= (Expr &&)=delete |
QualType | getType () const |
void | setType (QualType t) |
QualType | getEnumCoercedType (const ASTContext &Ctx) const |
If this expression is an enumeration constant, return the enumeration type under which said constant was declared. | |
ExprDependence | getDependence () const |
bool | isValueDependent () const |
Determines whether the value of this expression depends on. | |
bool | isTypeDependent () const |
Determines whether the type of this expression depends on. | |
bool | isInstantiationDependent () const |
Whether this expression is instantiation-dependent, meaning that it depends in some way on. | |
bool | containsUnexpandedParameterPack () const |
Whether this expression contains an unexpanded parameter pack (for C++11 variadic templates). | |
bool | containsErrors () const |
Whether this expression contains subexpressions which had errors, e.g. | |
SourceLocation | getExprLoc () const LLVM_READONLY |
getExprLoc - Return the preferred location for the arrow when diagnosing a problem with a generic expression. | |
bool | isReadIfDiscardedInCPlusPlus11 () const |
Determine whether an lvalue-to-rvalue conversion should implicitly be applied to this expression if it appears as a discarded-value expression in C++11 onwards. | |
bool | isUnusedResultAWarning (const Expr *&WarnExpr, SourceLocation &Loc, SourceRange &R1, SourceRange &R2, ASTContext &Ctx) const |
isUnusedResultAWarning - Return true if this immediate expression should be warned about if the result is unused. | |
bool | isLValue () const |
isLValue - True if this expression is an "l-value" according to the rules of the current language. | |
bool | isPRValue () const |
bool | isXValue () const |
bool | isGLValue () const |
LValueClassification | ClassifyLValue (ASTContext &Ctx) const |
Reasons why an expression might not be an l-value. | |
isModifiableLvalueResult | isModifiableLvalue (ASTContext &Ctx, SourceLocation *Loc=nullptr) const |
isModifiableLvalue - C99 6.3.2.1: an lvalue that does not have array type, does not have an incomplete type, does not have a const-qualified type, and if it is a structure or union, does not have any member (including, recursively, any member or element of all contained aggregates or unions) with a const-qualified type. | |
Classification | Classify (ASTContext &Ctx) const |
Classify - Classify this expression according to the C++11 expression taxonomy. | |
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. | |
FPOptions | getFPFeaturesInEffect (const LangOptions &LO) const |
Returns the set of floating point options that apply to this expression. | |
ExprValueKind | getValueKind () const |
getValueKind - The value kind that this expression produces. | |
ExprObjectKind | getObjectKind () const |
getObjectKind - The object kind that this expression produces. | |
bool | isOrdinaryOrBitFieldObject () const |
void | setValueKind (ExprValueKind Cat) |
setValueKind - Set the value kind produced by this expression. | |
void | setObjectKind (ExprObjectKind Cat) |
setObjectKind - Set the object kind produced by this expression. | |
bool | refersToBitField () const |
Returns true if this expression is a gl-value that potentially refers to a bit-field. | |
FieldDecl * | getSourceBitField () |
If this expression refers to a bit-field, retrieve the declaration of that bit-field. | |
EnumConstantDecl * | getEnumConstantDecl () |
If this expression refers to an enum constant, retrieve its declaration. | |
const EnumConstantDecl * | getEnumConstantDecl () const |
const FieldDecl * | getSourceBitField () const |
Decl * | getReferencedDeclOfCallee () |
const Decl * | getReferencedDeclOfCallee () const |
const ObjCPropertyRefExpr * | getObjCProperty () const |
If this expression is an l-value for an Objective C property, find the underlying property reference expression. | |
bool | isObjCSelfExpr () const |
Check if this expression is the ObjC 'self' implicit parameter. | |
bool | refersToVectorElement () const |
Returns whether this expression refers to a vector element. | |
bool | refersToMatrixElement () const |
Returns whether this expression refers to a matrix element. | |
bool | refersToGlobalRegisterVar () const |
Returns whether this expression refers to a global register variable. | |
bool | hasPlaceholderType () const |
Returns whether this expression has a placeholder type. | |
bool | hasPlaceholderType (BuiltinType::Kind K) const |
Returns whether this expression has a specific placeholder type. | |
bool | isKnownToHaveBooleanValue (bool Semantic=true) const |
isKnownToHaveBooleanValue - Return true if this is an integer expression that is known to return 0 or 1. | |
bool | isFlexibleArrayMemberLike (ASTContext &Context, LangOptions::StrictFlexArraysLevelKind StrictFlexArraysLevel, bool IgnoreTemplateOrMacroSubstitution=false) const |
Check whether this array fits the idiom of a flexible array member, depending on the value of -fstrict-flex-array. | |
std::optional< llvm::APSInt > | getIntegerConstantExpr (const ASTContext &Ctx, SourceLocation *Loc=nullptr) const |
isIntegerConstantExpr - Return the value if this expression is a valid integer constant expression. | |
bool | isIntegerConstantExpr (const ASTContext &Ctx, SourceLocation *Loc=nullptr) const |
bool | isCXX98IntegralConstantExpr (const ASTContext &Ctx) const |
isCXX98IntegralConstantExpr - Return true if this expression is an integral constant expression in C++98. | |
bool | isCXX11ConstantExpr (const ASTContext &Ctx, APValue *Result=nullptr, SourceLocation *Loc=nullptr) const |
isCXX11ConstantExpr - Return true if this expression is a constant expression in C++11. | |
bool | isConstantInitializer (ASTContext &Ctx, bool ForRef, const Expr **Culprit=nullptr) const |
isConstantInitializer - Returns true if this expression can be emitted to IR as a constant, and thus can be used as a constant initializer in C. | |
const ValueDecl * | getAsBuiltinConstantDeclRef (const ASTContext &Context) const |
If this expression is an unambiguous reference to a single declaration, in the style of __builtin_function_start, return that declaration. | |
bool | EvaluateAsRValue (EvalResult &Result, const ASTContext &Ctx, bool InConstantContext=false) const |
EvaluateAsRValue - Return true if this is a constant which we can fold to an rvalue using any crazy technique (that has nothing to do with language standards) that we want to, even if the expression has side-effects. | |
bool | EvaluateAsBooleanCondition (bool &Result, const ASTContext &Ctx, bool InConstantContext=false) const |
EvaluateAsBooleanCondition - Return true if this is a constant which we can fold and convert to a boolean condition using any crazy technique that we want to, even if the expression has side-effects. | |
bool | EvaluateAsInt (EvalResult &Result, const ASTContext &Ctx, SideEffectsKind AllowSideEffects=SE_NoSideEffects, bool InConstantContext=false) const |
EvaluateAsInt - Return true if this is a constant which we can fold and convert to an integer, using any crazy technique that we want to. | |
bool | EvaluateAsFloat (llvm::APFloat &Result, const ASTContext &Ctx, SideEffectsKind AllowSideEffects=SE_NoSideEffects, bool InConstantContext=false) const |
EvaluateAsFloat - Return true if this is a constant which we can fold and convert to a floating point value, using any crazy technique that we want to. | |
bool | EvaluateAsFixedPoint (EvalResult &Result, const ASTContext &Ctx, SideEffectsKind AllowSideEffects=SE_NoSideEffects, bool InConstantContext=false) const |
EvaluateAsFixedPoint - Return true if this is a constant which we can fold and convert to a fixed point value. | |
bool | isEvaluatable (const ASTContext &Ctx, SideEffectsKind AllowSideEffects=SE_NoSideEffects) const |
isEvaluatable - Call EvaluateAsRValue to see if this expression can be constant folded without side-effects, but discard the result. | |
bool | HasSideEffects (const ASTContext &Ctx, bool IncludePossibleEffects=true) const |
HasSideEffects - This routine returns true for all those expressions which have any effect other than producing a value. | |
bool | hasNonTrivialCall (const ASTContext &Ctx) const |
Determine whether this expression involves a call to any function that is not trivial. | |
llvm::APSInt | EvaluateKnownConstInt (const ASTContext &Ctx, SmallVectorImpl< PartialDiagnosticAt > *Diag=nullptr) const |
EvaluateKnownConstInt - Call EvaluateAsRValue and return the folded integer. | |
llvm::APSInt | EvaluateKnownConstIntCheckOverflow (const ASTContext &Ctx, SmallVectorImpl< PartialDiagnosticAt > *Diag=nullptr) const |
void | EvaluateForOverflow (const ASTContext &Ctx) const |
bool | EvaluateAsLValue (EvalResult &Result, const ASTContext &Ctx, bool InConstantContext=false) const |
EvaluateAsLValue - Evaluate an expression to see if we can fold it to an lvalue with link time known address, with no side-effects. | |
bool | EvaluateAsInitializer (APValue &Result, const ASTContext &Ctx, const VarDecl *VD, SmallVectorImpl< PartialDiagnosticAt > &Notes, bool IsConstantInitializer) const |
EvaluateAsInitializer - Evaluate an expression as if it were the initializer of the given declaration. | |
bool | EvaluateWithSubstitution (APValue &Value, ASTContext &Ctx, const FunctionDecl *Callee, ArrayRef< const Expr * > Args, const Expr *This=nullptr) const |
EvaluateWithSubstitution - Evaluate an expression as if from the context of a call to the given function with the given arguments, inside an unevaluated context. | |
bool | EvaluateAsConstantExpr (EvalResult &Result, const ASTContext &Ctx, ConstantExprKind Kind=ConstantExprKind::Normal) const |
Evaluate an expression that is required to be a constant expression. | |
bool | tryEvaluateObjectSize (uint64_t &Result, ASTContext &Ctx, unsigned Type) const |
If the current Expr is a pointer, this will try to statically determine the number of bytes available where the pointer is pointing. | |
bool | tryEvaluateStrLen (uint64_t &Result, ASTContext &Ctx) const |
If the current Expr is a pointer, this will try to statically determine the strlen of the string pointed to. | |
bool | EvaluateCharRangeAsString (std::string &Result, const Expr *SizeExpression, const Expr *PtrExpression, ASTContext &Ctx, EvalResult &Status) const |
std::optional< std::string > | tryEvaluateString (ASTContext &Ctx) const |
If the current Expr can be evaluated to a pointer to a null-terminated constant string, return the constant string (without the terminating null). | |
NullPointerConstantKind | isNullPointerConstant (ASTContext &Ctx, NullPointerConstantValueDependence NPC) const |
isNullPointerConstant - C99 6.3.2.3p3 - Test if this reduces down to a Null pointer constant. | |
bool | isOBJCGCCandidate (ASTContext &Ctx) const |
isOBJCGCCandidate - Return true if this expression may be used in a read/ write barrier. | |
bool | isBoundMemberFunction (ASTContext &Ctx) const |
Returns true if this expression is a bound member function. | |
Expr * | IgnoreUnlessSpelledInSource () |
Skip past any invisible AST nodes which might surround this statement, such as ExprWithCleanups or ImplicitCastExpr nodes, but also injected CXXMemberExpr and CXXConstructExpr which represent implicit conversions. | |
const Expr * | IgnoreUnlessSpelledInSource () const |
Expr * | IgnoreImpCasts () LLVM_READONLY |
Skip past any implicit casts which might surround this expression until reaching a fixed point. | |
const Expr * | IgnoreImpCasts () const |
Expr * | IgnoreCasts () LLVM_READONLY |
Skip past any casts which might surround this expression until reaching a fixed point. | |
const Expr * | IgnoreCasts () const |
Expr * | IgnoreImplicit () LLVM_READONLY |
Skip past any implicit AST nodes which might surround this expression until reaching a fixed point. | |
const Expr * | IgnoreImplicit () const |
Expr * | IgnoreImplicitAsWritten () LLVM_READONLY |
Skip past any implicit AST nodes which might surround this expression until reaching a fixed point. | |
const Expr * | IgnoreImplicitAsWritten () const |
Expr * | IgnoreParens () LLVM_READONLY |
Skip past any parentheses which might surround this expression until reaching a fixed point. | |
const Expr * | IgnoreParens () const |
Expr * | IgnoreParenImpCasts () LLVM_READONLY |
Skip past any parentheses and implicit casts which might surround this expression until reaching a fixed point. | |
const Expr * | IgnoreParenImpCasts () const |
Expr * | IgnoreParenCasts () LLVM_READONLY |
Skip past any parentheses and casts which might surround this expression until reaching a fixed point. | |
const Expr * | IgnoreParenCasts () const |
Expr * | IgnoreConversionOperatorSingleStep () LLVM_READONLY |
Skip conversion operators. | |
const Expr * | IgnoreConversionOperatorSingleStep () const |
Expr * | IgnoreParenLValueCasts () LLVM_READONLY |
Skip past any parentheses and lvalue casts which might surround this expression until reaching a fixed point. | |
const Expr * | IgnoreParenLValueCasts () const |
Expr * | IgnoreParenNoopCasts (const ASTContext &Ctx) LLVM_READONLY |
Skip past any parentheses and casts which do not change the value (including ptr->int casts of the same size) until reaching a fixed point. | |
const Expr * | IgnoreParenNoopCasts (const ASTContext &Ctx) const |
Expr * | IgnoreParenBaseCasts () LLVM_READONLY |
Skip past any parentheses and derived-to-base casts until reaching a fixed point. | |
const Expr * | IgnoreParenBaseCasts () const |
bool | isDefaultArgument () const |
Determine whether this expression is a default function argument. | |
bool | isTemporaryObject (ASTContext &Ctx, const CXXRecordDecl *TempTy) const |
Determine whether the result of this expression is a temporary object of the given class type. | |
bool | isImplicitCXXThis () const |
Whether this expression is an implicit reference to 'this' in C++. | |
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. | |
const Expr * | getBestDynamicClassTypeExpr () const |
Get the inner expression that determines the best dynamic class. | |
const Expr * | skipRValueSubobjectAdjustments (SmallVectorImpl< const Expr * > &CommaLHS, SmallVectorImpl< SubobjectAdjustment > &Adjustments) const |
Walk outwards from an expression we want to bind a reference to and find the expression whose lifetime needs to be extended. | |
const Expr * | skipRValueSubobjectAdjustments () const |
Public Member Functions inherited from clang::ValueStmt | |
const Expr * | getExprStmt () const |
Expr * | getExprStmt () |
Public Member Functions inherited from clang::Stmt | |
void * | operator new (size_t bytes, const ASTContext &C, unsigned alignment=8) |
void * | operator new (size_t bytes, const ASTContext *C, unsigned alignment=8) |
void * | operator new (size_t bytes, void *mem) noexcept |
void | operator delete (void *, const ASTContext &, unsigned) noexcept |
void | operator delete (void *, const ASTContext *, unsigned) noexcept |
void | operator delete (void *, size_t) noexcept |
void | operator delete (void *, void *) noexcept |
Stmt ()=delete | |
Stmt (const Stmt &)=delete | |
Stmt (Stmt &&)=delete | |
Stmt & | operator= (const Stmt &)=delete |
Stmt & | operator= (Stmt &&)=delete |
Stmt (StmtClass SC) | |
StmtClass | getStmtClass () const |
const char * | getStmtClassName () const |
SourceRange | getSourceRange () const LLVM_READONLY |
SourceLocation tokens are not useful in isolation - they are low level value objects created/interpreted by SourceManager. | |
SourceLocation | getBeginLoc () const LLVM_READONLY |
SourceLocation | getEndLoc () const LLVM_READONLY |
void | dump () const |
Dumps the specified AST fragment and all subtrees to llvm::errs() . | |
void | dump (raw_ostream &OS, const ASTContext &Context) const |
int64_t | getID (const ASTContext &Context) const |
void | dumpColor () const |
dumpColor - same as dump(), but forces color highlighting. | |
void | dumpPretty (const ASTContext &Context) const |
dumpPretty/printPretty - These two methods do a "pretty print" of the AST back to its original source language syntax. | |
void | printPretty (raw_ostream &OS, PrinterHelper *Helper, const PrintingPolicy &Policy, unsigned Indentation=0, StringRef NewlineSymbol="\n", const ASTContext *Context=nullptr) const |
void | printPrettyControlled (raw_ostream &OS, PrinterHelper *Helper, const PrintingPolicy &Policy, unsigned Indentation=0, StringRef NewlineSymbol="\n", const ASTContext *Context=nullptr) const |
void | printJson (raw_ostream &Out, PrinterHelper *Helper, const PrintingPolicy &Policy, bool AddQuotes) const |
Pretty-prints in JSON format. | |
void | viewAST () const |
viewAST - Visualize an AST rooted at this Stmt* using GraphViz. | |
Stmt * | IgnoreContainers (bool IgnoreCaptured=false) |
Skip no-op (attributed, compound) container stmts and skip captured stmt at the top, if IgnoreCaptured is true. | |
const Stmt * | IgnoreContainers (bool IgnoreCaptured=false) const |
const Stmt * | stripLabelLikeStatements () const |
Strip off all label-like statements. | |
Stmt * | stripLabelLikeStatements () |
child_range | children () |
const_child_range | children () const |
child_iterator | child_begin () |
child_iterator | child_end () |
const_child_iterator | child_begin () const |
const_child_iterator | child_end () const |
void | Profile (llvm::FoldingSetNodeID &ID, const ASTContext &Context, bool Canonical, bool ProfileLambdaExpr=false) const |
Produce a unique representation of the given statement. | |
void | ProcessODRHash (llvm::FoldingSetNodeID &ID, ODRHash &Hash) const |
Calculate a unique representation for a statement that is stable across compiler invocations. | |
Static Public Member Functions | |
static ExprValueKind | getValueKindForType (QualType T) |
getValueKindForType - Given a formal return or parameter type, give its value kind. | |
static bool | isPotentialConstantExpr (const FunctionDecl *FD, SmallVectorImpl< PartialDiagnosticAt > &Diags) |
isPotentialConstantExpr - Return true if this function's definition might be usable in a constant expression in C++11, if it were marked constexpr. | |
static bool | isPotentialConstantExprUnevaluated (Expr *E, const FunctionDecl *FD, SmallVectorImpl< PartialDiagnosticAt > &Diags) |
isPotentialConstantExprUnevaluated - Return true if this expression might be usable in a constant expression in C++11 in an unevaluated context, if it were in function FD marked constexpr. | |
static QualType | findBoundMemberType (const Expr *expr) |
Given an expression of bound-member type, find the type of the member. | |
static bool | hasAnyTypeDependentArguments (ArrayRef< Expr * > Exprs) |
hasAnyTypeDependentArguments - Determines if any of the expressions in Exprs is type-dependent. | |
static bool | isSameComparisonOperand (const Expr *E1, const Expr *E2) |
Checks that the two Expr's will refer to the same value as a comparison operand. | |
static bool | classof (const Stmt *T) |
Static Public Member Functions inherited from clang::ValueStmt | |
static bool | classof (const Stmt *T) |
Static Public Member Functions inherited from clang::Stmt | |
static void | addStmtClass (const StmtClass s) |
static void | EnableStatistics () |
static void | PrintStats () |
static Likelihood | getLikelihood (ArrayRef< const Attr * > Attrs) |
static Likelihood | getLikelihood (const Stmt *S) |
static const Attr * | getLikelihoodAttr (const Stmt *S) |
static Likelihood | getLikelihood (const Stmt *Then, const Stmt *Else) |
static std::tuple< bool, const Attr *, const Attr * > | determineLikelihoodConflict (const Stmt *Then, const Stmt *Else) |
Protected Member Functions | |
Expr (StmtClass SC, QualType T, ExprValueKind VK, ExprObjectKind OK) | |
Expr (StmtClass SC, EmptyShell) | |
Construct an empty expression. | |
void | setDependence (ExprDependence Deps) |
Each concrete expr subclass is expected to compute its dependence and call this in the constructor. | |
Protected Member Functions inherited from clang::ValueStmt | |
Stmt (StmtClass SC, EmptyShell) | |
Construct an empty statement. | |
Stmt ()=delete | |
Stmt (const Stmt &)=delete | |
Stmt (Stmt &&)=delete | |
Stmt (StmtClass SC) | |
Protected Member Functions inherited from clang::Stmt | |
void * | operator new (size_t bytes) noexcept |
void | operator delete (void *data) noexcept |
Stmt (StmtClass SC, EmptyShell) | |
Construct an empty statement. | |
Friends | |
class | ASTImporter |
class | ASTStmtReader |
This represents one expression.
Note that Expr's are subclasses of Stmt. This allows an expression to be transparently used any place a Stmt is required.
|
strong |
Enumeration used to describe the kind of Null pointer constant returned from isNullPointerConstant()
.
Enumerator | |
---|---|
NPCK_NotNull | Expression is not a Null pointer constant. |
NPCK_ZeroExpression | Expression is a Null pointer constant built from a zero integer expression that is not a simple, possibly parenthesized, zero literal. C++ Core Issue 903 will classify these expressions as "not pointers" once it is adopted. http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#903 |
NPCK_ZeroLiteral | Expression is a Null pointer constant built from a literal zero. |
NPCK_CXX11_nullptr | Expression is a C++11 nullptr. |
NPCK_GNUNull | Expression is a GNU-style __null constant. |
Enumeration used to describe how isNullPointerConstant()
should cope with value-dependent expressions.
|
delete |
|
delete |
|
delete |
|
inlineprotected |
Definition at line 121 of file Expr.h.
References clang::Stmt::ExprBits, setType(), and clang::T.
|
inlineexplicitprotected |
|
inline |
Classify - Classify this expression according to the C++11 expression taxonomy.
C++11 defines ([basic.lval]) a new taxonomy of expressions to replace the old lvalue vs rvalue. This function determines the type of expression this is. There are three expression types:
Definition at line 405 of file Expr.h.
Referenced by clang::Sema::AddConversionCandidate(), clang::Sema::AddFunctionCandidates(), clang::Sema::AddTemplateConversionCandidate(), clang::Sema::BuildCallToMemberFunction(), clang::Sema::CheckPointerToMemberOperands(), ClassifyLValue(), DeduceFromInitializerList(), isTemporaryObject(), clang::Sema::LookupSpecialMember(), and clang::Sema::PerformImplicitObjectArgumentInitialization().
Expr::LValueClassification Expr::ClassifyLValue | ( | ASTContext & | Ctx | ) | const |
Reasons why an expression might not be an l-value.
Definition at line 723 of file ExprClassification.cpp.
References clang::Expr::Classification::CL_AddressableVoid, clang::Expr::Classification::CL_ArrayTemporary, clang::Expr::Classification::CL_ClassTemporary, clang::Expr::Classification::CL_DuplicateVectorComponents, clang::Expr::Classification::CL_Function, clang::Expr::Classification::CL_LValue, clang::Expr::Classification::CL_MemberFunction, clang::Expr::Classification::CL_ObjCMessageRValue, clang::Expr::Classification::CL_PRValue, clang::Expr::Classification::CL_SubObjCPropertySetting, clang::Expr::Classification::CL_Void, clang::Expr::Classification::CL_XValue, Classify(), clang::Expr::Classification::getKind(), LV_ArrayTemporary, LV_ClassTemporary, LV_DuplicateVectorComponents, LV_IncompleteVoidType, LV_InvalidExpression, LV_InvalidMessageExpression, LV_MemberFunction, LV_NotObjectType, LV_SubObjCPropertySetting, and LV_Valid.
Referenced by clang::Sema::CheckAddressOfOperand(), and isBoundMemberFunction().
|
inline |
ClassifyModifiable - Classify this expression according to the C++11 expression taxonomy, and see if it is valid on the left side of an assignment.
This function extends classify in that it also tests whether the expression is modifiable (C99 6.3.2.1p1).
Loc | A source location that might be filled with a relevant location if the expression is not modifiable. |
Definition at line 417 of file Expr.h.
References Loc.
Referenced by isModifiableLvalue().
|
inline |
Whether this expression contains subexpressions which had errors, e.g.
a TypoExpr.
Definition at line 245 of file Expr.h.
References getDependence().
Referenced by clang::Sema::ActOnCapScopeReturnStmt(), clang::Sema::ActOnPackIndexingExpr(), clang::Sema::AddInitializerToDecl(), clang::Sema::BuildBinOp(), clang::Sema::BuildCXXForRangeStmt(), clang::Sema::BuildDelegatingInitializer(), calculateConstraintSatisfaction(), clang::Sema::checkCall(), clang::Sema::CheckConditionalOperands(), clang::Sema::CheckEnumConstant(), clang::SemaOpenACC::CheckVarIsPointerType(), EvaluateDependentExpr(), clang::Sema::FinalizeVarWithDestructor(), clang::Sema::getNamedReturnInfo(), isNullPointerConstant(), clang::Sema::VerifyBitField(), and clang::TextNodeDumper::Visit().
|
inline |
Whether this expression contains an unexpanded parameter pack (for C++11 variadic templates).
Given the following function template:
The expressions args
and static_cast<Types&&>(args)
both contain parameter packs.
Definition at line 239 of file Expr.h.
References getDependence().
Referenced by clang::Sema::ActOnCXXFoldExpr(), clang::Sema::ActOnNoexceptSpec(), clang::SemaOpenMP::ActOnOpenMPDeclareSimdDirective(), clang::SemaOpenMP::ActOnOpenMPDepobjClause(), clang::SemaOpenMP::ActOnOpenMPDetachClause(), clang::SemaOpenMP::ActOnOpenMPDistScheduleClause(), clang::SemaOpenMP::ActOnOpenMPInitClause(), clang::SemaOpenMP::ActOnOpenMPLinearClause(), clang::SemaOpenMP::ActOnOpenMPScheduleClause(), applyOMPAllocateAttribute(), clang::SemaOpenMP::checkOpenMPDeclareVariantFunction(), clang::Sema::CheckPackExpansion(), checkSimdlenSafelenSpecified(), clang::Sema::containsUnexpandedParameterPacks(), clang::Sema::CreateGenericSelectionExpr(), clang::CXXFoldExpr::CXXFoldExpr(), clang::Sema::DiagnoseUnexpandedParameterPack(), clang::Sema::DiagnoseUnexpandedParameterPackInRequiresExpr(), getPrivateItem(), handleAlignedAttr(), clang::CXXFoldExpr::isRightFold(), processImplicitMapsWithDefaultMappers(), clang::SemaOpenMP::VerifyPositiveIntegerConstantInClause(), clang::ASTNodeImporter::VisitGenericSelectionExpr(), and clang::ASTNodeImporter::VisitLambdaExpr().
bool Expr::EvaluateAsBooleanCondition | ( | bool & | Result, |
const ASTContext & | Ctx, | ||
bool | InConstantContext = false |
||
) | const |
EvaluateAsBooleanCondition - Return true if this is a constant which we can fold and convert to a boolean condition using any crazy technique that we want to, even if the expression has side-effects.
Definition at line 16632 of file ExprConstant.cpp.
References EvaluateAsRValue(), and HandleConversionToBool().
Referenced by CheckNonNullExpr(), FindTypeTagExpr(), getNumThreads(), clang::CodeGen::CGOpenMPRuntime::getNumThreadsExprForTargetDirective(), and clang::CallExpr::isBuiltinAssumeFalse().
bool Expr::EvaluateAsConstantExpr | ( | EvalResult & | Result, |
const ASTContext & | Ctx, | ||
ConstantExprKind | Kind = ConstantExprKind::Normal |
||
) | const |
Evaluate an expression that is required to be a constant expression.
Does not check the syntactic constraints for C and C++98 constant expressions.
Definition at line 16729 of file ExprConstant.cpp.
References CheckConstantExpression(), CheckMemoryLeaks(), EvaluateDestruction(), EvaluateInPlace(), FastEvaluateAsRValue(), and clang::T.
Referenced by calculateConstraintSatisfaction(), clang::Sema::CheckForImmediateInvocation(), clang::computeDependence(), clang::Sema::ConstantFoldAttrArgs(), EvaluateAndDiagnoseImmediateInvocation(), clang::Sema::EvaluateConvertedConstantExpression(), and getAsBuiltinConstantDeclRef().
bool Expr::EvaluateAsFixedPoint | ( | EvalResult & | Result, |
const ASTContext & | Ctx, | ||
SideEffectsKind | AllowSideEffects = SE_NoSideEffects , |
||
bool | InConstantContext = false |
||
) | const |
EvaluateAsFixedPoint - Return true if this is a constant which we can fold and convert to a fixed point value.
Definition at line 16653 of file ExprConstant.cpp.
Referenced by clang::Sema::CheckImplicitConversion().
bool Expr::EvaluateAsFloat | ( | llvm::APFloat & | Result, |
const ASTContext & | Ctx, | ||
SideEffectsKind | AllowSideEffects = SE_NoSideEffects , |
||
bool | InConstantContext = false |
||
) | const |
EvaluateAsFloat - Return true if this is a constant which we can fold and convert to a floating point value, using any crazy technique that we want to.
Definition at line 16664 of file ExprConstant.cpp.
References EvaluateAsRValue(), and hasUnacceptableSideEffect().
Referenced by DiagnoseFloatingImpCast().
bool Expr::EvaluateAsInitializer | ( | APValue & | Result, |
const ASTContext & | Ctx, | ||
const VarDecl * | VD, | ||
SmallVectorImpl< PartialDiagnosticAt > & | Notes, | ||
bool | IsConstantInitializer | ||
) | const |
EvaluateAsInitializer - Evaluate an expression as if it were the initializer of the given declaration.
Returns true if the initializer can be folded to a constant, and produces any relevant notes. In C++11, notes will be produced if the expression is not a constant expression.
Definition at line 16800 of file ExprConstant.cpp.
References CheckConstantExpression(), CheckMemoryLeaks(), clang::Expr::EvalStatus::Diag, EvaluateInPlace(), clang::ASTContext::getLangOpts(), clang::Decl::getLocation(), clang::ValueDecl::getType(), and clang::NamedDecl::printQualifiedName().
bool Expr::EvaluateAsInt | ( | EvalResult & | Result, |
const ASTContext & | Ctx, | ||
SideEffectsKind | AllowSideEffects = SE_NoSideEffects , |
||
bool | InConstantContext = false |
||
) | const |
EvaluateAsInt - Return true if this is a constant which we can fold and convert to an integer, using any crazy technique that we want to.
Definition at line 16642 of file ExprConstant.cpp.
Referenced by clang::SemaOpenACC::ActOnArraySectionExpr(), clang::Sema::ActOnFinishSwitchStmt(), clang::SemaOpenMP::ActOnOMPArraySectionExpr(), AnalyzeBitFieldAssignment(), BuiltinAlignment(), checkArrayExpressionDoesNotReferToWholeSize(), checkFormatStringExpr(), clang::Sema::CheckImplicitConversion(), clang::Sema::CheckLogicalOperands(), CheckObjCDictionaryLiteralDuplicateKeys(), checkOpenMPLoop(), checkSimdlenSafelenSpecified(), clang::Sema::CheckSubtractionOperands(), DiagnoseBadDivideOrRemainderValues(), DiagnoseBadShiftValues(), DiagnoseIntInBoolContext(), getBytesReturnedByAllocSizeCall(), clang::ento::SValBuilder::getConstantVal(), isConstantInitializer(), TryToFixInvalidVariablyModifiedType(), and clang::ento::ExprEngine::VisitOffsetOfExpr().
bool Expr::EvaluateAsLValue | ( | EvalResult & | Result, |
const ASTContext & | Ctx, | ||
bool | InConstantContext = false |
||
) | const |
EvaluateAsLValue - Evaluate an expression to see if we can fold it to an lvalue with link time known address, with no side-effects.
Definition at line 16684 of file ExprConstant.cpp.
References CheckLValueConstantExpression(), EvaluateLValue(), and clang::ASTContext::getLValueReferenceType().
Referenced by clang::Sema::FillInlineAsmIdentifierInfo(), isConstantInitializer(), and clang::CodeGen::ConstantEmitter::tryEmitPrivate().
bool Expr::EvaluateAsRValue | ( | EvalResult & | Result, |
const ASTContext & | Ctx, | ||
bool | InConstantContext = false |
||
) | const |
EvaluateAsRValue - Return true if this is a constant which we can fold to an rvalue using any crazy technique (that has nothing to do with language standards) that we want to, even if the expression has side-effects.
EvaluateAsRValue - Return true if this is a constant which we can fold using any crazy technique (that has nothing to do with language standards) that we want to.
If this function returns true, it returns the folded constant in Result. If the expression is a glvalue, an lvalue-to-rvalue conversion will be applied.
If this function returns true, it returns the folded constant in Result. If this expression is a glvalue, an lvalue-to-rvalue conversion will be applied to the result.
Definition at line 16622 of file ExprConstant.cpp.
Referenced by clang::Sema::ActOnGCCAsmStmt(), clang::Sema::CheckImplicitConversion(), clang::Sema::DiagnoseStaticAssertDetails(), clang::Sema::FillInlineAsmIdentifierInfo(), findConstantBaseAndOffset(), isNullPointerValueTemplateArgument(), maybeConstEvalStringLiteral(), clang::InitializationSequence::Perform(), clang::CodeGen::ConstantEmitter::tryEmitPrivate(), TryGetExprRange(), and clang::Sema::VerifyIntegerConstantExpression().
bool Expr::EvaluateCharRangeAsString | ( | std::string & | Result, |
const Expr * | SizeExpression, | ||
const Expr * | PtrExpression, | ||
ASTContext & | Ctx, | ||
EvalResult & | Status | ||
) | const |
Definition at line 17763 of file ExprConstant.cpp.
References clang::C, CheckMemoryLeaks(), EvaluateInteger(), EvaluatePointer(), clang::APValue::getInt(), clang::Type::getPointeeType(), getType(), HandleLValueArrayAdjustment(), and handleLValueToRValueConversion().
void Expr::EvaluateForOverflow | ( | const ASTContext & | Ctx | ) | const |
Definition at line 16947 of file ExprConstant.cpp.
References EvaluateAsRValue(), and FastEvaluateAsRValue().
APSInt Expr::EvaluateKnownConstInt | ( | const ASTContext & | Ctx, |
SmallVectorImpl< PartialDiagnosticAt > * | Diag = nullptr |
||
) | const |
EvaluateKnownConstInt - Call EvaluateAsRValue and return the folded integer.
This must be called on an expression that constant folds to an integer.
Definition at line 16908 of file ExprConstant.cpp.
References clang::Expr::EvalStatus::Diag, Diag(), and EvaluateAsRValue().
Referenced by clang::Sema::ActOnFinishSwitchStmt(), clang::SemaOpenMP::ActOnOpenMPCriticalDirective(), CheckICE(), clang::Sema::DiagnoseAssignmentEnum(), clang::CodeGen::CGOpenMPRuntime::emitDeclareSimdFunction(), EvaluateSwitch(), FindCaseStatementsForValue(), clang::FieldDecl::getBitWidthValue(), clang::IfStmt::getNondiscardedCase(), clang::ShuffleVectorExpr::getShuffleMaskIdx(), handleLoopHintAttr(), isNullPointerConstant(), IsStandardConversion(), clang::ento::ExprEngine::processSwitch(), shouldAddCase(), templateArgumentExpressionsEqual(), and clang::ento::ExprEngine::VisitUnaryExprOrTypeTraitExpr().
APSInt Expr::EvaluateKnownConstIntCheckOverflow | ( | const ASTContext & | Ctx, |
SmallVectorImpl< PartialDiagnosticAt > * | Diag = nullptr |
||
) | const |
Definition at line 16927 of file ExprConstant.cpp.
References clang::Expr::EvalStatus::Diag, Diag(), and EvaluateAsRValue().
Referenced by clang::Sema::VerifyIntegerConstantExpression().
bool Expr::EvaluateWithSubstitution | ( | APValue & | Value, |
ASTContext & | Ctx, | ||
const FunctionDecl * | Callee, | ||
ArrayRef< const Expr * > | Args, | ||
const Expr * | This = nullptr |
||
) | const |
EvaluateWithSubstitution - Evaluate an expression as if from the context of a call to the given function with the given arguments, inside an unevaluated context.
Returns true if the expression could be folded to a constant.
Definition at line 17536 of file ExprConstant.cpp.
References clang::Call, E, Evaluate(), EvaluateCallArg(), EvaluateObjectArgument(), and clang::ASTContext::getPrintingPolicy().
Given an expression of bound-member type, find the type of the member.
Returns null if this is an overloaded bound member expression.
Definition at line 3046 of file Expr.cpp.
References clang::ast_matchers::expr, getPointeeType(), and clang::ast_matchers::type.
Referenced by clang::CallExpr::getCallReturnType().
const ValueDecl * Expr::getAsBuiltinConstantDeclRef | ( | const ASTContext & | Context | ) | const |
If this expression is an unambiguous reference to a single declaration, in the style of __builtin_function_start, return that declaration.
Note that this may return a non-static member function or field in C++ if this expression is a member pointer constant.
Definition at line 226 of file Expr.cpp.
References EvaluateAsConstantExpr(), and clang::Expr::EvalResult::Val.
Referenced by BuiltinFunctionStart().
const CXXRecordDecl * Expr::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.
If this expression is a cast, this method looks through it to find the most derived decl that can be inferred from the expression. This is valid because derived-to-base conversions have undefined behavior if the object isn't dynamically of the derived type.
Definition at line 68 of file Expr.cpp.
References clang::Type::castAs(), D, E, clang::Type::getAs(), getBestDynamicClassTypeExpr(), clang::RecordType::getDecl(), clang::Type::getPointeeType(), getType(), and clang::Type::isDependentType().
const Expr * Expr::getBestDynamicClassTypeExpr | ( | ) | const |
Get the inner expression that determines the best dynamic class.
If this is a prvalue, we guarantee that it is of the most-derived type for the object itself.
Definition at line 43 of file Expr.cpp.
References E, and IgnoreParenBaseCasts().
Referenced by getBestDynamicClassType().
|
inline |
Definition at line 162 of file Expr.h.
References clang::Stmt::ExprBits.
Referenced by clang::computeDependence(), containsErrors(), containsUnexpandedParameterPack(), isInstantiationDependent(), isTypeDependent(), isValueDependent(), clang::CallExpr::markDependentForPostponedNameLookup(), clang::InitListExpr::markError(), clang::InitListExpr::setInit(), and clang::ASTNodeImporter::VisitUnresolvedLookupExpr().
QualType Expr::getEnumCoercedType | ( | const ASTContext & | Ctx | ) | const |
If this expression is an enumeration constant, return the enumeration type under which said constant was declared.
Otherwise return the expression's type. Note this effectively circumvents the weak typing of C's enum constants
Definition at line 266 of file Expr.cpp.
References getEnumConstantDecl(), getType(), and clang::ASTContext::getTypeDeclType().
Referenced by checkEnumArithmeticConversions(), and clang::Sema::CheckImplicitConversion().
EnumConstantDecl * Expr::getEnumConstantDecl | ( | ) |
If this expression refers to an enum constant, retrieve its declaration.
Definition at line 4171 of file Expr.cpp.
References E, and IgnoreParenImpCasts().
Referenced by getEnumCoercedType(), and getEnumConstantDecl().
|
inline |
Definition at line 483 of file Expr.h.
References getEnumConstantDecl().
SourceLocation Expr::getExprLoc | ( | ) | const |
getExprLoc - Return the preferred location for the arrow when diagnosing a problem with a generic expression.
Definition at line 277 of file Expr.cpp.
References clang::Stmt::getStmtClass(), and clang::Stmt::NoStmtClass.
Referenced by clang::SemaOpenACC::ActOnArraySectionExpr(), clang::Sema::ActOnArraySubscriptExpr(), clang::Sema::ActOnCaseExpr(), clang::Sema::ActOnCastExpr(), clang::Sema::ActOnConditionalOp(), clang::Sema::ActOnCXXDelete(), clang::Sema::ActOnDoStmt(), clang::Sema::ActOnEffectExpression(), clang::Sema::ActOnExprStmt(), clang::Sema::ActOnFinishFullExpr(), clang::Sema::ActOnFinishSwitchStmt(), clang::Sema::ActOnGCCAsmStmt(), clang::Sema::ActOnIfStmt(), clang::SemaOpenMP::ActOnOMPArraySectionExpr(), clang::SemaOpenMP::ActOnOMPIteratorExpr(), clang::SemaOpenMP::ActOnOpenMPAllocatorClause(), clang::SemaOpenMP::ActOnOpenMPAtomicDirective(), clang::SemaOpenMP::ActOnOpenMPCopyinClause(), clang::SemaOpenMP::ActOnOpenMPDeclareSimdDirective(), clang::SemaOpenMP::ActOnOpenMPDeclareVariantDirective(), clang::SemaOpenMP::ActOnOpenMPDependClause(), clang::SemaOpenMP::ActOnOpenMPDepobjClause(), clang::SemaOpenMP::ActOnOpenMPDetachClause(), clang::SemaOpenMP::ActOnOpenMPDispatchDirective(), clang::SemaOpenMP::ActOnOpenMPHasDeviceAddrClause(), clang::SemaOpenMP::ActOnOpenMPInitClause(), clang::SemaOpenMP::ActOnOpenMPInterchangeDirective(), clang::SemaOpenMP::ActOnOpenMPIsDevicePtrClause(), clang::SemaOpenMP::ActOnOpenMPMapClause(), clang::SemaOpenMP::ActOnOpenMPPermutationClause(), clang::SemaOpenMP::ActOnOpenMPReverseDirective(), clang::SemaOpenMP::ActOnOpenMPTileDirective(), clang::SemaOpenMP::ActOnOpenMPUnrollDirective(), clang::Sema::ActOnSEHExceptBlock(), clang::Sema::ActOnStartLinkageSpecification(), clang::SemaOpenACC::ActOnVar(), clang::Sema::ActOnVariableDeclarator(), clang::Sema::AddConversionCandidate(), clang::Sema::AddInitializerToDecl(), clang::Sema::AddOverloadedCallCandidates(), clang::interp::AddSubMulHelper(), AnalyzeBitFieldAssignment(), AnalyzeCompoundAssignment(), AnalyzeImplicitConversions(), applyCocoaAPICheck(), clang::CodeGen::ApplyDebugLocation::ApplyDebugLocation(), clang::Sema::BuildAtomicExpr(), buildCapture(), buildCaptureDecl(), clang::Sema::BuildCompoundLiteralExpr(), BuildConvertedConstantExpression(), clang::Sema::BuildCXXMemberCallExpr(), clang::Sema::BuildCXXNew(), clang::Sema::BuildCXXTypeConstructExpr(), clang::Sema::BuildCXXTypeId(), clang::Sema::BuildDecltypeType(), clang::Sema::BuildExpressionFromDeclTemplateArgument(), clang::SemaObjC::BuildInstanceMessage(), clang::SemaObjC::BuildObjCBoxedExpr(), buildPostUpdate(), clang::Sema::BuildResolvedCoawaitExpr(), clang::Sema::BuildSynthesizedThreeWayComparison(), clang::Sema::BuildTypeofExprType(), clang::Sema::BuildVectorLiteral(), BuiltinAlignment(), BuiltinIsWithinLifetime(), BuiltinOverflow(), BuiltinSEHScopeCheck(), clang::Sema::BuiltinVectorMath(), clang::interp::State::CCEDiag(), clang::Sema::CheckAddressOfOperand(), CheckAlignOfExpr(), checkAllocateClauses(), clang::SemaAMDGPU::CheckAMDGCNBuiltinFunctionCall(), clang::CodeGen::CGOpenMPRuntime::checkAndEmitLastprivateConditional(), clang::Sema::CheckAssignmentConstraints(), checkBlockType(), clang::Sema::checkCall(), checkCastFunctionType(), clang::Sema::CheckCompleteVariableDeclaration(), clang::Sema::checkConstantPointerAuthKey(), clang::Sema::CheckConstraintExpression(), clang::Sema::CheckCXXThrowOperand(), clang::SemaOpenMP::checkDeclIsAllowedInOpenMPTarget(), CheckedIntArithmetic(), checkEnumTypesInSwitchStmt(), CheckFoldOperand(), clang::Sema::CheckForConstantInitializer(), CheckForReference(), clang::Sema::CheckFunctionCall(), CheckIdentityFieldAssignment(), CheckIfAnyEnclosingLambdasMustCaptureAnyPotentialCaptures(), clang::Sema::CheckImplicitConversion(), checkIndirectCopyRestoreSource(), clang::Sema::CheckLogicalOperands(), clang::Sema::CheckLoopHintExpr(), clang::Sema::CheckLValueToRValueConversionOperand(), checkMapClauseExpressionBase(), checkMapConflicts(), CheckMemaccessSize(), clang::Sema::CheckMemberPointerConversion(), CheckModifiableLValue(), clang::interp::CheckNewDeleteForms(), clang::SemaOpenMP::checkOpenMPDeclareVariantFunction(), checkOpenMPIterationSpace(), checkOpenMPLoop(), checkPointerAuthEnabled(), checkPointerAuthValue(), clang::Sema::CheckPointerConversion(), checkPositiveIntArgument(), checkPreviousOMPAllocateAttribute(), clang::Sema::CheckPtrComparisonWithNullChar(), clang::SemaOpenACC::CheckReductionVar(), CheckResourceHandle(), checkSimdlenSafelenSpecified(), clang::Sema::CheckSingleAssignmentConstraints(), clang::SemaObjC::CheckSubscriptingKind(), clang::Sema::CheckTemplateArgument(), CheckTemplateArgumentAddressOfObjectOrFunction(), CheckTemplateArgumentPointerToMember(), clang::Sema::CheckTypenameType(), clang::Sema::checkUInt32Argument(), clang::Sema::CheckUnaryExprOrTypeTraitOperand(), clang::SemaOpenACC::CheckVarIsPointerType(), clang::Sema::completeExprArrayBound(), clang::Sema::CreateBuiltinBinOp(), clang::Sema::CreateGenericSelectionExpr(), clang::Sema::CreateUnaryExprOrTypeTraitExpr(), clang::Sema::DeduceFunctionTypeFromReturnExpr(), clang::Sema::deduceVarTypeFromInitializer(), clang::Sema::DefaultArgumentPromotion(), clang::Sema::DefaultFunctionArrayConversion(), clang::Sema::DefaultLvalueConversion(), clang::Sema::DefaultVariadicArgumentPromotion(), clang::Sema::DiagnoseAlwaysNonNullPointer(), clang::Sema::DiagnoseAssignmentEnum(), DiagnoseBadFunctionCast(), DiagnoseCastOfObjCSEL(), clang::Sema::DiagnoseConditionalForNull(), clang::SemaObjC::DiagnoseCStringFormatDirectiveInCFAPI(), DiagnoseCStringFormatDirectiveInObjCAPI(), DiagnoseDirectIsaAccess(), DiagnoseFloatingImpCast(), DiagnoseForRangeVariableCopies(), DiagnoseImpCast(), DiagnoseIntInBoolContext(), clang::Sema::DiagnoseMultipleUserDefinedConversion(), diagnoseNoViableConversion(), DiagnoseNullConversion(), clang::diagnoseRetainCycle(), diagnoseUnknownAnyExpr(), diagnoseXorMisusedAsPow(), DiagRecursiveConstraintEval(), diagReturnOnAllocFailure(), clang::CodeGen::ConstantEmitter::emitAbstract(), EmitAsmStores(), clang::CodeGen::CGOpenMPRuntime::emitDeclareSimdFunction(), emitDependData(), clang::CodeGen::CGOpenMPRuntime::emitDepobjElements(), clang::CodeGen::CGOpenMPRuntime::emitDepobjElementsSizes(), emitDistributeParallelForInnerBounds(), EmitDoacrossOrdered(), EmitGlobalVarDeclLValue(), EmitNontemporalLoad(), EmitObjectDelete(), EmitOverflowCheckedAbs(), emitRestoreIP(), clang::CodeGen::CGOpenMPRuntime::emitTaskInit(), EmitTypeidFromVTable(), EvaluateAsRValue(), EvaluateCPlusPlus11IntegralConstantExpr(), clang::interp::State::FFDiag(), findSubobject(), clang::OpaqueValueExpr::getExprLoc(), clang::ArraySubscriptExpr::getExprLoc(), clang::MatrixSubscriptExpr::getExprLoc(), clang::PseudoObjectExpr::getExprLoc(), clang::ArraySectionExpr::getExprLoc(), clang::CXXMemberCallExpr::getExprLoc(), clang::MSPropertySubscriptExpr::getExprLoc(), clang::ObjCIndirectCopyRestoreExpr::getExprLoc(), clang::interp::SourceInfo::getLoc(), clang::interp::Descriptor::getLocation(), clang::CXXRewrittenBinaryOperator::getOperatorLoc(), getPrivateItem(), GetTypeOfFunction(), handleCleanupAttr(), HandleConstructorCall(), clang::interp::handleFixedPointOverflow(), HandleLValueArrayAdjustment(), HandleLValueComplexElement(), HandleLValueVectorElement(), clang::SemaHLSL::handleNumThreadsAttr(), HandleOperatorDeleteCall(), HandleOperatorNewCall(), clang::SemaHLSL::handleWaveSizeAttr(), HasSideEffects(), clang::Sema::IgnoredValueConversions(), clang::Sema::ImpCastExprToType(), clang::interp::IncDecHelper(), clang::Sema::InitializeExplicitObjectArgument(), clang::interp::interp__builtin_is_constant_evaluated(), clang::interp::EvalEmitter::interpretExpr(), clang::Decl::isFlexibleArrayMemberLike(), isImplicitMapperNeeded(), isNonNegativeIntegerValue(), isNullPointerValueTemplateArgument(), isUnusedResultAWarning(), IsUserDefinedConversion(), clang::Sema::MakeFullDiscardedValueExpr(), clang::Sema::MakeFullExpr(), makeLaunchBoundsArgExpr(), clang::Sema::MaybeBindToTemporary(), clang::Sema::MaybeConvertParenListExprToParenExpr(), clang::interp::InterpState::maybeDiagnoseDanglingAllocations(), clang::interp::Neg(), NoteLValueLocation(), clang::Parser::ParseConstraintLogicalAndExpression(), clang::Sema::ParseLifetimeCaptureByAttr(), clang::InitializationSequence::Perform(), clang::Sema::PerformImplicitConversion(), PointerAuthStringDiscriminator(), clang::Sema::PrepareScalarCast(), processImplicitMapsWithDefaultMappers(), clang::Sema::RebuildExprInCurrentInstantiation(), recordConversion(), clang::Sema::RequireCompleteExprType(), clang::Sema::ResolveAddressOfOverloadedFunction(), clang::Sema::resolveAndFixAddressOfSingleOverloadCandidate(), clang::Sema::ResolveAndFixSingleFunctionTemplateSpecialization(), clang::Sema::ResolveSingleFunctionTemplateSpecialization(), rewriteToNumericBoxedExpression(), clang::Sema::TemporaryMaterializationConversion(), clang::transformOMPMappableExprListClause(), tryEvaluateBuiltinObjectSize(), TryOrBuildParenListInitialization(), clang::Sema::tryToRecoverWithCall(), TryUserDefinedConversion(), clang::SemaOpenMP::VerifyPositiveIntegerConstantInClause(), clang::ASTNodeImporter::VisitSubstNonTypeTemplateParmExpr(), warnInvalidLock(), and clang::Sema::WarnOnPendingNoDerefs().
FPOptions Expr::getFPFeaturesInEffect | ( | const LangOptions & | LO | ) | const |
Returns the set of floating point options that apply to this expression.
Only meaningful for operations on floating point values.
Definition at line 3886 of file Expr.cpp.
References clang::Call, and clang::FPOptions::defaultWithoutTrailingStorage().
Referenced by clang::CodeGen::CodeGenFunction::CGFPOptionsRAII::CGFPOptionsRAII(), checkFloatingPointResult(), EvaluateComparisonBinaryOperator(), and getActiveRoundingMode().
std::optional< llvm::APSInt > Expr::getIntegerConstantExpr | ( | const ASTContext & | Ctx, |
SourceLocation * | Loc = nullptr |
||
) | const |
isIntegerConstantExpr - Return the value if this expression is a valid integer constant expression.
If not a valid i-c-e, return std::nullopt and fill in Loc (if specified) with the location of the invalid expression.
Note: This does not perform the implicit conversions required by C++11 [expr.const]p5.
Definition at line 17464 of file ExprConstant.cpp.
References EvaluateAsInt(), EvaluateCPlusPlus11IntegralConstantExpr(), clang::ASTContext::getLangOpts(), and Loc.
Referenced by clang::Sema::ActOnEffectExpression(), clang::SemaOpenMP::ActOnOMPIteratorExpr(), clang::SemaOpenMP::ActOnOpenMPDistScheduleClause(), clang::SemaOpenMP::ActOnOpenMPLinearClause(), clang::SemaOpenMP::ActOnOpenMPScheduleClause(), clang::Sema::ActOnPragmaPack(), clang::Sema::AddAssumeAlignedAttr(), AnalyzeComparison(), clang::ast_matchers::AST_MATCHER(), BuildAddressSpaceIndex(), clang::Sema::BuildExtVectorType(), clang::Sema::BuildMatrixType(), clang::Sema::BuildVectorType(), clang::Sema::BuiltinConstantArg(), clang::Sema::BuiltinShuffleVector(), clang::SemaARM::CheckARMCoprocessorImmediate(), clang::SemaBPF::CheckBPFBuiltinFunctionCall(), clang::SemaHLSL::CheckBuiltinFunctionCall(), clang::SemaOpenACC::CheckCollapseLoopCount(), clang::Sema::checkConstantPointerAuthKey(), clang::Sema::checkFunctionOrMethodParameterIndex(), clang::Sema::CheckImplicitConversion(), clang::SemaPPC::CheckPPCBuiltinFunctionCall(), clang::SemaSystemZ::CheckSystemZBuiltinFunctionCall(), clang::SemaOpenACC::CheckTileSizeExpr(), clang::Sema::checkUInt32Argument(), clang::Sema::CreateBuiltinArraySubscriptExpr(), clang::Sema::CreateBuiltinMatrixSubscriptExpr(), DeduceTemplateArgumentsByTypeMatch(), EmitAArch64TblBuiltinExpr(), clang::Sema::FinalizeDeclaration(), fitsInto(), fixUPCAddressofArraySubscriptWithSpan(), getAlignmentAndOffsetFromBinAddOrSub(), getAndVerifyMatrixDimension(), getCommonSugarTypeNode(), DerefSimplePtrArithFixableGadget::getFixits(), GetIntegerConstantValue(), clang::CodeGen::CGOpenMPRuntime::getNumTeamsExprForTargetDirective(), clang::CodeGen::CGOpenMPRuntime::getNumThreadsExprForTargetDirective(), handleHLSLLoopHintAttr(), clang::SemaM68k::handleInterruptAttr(), clang::SemaMSP430::handleInterruptAttr(), handleOpenCLUnrollHint(), handleSentinelAttr(), isNonNegativeIntegerExpr(), isNonNegativeIntegerValue(), makeLaunchBoundsArgExpr(), and clang::ASTContext::mergeTypes().
const ObjCPropertyRefExpr * Expr::getObjCProperty | ( | ) | const |
If this expression is an l-value for an Objective C property, find the underlying property reference expression.
Definition at line 4087 of file Expr.cpp.
References E, getObjectKind(), IgnoreParenCasts(), isLValue(), and clang::OK_ObjCProperty.
|
inline |
getObjectKind - The object kind that this expression produces.
Object kinds are meaningful only for expressions that yield an l-value or x-value.
Definition at line 444 of file Expr.h.
References clang::Stmt::ExprBits.
Referenced by clang::Sema::ActOnChooseExpr(), clang::Sema::ActOnConditionalOp(), buildCapture(), buildCaptureDecl(), buildCoawaitCalls(), clang::Sema::BuildFieldReferenceExpr(), clang::Sema::BuildSynthesizedThreeWayComparison(), clang::Sema::CheckAddressOfOperand(), CheckAlignOfExpr(), CheckIncrementDecrementOperand(), ClassifyBinaryOp(), clang::PseudoObjectExpr::Create(), clang::Sema::CreateBuiltinBinOp(), clang::Sema::CreateBuiltinUnaryOp(), clang::Sema::CXXCheckConditionalOperands(), getObjCProperty(), isOrdinaryOrBitFieldObject(), clang::isValidPreserveFieldInfoArg(), clang::InitializationSequence::Perform(), clang::Sema::PerformImplicitConversion(), clang::TreeTransform< Derived >::RebuildCXXOperatorCallExpr(), refersToBitField(), refersToMatrixElement(), clang::SemaObjC::stripARCUnbridgedCast(), TryReinterpretCast(), clang::ConversionFixItGenerator::tryToFixConversion(), clang::TextNodeDumper::Visit(), clang::ASTNodeImporter::VisitArraySubscriptExpr(), clang::ASTNodeImporter::VisitBinaryConditionalOperator(), clang::ASTNodeImporter::VisitBinaryOperator(), clang::ASTNodeImporter::VisitChooseExpr(), clang::ASTNodeImporter::VisitCompoundAssignOperator(), clang::ASTNodeImporter::VisitConditionalOperator(), clang::ASTNodeImporter::VisitConvertVectorExpr(), clang::ASTNodeImporter::VisitMemberExpr(), and clang::ASTNodeImporter::VisitOpaqueValueExpr().
Decl * Expr::getReferencedDeclOfCallee | ( | ) |
Definition at line 1543 of file Expr.cpp.
References IgnoreParenImpCasts().
Referenced by CheckSimplerImplicitMovesMSVCWorkaround(), clang::CallExpr::getCalleeDecl(), getOverflowPatternBinOp(), and getReferencedDeclOfCallee().
|
inline |
Definition at line 492 of file Expr.h.
References getReferencedDeclOfCallee().
FieldDecl * Expr::getSourceBitField | ( | ) |
If this expression refers to a bit-field, retrieve the declaration of that bit-field.
Note that this returns a non-null pointer in subtly different places than refersToBitField returns true. In particular, this can return a non-null pointer even for r-values loaded from bit-fields, but it will return null for a conditional bit-field.
Definition at line 4124 of file Expr.cpp.
References E, getSourceBitField(), IgnoreParens(), and clang::FieldDecl::isBitField().
Referenced by clang::Sema::ActOnMSAsmStmt(), AnalyzeAssignment(), getSourceBitField(), clang::Sema::IsIntegralPromotion(), isKnownToHaveBooleanValue(), clang::ASTContext::isPromotableBitField(), and TryGetExprRange().
|
inline |
Definition at line 487 of file Expr.h.
References getSourceBitField().
|
inline |
Definition at line 142 of file Expr.h.
Referenced by clang::SemaOpenACC::ActOnArraySectionExpr(), clang::Sema::ActOnArraySubscriptExpr(), clang::Sema::ActOnCapScopeReturnStmt(), clang::Sema::ActOnCaseExpr(), clang::Sema::ActOnCastExpr(), clang::Sema::ActOnChooseExpr(), clang::Sema::ActOnConditionalOp(), clang::Sema::ActOnCXXDelete(), clang::Sema::ActOnCXXNamedCast(), clang::Sema::ActOnDecltypeExpression(), clang::Sema::ActOnFinishFullExpr(), clang::Sema::ActOnFinishSwitchStmt(), clang::Sema::ActOnGCCAsmStmt(), clang::Sema::ActOnIndirectGotoStmt(), clang::SemaObjC::ActOnInstanceMessage(), clang::SemaOpenACC::ActOnIntExpr(), clang::Sema::ActOnMSAsmStmt(), clang::Sema::ActOnNumericConstant(), clang::SemaObjC::ActOnObjCAtSynchronizedOperand(), clang::SemaOpenMP::ActOnOMPArraySectionExpr(), clang::SemaOpenMP::ActOnOMPIteratorExpr(), actOnOMPReductionKindClause(), clang::SemaOpenMP::ActOnOpenMPAtomicDirective(), clang::SemaOpenMP::ActOnOpenMPDeclareSimdDirective(), clang::SemaOpenMP::ActOnOpenMPDependClause(), clang::SemaOpenMP::ActOnOpenMPDepobjClause(), clang::SemaOpenMP::ActOnOpenMPInterchangeDirective(), clang::SemaOpenMP::ActOnOpenMPLinearClause(), clang::SemaOpenMP::ActOnOpenMPMapClause(), clang::SemaOpenMP::ActOnOpenMPTileDirective(), clang::SemaOpenMP::ActOnOpenMPUsesAllocatorClause(), clang::SemaHLSL::ActOnOutParamExpr(), clang::Sema::ActOnParenExpr(), clang::Sema::ActOnSEHExceptBlock(), clang::Sema::ActOnStartOfSwitchStmt(), clang::Sema::ActOnStmtExprResult(), clang::Sema::AddConversionCandidate(), clang::Sema::AddFunctionCandidates(), clang::interp::AddSubMulHelper(), clang::Sema::AddTemplateConversionCandidate(), clang::InitializationSequence::AddUnwrapInitListInitStep(), AdjustAddressSpaceForBuiltinOperandType(), adjustBlockReturnsToEnum(), clang::interp::Compiler< Emitter >::allocateLocal(), clang::interp::Compiler< Emitter >::allocateTemporary(), AnalyzeAssignment(), AnalyzeBitFieldAssignment(), AnalyzeComparison(), AnalyzeCompoundAssignment(), AnalyzeImplicitConversions(), clang::AnyCall::AnyCall(), clang::ast_matchers::libc_func_matchers::AST_MATCHER(), clang::ast_matchers::AST_MATCHER(), clang::ASTContext::AtomicUsesUnsupportedLibcall(), clang::ento::ExprEngine::bindReturnValue(), clang::tooling::buildAccess(), clang::Sema::BuildAnonymousStructUnionMemberReference(), clang::Sema::BuildArrayType(), clang::Sema::BuildAsTypeExpr(), clang::Sema::BuildAtomicExpr(), clang::Sema::BuildBinOp(), clang::Sema::BuildBlockForLambdaConversion(), clang::Sema::BuildBuiltinOffsetOf(), clang::Sema::BuildCallToMemberFunction(), buildCapture(), buildCoawaitCalls(), clang::Sema::BuildCompoundLiteralExpr(), BuildConvertedConstantExpression(), clang::Sema::BuildCoreturnStmt(), buildCounterInit(), buildCounterUpdate(), clang::Sema::BuildCoyieldExpr(), BuildCXXCastArgument(), clang::Sema::BuildCXXForRangeStmt(), clang::Sema::BuildCXXNew(), clang::Sema::BuildCXXThrow(), clang::Sema::BuildCXXTypeConstructExpr(), clang::Sema::BuildCXXTypeId(), clang::Sema::BuildCXXUuidof(), clang::Sema::BuildExpressionFromDeclTemplateArgument(), clang::Sema::BuildExprRequirement(), clang::Sema::BuildFieldReferenceExpr(), buildGlobalBlock(), clang::SemaObjC::BuildInstanceMessage(), clang::SemaObjC::BuildIvarRefExpr(), clang::Sema::BuildMemberReferenceExpr(), buildMemcpyForAssignmentOp(), BuildNonArrayForRange(), clang::SemaObjC::BuildObjCAtThrowStmt(), clang::SemaObjC::BuildObjCBoxedExpr(), clang::SemaObjC::BuildObjCBridgedCast(), clang::SemaObjC::BuildObjCNumericLiteral(), clang::Sema::BuildResolvedCallExpr(), clang::Sema::BuildResolvedCoawaitExpr(), clang::Sema::BuildReturnStmt(), clang::Sema::BuildSynthesizedThreeWayComparison(), clang::Sema::BuildTemplateIdExpr(), clang::Sema::BuildTypeofExprType(), clang::Sema::BuildUnaryOp(), clang::Sema::BuildUnresolvedCoawaitExpr(), clang::Sema::BuildVAArgExpr(), BuiltinAlignment(), builtinAllocaAddrSpace(), BuiltinAnnotation(), clang::SemaARM::BuiltinARMMemoryTaggingCall(), BuiltinCallWithStaticChain(), BuiltinCountZeroBitsGeneric(), BuiltinDumpStruct(), clang::Sema::BuiltinElementwiseTernaryMath(), BuiltinIsWithinLifetime(), BuiltinLaunder(), BuiltinOverflow(), BuiltinPopcountg(), clang::SemaPPC::BuiltinPPCMMACall(), BuiltinPreserveAI(), clang::Sema::BuiltinShuffleVector(), clang::Sema::BuiltinVectorMath(), clang::SemaPPC::BuiltinVSX(), clang::SemaWasm::BuiltinWasmTableFill(), clang::SemaWasm::BuiltinWasmTableGrow(), clang::SemaWasm::BuiltinWasmTableSet(), calculateConstraintSatisfaction(), clang::Sema::CallExprUnaryConversions(), clang::interp::CallPtr(), canInitializeArrayWithEmbedDataString(), CanThrow(), castArgToParamTypeIfNeeded(), clang::interp::CastFloatingIntegral(), castForMoving(), CastForMoving(), clang::CastExpr::changesVolatileQualification(), clang::Sema::CheckAdditionOperands(), clang::Sema::CheckAddressOfOperand(), CheckAggExprForMemSetUse(), clang::SemaPPC::checkAIXMemberAlignment(), CheckAnyScalarOrVector(), CheckArgTypeIsCorrect(), CheckArgTypeMatches(), checkArithmeticBinOpPointerOperands(), checkArithmeticNull(), checkArithmeticOnObjCPointer(), checkArithmeticOrEnumeralThreeWayCompare(), clang::SemaARM::CheckARMBuiltinExclusiveCall(), checkArraySize(), clang::SemaPseudoObject::checkAssignment(), clang::Sema::CheckAssignmentConstraints(), clang::sema::checkAssignmentLifetime(), clang::Sema::CheckAssignmentOperands(), checkAttrArgsAreCapabilityObjs(), clang::interp::CheckBitCast(), clang::Sema::CheckBitwiseOperands(), clang::checkBlockArgs(), clang::Sema::CheckBooleanCondition(), CheckBoolLikeConversion(), CheckBoolSelect(), clang::SemaOpenCL::checkBuiltinEnqueueKernel(), clang::SemaRISCV::CheckBuiltinFunctionCall(), clang::SemaHLSL::CheckBuiltinFunctionCall(), clang::SemaOpenCL::checkBuiltinNDRangeAndBlock(), clang::SemaOpenCL::checkBuiltinRWPipe(), clang::Sema::checkCall(), clang::Sema::CheckCaseExpression(), clang::Sema::CheckCastAlign(), checkCastFunctionType(), clang::SemaOpenACC::CheckCollapseLoopCount(), CheckCommaOperands(), clang::Sema::CheckCompareOperands(), checkCondition(), checkConditionalBlockPointerCompatibility(), checkConditionalObjectPointersCompatibility(), CheckConditionalOperand(), clang::Sema::CheckConditionalOperands(), CheckConditionalOperator(), checkConditionalPointerCompatibility(), clang::Sema::CheckConstraintExpression(), CheckCXX98CompatAccessibleCopy(), checkDeducedTemplateArguments(), clang::interp::CheckDivRem(), clang::interp::CheckDowncast(), CheckedIntArithmetic(), checkElementNonNil(), clang::Sema::CheckEnumConstant(), checkEnumTypesInSwitchStmt(), clang::Sema::CheckExceptionSpecCompatibility(), clang::Sema::checkExceptionSpecification(), clang::sema::checkExprLifetimeImpl(), clang::Sema::CheckExtVectorCast(), clang::Sema::CheckFloatComparison(), checkFormatStringExpr(), CheckForModifiableLvalue(), clang::Sema::CheckFunctionCall(), CheckICE(), CheckImplicitArgumentConversions(), clang::Sema::CheckImplicitConversion(), CheckIncrementDecrementOperand(), CheckIndirectionOperand(), checkIntToPointerCast(), CheckLiteralType(), clang::interp::CheckLiteralType(), clang::Sema::CheckLogicalOperands(), clang::Sema::CheckLoopHintExpr(), clang::Sema::CheckLValueToRValueConversionOperand(), clang::Sema::CheckMatrixElementwiseOperands(), clang::Sema::CheckMatrixMultiplyOperands(), clang::Sema::CheckMemberOperatorAccess(), clang::Sema::CheckMemberPointerConversion(), clang::SemaAMDGPU::checkMovDPPFunctionCall(), CheckMoveOnConstruction(), clang::Sema::CheckMultiplyDivideOperands(), clang::SemaARM::CheckNeonBuiltinFunctionCall(), CheckNonNullArguments(), CheckNonNullExpr(), CheckObjCCollectionLiteralElement(), clang::SemaObjC::CheckObjCForCollectionOperand(), checkObjCPointerIntrospection(), checkOpenCLConditionVector(), clang::checkOpenCLEnqueueIntType(), clang::checkOpenCLEnqueueVariadicArgs(), clang::SemaOpenMP::checkOpenMPDeclareVariantFunction(), checkOpenMPLoop(), clang::checkPipeArg(), clang::checkPipePacketType(), clang::Sema::CheckPlaceholderExpr(), checkPlaceholderForOverload(), checkPointerAuthValue(), clang::Sema::CheckPointerConversion(), checkPointerIntegerMismatch(), clang::Sema::CheckPointerToMemberOperands(), clang::ento::retaincountchecker::RetainCountChecker::checkPostStmt(), clang::SemaPPC::CheckPPCBuiltinFunctionCall(), clang::Sema::CheckPtrComparisonWithNullChar(), clang::SemaOpenACC::CheckReductionVar(), clang::Sema::CheckRemainderOperands(), CheckResourceHandle(), CheckScalarOrVector(), clang::interp::CheckShift(), clang::Sema::CheckShiftOperands(), clang::Sema::CheckSingleAssignmentConstraints(), clang::Sema::CheckSizelessVectorCompareOperands(), clang::Sema::CheckSizelessVectorConditionalTypes(), clang::Sema::CheckSizelessVectorOperands(), checkSizelessVectorShift(), clang::Sema::CheckStaticArrayArgument(), CheckStringInit(), clang::SemaObjC::CheckSubscriptingKind(), clang::Sema::CheckSubtractionOperands(), clang::Sema::CheckSwitchCondition(), CheckTautologicalComparison(), clang::Sema::CheckTemplateArgument(), CheckTemplateArgumentAddressOfObjectOrFunction(), CheckTemplateArgumentIsCompatibleWithParameter(), CheckTemplateArgumentPointerToMember(), clang::SemaOpenACC::CheckTileSizeExpr(), clang::Sema::CheckTransparentUnionArgumentConstraints(), checkTupleLikeDecomposition(), clang::Sema::CheckUnaryExprOrTypeTraitOperand(), clang::Sema::checkUnknownAnyArg(), clang::Sema::checkUnsafeExprAssigns(), clang::Sema::CheckUnusedVolatileAssignment(), clang::Sema::checkVariadicArgument(), clang::SemaOpenACC::CheckVarIsPointerType(), clang::Sema::CheckVectorCompareOperands(), clang::Sema::CheckVectorConditionalTypes(), CheckVectorElementCallArgs(), clang::Sema::CheckVectorLogicalOperands(), clang::Sema::CheckVectorOperands(), CheckVectorSelect(), checkVectorShift(), clang::CheckWasmBuiltinArgIsInteger(), clang::CheckWasmBuiltinArgIsTable(), ClassifyBinaryOp(), ClassifyExprValueKind(), ClassifyInternal(), ClassifyMemberExpr(), clang::SemaCodeCompletion::CodeCompleteObjCInstanceMessage(), CollectVRQualifiers(), clang::computeDependence(), clang::SYCLUniqueStableNameExpr::ComputeName(), clang::ento::ExprEngine::computeObjectUnderConstruction(), clang::ento::SValBuilder::conjureSymbolVal(), clang::Sema::ConstantFoldAttrArgs(), convertHalfVecBinOp(), convertPointersToCompositeType(), convertVector(), clang::Sema::ConvertVectorExpr(), CopyObject(), clang::CXXBindTemporaryExpr::Create(), createBinOpInfoFromIncDec(), clang::Sema::CreateBuiltinArraySubscriptExpr(), clang::Sema::CreateBuiltinBinOp(), clang::Sema::CreateBuiltinMatrixSubscriptExpr(), clang::Sema::CreateBuiltinUnaryOp(), clang::ConstructionContext::createFromLayers(), CreateFunctionRefExpr(), clang::Sema::CreateGenericSelectionExpr(), clang::interp::Program::createGlobal(), clang::CodeGen::CodeGenModule::createOpenCLIntToSamplerConversion(), clang::Sema::CreateOverloadedBinOp(), clang::Sema::CreateOverloadedUnaryOp(), clang::threadSafety::SExprBuilder::createThisPlaceholder(), clang::Sema::CreateUnaryExprOrTypeTraitExpr(), clang::Sema::CXXCheckConditionalOperands(), clang::Sema::deduceClosureReturnType(), DeduceFromInitializerList(), clang::Sema::DeduceFunctionTypeFromReturnExpr(), clang::Sema::DeduceTemplateSpecializationFromInitializer(), clang::Sema::deduceVarTypeFromInitializer(), clang::Sema::DefaultArgumentPromotion(), clang::Sema::DefaultFunctionArrayConversion(), clang::Sema::DefaultLvalueConversion(), clang::Sema::DefaultVariadicArgumentPromotion(), clang::Sema::DefineImplicitLambdaToBlockPointerConversion(), clang::DesignatedInitUpdateExpr::DesignatedInitUpdateExpr(), clang::TypeOfExprType::desugar(), clang::InitializationSequence::Diagnose(), diagnoseArithmeticOnTwoFunctionPointers(), diagnoseBadCast(), DiagnoseBadFunctionCast(), DiagnoseBadShiftValues(), DiagnoseBinOpPrecedence(), DiagnoseCallingConvCast(), DiagnoseCastOfObjCSEL(), DiagnoseCastQual(), clang::Sema::DiagnoseConditionalForNull(), diagnoseDistinctPointerComparison(), DiagnoseDivisionSizeofPointerOrArray(), DiagnoseFloatingImpCast(), DiagnoseForRangeReferenceVariableCopies(), diagnoseFunctionPointerToVoidComparison(), DiagnoseImpCast(), DiagnoseIntInBoolContext(), clang::Sema::DiagnoseMultipleUserDefinedConversion(), diagnoseMutableFields(), DiagnoseNullConversion(), diagnosePointerIncompatibility(), DiagnoseRecursiveConstFields(), DiagnoseReinterpretUpDownCast(), DiagnoseSelfAssignment(), clang::Sema::DiagnoseSelfMove(), clang::Sema::DiagnoseStaticAssertDetails(), diagnoseStringPlusChar(), diagnoseStringPlusInt(), diagnoseTautologicalComparison(), clang::Sema::diagnoseZeroToNullptrConversion(), doRewriteToUTF8StringBoxedExpressionHelper(), clang::interp::EvaluationResult::dump(), clang::EmbedExpr::EmbedExpr(), emitAlignedClause(), emitAtomicCmpXchg(), EmitAtomicCmpXchgForMSIntrin(), EmitAtomicDecrementValue(), EmitAtomicIncrementValue(), clang::CodeGen::CGObjCRuntime::EmitAtSynchronizedStmt(), emitBadConversionNotes(), EmitBinaryAtomicPost(), EmitCheckedMixedSignMultiply(), EmitCheckedUnsignedMultiplySignedResult(), EmitCommonNeonSISDBuiltinExpr(), EmitCompare(), EmitCXXNewAllocSize(), clang::CodeGen::CGOpenMPRuntime::emitDeclareSimdFunction(), emitDispatchForLoopBounds(), emitDistributeParallelForDispatchBounds(), emitDistributeParallelForInnerBounds(), EmitDoacrossOrdered(), clang::CodeGen::CodeGenModule::EmitExplicitCastExprType(), emitFrexpBuiltin(), EmitFunctionDeclLValue(), EmitGlobalVarDeclLValue(), EmitISOVolatileLoad(), EmitISOVolatileStore(), emitLibraryCall(), emitMaybeConstrainedFPToIntRoundBuiltin(), clang::CodeGen::CGCXXABI::EmitMemberPointerConversion(), EmitNontemporalLoad(), EmitNontemporalStore(), emitOMPAtomicCaptureExpr(), emitOMPAtomicCompareExpr(), EmitOverflowCheckedAbs(), emitPointerArithmetic(), EmitPointerWithAlignment(), emitPreCond(), clang::CodeGen::CGOpenMPRuntime::emitReduction(), clang::SemaObjC::EmitRelatedResultTypeNote(), emitRestoreIP(), emitScanBasedDirectiveFinals(), clang::CodeGen::CGOpenMPRuntime::emitSingleReductionCombiner(), clang::CodeGen::CGOpenMPRuntime::emitTaskInit(), emitTaskPrivateMappingFunction(), EmitTypeidFromVTable(), clang::CodeGen::CGOpenMPRuntime::emitUsesAllocatorsInit(), EmitValToTemp(), emitWritebackArg(), EmitX86BitTestIntrinsic(), clang::ento::ExprEngine::evalEagerlyAssumeBifurcation(), clang::ento::ExprEngine::evalLoad(), Evaluate(), EvaluateArray(), EvaluateArrayNewConstructExpr(), EvaluateArrayNewInitList(), EvaluateAsFixedPoint(), EvaluateAsInt(), EvaluateAsRValue(), EvaluateAtomic(), EvaluateBuiltinClassifyType(), EvaluateBuiltinConstantP(), EvaluateBuiltinStrLen(), EvaluateCallArg(), EvaluateCharRangeAsString(), EvaluateComparisonBinaryOperator(), EvaluateComplex(), EvaluateCPlusPlus11IntegralConstantExpr(), EvaluateFixedPoint(), EvaluateFixedPointOrInteger(), EvaluateFloat(), clang::SourceLocExpr::EvaluateInContext(), EvaluateInPlace(), EvaluateIntegerOrLValue(), EvaluateLValue(), evaluateLValueAsAllocSize(), EvaluateMemberPointer(), EvaluatePointer(), EvaluateRecord(), EvaluateTemporary(), EvaluateVector(), EvaluateVoid(), ExprLooksBoolean(), FastEvaluateAsRValue(), clang::Sema::FillInlineAsmIdentifierInfo(), clang::Sema::FindAssociatedClassesAndNamespaces(), clang::SemaObjC::FindCompositeObjCPointerType(), clang::Sema::FindCompositePointerType(), FindConditionalOverload(), findEnumForBlockReturn(), findWeakLValue(), finishContextualImplicitConversion(), clang::Sema::FixOverloadedFunctionReference(), clang::Sema::FormatStringHasSArg(), clang::Sema::GatherArgumentsForCall(), clang::CodeGen::CodeGenModule::GetAddrOfGlobalTemporary(), GetAlignedMapping(), getAlignmentAndOffsetFromBinAddOrSub(), GetAlignOfExpr(), clang::CXXNewExpr::getAllocatedType(), clang::ArrayInitLoopExpr::getArraySize(), getBaseAlignmentAndOffsetFromLValue(), getBaseAlignmentAndOffsetFromPtr(), getBestDynamicClassType(), getBuiltinAlignArguments(), clang::ObjCMessageExpr::getCallReturnType(), getCommonTemplateArgument(), clang::Sema::getCompletedType(), clang::ento::SValBuilder::getConjuredHeapSymbolVal(), clang::CodeGen::CodeGenModule::GetConstantArrayFromStringLiteral(), getConstantExprReferredType(), clang::ento::SValBuilder::getConstantVal(), getCXXRecord(), getDependentArraySubscriptType(), clang::CXXDeleteExpr::getDestroyedType(), getEnumCoercedType(), GetExplicitObjectExpr(), GetExprType(), clang::VarDecl::getFlexibleArrayInitChars(), clang::BlockExpr::getFunctionType(), clang::dataflow::getImplicitObjectLocation(), clang::LambdaExpr::getLambdaClass(), clang::CodeGen::CGCXXABI::getMemberPointerAdjustment(), clang::CodeGen::CodeGenModule::getMemberPointerConstant(), clang::TemplateArgument::getNonTypeTemplateArgumentType(), clang::ExtVectorElementExpr::getNumElements(), GetNumNonZeroBytesInInit(), clang::ASTContext::getObjCEncodingForBlock(), clang::CXXMemberCallExpr::getObjectType(), getObjectType(), clang::dataflow::CachedConstAccessorsLattice< Base >::getOrCreateConstMethodReturnStorageLocation(), clang::dataflow::CachedConstAccessorsLattice< Base >::getOrCreateConstMethodReturnValue(), clang::interp::Program::getOrCreateDummy(), clang::SubstNonTypeTemplateParmExpr::getParameterType(), clang::CodeGen::CGOpenCLRuntime::getPipeElemAlign(), clang::CodeGen::CGOpenCLRuntime::getPipeElemSize(), getPointerAndSize(), getPreferredTypeOfBinaryRHS(), getPresumedAlignmentOfPointer(), clang::ObjCMessageExpr::getReceiverType(), clang::ObjCPropertyRefExpr::getReceiverType(), clang::CXXMemberCallExpr::getRecordDecl(), clang::CodeGen::CodeGenFunction::ConstantEmission::getReferenceLValue(), clang::ASTContext::getReferenceQualifiedType(), clang::dataflow::Environment::getResultObjectLocation(), GetReturnType(), clang::ento::CallEventManager::getSimpleCall(), clang::dataflow::DataflowAnalysisContext::getStableStorageLocation(), clang::CastExpr::getTargetUnionField(), clang::interp::Descriptor::getType(), GetTypeBeforeIntegralPromotion(), clang::UnaryExprOrTypeTraitExpr::getTypeOfArgument(), clang::ASTContext::getTypeOfExprType(), clang::CXXUuidofExpr::getTypeOperand(), clang::CXXTypeidExpr::getTypeOperand(), clang::AtomicExpr::getValueType(), clang::ento::StringRegion::getValueType(), clang::ento::ObjCStringRegion::getValueType(), clang::ento::CompoundLiteralRegion::getValueType(), clang::ento::CXXTempObjectRegion::getValueType(), clang::ento::CXXLifetimeExtendedObjectRegion::getValueType(), handleAsDoubleBuiltin(), HandleBaseToDerivedCast(), HandleDynamicCast(), clang::Sema::HandleExprEvaluationContextForTypeof(), clang::interp::handleFixedPointOverflow(), handleHlslClip(), handleHlslSplitdouble(), handleIntIntBinOp(), clang::ento::ExprEngine::handleLValueBitCast(), HandleMemberPointerAccess(), HandleOperatorNewCall(), clang::interp::handleOverflow(), clang::SemaHLSL::handleVectorBinOpConversion(), handleVectorVectorBinOp(), hasBPFPreserveStaticOffset(), clang::Sema::hasCStrMethod(), HasEnumType(), clang::VarDecl::hasFlexibleArrayInit(), hasIsEqualMethod(), hasPlaceholderType(), HasSideEffects(), IgnoreCommaOperand(), clang::Sema::IgnoredValueConversions(), IgnoreParenNoopCasts(), ignorePointerCastsAndParens(), clang::Sema::ImpCastExprToType(), clang::ASTNodeImporter::ImportAPValue(), clang::interp::IncDecHelper(), clang::BadConversionSequence::init(), clang::interp::InitGlobalTempComp(), clang::interp::interp__builtin_atomic_lock_free(), clang::interp::interp__builtin_classify_type(), clang::interp::interp__builtin_constant_p(), clang::interp::InterpretOffsetOf(), clang::Sema::InvalidLogicalVectorOperands(), clang::Sema::InvalidOperands(), clang::CXXDynamicCastExpr::isAlwaysNull(), isArithmeticArgumentPromotion(), clang::ObjCSubscriptRefExpr::isArraySubscriptRefExpr(), clang::ExtVectorElementExpr::isArrow(), clang::isBlockPointer(), isCapabilityExpr(), isConstantInitializer(), clang::Declarator::isDeclarationOfFunction(), isFlexibleArrayMemberLike(), IsImplicitBoolFloatConversion(), isIntOrBool(), isInvalidICRSource(), isKnownToHaveBooleanValue(), isKnownToHaveUnsignedValue(), IsModifiable(), isNonNegativeIntegerExpr(), clang::BinaryOperator::isNullPointerArithmeticExtension(), isNullPointerConstant(), isNullPointerConstantForConversion(), isNullPointerValueTemplateArgument(), clang::CXXTypeidExpr::isPotentiallyEvaluated(), clang::ASTContext::isPromotableBitField(), isReadIfDiscardedInCPlusPlus11(), isReferenceToNonConstCapture(), clang::ASTContext::isSentinelNullExpr(), isSimpleArrayDecayOperand(), isSimpleZero(), IsStandardConversion(), isStdBasicOstream(), isStdSmartPtr(), clang::ento::smartptr::isStdSmartPtr(), clang::InitListExpr::isStringLiteralInit(), isSwiftAsyncCallee(), isTautologicalBoundsCheck(), isTemporaryObject(), clang::InitListExpr::isTransparent(), IsTransparentUnionStandardConversion(), isUnusedResultAWarning(), clang::MaterializeTemporaryExpr::isUsableInConstantExpressions(), IsUserDefinedConversion(), isValidInteropVariable(), clang::isValidPreserveEnumValueArg(), clang::isValidPreserveFieldInfoArg(), clang::isValidPreserveTypeInfoArg(), clang::AtomicExpr::isVolatile(), clang::Sema::LookupInlineAsmVarDeclField(), LookupMemberExpr(), LookupMethodInReceiverType(), MakeAtomicCmpXchgValue(), MakeBinaryAtomicValue(), clang::ento::SValBuilder::makeBoolVal(), clang::ento::SValBuilder::makeIntVal(), maybeAdjustInterfaceForSubscriptingCheck(), clang::Sema::MaybeBindToTemporary(), maybeDiagnoseAssignmentToFunction(), clang::Sema::maybeExtendBlockObject(), MaybeHandleUnionActiveMemberChange(), maybeTailCall(), needsConversionOfHalfVec(), clang::interp::Neg(), clang::Sema::NoteAllOverloadCandidates(), ObjCEnumerationCollection(), objectifyExpr(), clang::OpenACCIfClause::OpenACCIfClause(), clang::OpenACCVectorClause::OpenACCVectorClause(), clang::OpenACCWorkerClause::OpenACCWorkerClause(), OpenCLArithmeticConversions(), OpenCLCheckVectorConditional(), clang::EmbedExpr::ChildElementIter< Const >::operator*(), clang::ento::ConditionBRVisitor::patternMatch(), peelOffPointerArithmetic(), clang::InitializationSequence::Perform(), clang::Sema::PerformContextualImplicitConversion(), clang::Sema::PerformContextuallyConvertToBool(), clang::Sema::PerformImplicitConversion(), clang::Sema::PerformImplicitObjectArgumentInitialization(), clang::Sema::PerformObjectMemberConversion(), clang::Sema::PerformQualificationConversion(), precomputeExpr(), clang::Sema::PrepareBuiltinElementwiseMathOneArgCall(), clang::SemaObjC::PrepareCastToObjCObjectPointer(), clang::Sema::PrepareScalarCast(), clang::Sema::prepareVectorSplat(), print_elem(), printIndicesOfElementsToConstructJson(), printPendingInitLoopJson(), clang::ento::ConditionBRVisitor::printValue(), processArgument(), processImplicitMapsWithDefaultMappers(), clang::ento::retaincountchecker::RetainCountChecker::processObjCLiterals(), clang::ento::ExprEngine::processSwitch(), clang::SemaCodeCompletion::ProduceCallSignatureHelp(), clang::dataflow::propagateValue(), pushTemporaryCleanup(), clang::TreeTransform< Derived >::RebuildCXXForRangeStmt(), clang::TreeTransform< Derived >::RebuildCXXOperatorCallExpr(), clang::TreeTransform< Derived >::RebuildObjCIsaExpr(), clang::TreeTransform< Derived >::RebuildObjCIvarRefExpr(), clang::TreeTransform< Derived >::RebuildObjCMessageExpr(), clang::TreeTransform< Derived >::RebuildObjCPropertyRefExpr(), rebuildPotentialResultsAsNonOdrUsed(), clang::SemaPseudoObject::recreateSyntacticForm(), clang::Sema::RefersToMemberWithReducedAlignment(), refersToVectorElement(), clang::interp::InterpState::reportOverflow(), clang::Sema::ResolveAddressOfOverloadedFunction(), clang::Sema::resolveAndFixAddressOfSingleOverloadCandidate(), clang::Sema::ResolveAndFixSingleFunctionTemplateSpecialization(), clang::InitializationSequence::RewrapReferenceInitList(), rewriteBuiltinFunctionDecl(), rewriteToNumberLiteral(), rewriteToNumericBoxedExpression(), clang::SemaOpenACC::OpenACCParsedClause::setConditionDetails(), clang::DeclRefExpr::setDecl(), SetElementTypeAsReturnType(), clang::MemberExpr::setMemberDecl(), setObjCGCLValueClass(), clang::dataflow::Environment::setValue(), clang::interp::ShiftFixedPoint(), shouldAddReversedEqEq(), shouldEmitSeparateBlockRetain(), shouldExtendReceiverForInnerPointerMessage(), clang::sema::shouldRunGSLAssignmentAnalysis(), clang::sema::shouldTrackFirstArgumentForConstructor(), ShouldTryAgainWithRedefinitionType(), skipRValueSubobjectAdjustments(), clang::SemaObjC::stripARCUnbridgedCast(), clang::Sema::TemporaryMaterializationConversion(), throwEscapes(), EnsureImmediateInvocationInDefaultArgs::TransformSourceLocExpr(), clang::threadSafety::SExprBuilder::translateAttrExpr(), TryAddressSpaceCast(), TryClassUnification(), TryConstCast(), TryContextuallyConvertToBool(), tryDiagnoseOverloadedCast(), tryEmitARCCopyWeakInit(), tryEmitARCRetainLoadOfScalar(), clang::CodeGen::ConstantEmitter::tryEmitConstantExpr(), clang::CodeGen::ConstantEmitter::tryEmitPrivate(), tryEmitSpecializedAllocInit(), clang::Sema::tryExprAsCall(), tryExtractInitializerFromList(), TryGetExprRange(), TryImplicitConversion(), TryListConversion(), TryListInitialization(), TryLValueToRValueCast(), TryReferenceListInitialization(), TryReinterpretCast(), TryStaticCast(), TryStaticMemberPointerUpcast(), TryStaticReferenceDowncast(), tryToConvertMemberExprToDeclRefExpr(), TryUserDefinedConversion(), clang::Sema::UsualArithmeticConversions(), clang::Sema::UsualUnaryConversions(), clang::Sema::VerifyIntegerConstantExpression(), clang::interp::Compiler< Emitter >::visit(), clang::JSONNodeDumper::Visit(), clang::TextNodeDumper::Visit(), clang::ASTNodeImporter::VisitAddrLabelExpr(), clang::interp::Compiler< Emitter >::VisitAddrLabelExpr(), clang::interp::Compiler< Emitter >::visitAPValueInitializer(), clang::ASTNodeImporter::VisitArrayInitIndexExpr(), clang::ASTNodeImporter::VisitArrayInitLoopExpr(), clang::ASTNodeImporter::VisitArraySubscriptExpr(), clang::ento::ExprEngine::VisitArraySubscriptExpr(), clang::ASTNodeImporter::VisitArrayTypeTraitExpr(), clang::ASTNodeImporter::VisitAtomicExpr(), clang::ASTNodeImporter::VisitBinaryConditionalOperator(), clang::ASTNodeImporter::VisitBinaryOperator(), clang::ento::ExprEngine::VisitBinaryOperator(), clang::interp::Compiler< Emitter >::VisitBinaryOperator(), clang::ento::ExprEngine::VisitBlockExpr(), clang::interp::Compiler< Emitter >::visitBool(), clang::interp::Compiler< Emitter >::VisitBuiltinCallExpr(), clang::ASTNodeImporter::VisitCallExpr(), clang::ento::ExprEngine::VisitCast(), clang::interp::Compiler< Emitter >::VisitCastExpr(), clang::ASTNodeImporter::VisitCharacterLiteral(), clang::ASTNodeImporter::VisitChooseExpr(), clang::interp::Compiler< Emitter >::VisitComplexBinOp(), clang::interp::Compiler< Emitter >::VisitComplexUnaryOperator(), clang::ASTNodeImporter::VisitCompoundAssignOperator(), clang::interp::Compiler< Emitter >::VisitCompoundAssignOperator(), clang::ASTNodeImporter::VisitCompoundLiteralExpr(), clang::interp::Compiler< Emitter >::VisitCompoundLiteralExpr(), clang::interp::Compiler< Emitter >::VisitConceptSpecializationExpr(), clang::ASTNodeImporter::VisitConditionalOperator(), clang::JSONNodeDumper::VisitConstantExpr(), clang::interp::Compiler< Emitter >::VisitConstantExpr(), clang::interp::Compiler< Emitter >::VisitConvertVectorExpr(), clang::ASTNodeImporter::VisitConvertVectorExpr(), clang::ASTNodeImporter::VisitCXXBoolLiteralExpr(), clang::interp::Compiler< Emitter >::VisitCXXConstructExpr(), clang::ASTNodeImporter::VisitCXXConstructExpr(), clang::ASTNodeImporter::VisitCXXDeleteExpr(), clang::ASTNodeImporter::VisitCXXDependentScopeMemberExpr(), clang::ASTNodeImporter::VisitCXXFoldExpr(), clang::ASTNodeImporter::VisitCXXInheritedCtorInitExpr(), clang::ASTNodeImporter::VisitCXXMemberCallExpr(), clang::TemplateDeclInstantiator::VisitCXXMethodDecl(), clang::ASTNodeImporter::VisitCXXNamedCastExpr(), clang::ento::ExprEngine::VisitCXXNewExpr(), clang::interp::Compiler< Emitter >::VisitCXXNewExpr(), clang::ASTNodeImporter::VisitCXXNewExpr(), clang::interp::Compiler< Emitter >::VisitCXXNoexceptExpr(), clang::ASTNodeImporter::VisitCXXNoexceptExpr(), clang::interp::Compiler< Emitter >::VisitCXXNullPtrLiteralExpr(), clang::ASTNodeImporter::VisitCXXNullPtrLiteralExpr(), clang::dataflow::ReferencedDeclsVisitor::VisitCXXParenListInitExpr(), clang::interp::Compiler< Emitter >::VisitCXXReinterpretCastExpr(), clang::interp::Compiler< Emitter >::VisitCXXScalarValueInitExpr(), clang::ASTNodeImporter::VisitCXXScalarValueInitExpr(), clang::interp::Compiler< Emitter >::VisitCXXStdInitializerListExpr(), clang::ASTNodeImporter::VisitCXXStdInitializerListExpr(), clang::ASTNodeImporter::VisitCXXTemporaryObjectExpr(), clang::ento::ExprEngine::VisitCXXThisExpr(), clang::ASTNodeImporter::VisitCXXThisExpr(), clang::ASTNodeImporter::VisitCXXThrowExpr(), clang::ASTNodeImporter::VisitCXXTypeidExpr(), clang::JSONNodeDumper::VisitCXXUnresolvedConstructExpr(), clang::ASTNodeImporter::VisitCXXUnresolvedConstructExpr(), clang::interp::Compiler< Emitter >::VisitCXXUuidofExpr(), clang::interp::Compiler< Emitter >::visitDeclRef(), clang::ASTNodeImporter::VisitDeclRefExpr(), clang::ASTNodeImporter::VisitExplicitCastExpr(), clang::interp::Compiler< Emitter >::visitExpr(), clang::ASTNodeImporter::VisitExpressionTraitExpr(), clang::interp::Compiler< Emitter >::VisitExtVectorElementExpr(), clang::interp::Compiler< Emitter >::VisitFixedPointBinOp(), clang::interp::Compiler< Emitter >::VisitFixedPointLiteral(), clang::ASTNodeImporter::VisitFixedPointLiteral(), clang::interp::Compiler< Emitter >::VisitFixedPointUnaryOperator(), clang::interp::Compiler< Emitter >::VisitFloatCompoundAssignOperator(), clang::ASTNodeImporter::VisitFloatingLiteral(), clang::TemplateDeclInstantiator::VisitFunctionDecl(), clang::interp::Compiler< Emitter >::VisitGNUNullExpr(), clang::ASTNodeImporter::VisitGNUNullExpr(), clang::interp::Compiler< Emitter >::VisitImaginaryLiteral(), clang::ASTNodeImporter::VisitImaginaryLiteral(), clang::ASTNodeImporter::VisitImplicitCastExpr(), clang::interp::Compiler< Emitter >::VisitImplicitValueInitExpr(), clang::ASTNodeImporter::VisitImplicitValueInitExpr(), clang::interp::Compiler< Emitter >::visitInitializer(), clang::interp::Compiler< Emitter >::visitInitList(), clang::ento::ExprEngine::VisitInitListExpr(), clang::ASTNodeImporter::VisitInitListExpr(), clang::dataflow::ReferencedDeclsVisitor::VisitInitListExpr(), clang::JSONNodeDumper::VisitIntegerLiteral(), clang::ASTNodeImporter::VisitIntegerLiteral(), clang::interp::Compiler< Emitter >::VisitLogicalBinOp(), clang::ento::ExprEngine::VisitLogicalExpr(), clang::ASTNodeImporter::VisitMaterializeTemporaryExpr(), clang::ento::ExprEngine::VisitMemberExpr(), clang::ASTNodeImporter::VisitMemberExpr(), clang::interp::Compiler< Emitter >::VisitObjCEncodeExpr(), clang::JSONNodeDumper::VisitObjCMessageExpr(), clang::interp::Compiler< Emitter >::VisitOffsetOfExpr(), clang::ento::ExprEngine::VisitOffsetOfExpr(), clang::ASTNodeImporter::VisitOffsetOfExpr(), clang::ASTNodeImporter::VisitOpaqueValueExpr(), clang::ASTNodeImporter::VisitPackExpansionExpr(), clang::interp::Compiler< Emitter >::VisitPointerArithBinOp(), clang::interp::Compiler< Emitter >::VisitPointerCompoundAssignOperator(), clang::ASTNodeImporter::VisitPredefinedExpr(), clang::interp::Compiler< Emitter >::VisitRequiresExpr(), clang::interp::Compiler< Emitter >::VisitShuffleVectorExpr(), clang::ASTNodeImporter::VisitShuffleVectorExpr(), clang::interp::Compiler< Emitter >::VisitSourceLocExpr(), clang::ASTNodeImporter::VisitSourceLocExpr(), clang::ASTNodeImporter::VisitStmtExpr(), clang::interp::Compiler< Emitter >::VisitStringLiteral(), clang::ASTNodeImporter::VisitStringLiteral(), clang::ASTNodeImporter::VisitSubstNonTypeTemplateParmExpr(), clang::interp::Compiler< Emitter >::visitSwitchStmt(), clang::JSONNodeDumper::VisitSYCLUniqueStableNameExpr(), clang::interp::Compiler< Emitter >::VisitTypeTraitExpr(), clang::ASTNodeImporter::VisitTypeTraitExpr(), clang::interp::Compiler< Emitter >::VisitUnaryExprOrTypeTraitExpr(), clang::ento::ExprEngine::VisitUnaryExprOrTypeTraitExpr(), clang::ASTNodeImporter::VisitUnaryExprOrTypeTraitExpr(), clang::ento::ExprEngine::VisitUnaryOperator(), clang::interp::Compiler< Emitter >::VisitUnaryOperator(), clang::ASTNodeImporter::VisitUnaryOperator(), clang::ASTNodeImporter::VisitUnresolvedMemberExpr(), clang::ASTNodeImporter::VisitVAArgExpr(), clang::TextNodeDumper::VisitVarDecl(), clang::interp::Compiler< Emitter >::VisitVectorBinOp(), clang::interp::Compiler< Emitter >::VisitVectorUnaryOperator(), warnOnSizeofOnArrayDecay(), and widenIterationCount().
|
inline |
getValueKind - The value kind that this expression produces.
Definition at line 437 of file Expr.h.
References clang::Stmt::ExprBits.
Referenced by clang::Sema::ActOnChooseExpr(), clang::Sema::ActOnConditionalOp(), actOnOMPReductionKindClause(), clang::Sema::BuildCXXTypeId(), clang::Sema::BuildExpressionFromDeclTemplateArgument(), clang::Sema::BuildFieldReferenceExpr(), clang::Sema::BuildSynthesizedThreeWayComparison(), clang::Sema::CheckPointerToMemberOperands(), CheckTemplateArgumentPointerToMember(), clang::Sema::checkUnknownAnyCast(), ClassifyInternal(), clang::Sema::CreateBuiltinArraySubscriptExpr(), clang::Sema::CreateBuiltinBinOp(), clang::Sema::CreateBuiltinUnaryOp(), clang::Sema::CXXCheckConditionalOperands(), clang::Sema::FixOverloadedFunctionReference(), clang::ASTContext::getReferenceQualifiedType(), clang::InitializationSequence::InitializeFrom(), isGLValue(), isLValue(), isPRValue(), isXValue(), LookupMemberExpr(), clang::InitializationSequence::Perform(), clang::Sema::PerformImplicitConversion(), clang::Sema::PerformImplicitObjectArgumentInitialization(), clang::Sema::PerformObjectMemberConversion(), removeLValueToRValueCast(), clang::SemaObjC::stripARCUnbridgedCast(), tryToConvertMemberExprToDeclRefExpr(), clang::JSONNodeDumper::Visit(), clang::TextNodeDumper::Visit(), clang::ASTNodeImporter::VisitArraySubscriptExpr(), clang::ASTNodeImporter::VisitBinaryConditionalOperator(), clang::ASTNodeImporter::VisitBinaryOperator(), clang::ASTNodeImporter::VisitCallExpr(), clang::ASTNodeImporter::VisitChooseExpr(), clang::ASTNodeImporter::VisitCompoundAssignOperator(), clang::ASTNodeImporter::VisitCompoundLiteralExpr(), clang::ASTNodeImporter::VisitConditionalOperator(), clang::ASTNodeImporter::VisitConvertVectorExpr(), clang::ASTNodeImporter::VisitCXXMemberCallExpr(), clang::ASTNodeImporter::VisitCXXNamedCastExpr(), clang::ASTNodeImporter::VisitDeclRefExpr(), clang::ASTNodeImporter::VisitExplicitCastExpr(), clang::ASTNodeImporter::VisitImplicitCastExpr(), clang::ASTNodeImporter::VisitMemberExpr(), clang::ASTNodeImporter::VisitOpaqueValueExpr(), and clang::ASTNodeImporter::VisitSubstNonTypeTemplateParmExpr().
|
inlinestatic |
getValueKindForType - Given a formal return or parameter type, give its value kind.
Definition at line 427 of file Expr.h.
References clang::Type::getAs(), clang::T, clang::VK_LValue, clang::VK_PRValue, and clang::VK_XValue.
Referenced by clang::Sema::AddConversionCandidate(), clang::Sema::BuildCallToMemberFunction(), clang::Sema::BuildCallToObjectOfClassType(), clang::Sema::BuildCXXMemberCallExpr(), clang::Sema::BuildCXXTypeConstructExpr(), clang::Sema::BuildLiteralOperatorCall(), clang::Sema::BuildOverloadedArrowExpr(), clang::Sema::BuildResolvedCallExpr(), CheckConvertibilityForTypeTraits(), clang::SemaObjC::CheckMessageArgumentTypes(), clang::Sema::CreateOverloadedArraySubscriptExpr(), clang::Sema::CreateOverloadedBinOp(), clang::Sema::CreateOverloadedUnaryOp(), EvaluateBinaryTypeTrait(), EvaluateBooleanTypeTrait(), fixOverloadedReinterpretCastExpr(), clang::ASTContext::getInjectedTemplateArg(), and clang::TreeTransform< Derived >::RebuildShuffleVectorExpr().
hasAnyTypeDependentArguments - Determines if any of the expressions in Exprs is type-dependent.
Definition at line 3310 of file Expr.cpp.
References isTypeDependent().
Referenced by clang::Sema::ActOnArraySubscriptExpr(), clang::Sema::BuildCallExpr(), clang::Sema::BuildCXXNew(), clang::Sema::BuildCXXTypeConstructExpr(), clang::Sema::CreateOverloadedArraySubscriptExpr(), clang::Sema::DeduceTemplateSpecializationFromInitializer(), and clang::InitializationSequence::InitializeFrom().
bool Expr::hasNonTrivialCall | ( | const ASTContext & | Ctx | ) | const |
Determine whether this expression involves a call to any function that is not trivial.
Definition at line 3951 of file Expr.cpp.
Referenced by isTrivial().
|
inline |
Returns whether this expression has a placeholder type.
Definition at line 516 of file Expr.h.
References getType(), and clang::Type::isPlaceholderType().
Referenced by clang::Sema::ActOnArraySubscriptExpr(), clang::Sema::ActOnCoawaitExpr(), clang::Sema::ActOnConditionalOp(), clang::Sema::BuildArrayType(), clang::Sema::BuildCoreturnStmt(), clang::Sema::BuildCoyieldExpr(), clang::Sema::BuildCXXTypeId(), clang::Sema::BuildDecltypeType(), clang::Sema::BuildExpressionTrait(), clang::SemaObjC::BuildInstanceMessage(), clang::Sema::BuildResolvedCoawaitExpr(), clang::Sema::BuildTypeofExprType(), clang::Sema::CheckAddressOfOperand(), clang::Sema::CheckAssignmentOperands(), CheckForModifiableLvalue(), clang::SemaObjC::CheckMessageArgumentTypes(), checkPointerAuthValue(), clang::Sema::CheckPointerToMemberOperands(), clang::SemaOpenACC::CheckVarIsPointerType(), ClassifyBinaryOp(), clang::Sema::DefaultFunctionArrayConversion(), clang::Sema::DefaultLvalueConversion(), clang::SemaObjC::diagnoseARCUnbridgedCast(), clang::Sema::IgnoredValueConversions(), clang::MatrixSubscriptExpr::isIncomplete(), clang::Sema::PerformContextualImplicitConversion(), clang::SemaPseudoObject::recreateSyntacticForm(), clang::Sema::SelectBestMethod(), clang::SemaObjC::stripARCUnbridgedCast(), and clang::TreeTransform< Derived >::TransformExprRequirement().
|
inline |
Returns whether this expression has a specific placeholder type.
Definition at line 521 of file Expr.h.
References getType(), and clang::BuiltinType::isPlaceholderTypeKind().
bool Expr::HasSideEffects | ( | const ASTContext & | Ctx, |
bool | IncludePossibleEffects = true |
||
) | const |
HasSideEffects - This routine returns true for all those expressions which have any effect other than producing a value.
Example is a function call, volatile variable read, or throwing an exception. If IncludePossibleEffects is false, this call treats certain expressions with potential side effects (such as function call-like expressions, instantiation-dependent expressions, or invocations from a macro) as not having side effects.
Definition at line 3587 of file Expr.cpp.
References clang::Stmt::children(), E, clang::CastExpr::getCastKind(), clang::CXXConstructExpr::getConstructor(), getExprLoc(), clang::FieldDecl::getInClassInitializer(), clang::Stmt::getStmtClass(), clang::CastExpr::getSubExpr(), getType(), clang::ExplicitCastExpr::getTypeAsWritten(), clang::Decl::hasAttr(), HasSideEffects(), clang::Type::isReferenceType(), clang::FunctionDecl::isTrivial(), clang::QualType::isVolatileQualified(), clang::Stmt::NoStmtClass, clang::PseudoObjectExpr::semantics_begin(), and clang::PseudoObjectExpr::semantics_end().
Referenced by clang::Sema::BuildCXXAssumeExpr(), clang::Sema::BuildCXXTypeId(), clang::Sema::BuildDecltypeType(), clang::Sema::CheckUnaryExprOrTypeTraitOperand(), clang::Sema::CreateGenericSelectionExpr(), HasSideEffects(), clang::arcmt::trans::hasSideEffects(), isSimpleZero(), isTrivial(), and clang::interp::Compiler< Emitter >::visitAttributedStmt().
|
inline |
Definition at line 877 of file Expr.h.
References IgnoreCasts().
Expr * Expr::IgnoreCasts | ( | ) |
Skip past any casts which might surround this expression until reaching a fixed point.
Skips:
Definition at line 3074 of file Expr.cpp.
References clang::IgnoreCastsSingleStep(), and clang::IgnoreExprNodes().
Referenced by CheckModifiableLValue(), getBlockExpr(), IgnoreCasts(), and isConfigurationValue().
|
inline |
Definition at line 939 of file Expr.h.
References IgnoreConversionOperatorSingleStep().
Expr * Expr::IgnoreConversionOperatorSingleStep | ( | ) |
Skip conversion operators.
If this Expr is a call to a conversion operator, return the argument.
Definition at line 3099 of file Expr.cpp.
Referenced by IgnoreConversionOperatorSingleStep(), and IsArithmeticBinaryExpr().
|
inline |
Definition at line 866 of file Expr.h.
References IgnoreImpCasts().
Expr * Expr::IgnoreImpCasts | ( | ) |
Skip past any implicit casts which might surround this expression until reaching a fixed point.
Skips:
Definition at line 3070 of file Expr.cpp.
References clang::IgnoreExprNodes(), and clang::IgnoreImplicitCastsSingleStep().
Referenced by addFixitForObjCARCConversion(), buildCaptureDecl(), clang::Sema::BuildMemberReferenceExpr(), BuiltinCallWithStaticChain(), castOperatorNeedsParens(), CheckFoldOperand(), CheckIdentityFieldAssignment(), CheckMoveOnConstruction(), clang::SemaObjC::CheckObjCCircularContainer(), checkOpenMPLoop(), CheckTemplateArgumentAddressOfObjectOrFunction(), CheckTemplateArgumentPointerToMember(), clang::Sema::DiagnoseAlwaysNonNullPointer(), DiagnoseForRangeReferenceVariableCopies(), diagnoseLogicalNotOnLHSofCheck(), diagnoseStringPlusChar(), diagnoseStringPlusInt(), doRewriteToUTF8StringBoxedExpressionHelper(), emitOMPAtomicCaptureExpr(), emitOMPAtomicUpdateExpr(), getAllocatorKind(), getSValForVar(), IgnoreImpCasts(), clang::Sema::InvalidLogicalVectorOperands(), IsArithmeticBinaryExpr(), IsPreserveAIArrayBase(), clang::ASTContext::isSameDefaultTemplateArgument(), lookThroughImplicitCasts(), requiresParensToAddCast(), rewriteToNumericBoxedExpression(), subscriptOperatorNeedsParens(), clang::ConversionFixItGenerator::tryToFixConversion(), and ValidDuplicateEnum().
|
inline |
Definition at line 887 of file Expr.h.
References IgnoreImplicit().
Expr * Expr::IgnoreImplicit | ( | ) |
Skip past any implicit AST nodes which might surround this expression until reaching a fixed point.
Skips:
Definition at line 3078 of file Expr.cpp.
References clang::IgnoreExprNodes(), and clang::IgnoreImplicitSingleStep().
Referenced by clang::SemaOpenMP::ActOnOpenMPCanonicalLoop(), clang::SemaOpenMP::ActOnOpenMPDispatchDirective(), clang::SemaObjC::adornBoolConversionDiagWithTernaryFixit(), clang::ast_matchers::AST_MATCHER(), clang::Sema::CheckForImmediateInvocation(), CheckMoveOnConstruction(), CheckNonNullExpr(), clang::SemaOpenMP::checkOpenMPDeclareVariantFunction(), DiagnoseConstAssignment(), clang::Sema::DiagnoseImmediateEscalatingReason(), EvaluateAndDiagnoseImmediateInvocation(), getConstantExprReferredType(), clang::CXXRewrittenBinaryOperator::getDecomposedForm(), getDirectCallExpr(), clang::BindingDecl::getHoldingVar(), clang::CXXConstructorDecl::getTargetConstructor(), IgnoreImplicit(), IsCallableWithAppend(), clang::InitListExpr::isIdiomaticZeroInitializer(), IsReadonlyMessage(), clang::Sema::MarkExpressionAsImmediateEscalating(), needsConversionOfHalfVec(), precomputeExpr(), clang::ento::ExprEngine::ProcessInitializer(), ProcessOpenMPDoacrossClauseCommon(), clang::tooling::reallyIgnoreImplicit(), rebuildPotentialResultsAsNonOdrUsed(), RemoveNestedImmediateInvocation(), clang::threadSafety::SExprBuilder::translateAttrExpr(), clang::sema::visitFunctionCallArguments(), and clang::consumed::ConsumedStmtVisitor::VisitVarDecl().
|
inline |
Definition at line 897 of file Expr.h.
References IgnoreImplicitAsWritten().
Expr * Expr::IgnoreImplicitAsWritten | ( | ) |
Skip past any implicit AST nodes which might surround this expression until reaching a fixed point.
Same as IgnoreImplicit, except that it also skips over implicit calls to constructors and conversion functions.
FIXME: Should IgnoreImplicit do this?
Definition at line 3082 of file Expr.cpp.
References clang::IgnoreExprNodes(), and clang::IgnoreImplicitAsWrittenSingleStep().
Referenced by clang::tooling::buildAccess(), emitOMPAtomicCompareExpr(), and IgnoreImplicitAsWritten().
|
inline |
Definition at line 973 of file Expr.h.
References IgnoreParenBaseCasts().
Expr * Expr::IgnoreParenBaseCasts | ( | ) |
Skip past any parentheses and derived-to-base casts until reaching a fixed point.
Skips:
Definition at line 3112 of file Expr.cpp.
References clang::IgnoreBaseCastsSingleStep(), clang::IgnoreExprNodes(), and clang::IgnoreParensSingleStep().
Referenced by getBestDynamicClassTypeExpr(), and IgnoreParenBaseCasts().
|
inline |
Definition at line 932 of file Expr.h.
References IgnoreParenCasts().
Expr * Expr::IgnoreParenCasts | ( | ) |
Skip past any parentheses and casts which might surround this expression until reaching a fixed point.
Skips:
Definition at line 3095 of file Expr.cpp.
References clang::IgnoreCastsSingleStep(), clang::IgnoreExprNodes(), and clang::IgnoreParensSingleStep().
Referenced by clang::Sema::ActOnFinishSwitchStmt(), clang::SemaOpenMP::ActOnOpenMPDependClause(), clang::SemaOpenMP::ActOnOpenMPDispatchDirective(), clang::Sema::BuildCallToMemberFunction(), BuiltinAnnotation(), clang::Sema::BuiltinConstantArg(), BuiltinSEHScopeCheck(), clang::Sema::CheckAdditionOperands(), clang::SemaARM::CheckARMBuiltinExclusiveCall(), clang::Sema::CheckAssignmentOperands(), clang::SemaRISCV::CheckBuiltinFunctionCall(), checkFormatStringExpr(), CheckForModifiableLvalue(), CheckForNullPointerDereference(), CheckICE(), CheckIndirectionOperand(), checkObjCPointerIntrospection(), clang::SemaObjC::CheckObjCString(), clang::SemaOpenACC::CheckReductionVar(), clang::Sema::CheckStaticArrayArgument(), clang::Sema::checkStringLiteralArgumentAttr(), clang::Sema::CheckSubtractionOperands(), CheckTemplateArgumentAddressOfObjectOrFunction(), clang::SemaCodeCompletion::CodeCompleteCase(), clang::analyze_os_log::computeOSLogBufferLayout(), clang::Sema::CreateBuiltinBinOp(), clang::Sema::DefaultFunctionArrayConversion(), clang::Sema::DefaultLvalueConversion(), clang::Sema::DiagnoseAssignmentAsCondition(), diagnoseTautologicalComparison(), EmitSpecialRegisterBuiltin(), clang::findCapturingExpr(), FindTypeTagExpr(), getDeclFromThisExpr(), getDirectCallExpr(), getNSArrayObjects(), getObjCProperty(), getStrlenExprArg(), handleTargetClonesAttr(), clang::arcmt::trans::hasSideEffects(), ignoreLiteralAdditions(), IgnoreParenCasts(), isCalleeArrow(), isCapturedBy(), isEnableIf(), clang::arcmt::trans::isGlobalVar(), clang::BinaryOperator::isNullPointerArithmeticExtension(), clang::arcmt::trans::isPlusOne(), clang::ASTContext::isSentinelNullExpr(), IsStandardConversion(), isTrivialDoWhile(), isTrivialExpression(), LookThroughTransitiveAssignmentsAndCommaOperators(), LookupMemberExpr(), clang::sema::FunctionScopeInfo::markSafeWeakUse(), maybeAdjustInterfaceForSubscriptingCheck(), clang::ento::ConditionBRVisitor::patternMatch(), peelOffOuterExpr(), ProcessOpenMPDoacrossClauseCommon(), REGISTER_MAP_WITH_PROGRAMSTATE(), RemoveSelectorFromWarningCache(), tryEmitSpecializedAllocInit(), TryEvaluateBuiltinNaN(), clang::ConversionFixItGenerator::tryToFixConversion(), UseNSOptionsMacro(), and clang::ento::ConditionBRVisitor::VisitTrueTest().
|
inline |
Definition at line 923 of file Expr.h.
References IgnoreParenImpCasts().
Expr * Expr::IgnoreParenImpCasts | ( | ) |
Skip past any parentheses and implicit casts which might surround this expression until reaching a fixed point.
FIXME: IgnoreParenImpCasts really ought to be equivalent to IgnoreParens() + IgnoreImpCasts() until reaching a fixed point. However this is currently not the case. Instead IgnoreParenImpCasts() skips:
Definition at line 3090 of file Expr.cpp.
References clang::IgnoreExprNodes(), clang::IgnoreImplicitCastsExtraSingleStep(), and clang::IgnoreParensSingleStep().
Referenced by clang::SemaOpenMP::ActOnOpenMPAffinityClause(), clang::SemaOpenMP::ActOnOpenMPAtomicDirective(), clang::SemaOpenMP::ActOnOpenMPDeclareSimdDirective(), clang::SemaOpenMP::ActOnOpenMPDeclareVariantDirective(), clang::SemaOpenMP::ActOnOpenMPDetachClause(), clang::SemaOpenMP::ActOnOpenMPExecutableDirective(), clang::SemaOpenACC::ActOnVar(), AnalyzeAssignment(), AnalyzeComparison(), AnalyzeImplicitConversions(), clang::ast_matchers::libc_func_matchers::AST_MATCHER(), clang::ast_matchers::AST_MATCHER_P(), clang::ast_matchers::AST_POLYMORPHIC_MATCHER_P2(), buildAccessForPointer(), buildAccessForValue(), clang::Sema::BuildArrayType(), clang::SemaARM::BuiltinARMSpecialReg(), BuiltinCpu(), calculateConstraintSatisfaction(), checkArithmeticNull(), checkArithmeticOrEnumeralThreeWayCompare(), CheckBoolLikeConversion(), CheckConditionalOperand(), CheckConditionalOperator(), clang::Sema::CheckConstraintExpression(), clang::SemaObjC::CheckConversionToObjCLiteral(), clang::Sema::CheckFloatComparison(), checkForLiteralCreation(), CheckForReference(), CheckICE(), CheckImplicitArgumentConversions(), clang::Sema::CheckImplicitConversion(), clang::SemaObjC::CheckLiteralKind(), CheckMoveOnConstruction(), CheckObjCDictionaryLiteralDuplicateKeys(), checkOMPArraySectionConstantForReduction(), clang::SemaOpenMP::checkOpenMPDeclareVariantFunction(), clang::Sema::CheckPlaceholderExpr(), checkPreviousOMPAllocateAttribute(), clang::Sema::CheckShadowingDeclModification(), clang::SemaObjC::CheckSubscriptingKind(), CheckTautologicalComparison(), clang::Sema::CheckTemplateArgument(), checkUnsafeAssignLiteral(), clang::Sema::CheckUnusedVolatileAssignment(), clang::SemaOpenACC::CheckVarIsPointerType(), ClassifyMemberExpr(), collectConjunctionTerms(), clang::Sema::CreateBuiltinArraySubscriptExpr(), clang::Sema::CXXCheckConditionalOperands(), clang::Sema::DiagnoseAlwaysNonNullPointer(), DiagnoseCallingConvCast(), clang::Sema::DiagnoseConditionalForNull(), DiagnoseConstAssignment(), clang::SemaObjC::DiagnoseCStringFormatDirectiveInCFAPI(), DiagnoseCStringFormatDirectiveInObjCAPI(), DiagnoseFloatingImpCast(), DiagnoseIntInBoolContext(), DiagnoseNullConversion(), DiagnoseSelfAssignment(), clang::Sema::DiagnoseSelfMove(), diagnoseTautologicalComparison(), diagnoseUnknownAnyExpr(), diagnoseWellFormedUnsatisfiedConstraintExpr(), clang::Sema::diagnoseZeroToNullptrConversion(), doesExprLikelyComputeSize(), clang::CodeGen::CGOpenMPRuntime::emitDeclareSimdFunction(), clang::CodeGen::CGOpenMPRuntime::emitDepobjElements(), clang::CodeGen::CGOpenMPRuntime::emitDepobjElementsSizes(), emitInitWithReductionInitializer(), clang::CodeGen::CGOpenMPRuntime::emitReduction(), clang::SemaObjC::EmitRelatedResultTypeNote(), clang::CodeGen::CGOpenMPRuntime::emitTaskInit(), ExprLooksBoolean(), clang::Sema::findFailedBooleanCondition(), FindTypeTagExpr(), getBaseDecl(), getEnumConstantDecl(), clang::SemaObjC::getMessageSendResultType(), getOverflowPatternBinOp(), getPointerAndSize(), getPrivateItem(), getReferencedDeclOfCallee(), hasRecursiveCallInPath(), clang::ast_matchers::libc_func_matchers::hasUnsafeFormatOrSArg(), IgnoreParenImpCasts(), IgnoreUnlessSpelledInSource(), instantiateOMPDeclareSimdDeclAttr(), instantiateOMPDeclareVariantAttr(), isEnumConstant(), IsEnumConstOrFromMacro(), IsImplicitBoolFloatConversion(), isKnownToHaveUnsignedValue(), clang::ast_matchers::libc_func_matchers::isNullTermPointer(), isObjCObjectLiteral(), isObjCSelfExpr(), IsReadonlyMessage(), isSameComparisonOperand(), isSameWidthConstantConversion(), isSubstitutedTemplateArgument(), lookThroughRangesV3Condition(), LookupMemberExpr(), maybeDiagnoseAssignmentToFunction(), processImplicitMapsWithDefaultMappers(), ProcessOpenMPDoacrossClauseCommon(), clang::ento::ExprEngine::processSwitch(), refersToGlobalRegisterVar(), clang::Sema::RefersToMemberWithReducedAlignment(), clang::edit::rewriteObjCRedundantCallWithLiteral(), rewriteToNumberLiteral(), ShouldDiagnoseSwitchCaseNotInEnum(), stripCastsAndSugar(), tryTransformToIntOrEnumConstant(), and UsefulToPrintExpr().
|
inline |
Definition at line 952 of file Expr.h.
References IgnoreParenLValueCasts().
Expr * Expr::IgnoreParenLValueCasts | ( | ) |
Skip past any parentheses and lvalue casts which might surround this expression until reaching a fixed point.
Skips:
Definition at line 3107 of file Expr.cpp.
References clang::IgnoreExprNodes(), clang::IgnoreLValueCastsSingleStep(), and clang::IgnoreParensSingleStep().
Referenced by IgnoreParenLValueCasts(), and clang::SemaObjC::isSelfExpr().
|
inline |
Definition at line 963 of file Expr.h.
References IgnoreParenNoopCasts().
Expr * Expr::IgnoreParenNoopCasts | ( | const ASTContext & | Ctx | ) |
Skip past any parentheses and casts which do not change the value (including ptr->int casts of the same size) until reaching a fixed point.
Skips:
Definition at line 3117 of file Expr.cpp.
References E, getType(), clang::ASTContext::getTypeSize(), clang::ASTContext::hasSameUnqualifiedType(), clang::IgnoreExprNodes(), clang::IgnoreParensSingleStep(), clang::Type::isIntegralType(), and clang::Type::isPointerType().
Referenced by clang::Sema::ActOnGCCAsmStmt(), CheckAsmLValue(), clang::SemaObjC::CheckMessageArgumentTypes(), findPeephole(), clang::Sema::GatherArgumentsForCall(), GetNumNonZeroBytesInInit(), IgnoreParenNoopCasts(), clang::CXXTypeidExpr::isMostDerived(), and stripCasts().
|
inline |
Definition at line 909 of file Expr.h.
References IgnoreParens().
Expr * Expr::IgnoreParens | ( | ) |
Skip past any parentheses which might surround this expression until reaching a fixed point.
Skips:
UO_Extension
!isResultDependent()
!isConditionDependent()
Definition at line 3086 of file Expr.cpp.
References clang::IgnoreExprNodes(), and clang::IgnoreParensSingleStep().
Referenced by clang::Sema::ActOnCXXThrow(), actOnOMPReductionKindClause(), AddAllConditionalTerms(), clang::Sema::AddInitializerToDecl(), clang::Sema::BuildCallExpr(), clang::Sema::BuildCallToMemberFunction(), clang::Sema::BuildCXXMemberCallExpr(), clang::SemaObjC::BuildObjCBoxedExpr(), clang::canExprResolveTo(), clang::Sema::canThrow(), clang::Sema::CheckAddressOfOperand(), clang::SemaPPC::checkAIXMemberAlignment(), CheckAlignOfExpr(), clang::SemaPseudoObject::checkAssignment(), clang::Sema::CheckFloatComparison(), clang::SemaPseudoObject::checkIncDec(), checkMapClauseExpressionBase(), CheckMoveOnConstruction(), clang::Sema::CheckPlaceholderExpr(), checkPointerAuthValue(), clang::Sema::CheckPointerToMemberOperands(), clang::SemaPseudoObject::checkRValue(), CheckStringInit(), clang::Sema::CheckUnaryExprOrTypeTraitOperand(), clang::Sema::checkUnsafeExprAssigns(), clang::Sema::CheckUseOfCXXMethodAsAddressOfOperand(), clang::Sema::CheckVecStepExpr(), ClassifyInternal(), ClassifyMemberExpr(), clang::Sema::completeExprArrayBound(), clang::computeDependence(), clang::Sema::CreateBuiltinBinOp(), clang::ento::ExprEngine::CreateCXXTemporaryObject(), clang::Sema::CreateGenericSelectionExpr(), clang::Sema::DiagnoseAlwaysNonNullPointer(), clang::SemaObjC::diagnoseARCUnbridgedCast(), DiagnoseBadConversion(), DiagnoseDivisionSizeofPointerOrArray(), clang::Sema::DiagnoseEqualityWithExtraParens(), clang::Sema::DiscardMisalignedMemberAddress(), DoMarkPotentialCapture(), doRewriteToUTF8StringBoxedExpressionHelper(), EmitPointerWithAlignment(), EvaluateLValue(), findEnumForBlockReturn(), clang::findRetainCycleOwner(), findWeakLValue(), GetAlignOfExpr(), getBaseAlignmentAndOffsetFromLValue(), getBaseAlignmentAndOffsetFromPtr(), clang::ento::SValBuilder::getConstantVal(), clang::Sema::getDecltypeForExpr(), getExprAsWritten(), UUCAddAssignGadget::getFixits(), clang::CXXMemberCallExpr::getImplicitObjectArgument(), clang::CFGBlock::getLastCondition(), clang::CXXMemberCallExpr::getMethodDecl(), clang::Sema::getNamedReturnInfo(), getPrivateItem(), getSourceBitField(), getSyntacticFromForPseudoObjectExpr(), clang::CFGBlock::getTerminatorCondition(), IgnoreCommaOperand(), IgnoreParens(), ignorePointerCastsAndParens(), ignoreTransparentExprs(), isBlockVarRef(), isCheapEnoughToEvaluateUnconditionally(), isFlexibleArrayMemberLike(), isGLValueFromPointerDeref(), IsIntegerLiteralConstantExpr(), isInvalidICRSource(), isKnownToHaveBooleanValue(), IsModifiable(), isOBJCGCCandidate(), isParenthesizedADLCallee(), isReadIfDiscardedInCPlusPlus11(), isReferenceToNonConstCapture(), isSameComparisonOperand(), isSimpleZero(), IsStandardConversion(), clang::Sema::IsStringLiteralToNonConstPointerConversion(), isUnusedResultAWarning(), clang::isValidPreserveEnumValueArg(), clang::isValidPreserveFieldInfoArg(), clang::isValidPreserveTypeInfoArg(), LookThroughExpr(), maybeGetUnaryAddrOfOperand(), clang::InitializationSequence::Perform(), refersToVectorElement(), shouldEmitSeparateBlockRetain(), shouldExtendReceiverForInnerPointerMessage(), skipRValueSubobjectAdjustments(), skipTemporaryBindingsNoOpCastsAndParens(), tryEmitARCCopyWeakInit(), tryEmitARCRetainLoadOfScalar(), clang::Sema::tryExprAsCall(), TryGetExprRange(), tryTransformToIntOrEnumConstant(), UnpackConstruction(), clang::ento::ExprEngine::VisitArraySubscriptExpr(), clang::ento::ExprEngine::VisitBinaryOperator(), clang::ento::ExprEngine::VisitGuardedExpr(), clang::ento::ConditionBRVisitor::VisitTerminator(), and clang::interp::Compiler< Emitter >::VisitUnaryExprOrTypeTraitExpr().
Expr * Expr::IgnoreUnlessSpelledInSource | ( | ) |
Skip past any invisible AST nodes which might surround this statement, such as ExprWithCleanups or ImplicitCastExpr nodes, but also injected CXXMemberExpr and CXXConstructExpr which represent implicit conversions.
Definition at line 3143 of file Expr.cpp.
References clang::C, E, clang::Stmt::getSourceRange(), clang::IgnoreExprNodes(), clang::IgnoreImplicitCastsExtraSingleStep(), IgnoreImplicitConstructorSingleStep(), clang::IgnoreImplicitSingleStep(), IgnoreParenImpCasts(), and clang::IgnoreParensOnlySingleStep().
Referenced by IgnoreUnlessSpelledInSource(), and clang::ParentMapContext::traverseIgnored().
|
inline |
Definition at line 857 of file Expr.h.
References IgnoreUnlessSpelledInSource().
bool Expr::isBoundMemberFunction | ( | ASTContext & | Ctx | ) | const |
Returns true if this expression is a bound member function.
Definition at line 3040 of file Expr.cpp.
References ClassifyLValue(), isTypeDependent(), and LV_MemberFunction.
bool Expr::isConstantInitializer | ( | ASTContext & | Ctx, |
bool | ForRef, | ||
const Expr ** | Culprit = nullptr |
||
) | const |
isConstantInitializer - Returns true if this expression can be emitted to IR as a constant, and thus can be used as a constant initializer in C.
If this expression is not constant and Culprit is non-null, it is used to store the address of first non constant expr.
Definition at line 3318 of file Expr.cpp.
References clang::Type::castAs(), EvaluateAsInt(), EvaluateAsLValue(), clang::RecordDecl::fields(), clang::CXXConstructExpr::getArg(), clang::DesignatedInitUpdateExpr::getBase(), clang::CastExpr::getCastKind(), clang::CXXConstructExpr::getConstructor(), clang::InitListExpr::getInit(), clang::InitListExpr::getInitializedFieldInUnion(), clang::CXXConstructExpr::getNumArgs(), clang::InitListExpr::getNumInits(), clang::UnaryOperator::getOpcode(), clang::CXXMethodDecl::getParent(), clang::Stmt::getStmtClass(), clang::CastExpr::getSubExpr(), clang::UnaryOperator::getSubExpr(), getType(), clang::DesignatedInitUpdateExpr::getUpdater(), clang::CXXRecordDecl::hasTrivialDestructor(), clang::Type::isArrayType(), isConstantInitializer(), isEvaluatable(), clang::Type::isRecordType(), clang::InitListExpr::isSemanticForm(), clang::FunctionDecl::isTrivial(), clang::TagDecl::isUnion(), isValueDependent(), clang::Result, and SE_AllowUndefinedBehavior.
Referenced by clang::Sema::InstantiateVariableInitializer(), and isConstantInitializer().
bool Expr::isCXX11ConstantExpr | ( | const ASTContext & | Ctx, |
APValue * | Result = nullptr , |
||
SourceLocation * | Loc = nullptr |
||
) | const |
isCXX11ConstantExpr - Return true if this expression is a constant expression in C++11.
Can only be used in C++.
Note: This does not perform the implicit conversions required by C++11 [expr.const]p5.
Definition at line 17503 of file ExprConstant.cpp.
References EvaluateAsRValue(), clang::ASTContext::getLangOpts(), and Loc.
Referenced by EvaluateCPlusPlus11IntegralConstantExpr().
bool Expr::isCXX98IntegralConstantExpr | ( | const ASTContext & | Ctx | ) | const |
isCXX98IntegralConstantExpr - Return true if this expression is an integral constant expression in C++98.
Can only be used in C++.
Definition at line 17496 of file ExprConstant.cpp.
References CheckICE().
Referenced by isNullPointerConstant().
bool Expr::isDefaultArgument | ( | ) | const |
Determine whether this expression is a default function argument.
Default arguments are implicitly generated in the abstract syntax tree by semantic analysis for function calls, object constructions, etc. in C++. Default arguments are represented by CXXDefaultArgExpr
nodes; this routine also looks through any implicit casts to determine whether the expression is a default argument.
Definition at line 3185 of file Expr.cpp.
References E.
Referenced by clang::CXXConstructExpr::getEndLoc().
bool Expr::isEvaluatable | ( | const ASTContext & | Ctx, |
SideEffectsKind | AllowSideEffects = SE_NoSideEffects |
||
) | const |
isEvaluatable - Call EvaluateAsRValue to see if this expression can be constant folded without side-effects, but discard the result.
isEvaluatable - Call EvaluateAsRValue to see if this expression can be constant folded, but discard the result.
Definition at line 16899 of file ExprConstant.cpp.
References EvaluateAsRValue(), and hasUnacceptableSideEffect().
Referenced by clang::Sema::ActOnGCCAsmStmt(), isCheapEnoughToEvaluateUnconditionally(), isConstantInitializer(), and isTrivial().
bool Expr::isFlexibleArrayMemberLike | ( | ASTContext & | Context, |
LangOptions::StrictFlexArraysLevelKind | StrictFlexArraysLevel, | ||
bool | IgnoreTemplateOrMacroSubstitution = false |
||
) | const |
Check whether this array fits the idiom of a flexible array member, depending on the value of -fstrict-flex-array.
When IgnoreTemplateOrMacroSubstitution is set, it doesn't consider sizes resulting from the substitution of a macro or a template as special sizes.
Definition at line 206 of file Expr.cpp.
References D, E, getType(), IgnoreParens(), and clang::Decl::isFlexibleArrayMemberLike().
|
inline |
Definition at line 280 of file Expr.h.
References getValueKind(), and clang::VK_PRValue.
Referenced by clang::Sema::ActOnConditionalOp(), buildCapture(), buildCaptureDecl(), clang::Sema::BuildCXXTypeId(), clang::Sema::BuildSynthesizedThreeWayComparison(), clang::CastExpr::changesVolatileQualification(), clang::ento::SValBuilder::conjureSymbolVal(), clang::Sema::CreateBuiltinUnaryOp(), clang::Sema::DefaultArgumentPromotion(), clang::Sema::DefaultLvalueConversion(), Evaluate(), EvaluateAsRValue(), clang::interp::Context::evaluateAsRValue(), EvaluateLValue(), clang::ento::SValBuilder::getConstantVal(), clang::SemaOpenMP::getOpenMPCapturedExpr(), clang::dataflow::CachedConstAccessorsLattice< Base >::getOrCreateConstMethodReturnStorageLocation(), HandleDynamicCast(), hasTrivialGetExpr(), clang::interp::interp__builtin_constant_p(), clang::CXXTypeidExpr::isPotentiallyEvaluated(), isReadIfDiscardedInCPlusPlus11(), IsStandardConversion(), clang::InitListExpr::isTransparent(), clang::Sema::MaybeBindToTemporary(), clang::dataflow::propagateValueOrStorageLocation(), TryClassUnification(), TryContextuallyConvertToBool(), clang::CodeGen::ConstantEmitter::tryEmitConstantExpr(), tryEvaluateBuiltinObjectSize(), TryLValueToRValueCast(), TryReinterpretCast(), clang::interp::Compiler< Emitter >::visit(), clang::ento::ExprEngine::VisitArraySubscriptExpr(), clang::ento::ExprEngine::VisitBinaryOperator(), clang::ento::ExprEngine::VisitCast(), clang::ento::ExprEngine::VisitCommonDeclRefExpr(), clang::ento::ExprEngine::VisitCompoundLiteralExpr(), clang::interp::Compiler< Emitter >::VisitCXXStdInitializerListExpr(), clang::interp::Compiler< Emitter >::VisitExtVectorElementExpr(), clang::ento::ExprEngine::VisitInitListExpr(), clang::interp::Compiler< Emitter >::VisitMemberExpr(), clang::ento::ExprEngine::VisitMemberExpr(), and clang::interp::Compiler< Emitter >::VisitUnaryOperator().
bool Expr::isImplicitCXXThis | ( | ) | const |
Whether this expression is an implicit reference to 'this' in C++.
Definition at line 3266 of file Expr.cpp.
Referenced by clang::tooling::buildAccess(), clang::tooling::buildAddressOf(), clang::MemberExpr::isImplicitAccess(), and clang::MSPropertyRefExpr::isImplicitAccess().
|
inline |
Whether this expression is instantiation-dependent, meaning that it depends in some way on.
In the following example, the expression sizeof
(sizeof(T() + T())) is instantiation-dependent (since it involves a template parameter T
), but is neither type- nor value-dependent, since the type of the inner sizeof
is known (std::size_t
) and therefore the size of the outer sizeof
is known.
Definition at line 221 of file Expr.h.
References getDependence().
Referenced by clang::SemaOpenACC::ActOnArraySectionExpr(), clang::SemaOpenMP::ActOnOpenMPAtomicDirective(), clang::SemaOpenMP::ActOnOpenMPCriticalDirective(), clang::SemaOpenMP::ActOnOpenMPDeclareSimdDirective(), clang::SemaOpenMP::ActOnOpenMPDepobjClause(), clang::SemaOpenMP::ActOnOpenMPDetachClause(), clang::SemaOpenMP::ActOnOpenMPDistScheduleClause(), clang::SemaOpenMP::ActOnOpenMPInitClause(), clang::SemaOpenMP::ActOnOpenMPLinearClause(), clang::SemaOpenMP::ActOnOpenMPScheduleClause(), applyOMPAllocateAttribute(), clang::Sema::BuildBitIntType(), clang::Sema::BuildDecltypeType(), clang::Sema::BuildExprRequirement(), clang::Sema::BuildNestedRequirement(), clang::Sema::BuildPackIndexingExpr(), clang::Sema::checkAndRewriteMustTailAttr(), clang::SemaOpenACC::CheckCollapseLoopCount(), clang::SemaOpenACC::CheckGangClause(), CheckIfAnyEnclosingLambdasMustCaptureAnyPotentialCaptures(), clang::SemaOpenMP::checkOpenMPDeclareVariantFunction(), clang::SemaOpenACC::CheckReductionVar(), checkSimdlenSafelenSpecified(), clang::SemaOpenACC::CheckTileSizeExpr(), clang::Sema::CheckUnaryExprOrTypeTraitOperand(), clang::computeDependence(), clang::Sema::CorrectDelayedTyposInExpr(), clang::OpenACCCollapseClause::Create(), clang::ASTContext::getConstantArrayType(), clang::Sema::getDecltypeForExpr(), clang::ASTContext::getDecltypeType(), clang::ASTContext::getDependentAddressSpaceType(), clang::ASTContext::getDependentBitIntType(), clang::PackIndexingExpr::getSelectedIndex(), isNonNegativeIntegerValue(), clang::DecltypeType::isSugared(), clang::concepts::NestedRequirement::NestedRequirement(), clang::OpenACCIfClause::OpenACCIfClause(), clang::OpenACCVectorClause::OpenACCVectorClause(), clang::OpenACCWorkerClause::OpenACCWorkerClause(), clang::SemaOpenACC::AssociatedStmtRAII::SetCollapseInfoBeforeAssociatedStmt(), clang::SemaOpenACC::OpenACCParsedClause::setConditionDetails(), clang::SemaOpenMP::VerifyPositiveIntegerConstantInClause(), and clang::ASTNodeImporter::VisitUnresolvedLookupExpr().
bool Expr::isIntegerConstantExpr | ( | const ASTContext & | Ctx, |
SourceLocation * | Loc = nullptr |
||
) | const |
Definition at line 17445 of file ExprConstant.cpp.
References CheckICE(), D, EvaluateCPlusPlus11IntegralConstantExpr(), clang::ASTContext::getLangOpts(), and Loc.
Referenced by clang::SemaOpenMP::ActOnOpenMPInitClause(), clang::Sema::AddAssumeAlignedAttr(), clang::SemaPPC::BuiltinVSX(), clang::Sema::CheckCaseExpression(), checkIntToPointerCast(), clang::SemaOpenMP::checkOpenMPDeclareVariantFunction(), checkOpenMPLoop(), clang::Sema::DiagnoseAssignmentEnum(), getCommonSugarTypeNode(), clang::CodeGen::CGOpenMPRuntime::getNumTeamsExprForTargetDirective(), clang::CodeGen::CGOpenMPRuntime::getNumThreadsExprForTargetDirective(), isNullPointerConstant(), IsStandardConversion(), templateArgumentExpressionsEqual(), and clang::Sema::VerifyIntegerConstantExpression().
isKnownToHaveBooleanValue - Return true if this is an integer expression that is known to return 0 or 1.
This happens for _Bool/bool expressions but also int expressions which are produced by things like comparisons in C.
Semantic | If true, only return true for expressions that are known to be semantically boolean, which might not be true even for expressions that are known to evaluate to 0/1. For instance, reading an unsigned bit-field with width '1' will evaluate to 0/1, but doesn't necessarily semantically correspond to a bool. |
Definition at line 136 of file Expr.cpp.
References E, getSourceBitField(), getType(), IgnoreParens(), clang::Type::isBooleanType(), and clang::Type::isIntegralOrEnumerationType().
Referenced by clang::Sema::ActOnStartOfSwitchStmt(), clang::Sema::CheckImplicitConversion(), and diagnoseLogicalNotOnLHSofCheck().
|
inline |
isLValue - True if this expression is an "l-value" according to the rules of the current language.
C and C++ give somewhat different rules for this concept, but in general, the result of an l-value expression identifies a specific object whereas the result of an r-value expression is a value detached from any specific storage.
C++11 divides the concept of "r-value" into pure r-values ("pr-values") and so-called expiring values ("x-values"), which identify specific objects that can be safely cannibalized for their resources.
Definition at line 277 of file Expr.h.
References getValueKind(), and clang::VK_LValue.
Referenced by clang::SemaObjC::ActOnObjCForCollectionStmt(), clang::SemaOpenMP::ActOnOpenMPAffinityClause(), clang::SemaOpenMP::ActOnOpenMPDepobjClause(), clang::SemaOpenMP::ActOnOpenMPUsesAllocatorClause(), clang::SemaHLSL::ActOnOutParamExpr(), clang::Sema::ActOnParenExpr(), clang::Sema::BuildExpressionFromDeclTemplateArgument(), CheckAsmLValue(), clang::Sema::CheckSizelessVectorOperands(), checkTupleLikeDecomposition(), clang::Sema::CheckVectorOperands(), ClassifyInternal(), clang::Sema::ConstantFoldAttrArgs(), clang::Sema::DefaultFunctionArrayConversion(), clang::InitializationSequence::Diagnose(), EvaluateExpressionTrait(), getObjCProperty(), clang::MaterializeTemporaryExpr::isBoundToLvalueReference(), IsGlobalLValue(), clang::ento::ExplodedGraph::isInterestingLValueExpr(), isReferenceToNonConstCapture(), clang::InitializationSequence::Perform(), TryConstCast(), tryEmitARCCopyWeakInit(), TryLValueToRValueCast(), TryStaticReferenceDowncast(), clang::ConversionFixItGenerator::tryToFixConversion(), clang::interp::Compiler< Emitter >::VisitBinaryOperator(), clang::interp::Compiler< Emitter >::VisitComplexUnaryOperator(), and clang::interp::Compiler< Emitter >::VisitCompoundLiteralExpr().
Expr::isModifiableLvalueResult Expr::isModifiableLvalue | ( | ASTContext & | Ctx, |
SourceLocation * | Loc = nullptr |
||
) | const |
isModifiableLvalue - C99 6.3.2.1: an lvalue that does not have array type, does not have an incomplete type, does not have a const-qualified type, and if it is a structure or union, does not have any member (including, recursively, any member or element of all contained aggregates or unions) with a const-qualified type.
Loc | [in,out] - A source location which may be filled in with the location of the expression making this a non-modifiable lvalue, if specified. |
Definition at line 743 of file ExprClassification.cpp.
References clang::Expr::Classification::CL_AddressableVoid, clang::Expr::Classification::CL_ArrayTemporary, clang::Expr::Classification::CL_ClassTemporary, clang::Expr::Classification::CL_DuplicateVectorComponents, clang::Expr::Classification::CL_Function, clang::Expr::Classification::CL_LValue, clang::Expr::Classification::CL_MemberFunction, clang::Expr::Classification::CL_ObjCMessageRValue, clang::Expr::Classification::CL_PRValue, clang::Expr::Classification::CL_SubObjCPropertySetting, clang::Expr::Classification::CL_Void, clang::Expr::Classification::CL_XValue, ClassifyModifiable(), clang::Expr::Classification::CM_ArrayType, clang::Expr::Classification::CM_ConstAddrSpace, clang::Expr::Classification::CM_ConstQualified, clang::Expr::Classification::CM_ConstQualifiedField, clang::Expr::Classification::CM_Function, clang::Expr::Classification::CM_IncompleteType, clang::Expr::Classification::CM_LValueCast, clang::Expr::Classification::CM_Modifiable, clang::Expr::Classification::CM_NoSetterProperty, clang::Expr::Classification::CM_RValue, clang::Expr::Classification::CM_Untested, clang::Expr::Classification::getKind(), clang::Expr::Classification::getModifiable(), Loc, MLV_ArrayTemporary, MLV_ArrayType, MLV_ClassTemporary, MLV_ConstAddrSpace, MLV_ConstQualified, MLV_ConstQualifiedField, MLV_DuplicateVectorComponents, MLV_IncompleteType, MLV_IncompleteVoidType, MLV_InvalidExpression, MLV_InvalidMessageExpression, MLV_LValueCast, MLV_MemberFunction, MLV_NoSetterProperty, MLV_NotObjectType, MLV_SubObjCPropertySetting, and MLV_Valid.
Referenced by clang::Sema::ActOnGCCAsmStmt(), CheckForModifiableLvalue(), and CheckModifiableLValue().
Expr::NullPointerConstantKind Expr::isNullPointerConstant | ( | ASTContext & | Ctx, |
NullPointerConstantValueDependence | NPC | ||
) | const |
isNullPointerConstant - C99 6.3.2.3p3 - Test if this reduces down to a Null pointer constant.
isNullPointerConstant - C99 6.3.2.3p3 - Return whether this is a null pointer constant or not, as well as the specific kind of constant detected.
The return value can further distinguish the kind of NULL pointer constant that was detected.
Null pointer constants can be integer constant expressions with the value zero, casts of zero to void*, nullptr (C++0X), or __null (a GNU extension).
Definition at line 3963 of file Expr.cpp.
References containsErrors(), clang::Qualifiers::empty(), EvaluateKnownConstInt(), clang::QualType::getAddressSpace(), clang::Type::getAs(), clang::ASTContext::getDefaultOpenCLPointeeAddrSpace(), clang::ASTContext::getLangOpts(), clang::Type::getPointeeType(), clang::QualType::getQualifiers(), getType(), clang::APIntStorage::getValue(), isCXX98IntegralConstantExpr(), isIntegerConstantExpr(), isNullPointerConstant(), isTypeDependent(), isValueDependent(), clang::Type::isVoidType(), NPC_NeverValueDependent, NPC_ValueDependentIsNotNull, NPC_ValueDependentIsNull, NPCK_CXX11_nullptr, NPCK_GNUNull, NPCK_NotNull, NPCK_ZeroExpression, NPCK_ZeroLiteral, and clang::Qualifiers::removeAddressSpace().
Referenced by clang::Sema::BuildCXXUuidof(), clang::SemaObjC::BuildInstanceMessage(), clang::Sema::CheckAdditionOperands(), clang::Sema::CheckAssignmentConstraints(), clang::SemaOpenCL::checkBuiltinEnqueueKernel(), clang::Sema::CheckCompareOperands(), checkConditionalNullPointer(), clang::SemaObjC::CheckConversionToObjCLiteral(), checkFormatStringExpr(), clang::Sema::CheckMemberPointerConversion(), checkPointerAuthValue(), clang::Sema::CheckPointerConversion(), clang::Sema::CheckPtrComparisonWithNullChar(), clang::Sema::CheckSingleAssignmentConstraints(), clang::Sema::CheckStaticArrayArgument(), clang::Sema::CheckSubtractionOperands(), clang::Sema::CheckTransparentUnionArgumentConstraints(), clang::Sema::DiagnoseConditionalForNull(), diagnoseTautologicalComparison(), clang::Sema::FindCompositePointerType(), clang::ento::SValBuilder::getConstantVal(), isInvalidICRSource(), clang::Sema::IsMemberPointerConversion(), clang::BinaryOperator::isNullPointerArithmeticExtension(), isNullPointerConstant(), isNullPointerConstantForConversion(), isNullPointerValueTemplateArgument(), clang::ASTContext::isSentinelNullExpr(), and clang::Sema::PrepareScalarCast().
bool Expr::isOBJCGCCandidate | ( | ASTContext & | Ctx | ) | const |
isOBJCGCCandidate - Return true if this expression may be used in a read/ write barrier.
isOBJCGCCandidate - Check if an expression is objc gc'able.
returns true, if it is; false otherwise.
Definition at line 3001 of file Expr.cpp.
References D, E, clang::MemberExpr::getBase(), clang::ASTContext::getObjCGCAttrKind(), clang::Stmt::getStmtClass(), IgnoreParens(), isOBJCGCCandidate(), clang::Type::isPointerType(), clang::T, and clang::Qualifiers::Weak.
Referenced by isOBJCGCCandidate().
bool Expr::isObjCSelfExpr | ( | ) | const |
Check if this expression is the ObjC 'self' implicit parameter.
Definition at line 4106 of file Expr.cpp.
References E, clang::DeclRefExpr::getDecl(), clang::Decl::getDeclContext(), clang::ObjCMethodDecl::getSelfDecl(), and IgnoreParenImpCasts().
Referenced by clang::SemaObjC::BuildInstanceMessage(), and clang::SemaObjC::getMessageSendResultType().
|
inline |
Definition at line 448 of file Expr.h.
References getObjectKind(), clang::OK_BitField, and clang::OK_Ordinary.
Referenced by clang::Sema::ActOnConditionalOp(), and clang::Sema::CXXCheckConditionalOperands().
|
static |
isPotentialConstantExpr - Return true if this function's definition might be usable in a constant expression in C++11, if it were marked constexpr.
Return false if the function can never produce a constant expression, along with diagnostics describing why not.
Definition at line 17608 of file ExprConstant.cpp.
References clang::Decl::getASTContext(), clang::FunctionDecl::getBody(), clang::CXXRecordDecl::getCanonicalDecl(), clang::Decl::getLocation(), clang::FunctionDecl::getNameForDiagnostic(), clang::CXXMethodDecl::getParent(), clang::ASTContext::getPrintingPolicy(), HandleConstructorCall(), HandleFunctionCall(), clang::DeclContext::isDependentContext(), clang::CXXMethodDecl::isImplicitObjectMemberFunction(), and Loc.
Referenced by CheckConstexprFunctionBody().
|
static |
isPotentialConstantExprUnevaluated - Return true if this expression might be usable in a constant expression in C++11 in an unevaluated context, if it were in function FD marked constexpr.
Return false if the function can never produce a constant expression, along with diagnostics describing why not.
Definition at line 17666 of file ExprConstant.cpp.
References E, Evaluate(), clang::Decl::getASTContext(), and isValueDependent().
Referenced by checkFunctionConditionAttr(), and instantiateDependentFunctionAttrCondition().
|
inline |
Definition at line 278 of file Expr.h.
References getValueKind(), and clang::VK_PRValue.
Referenced by clang::Sema::ActOnConditionalOp(), clang::Sema::BuildArrayType(), clang::Sema::BuildCoyieldExpr(), clang::Sema::BuildMemberReferenceExpr(), clang::Sema::BuildResolvedCoawaitExpr(), calculateConstraintSatisfaction(), CheckICE(), checkIndirectCopyRestoreSource(), CheckLiteralType(), CheckMoveOnConstruction(), clang::Sema::CheckPointerToMemberOperands(), ClassifyInternal(), clang::Sema::CreateBuiltinArraySubscriptExpr(), emitPseudoObjectExpr(), EvaluateArray(), EvaluateArrayNewConstructExpr(), EvaluateArrayNewInitList(), EvaluateAsBooleanCondition(), EvaluateAtomic(), EvaluateBuiltinStrLen(), EvaluateComplex(), EvaluateExpressionTrait(), EvaluateFloat(), EvaluateInPlace(), EvaluateIntegerOrLValue(), EvaluateMemberPointer(), EvaluatePointer(), EvaluateRecord(), EvaluateTemporary(), EvaluateVector(), EvaluateVoid(), clang::Sema::FillInlineAsmIdentifierInfo(), clang::dataflow::Environment::getResultObjectLocation(), clang::Sema::IgnoredValueConversions(), ignorePointerCastsAndParens(), clang::Sema::ImpCastExprToType(), clang::InitListExpr::isTransparent(), clang::Sema::maybeExtendBlockObject(), clang::InitializationSequence::Perform(), clang::Sema::PerformImplicitConversion(), clang::Sema::PerformImplicitObjectArgumentInitialization(), clang::dataflow::Environment::setValue(), clang::Sema::TemporaryMaterializationConversion(), TryConstCast(), and TryListInitialization().
bool Expr::isReadIfDiscardedInCPlusPlus11 | ( | ) | const |
Determine whether an lvalue-to-rvalue conversion should implicitly be applied to this expression if it appears as a discarded-value expression in C++11 onwards.
This applies to certain forms of volatile glvalues.
Definition at line 2551 of file Expr.cpp.
References E, getType(), IgnoreParens(), and isGLValue().
Referenced by clang::Sema::IgnoredValueConversions(), and isUnusedResultAWarning().
Checks that the two Expr's will refer to the same value as a comparison operand.
The caller must ensure that the values referenced by the Expr's are not modified between E1 and E2 or the result my be invalid.
Definition at line 4215 of file Expr.cpp.
References D, clang::declaresSameEntity(), E, clang::Stmt::getStmtClass(), IgnoreParenImpCasts(), IgnoreParens(), and isSameComparisonOperand().
Referenced by diagnoseTautologicalComparison(), isSameComparisonOperand(), and isTautologicalBoundsCheck().
bool Expr::isTemporaryObject | ( | ASTContext & | Ctx, |
const CXXRecordDecl * | TempTy | ||
) | const |
Determine whether the result of this expression is a temporary object of the given class type.
isTemporaryObject - Determines if this expression produces a temporary of the given class type.
Definition at line 3224 of file Expr.cpp.
References clang::C, Classify(), E, getType(), clang::Expr::Classification::isPRValue(), and skipTemporaryBindingsNoOpCastsAndParens().
Referenced by clang::Sema::BuildCXXConstructExpr(), CopyObject(), and clang::interp::Compiler< Emitter >::VisitCXXConstructExpr().
|
inline |
Determines whether the type of this expression depends on.
For example, the expressions "x" and "x + y" are type-dependent in the following code, but "y" is not type-dependent:
Definition at line 192 of file Expr.h.
References getDependence().
Referenced by clang::SemaOpenACC::ActOnArraySectionExpr(), clang::Sema::ActOnArraySubscriptExpr(), clang::Sema::ActOnCapScopeReturnStmt(), clang::Sema::ActOnCaseExpr(), clang::Sema::ActOnCastExpr(), clang::Sema::ActOnChooseExpr(), clang::Sema::ActOnConditionalOp(), clang::Sema::ActOnCXXDelete(), clang::Sema::ActOnDesignatedInitializer(), clang::Sema::ActOnEffectExpression(), clang::Sema::ActOnExplicitBoolSpecifier(), clang::Sema::ActOnFinishSwitchStmt(), clang::Sema::ActOnGCCAsmStmt(), clang::Sema::ActOnIndirectGotoStmt(), clang::SemaOpenACC::ActOnIntExpr(), clang::Sema::ActOnNoexceptSpec(), clang::SemaObjC::ActOnObjCForCollectionStmt(), clang::SemaOpenMP::ActOnOMPArraySectionExpr(), clang::SemaOpenMP::ActOnOMPIteratorExpr(), clang::SemaOpenMP::ActOnOpenMPCriticalDirective(), clang::SemaOpenMP::ActOnOpenMPDeclareSimdDirective(), clang::SemaOpenMP::ActOnOpenMPDepobjClause(), clang::SemaOpenMP::ActOnOpenMPDetachClause(), clang::SemaOpenMP::ActOnOpenMPDistScheduleClause(), clang::SemaOpenMP::ActOnOpenMPInitClause(), clang::SemaOpenMP::ActOnOpenMPLinearClause(), clang::SemaOpenMP::ActOnOpenMPScheduleClause(), clang::Sema::ActOnPragmaPack(), clang::Sema::ActOnStartOfSwitchStmt(), clang::Sema::ActOnStmtExprResult(), AnalyzeBitFieldAssignment(), AnalyzeImplicitConversions(), applyOMPAllocateAttribute(), clang::Sema::BuildArrayType(), clang::Sema::BuildBinOp(), clang::Sema::BuildBuiltinOffsetOf(), clang::Sema::BuildCompoundLiteralExpr(), clang::Sema::BuildCXXNamedCast(), clang::Sema::BuildCXXThrow(), clang::Sema::BuildCXXTypeId(), clang::Sema::BuildExpressionTrait(), clang::Sema::BuildExtVectorType(), clang::SemaObjC::BuildInstanceMessage(), clang::Sema::BuildMatrixType(), clang::Sema::BuildMemberReferenceExpr(), clang::SemaObjC::BuildObjCBoxedExpr(), clang::SemaObjC::BuildObjCBridgedCast(), clang::SemaObjC::BuildObjCSubscriptExpression(), clang::Sema::BuildPackIndexingType(), clang::Sema::BuildReturnStmt(), clang::Sema::BuildStaticAssertDeclaration(), clang::Sema::BuildTypeofExprType(), clang::Sema::BuildVAArgExpr(), clang::Sema::BuildVectorType(), clang::SemaARM::BuiltinARMSpecialReg(), clang::Sema::BuiltinConstantArg(), clang::Sema::BuiltinConstantArgMultiple(), clang::Sema::BuiltinConstantArgPower2(), clang::Sema::BuiltinConstantArgRange(), clang::Sema::BuiltinConstantArgShiftedByte(), clang::Sema::BuiltinConstantArgShiftedByteOrXXFF(), clang::Sema::BuiltinShuffleVector(), clang::canDynamicCastThrow(), clang::Sema::canThrow(), clang::Sema::CheckAddressOfOperand(), CheckAlignOfExpr(), clang::SemaARM::CheckARMCoprocessorImmediate(), CheckAsmLValue(), clang::SemaPseudoObject::checkAssignment(), checkAttrArgsAreCapabilityObjs(), clang::Sema::CheckBooleanCondition(), clang::SemaX86::CheckBuiltinGatherScatterScale(), clang::SemaX86::CheckBuiltinRoundingOrSAE(), clang::SemaX86::CheckBuiltinTileDuplicate(), clang::Sema::CheckCaseExpression(), clang::Sema::CheckConditionalOperands(), clang::Sema::CheckConstraintExpression(), clang::Sema::CheckEnumConstant(), clang::Sema::checkExceptionSpecification(), checkFormatStringExpr(), checkFunctionConditionAttr(), clang::Sema::checkFunctionOrMethodParameterIndex(), clang::SemaARM::CheckImmediateArg(), clang::Sema::CheckImplicitConversion(), clang::SemaPseudoObject::checkIncDec(), clang::SemaRISCV::CheckLMUL(), clang::SemaObjC::CheckObjCForCollectionOperand(), clang::SemaOpenMP::checkOpenMPDeclareVariantFunction(), checkSimdlenSafelenSpecified(), clang::Sema::CheckSwitchCondition(), clang::Sema::CheckTemplateArgument(), CheckTemplateArgumentPointerToMember(), clang::Sema::checkUInt32Argument(), clang::Sema::CheckVecStepExpr(), clang::computeDependence(), clang::Sema::ConstantFoldAttrArgs(), clang::CoroutineSuspendExpr::CoroutineSuspendExpr(), clang::Sema::CorrectDelayedTyposInExpr(), clang::Sema::CreateBuiltinArraySubscriptExpr(), clang::Sema::CreateBuiltinMatrixSubscriptExpr(), clang::Sema::CreateBuiltinUnaryOp(), clang::Sema::CreateGenericSelectionExpr(), clang::Sema::CreateOverloadedUnaryOp(), clang::Sema::CreateUnaryExprOrTypeTraitExpr(), clang::Sema::CXXCheckConditionalOperands(), clang::Sema::DiagnoseAssignmentEnum(), clang::Sema::DiagnoseEqualityWithExtraParens(), doRewriteToUTF8StringBoxedExpressionHelper(), clang::Sema::EvaluateStaticAssertMessageAsString(), findTemplateParameterInType(), clang::Sema::getDecltypeForExpr(), getDependentArraySubscriptType(), clang::ASTContext::getDependentSizedArrayType(), getPrivateItem(), clang::ASTContext::getTypeOfExprType(), clang::ArrayTypeTraitExpr::getValue(), handleSentinelAttr(), hasAnyTypeDependentArguments(), instantiateDependentFunctionAttrCondition(), clang::Sema::instantiateExplicitSpecifier(), isBoundMemberFunction(), clang::ChooseExpr::isConditionDependent(), isNonNegativeIntegerValue(), isNullPointerConstant(), isNullPointerConstantForConversion(), isNullPointerValueTemplateArgument(), clang::ASTContext::isPromotableBitField(), clang::TypeOfExprType::isSugared(), isUnusedResultAWarning(), ObjCEnumerationCollection(), clang::OverloadExpr::OverloadExpr(), clang::Sema::PerformContextualImplicitConversion(), processImplicitMapsWithDefaultMappers(), clang::SemaCodeCompletion::ProduceCallSignatureHelp(), clang::TreeTransform< Derived >::RebuildCXXForRangeStmt(), clang::TreeTransform< Derived >::RebuildCXXOperatorCallExpr(), rewriteToNumericBoxedExpression(), clang::Sema::tryExprAsCall(), clang::Sema::ValueIsRunOfOnes(), clang::Sema::VerifyBitField(), clang::SemaOpenMP::VerifyPositiveIntegerConstantInClause(), and clang::ASTNodeImporter::VisitUnresolvedLookupExpr().
bool Expr::isUnusedResultAWarning | ( | const Expr *& | WarnE, |
SourceLocation & | Loc, | ||
SourceRange & | R1, | ||
SourceRange & | R2, | ||
ASTContext & | Ctx | ||
) | const |
isUnusedResultAWarning - Return true if this immediate expression should be warned about if the result is unused.
If so, fill in expr, location, and ranges with expr to warn on and source locations/ranges appropriate for a warning.
If so, fill in Loc and Ranges with location to warn on and the source range[s] to report with the warning.
Definition at line 2617 of file Expr.cpp.
References clang::CompoundStmt::body_back(), clang::CompoundStmt::body_empty(), E, clang::CallExpr::getArg(), clang::Stmt::getBeginLoc(), clang::CallExpr::getCallee(), clang::CallExpr::getCalleeDecl(), clang::CallExpr::getCallReturnType(), clang::ASTContext::getCanonicalType(), clang::CastExpr::getCastKind(), clang::Stmt::getEndLoc(), getExprLoc(), clang::ASTContext::getLangOpts(), clang::BinaryOperator::getLHS(), clang::CStyleCastExpr::getLParenLoc(), clang::ObjCMessageExpr::getMethodDecl(), clang::ObjCMessageExpr::getMethodFamily(), clang::CallExpr::getNumArgs(), clang::UnaryOperator::getOpcode(), clang::BinaryOperator::getOpcode(), clang::CXXOperatorCallExpr::getOperator(), clang::UnaryOperator::getOperatorLoc(), clang::BinaryOperator::getOperatorLoc(), clang::CXXOperatorCallExpr::getOperatorLoc(), clang::BinaryOperator::getRHS(), clang::CXXOperatorCallExpr::getSourceRange(), clang::Stmt::getSourceRange(), clang::Stmt::getStmtClass(), clang::CastExpr::getSubExpr(), clang::UnaryOperator::getSubExpr(), getType(), clang::Type::hasAttr(), clang::CallExpr::hasUnusedResultAttr(), IgnoreParens(), clang::Type::isArrayType(), clang::BinaryOperator::isAssignmentOp(), clang::ObjCMessageExpr::isInstanceMessage(), isReadIfDiscardedInCPlusPlus11(), clang::Type::isReferenceType(), isTypeDependent(), isUnusedResultAWarning(), clang::Type::isVoidType(), clang::CanQual< T >::isVolatileQualified(), clang::QualType::isVolatileQualified(), Label, Loc, clang::OMF_init, and clang::Result.
Referenced by isUnusedResultAWarning().
|
inline |
Determines whether the value of this expression depends on.
For example, the array bound of "Chars" in the following example is value-dependent.
Definition at line 175 of file Expr.h.
References getDependence().
Referenced by clang::Sema::ActOnCaseExpr(), clang::Sema::ActOnChooseExpr(), clang::Sema::ActOnDesignatedInitializer(), clang::Sema::ActOnEffectExpression(), clang::Sema::ActOnFinishSwitchStmt(), clang::Sema::ActOnGCCAsmStmt(), clang::Sema::ActOnNoexceptSpec(), clang::SemaOpenMP::ActOnOMPArraySectionExpr(), clang::SemaOpenMP::ActOnOpenMPCriticalDirective(), clang::SemaOpenMP::ActOnOpenMPDeclareSimdDirective(), clang::SemaOpenMP::ActOnOpenMPDepobjClause(), clang::SemaOpenMP::ActOnOpenMPDetachClause(), clang::SemaOpenMP::ActOnOpenMPDistScheduleClause(), clang::SemaOpenMP::ActOnOpenMPInitClause(), clang::SemaOpenMP::ActOnOpenMPLinearClause(), clang::SemaOpenMP::ActOnOpenMPScheduleClause(), clang::Sema::AddAlignedAttr(), clang::Sema::AddAlignValueAttr(), clang::Sema::AddAssumeAlignedAttr(), AnalyzeBitFieldAssignment(), AnalyzeComparison(), AnalyzeImplicitConversions(), applyOMPAllocateAttribute(), clang::Sema::BuildAddressSpaceAttr(), BuildAddressSpaceIndex(), clang::Sema::BuildArrayType(), clang::Sema::BuildBuiltinOffsetOf(), clang::Sema::BuildCodeAlignAttr(), clang::Sema::BuildCompoundLiteralExpr(), clang::Sema::BuildExtVectorType(), clang::Sema::BuildMatrixType(), clang::Sema::BuildPackIndexingType(), clang::Sema::BuildStaticAssertDeclaration(), clang::Sema::BuildVectorType(), BuiltinAlignment(), clang::SemaARM::BuiltinARMSpecialReg(), clang::Sema::BuiltinConstantArg(), clang::Sema::BuiltinConstantArgMultiple(), clang::Sema::BuiltinConstantArgPower2(), clang::Sema::BuiltinConstantArgRange(), clang::Sema::BuiltinConstantArgShiftedByte(), clang::Sema::BuiltinConstantArgShiftedByteOrXXFF(), clang::Sema::BuiltinShuffleVector(), clang::canTypeidThrow(), clang::checkAMDGPUFlatWorkGroupSizeArguments(), clang::checkAMDGPUMaxNumWorkGroupsArguments(), clang::checkAMDGPUWavesPerEUArguments(), clang::SemaARM::CheckARMCoprocessorImmediate(), clang::SemaX86::CheckBuiltinGatherScatterScale(), clang::SemaX86::CheckBuiltinRoundingOrSAE(), clang::SemaX86::CheckBuiltinTileDuplicate(), checkBuiltinVerboseTrap(), clang::Sema::CheckCaseExpression(), clang::Sema::CheckCXXBooleanCondition(), clang::Sema::CheckEnumConstant(), clang::Sema::CheckForImmediateInvocation(), checkFormatStringExpr(), checkFunctionConditionAttr(), CheckICE(), clang::SemaARM::CheckImmediateArg(), clang::Sema::CheckImplicitConversion(), clang::SemaRISCV::CheckLMUL(), clang::Sema::CheckLogicalOperands(), clang::Sema::CheckLoopHintExpr(), CheckNonNullExpr(), clang::SemaOpenMP::checkOpenMPDeclareVariantFunction(), checkOpenMPLoop(), checkPointerAuthKey(), checkSimdlenSafelenSpecified(), clang::Sema::CheckSubtractionOperands(), clang::Sema::CheckTemplateArgument(), CheckTemplateArgumentAddressOfObjectOrFunction(), CheckTemplateArgumentPointerToMember(), clang::Sema::ConstantFoldAttrArgs(), clang::Sema::CorrectDelayedTyposInExpr(), clang::Sema::DiagnoseAssignmentEnum(), DiagnoseBadDivideOrRemainderValues(), DiagnoseBadShiftValues(), DiagnoseIntInBoolContext(), clang::Sema::DiagnoseSentinelCalls(), diagnoseStringPlusInt(), Evaluate(), EvaluateArray(), EvaluateArrayNewConstructExpr(), EvaluateArrayNewInitList(), EvaluateAsBooleanCondition(), EvaluateAsFixedPoint(), EvaluateAsInt(), EvaluateAsRValue(), EvaluateAtomic(), EvaluateComparisonBinaryOperator(), EvaluateComplex(), EvaluateCond(), EvaluateDependentExpr(), EvaluateFixedPoint(), EvaluateFixedPointOrInteger(), EvaluateFloat(), EvaluateIgnoredValue(), EvaluateInPlace(), EvaluateInteger(), EvaluateIntegerOrLValue(), EvaluateLValue(), EvaluateMemberPointer(), EvaluatePointer(), EvaluateRecord(), clang::Sema::EvaluateStaticAssertMessageAsString(), EvaluateStmt(), EvaluateSwitch(), EvaluateTemporary(), EvaluateVarDecl(), evaluateVarDeclInit(), EvaluateVoid(), clang::Sema::FinalizeVarWithDestructor(), clang::ASTContext::getDependentSizedArrayType(), clang::SizeOfPackExpr::getPackLength(), getPrivateItem(), clang::ConceptSpecializationExpr::getSatisfaction(), clang::TypeTraitExpr::getValue(), HandleAddressSpaceTypeAttribute(), handleLoopHintAttr(), instantiateDependentFunctionAttrCondition(), instantiateExplicitSpecifierDeferred(), clang::CXXDynamicCastExpr::isAlwaysNull(), clang::CallExpr::isBuiltinAssumeFalse(), clang::ChooseExpr::isConditionDependent(), isConstantInitializer(), isNonNegativeIntegerValue(), isNullPointerConstant(), isNullPointerConstantForConversion(), isNullPointerValueTemplateArgument(), clang::SizeOfPackExpr::isPartiallySubstituted(), isPotentialConstantExprUnevaluated(), clang::ASTContext::isPromotableBitField(), clang::ConceptSpecializationExpr::isSatisfied(), clang::RequiresExpr::isSatisfied(), clang::FieldDecl::isZeroLengthBitField(), makeLaunchBoundsArgExpr(), MustDelayAttributeArguments(), processImplicitMapsWithDefaultMappers(), clang::RequiresExpr::setSatisfied(), templateArgumentExpressionsEqual(), clang::Sema::tryResolveExplicitSpecifier(), clang::Sema::ValueIsRunOfOnes(), clang::Sema::VerifyBitField(), clang::SemaOpenMP::VerifyPositiveIntegerConstantInClause(), clang::interp::Compiler< Emitter >::visitAttributedStmt(), clang::ASTNodeImporter::VisitCXXNoexceptExpr(), clang::JSONNodeDumper::VisitRequiresExpr(), clang::ASTNodeImporter::VisitSizeOfPackExpr(), clang::ASTNodeImporter::VisitTypeTraitExpr(), and clang::TextNodeDumper::VisitVarDecl().
|
inline |
Definition at line 279 of file Expr.h.
References getValueKind(), and clang::VK_XValue.
Referenced by clang::Sema::getNamedReturnInfo(), tryEmitARCCopyWeakInit(), and tryEmitARCRetainLoadOfScalar().
|
inline |
Returns true if this expression is a gl-value that potentially refers to a bit-field.
In C++, whether a gl-value refers to a bitfield is essentially an aspect of the value-kind type system.
Definition at line 469 of file Expr.h.
References getObjectKind(), and clang::OK_BitField.
Referenced by clang::Sema::ActOnMSAsmStmt(), BuildConvertedConstantExpression(), clang::Sema::BuildTypeofExprType(), checkExprMemoryConstraintCompat(), clang::Sema::CreateUnaryExprOrTypeTraitExpr(), clang::Sema::CXXCheckConditionalOperands(), isNonReferenceableGLValue(), TryConstCast(), clang::interp::Compiler< Emitter >::VisitBinaryOperator(), and clang::interp::Compiler< Emitter >::VisitCompoundAssignOperator().
bool Expr::refersToGlobalRegisterVar | ( | ) | const |
Returns whether this expression refers to a global register variable.
Definition at line 4203 of file Expr.cpp.
References E, IgnoreParenImpCasts(), and clang::SC_Register.
Referenced by checkExprMemoryConstraintCompat().
|
inline |
Returns whether this expression refers to a matrix element.
Definition at line 507 of file Expr.h.
References getObjectKind(), and clang::OK_MatrixComponent.
Referenced by isNonReferenceableGLValue().
bool Expr::refersToVectorElement | ( | ) | const |
Returns whether this expression refers to a vector element.
Definition at line 4178 of file Expr.cpp.
References E, getType(), IgnoreParens(), clang::Type::isVectorType(), and refersToVectorElement().
Referenced by checkExprMemoryConstraintCompat(), clang::Sema::CXXCheckConditionalOperands(), isNonReferenceableGLValue(), and refersToVectorElement().
|
inlineprotected |
Each concrete expr subclass is expected to compute its dependence and call this in the constructor.
Definition at line 135 of file Expr.h.
References clang::Stmt::ExprBits.
Referenced by clang::AddrLabelExpr::AddrLabelExpr(), clang::ArrayInitIndexExpr::ArrayInitIndexExpr(), clang::ArrayInitLoopExpr::ArrayInitLoopExpr(), clang::ArraySectionExpr::ArraySectionExpr(), clang::ArraySubscriptExpr::ArraySubscriptExpr(), clang::ArrayTypeTraitExpr::ArrayTypeTraitExpr(), clang::AsTypeExpr::AsTypeExpr(), clang::AtomicExpr::AtomicExpr(), clang::BinaryConditionalOperator::BinaryConditionalOperator(), clang::BinaryOperator::BinaryOperator(), clang::BlockExpr::BlockExpr(), clang::CharacterLiteral::CharacterLiteral(), clang::ChooseExpr::ChooseExpr(), clang::CompoundLiteralExpr::CompoundLiteralExpr(), clang::CallExpr::computeDependence(), clang::ConditionalOperator::ConditionalOperator(), clang::ConvertVectorExpr::ConvertVectorExpr(), clang::CoroutineSuspendExpr::CoroutineSuspendExpr(), clang::CXXBoolLiteralExpr::CXXBoolLiteralExpr(), clang::CXXConstructExpr::CXXConstructExpr(), clang::CXXDeleteExpr::CXXDeleteExpr(), clang::CXXFoldExpr::CXXFoldExpr(), clang::CXXInheritedCtorInitExpr::CXXInheritedCtorInitExpr(), clang::CXXNoexceptExpr::CXXNoexceptExpr(), clang::CXXNullPtrLiteralExpr::CXXNullPtrLiteralExpr(), clang::CXXPseudoDestructorExpr::CXXPseudoDestructorExpr(), clang::CXXRewrittenBinaryOperator::CXXRewrittenBinaryOperator(), clang::CXXScalarValueInitExpr::CXXScalarValueInitExpr(), clang::CXXStdInitializerListExpr::CXXStdInitializerListExpr(), clang::CXXThrowExpr::CXXThrowExpr(), clang::CXXTypeidExpr::CXXTypeidExpr(), clang::CXXUuidofExpr::CXXUuidofExpr(), clang::DeclRefExpr::DeclRefExpr(), clang::DependentCoawaitExpr::DependentCoawaitExpr(), clang::DesignatedInitUpdateExpr::DesignatedInitUpdateExpr(), clang::EmbedExpr::EmbedExpr(), clang::ExplicitCastExpr::ExplicitCastExpr(), clang::ExpressionTraitExpr::ExpressionTraitExpr(), clang::ExtVectorElementExpr::ExtVectorElementExpr(), clang::FixedPointLiteral::FixedPointLiteral(), clang::FullExpr::FullExpr(), clang::GNUNullExpr::GNUNullExpr(), clang::ImaginaryLiteral::ImaginaryLiteral(), clang::ImplicitValueInitExpr::ImplicitValueInitExpr(), clang::InitListExpr::InitListExpr(), clang::IntegerLiteral::IntegerLiteral(), clang::CallExpr::markDependentForPostponedNameLookup(), clang::InitListExpr::markError(), clang::MaterializeTemporaryExpr::MaterializeTemporaryExpr(), clang::MatrixSubscriptExpr::MatrixSubscriptExpr(), clang::MSPropertyRefExpr::MSPropertyRefExpr(), clang::MSPropertySubscriptExpr::MSPropertySubscriptExpr(), clang::NoInitExpr::NoInitExpr(), clang::ObjCAvailabilityCheckExpr::ObjCAvailabilityCheckExpr(), clang::ObjCBoolLiteralExpr::ObjCBoolLiteralExpr(), clang::ObjCBoxedExpr::ObjCBoxedExpr(), clang::ObjCEncodeExpr::ObjCEncodeExpr(), clang::ObjCIndirectCopyRestoreExpr::ObjCIndirectCopyRestoreExpr(), clang::ObjCIsaExpr::ObjCIsaExpr(), clang::ObjCIvarRefExpr::ObjCIvarRefExpr(), clang::ObjCPropertyRefExpr::ObjCPropertyRefExpr(), clang::ObjCProtocolExpr::ObjCProtocolExpr(), clang::ObjCSelectorExpr::ObjCSelectorExpr(), clang::ObjCStringLiteral::ObjCStringLiteral(), clang::ObjCSubscriptRefExpr::ObjCSubscriptRefExpr(), clang::OpaqueValueExpr::OpaqueValueExpr(), clang::OverloadExpr::OverloadExpr(), clang::PackExpansionExpr::PackExpansionExpr(), clang::ParenExpr::ParenExpr(), clang::CXXThisExpr::setCapturedByCopyInLambdaWithExplicitObjectParameter(), clang::DeclRefExpr::setCapturedByCopyInLambdaWithExplicitObjectParameter(), clang::DeclRefExpr::setDecl(), clang::InitListExpr::setInit(), clang::MemberExpr::setMemberDecl(), clang::ShuffleVectorExpr::ShuffleVectorExpr(), clang::SourceLocExpr::SourceLocExpr(), clang::StmtExpr::StmtExpr(), clang::SubstNonTypeTemplateParmExpr::SubstNonTypeTemplateParmExpr(), clang::SubstNonTypeTemplateParmPackExpr::SubstNonTypeTemplateParmPackExpr(), clang::TypoExpr::TypoExpr(), clang::UnaryExprOrTypeTraitExpr::UnaryExprOrTypeTraitExpr(), clang::UnaryOperator::UnaryOperator(), clang::CXXParenListInitExpr::updateDependence(), and clang::VAArgExpr::VAArgExpr().
|
inline |
setObjectKind - Set the object kind produced by this expression.
Definition at line 457 of file Expr.h.
References clang::Stmt::ExprBits.
Referenced by clang::Sema::BuildDeclRefExpr(), and BuiltinCallWithStaticChain().
|
inline |
Definition at line 143 of file Expr.h.
References clang::QualType::isNull(), and clang::Type::isReferenceType().
Referenced by clang::Sema::BuildDeclRefExpr(), BuildExpressionFromNonTypeTemplateArgumentValue(), clang::Sema::BuildInitList(), clang::Sema::BuildMemberExpr(), clang::Sema::BuildResolvedCallExpr(), clang::Sema::BuildTemplateIdExpr(), clang::Sema::BuildVectorLiteral(), BuiltinAddressof(), BuiltinAlignment(), builtinAllocaAddrSpace(), BuiltinAnnotation(), clang::SemaARM::BuiltinARMMemoryTaggingCall(), BuiltinCallWithStaticChain(), clang::Sema::BuiltinElementwiseTernaryMath(), BuiltinIsWithinLifetime(), BuiltinLaunder(), clang::SemaPPC::BuiltinPPCMMACall(), BuiltinPreserveAI(), clang::Sema::BuiltinVectorToScalarMath(), clang::SemaPPC::BuiltinVSX(), clang::SemaWasm::BuiltinWasmRefNullExtern(), clang::SemaWasm::BuiltinWasmRefNullFunc(), clang::SemaWasm::BuiltinWasmTableGet(), clang::SemaARM::CheckARMBuiltinExclusiveCall(), CheckBoolSelect(), clang::SemaBPF::CheckBPFBuiltinFunctionCall(), clang::SemaRISCV::CheckBuiltinFunctionCall(), clang::SemaHLSL::CheckBuiltinFunctionCall(), CheckVectorSelect(), clang::Sema::completeExprArrayBound(), CreateFunctionRefExpr(), clang::DesignatedInitUpdateExpr::DesignatedInitUpdateExpr(), Expr(), clang::OverloadExpr::OverloadExpr(), clang::InitializationSequence::Perform(), clang::Sema::PrepareBuiltinElementwiseMathOneArgCall(), clang::DeclRefExpr::setDecl(), SetElementTypeAsReturnType(), clang::MemberExpr::setMemberDecl(), TryListConversion(), updateStringLiteralType(), and clang::ASTNodeImporter::VisitInitListExpr().
|
inline |
setValueKind - Set the value kind produced by this expression.
Definition at line 454 of file Expr.h.
References clang::Stmt::ExprBits.
Referenced by clang::Sema::BuildResolvedCallExpr(), BuiltinCallWithStaticChain(), clang::SemaHLSL::CheckBuiltinFunctionCall(), clang::InitializationSequence::Perform(), removeLValueToRValueCast(), updateGNUCompoundLiteralRValue(), and updateStringLiteralType().
|
inline |
Definition at line 1015 of file Expr.h.
References skipRValueSubobjectAdjustments().
Referenced by skipRValueSubobjectAdjustments().
const Expr * Expr::skipRValueSubobjectAdjustments | ( | SmallVectorImpl< const Expr * > & | CommaLHS, |
SmallVectorImpl< SubobjectAdjustment > & | Adjustments | ||
) | const |
Walk outwards from an expression we want to bind a reference to and find the expression whose lifetime needs to be extended.
Record the LHSs of comma expressions and adjustments needed along the path.
Definition at line 82 of file Expr.cpp.
References clang::Type::castAs(), E, clang::Type::getAs(), clang::RecordType::getDecl(), getType(), IgnoreParens(), and clang::Type::isRecordType().
Referenced by clang::APValue::LValueBase::getType(), and clang::interp::Compiler< Emitter >::VisitMaterializeTemporaryExpr().
bool Expr::tryEvaluateObjectSize | ( | uint64_t & | Result, |
ASTContext & | Ctx, | ||
unsigned | Type | ||
) | const |
If the current Expr is a pointer, this will try to statically determine the number of bytes available where the pointer is pointing.
Returns true if all of the above holds and we were able to figure out the size, false otherwise.
Type | - How to evaluate the size of the Expr, as defined by the "type" parameter of __builtin_object_size |
Definition at line 17690 of file ExprConstant.cpp.
References tryEvaluateBuiltinObjectSize().
std::optional< std::string > Expr::tryEvaluateString | ( | ASTContext & | Ctx | ) | const |
If the current Expr can be evaluated to a pointer to a null-terminated constant string, return the constant string (without the terminating null).
Definition at line 17752 of file ExprConstant.cpp.
References EvaluateBuiltinStrLen().
Referenced by checkBuiltinVerboseTrap().
bool Expr::tryEvaluateStrLen | ( | uint64_t & | Result, |
ASTContext & | Ctx | ||
) | const |
If the current Expr is a pointer, this will try to statically determine the strlen of the string pointed to.
Returns true if all of the above holds and we were able to figure out the strlen, false otherwise.
Definition at line 17802 of file ExprConstant.cpp.
References EvaluateBuiltinStrLen().
|
friend |
|
friend |