A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://clang.llvm.org/doxygen/ExprConstant_8cpp.html below:

clang: lib/AST/ExprConstant.cpp File Reference

#include "ByteCode/Context.h"
#include "ByteCode/Frame.h"
#include "ByteCode/State.h"
#include "ExprConstShared.h"
#include "clang/AST/APValue.h"
#include "clang/AST/ASTContext.h"
#include "clang/AST/ASTLambda.h"
#include "clang/AST/Attr.h"
#include "clang/AST/CXXInheritance.h"
#include "clang/AST/CharUnits.h"
#include "clang/AST/CurrentSourceLocExprScope.h"
#include "clang/AST/Expr.h"
#include "clang/AST/OSLog.h"
#include "clang/AST/OptionalDiagnostic.h"
#include "clang/AST/RecordLayout.h"
#include "clang/AST/StmtVisitor.h"
#include "clang/AST/TypeLoc.h"
#include "clang/Basic/Builtins.h"
#include "clang/Basic/DiagnosticSema.h"
#include "clang/Basic/TargetBuiltins.h"
#include "clang/Basic/TargetInfo.h"
#include "llvm/ADT/APFixedPoint.h"
#include "llvm/ADT/Sequence.h"
#include "llvm/ADT/SmallBitVector.h"
#include "llvm/ADT/StringExtras.h"
#include "llvm/Support/Casting.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/SaveAndRestore.h"
#include "llvm/Support/SipHash.h"
#include "llvm/Support/TimeProfiler.h"
#include "llvm/Support/raw_ostream.h"
#include <cstring>
#include <functional>
#include <optional>
#include "clang/AST/TypeNodes.inc"
#include "clang/AST/BuiltinTypes.def"
#include "clang/Basic/OpenCLImageTypes.def"
#include "clang/Basic/OpenCLExtensionTypes.def"
#include "clang/Basic/AArch64SVEACLETypes.def"
#include "clang/Basic/PPCTypes.def"
#include "clang/Basic/RISCVVTypes.def"
#include "clang/Basic/WebAssemblyReferenceTypes.def"
#include "clang/Basic/AMDGPUTypes.def"
#include "clang/Basic/HLSLIntangibleTypes.def"
#include "clang/AST/StmtNodes.inc"

Go to the source code of this file.

namespace   llvm   Diagnostic wrappers for TextAPI types for error reporting.
  #define  DEBUG_TYPE   "exprconstant"   #define  TYPE(Class, Base)   #define  ABSTRACT_TYPE(Class, Base)   #define  NON_CANONICAL_TYPE(Class, Base)   #define  DEPENDENT_TYPE(Class, Base)   #define  NON_CANONICAL_UNLESS_DEPENDENT(Class, Base)   #define  TYPE(ID, BASE)   #define  DEPENDENT_TYPE(ID, BASE)   case Type::ID:   #define  NON_CANONICAL_TYPE(ID, BASE)   case Type::ID:   #define  NON_CANONICAL_UNLESS_DEPENDENT_TYPE(ID, BASE)   case Type::ID:   #define  BUILTIN_TYPE(ID, SINGLETON_ID)   #define  SIGNED_TYPE(ID, SINGLETON_ID)    case BuiltinType::ID: return GCCTypeClass::Integer;   #define  FLOATING_TYPE(ID, SINGLETON_ID)    case BuiltinType::ID: return GCCTypeClass::RealFloat;   #define  PLACEHOLDER_TYPE(ID, SINGLETON_ID)    case BuiltinType::ID: break;   #define  IMAGE_TYPE(ImgType, Id, SingletonId, Access, Suffix)    case BuiltinType::Id:   #define  EXT_OPAQUE_TYPE(ExtType, Id, Ext)    case BuiltinType::Id:   #define  SVE_TYPE(Name, Id, SingletonId)    case BuiltinType::Id:   #define  PPC_VECTOR_TYPE(Name, Id, Size)    case BuiltinType::Id:   #define  RVV_TYPE(Name, Id, SingletonId)   case BuiltinType::Id:   #define  WASM_TYPE(Name, Id, SingletonId)   case BuiltinType::Id:   #define  AMDGPU_TYPE(Name, Id, SingletonId, Width, Align)   case BuiltinType::Id:   #define  HLSL_INTANGIBLE_TYPE(Name, Id, SingletonId)   case BuiltinType::Id:   #define  ABSTRACT_STMT(Node)   #define  STMT(Node, Base)   case Expr::Node##Class:   #define  EXPR(Node, Base)   static bool  HandleDestruction (EvalInfo &Info, const Expr *E, const LValue &This, QualType ThisType)   Perform a destructor or pseudo-destructor call on the given object, which might in general not be a complete object.
  static bool  HandleDestruction (EvalInfo &Info, SourceLocation Loc, APValue::LValueBase LVBase, APValue &Value, QualType T)   Destroy and end the lifetime of the given complete object.
  static bool  isRead (AccessKinds AK)   static bool  isModification (AccessKinds AK)   static bool  isAnyAccess (AccessKinds AK)   static bool  isFormalAccess (AccessKinds AK)   Is this an access per the C++ definition?
  static bool  isValidIndeterminateAccess (AccessKinds AK)   Is this kind of axcess valid on an indeterminate object value?
  static bool  Evaluate (APValue &Result, EvalInfo &Info, const Expr *E)   static bool  EvaluateInPlace (APValue &Result, EvalInfo &Info, const LValue &This, const Expr *E, bool AllowNonLiteralTypes)   EvaluateInPlace - Evaluate an expression in-place in an APValue.
  static bool  EvaluateLValue (const Expr *E, LValue &Result, EvalInfo &Info, bool InvalidBaseOK)   Evaluate an expression as an lvalue.
  static bool  EvaluatePointer (const Expr *E, LValue &Result, EvalInfo &Info, bool InvalidBaseOK=false)   static bool  EvaluateMemberPointer (const Expr *E, MemberPtr &Result, EvalInfo &Info)   static bool  EvaluateTemporary (const Expr *E, LValue &Result, EvalInfo &Info)   Evaluate an expression of record type as a temporary.
  static bool  EvaluateInteger (const Expr *E, APSInt &Result, EvalInfo &Info)   static bool  EvaluateIntegerOrLValue (const Expr *E, APValue &Result, EvalInfo &Info)   EvaluateIntegerOrLValue - Evaluate an rvalue integral-typed expression, and produce either the integer value or a pointer.
  static bool  EvaluateFloat (const Expr *E, APFloat &Result, EvalInfo &Info)   static bool  EvaluateComplex (const Expr *E, ComplexValue &Res, EvalInfo &Info)   static bool  EvaluateAtomic (const Expr *E, const LValue *This, APValue &Result, EvalInfo &Info)   static bool  EvaluateAsRValue (EvalInfo &Info, const Expr *E, APValue &Result)   EvaluateAsRValue - Try to evaluate this expression, performing an implicit lvalue-to-rvalue cast if it is an lvalue.
  static bool  EvaluateBuiltinStrLen (const Expr *E, uint64_t &Result, EvalInfo &Info, std::string *StringResult=nullptr)   static bool  EvaluateFixedPointOrInteger (const Expr *E, APFixedPoint &Result, EvalInfo &Info)   Evaluate an integer or fixed point expression into an APResult.
  static bool  EvaluateFixedPoint (const Expr *E, APFixedPoint &Result, EvalInfo &Info)   Evaluate only a fixed point expression into an APResult.
  static void  negateAsSigned (APSInt &Int)   Negate an APSInt in place, converting it to a signed form if necessary, and preserving its value (by extending by up to one bit as needed).
  static bool  EvaluateIgnoredValue (EvalInfo &Info, const Expr *E)   Evaluate an expression to see if it had side-effects, and discard its result.
  static bool  IsOpaqueConstantCall (const CallExpr *E)   Should this call expression be treated as forming an opaque constant?
  static bool  IsOpaqueConstantCall (const LValue &LVal)   static bool  IsGlobalLValue (APValue::LValueBase B)   static const ValueDeclGetLValueBaseDecl (const LValue &LVal)   static bool  GetLValueBaseAsString (const EvalInfo &Info, const LValue &LVal, LValueBaseString &AsString)   static bool  ArePotentiallyOverlappingStringLiterals (const EvalInfo &Info, const LValue &LHS, const LValue &RHS)   static bool  IsWeakLValue (const LValue &Value)   static bool  isZeroSized (const LValue &Value)   static bool  HasSameBase (const LValue &A, const LValue &B)   static void  NoteLValueLocation (EvalInfo &Info, APValue::LValueBase Base)   static bool  CheckEvaluationResult (CheckEvaluationResultKind CERK, EvalInfo &Info, SourceLocation DiagLoc, QualType Type, const APValue &Value, ConstantExprKind Kind, const FieldDecl *SubobjectDecl, CheckedTemporaries &CheckedTemps)   static bool  CheckLValueConstantExpression (EvalInfo &Info, SourceLocation Loc, QualType Type, const LValue &LVal, ConstantExprKind Kind, CheckedTemporaries &CheckedTemps)   Check that this reference or pointer core constant expression is a valid value for an address or reference constant expression.
  static bool  CheckMemberPointerConstantExpression (EvalInfo &Info, SourceLocation Loc, QualType Type, const APValue &Value, ConstantExprKind Kind)   Member pointers are constant expressions unless they point to a non-virtual dllimport member function.
  static bool  CheckLiteralType (EvalInfo &Info, const Expr *E, const LValue *This=nullptr)   Check that this core constant expression is of literal type, and if not, produce an appropriate diagnostic.
  static bool  CheckConstantExpression (EvalInfo &Info, SourceLocation DiagLoc, QualType Type, const APValue &Value, ConstantExprKind Kind)   Check that this core constant expression value is a valid value for a constant expression.
  static bool  CheckFullyInitialized (EvalInfo &Info, SourceLocation DiagLoc, QualType Type, const APValue &Value)   Check that this evaluated value is fully-initialized and can be loaded by an lvalue-to-rvalue conversion.
  static bool  CheckMemoryLeaks (EvalInfo &Info)   Enforce C++2a [expr.const]/4.17, which disallows new-expressions unless "the allocated storage is deallocated within the evaluation".
  static bool  EvalPointerValueAsBool (const APValue &Value, bool &Result)   static bool  HandleConversionToBool (const APValue &Val, bool &Result)   static bool  EvaluateAsBooleanCondition (const Expr *E, bool &Result, EvalInfo &Info)   template<typename T > static bool  HandleOverflow (EvalInfo &Info, const Expr *E, const T &SrcValue, QualType DestType)   static bool  HandleFloatToIntCast (EvalInfo &Info, const Expr *E, QualType SrcType, const APFloat &Value, QualType DestType, APSInt &Result)   static llvm::RoundingMode  getActiveRoundingMode (EvalInfo &Info, const Expr *E)   Get rounding mode to use in evaluation of the specified expression.
  static bool  checkFloatingPointResult (EvalInfo &Info, const Expr *E, APFloat::opStatus St)   Check if the given evaluation result is allowed for constant evaluation.
  static bool  HandleFloatToFloatCast (EvalInfo &Info, const Expr *E, QualType SrcType, QualType DestType, APFloat &Result)   static APSInt  HandleIntToIntCast (EvalInfo &Info, const Expr *E, QualType DestType, QualType SrcType, const APSInt &Value)   static bool  HandleIntToFloatCast (EvalInfo &Info, const Expr *E, const FPOptions FPO, QualType SrcType, const APSInt &Value, QualType DestType, APFloat &Result)   static bool  truncateBitfieldValue (EvalInfo &Info, const Expr *E, APValue &Value, const FieldDecl *FD)   template<typename Operation > static bool  CheckedIntArithmetic (EvalInfo &Info, const Expr *E, const APSInt &LHS, const APSInt &RHS, unsigned BitWidth, Operation Op, APSInt &Result)   Perform the given integer operation, which is known to need at most BitWidth bits, and check for overflow in the original type (if that type was not an unsigned type).
  static bool  handleIntIntBinOp (EvalInfo &Info, const BinaryOperator *E, const APSInt &LHS, BinaryOperatorKind Opcode, APSInt RHS, APSInt &Result)   Perform the given binary integer operation.
  static bool  handleFloatFloatBinOp (EvalInfo &Info, const BinaryOperator *E, APFloat &LHS, BinaryOperatorKind Opcode, const APFloat &RHS)   Perform the given binary floating-point operation, in-place, on LHS.
  static bool  handleLogicalOpForVector (const APInt &LHSValue, BinaryOperatorKind Opcode, const APInt &RHSValue, APInt &Result)   static bool  handleLogicalOpForVector (const APFloat &LHSValue, BinaryOperatorKind Opcode, const APFloat &RHSValue, APInt &Result)   static bool  handleLogicalOpForVector (const APValue &LHSValue, BinaryOperatorKind Opcode, const APValue &RHSValue, APInt &Result)   template<typename APTy > static bool  handleCompareOpForVectorHelper (const APTy &LHSValue, BinaryOperatorKind Opcode, const APTy &RHSValue, APInt &Result)   static bool  handleCompareOpForVector (const APValue &LHSValue, BinaryOperatorKind Opcode, const APValue &RHSValue, APInt &Result)   static bool  handleVectorVectorBinOp (EvalInfo &Info, const BinaryOperator *E, BinaryOperatorKind Opcode, APValue &LHSValue, const APValue &RHSValue)   static bool  CastToDerivedClass (EvalInfo &Info, const Expr *E, LValue &Result, const RecordDecl *TruncatedType, unsigned TruncatedElements)   Cast an lvalue referring to a base subobject to a derived class, by truncating the lvalue's path to the given length.
  static bool  HandleLValueDirectBase (EvalInfo &Info, const Expr *E, LValue &Obj, const CXXRecordDecl *Derived, const CXXRecordDecl *Base, const ASTRecordLayout *RL=nullptr)   static bool  HandleLValueBase (EvalInfo &Info, const Expr *E, LValue &Obj, const CXXRecordDecl *DerivedDecl, const CXXBaseSpecifier *Base)   static bool  HandleLValueBasePath (EvalInfo &Info, const CastExpr *E, QualType Type, LValue &Result)   static bool  CastToBaseClass (EvalInfo &Info, const Expr *E, LValue &Result, const CXXRecordDecl *DerivedRD, const CXXRecordDecl *BaseRD)   Cast an lvalue referring to a derived class to a known base subobject.
  static bool  HandleLValueMember (EvalInfo &Info, const Expr *E, LValue &LVal, const FieldDecl *FD, const ASTRecordLayout *RL=nullptr)   Update LVal to refer to the given field, which must be a member of the type currently described by LVal.
  static bool  HandleLValueIndirectMember (EvalInfo &Info, const Expr *E, LValue &LVal, const IndirectFieldDecl *IFD)   Update LVal to refer to the given indirect field.
  static bool  HandleSizeof (EvalInfo &Info, SourceLocation Loc, QualType Type, CharUnits &Size, SizeOfType SOT=SizeOfType::SizeOf)   Get the size of the given type in char units.
  static bool  HandleLValueArrayAdjustment (EvalInfo &Info, const Expr *E, LValue &LVal, QualType EltTy, APSInt Adjustment)   Update a pointer value to model pointer arithmetic.
  static bool  HandleLValueArrayAdjustment (EvalInfo &Info, const Expr *E, LValue &LVal, QualType EltTy, int64_t Adjustment)   static bool  HandleLValueComplexElement (EvalInfo &Info, const Expr *E, LValue &LVal, QualType EltTy, bool Imag)   Update an lvalue to refer to a component of a complex number.
  static bool  HandleLValueVectorElement (EvalInfo &Info, const Expr *E, LValue &LVal, QualType EltTy, uint64_t Size, uint64_t Idx)   static bool  evaluateVarDeclInit (EvalInfo &Info, const Expr *E, const VarDecl *VD, CallStackFrame *Frame, unsigned Version, APValue *&Result)   Try to evaluate the initializer for a variable declaration.
  static unsigned  getBaseIndex (const CXXRecordDecl *Derived, const CXXRecordDecl *Base)   Get the base index of the given base class within an APValue representing the given derived class.
  static APSInt  extractStringLiteralCharacter (EvalInfo &Info, const Expr *Lit, uint64_t Index)   Extract the value of a character from a string literal.
  static void  expandStringLiteral (EvalInfo &Info, const StringLiteral *S, APValue &Result, QualType AllocType=QualType())   static void  expandArray (APValue &Array, unsigned Index)   static bool  isReadByLvalueToRvalueConversion (const CXXRecordDecl *RD)   Determine whether a type would actually be read by an lvalue-to-rvalue conversion.
  static bool  isReadByLvalueToRvalueConversion (QualType T)   static bool  diagnoseMutableFields (EvalInfo &Info, const Expr *E, AccessKinds AK, QualType T)   Diagnose an attempt to read from any unreadable field within the specified type, which might be a class type.
  static bool  lifetimeStartedInEvaluation (EvalInfo &Info, APValue::LValueBase Base, bool MutableSubobject=false)   static bool  CheckArraySize (EvalInfo &Info, const ConstantArrayType *CAT, SourceLocation CallLoc={})   static QualType  getSubobjectType (QualType ObjType, QualType SubobjType, bool IsMutable=false)   template<typename SubobjectHandler > static SubobjectHandler::result_type  findSubobject (EvalInfo &Info, const Expr *E, const CompleteObject &Obj, const SubobjectDesignator &Sub, SubobjectHandler &handler)   Find the designated sub-object of an rvalue.
  static bool  extractSubobject (EvalInfo &Info, const Expr *E, const CompleteObject &Obj, const SubobjectDesignator &Sub, APValue &Result, AccessKinds AK=AK_Read)   Extract the designated sub-object of an rvalue.
  static bool  modifySubobject (EvalInfo &Info, const Expr *E, const CompleteObject &Obj, const SubobjectDesignator &Sub, APValue &NewVal)   Update the designated sub-object of an rvalue to the given value.
  static unsigned  FindDesignatorMismatch (QualType ObjType, const SubobjectDesignator &A, const SubobjectDesignator &B, bool &WasArrayIndex)   Find the position where two subobject designators diverge, or equivalently the length of the common initial subsequence.
  static bool  AreElementsOfSameArray (QualType ObjType, const SubobjectDesignator &A, const SubobjectDesignator &B)   Determine whether the given subobject designators refer to elements of the same array object.
  static CompleteObject  findCompleteObject (EvalInfo &Info, const Expr *E, AccessKinds AK, const LValue &LVal, QualType LValType)   Find the complete object to which an LValue refers.
  static bool  handleLValueToRValueConversion (EvalInfo &Info, const Expr *Conv, QualType Type, const LValue &LVal, APValue &RVal, bool WantObjectRepresentation=false)   Perform an lvalue-to-rvalue conversion on the given glvalue.
  static bool  handleAssignment (EvalInfo &Info, const Expr *E, const LValue &LVal, QualType LValType, APValue &Val)   Perform an assignment of Val to LVal. Takes ownership of Val.
  static bool  handleCompoundAssignment (EvalInfo &Info, const CompoundAssignOperator *E, const LValue &LVal, QualType LValType, QualType PromotedLValType, BinaryOperatorKind Opcode, const APValue &RVal)   Perform a compound assignment of LVal <op>= RVal.
  static bool  handleIncDec (EvalInfo &Info, const Expr *E, const LValue &LVal, QualType LValType, bool IsIncrement, APValue *Old)   Perform an increment or decrement on LVal.
  static bool  EvaluateObjectArgument (EvalInfo &Info, const Expr *Object, LValue &This)   Build an lvalue for the object argument of a member function call.
  static const ValueDeclHandleMemberPointerAccess (EvalInfo &Info, QualType LVType, LValue &LV, const Expr *RHS, bool IncludeMember=true)   HandleMemberPointerAccess - Evaluate a member access operation and build an lvalue referring to the result.
  static const ValueDeclHandleMemberPointerAccess (EvalInfo &Info, const BinaryOperator *BO, LValue &LV, bool IncludeMember=true)   static bool  HandleBaseToDerivedCast (EvalInfo &Info, const CastExpr *E, LValue &Result)   HandleBaseToDerivedCast - Apply the given base-to-derived cast operation on the provided lvalue, which currently refers to the base object.
  static bool  handleDefaultInitValue (QualType T, APValue &Result)   Get the value to use for a default-initialized object of type T.
  static bool  EvaluateVarDecl (EvalInfo &Info, const VarDecl *VD)   static bool  EvaluateDecl (EvalInfo &Info, const Decl *D)   static bool  EvaluateDependentExpr (const Expr *E, EvalInfo &Info)   static bool  EvaluateCond (EvalInfo &Info, const VarDecl *CondDecl, const Expr *Cond, bool &Result)   Evaluate a condition (either a variable declaration or an expression).
  static EvalStmtResult  EvaluateStmt (StmtResult &Result, EvalInfo &Info, const Stmt *S, const SwitchCase *SC=nullptr)   static EvalStmtResult  EvaluateLoopBody (StmtResult &Result, EvalInfo &Info, const Stmt *Body, const SwitchCase *Case=nullptr)   Evaluate the body of a loop, and translate the result as appropriate.
  static EvalStmtResult  EvaluateSwitch (StmtResult &Result, EvalInfo &Info, const SwitchStmt *SS)   Evaluate a switch statement.
  static bool  CheckLocalVariableDeclaration (EvalInfo &Info, const VarDecl *VD)   static bool  CheckTrivialDefaultConstructor (EvalInfo &Info, SourceLocation Loc, const CXXConstructorDecl *CD, bool IsValueInitialization)   CheckTrivialDefaultConstructor - Check whether a constructor is a trivial default constructor.
  static bool  CheckConstexprFunction (EvalInfo &Info, SourceLocation CallLoc, const FunctionDecl *Declaration, const FunctionDecl *Definition, const Stmt *Body)   CheckConstexprFunction - Check that a function can be called in a constant expression.
  static bool  checkDynamicType (EvalInfo &Info, const Expr *E, const LValue &This, AccessKinds AK, bool Polymorphic)   Check that we can access the notional vptr of an object / determine its dynamic type.
  static bool  checkNonVirtualMemberCallThisPointer (EvalInfo &Info, const Expr *E, const LValue &This, const CXXMethodDecl *NamedMember)   Check that the pointee of the 'this' pointer in a member function call is either within its lifetime or in its period of construction or destruction.
  static const CXXRecordDeclgetBaseClassType (SubobjectDesignator &Designator, unsigned PathLength)   static std::optional< DynamicTypeComputeDynamicType (EvalInfo &Info, const Expr *E, LValue &This, AccessKinds AK)   Determine the dynamic type of an object.
  static const CXXMethodDeclHandleVirtualDispatch (EvalInfo &Info, const Expr *E, LValue &This, const CXXMethodDecl *Found, llvm::SmallVectorImpl< QualType > &CovariantAdjustmentPath)   Perform virtual dispatch.
  static bool  HandleCovariantReturnAdjustment (EvalInfo &Info, const Expr *E, APValue &Result, ArrayRef< QualType > Path)   Perform the adjustment from a value returned by a virtual function to a value of the statically expected type, which may be a pointer or reference to a base class of the returned type.
  static bool  isBaseClassPublic (const CXXRecordDecl *Derived, const CXXRecordDecl *Base)   Determine whether Base, which is known to be a direct base class of Derived, is a public base class.
  static bool  HandleDynamicCast (EvalInfo &Info, const ExplicitCastExpr *E, LValue &Ptr)   Apply the given dynamic cast operation on the provided lvalue.
  static bool  MaybeHandleUnionActiveMemberChange (EvalInfo &Info, const Expr *LHSExpr, const LValue &LHS)   Handle a builtin simple-assignment or a call to a trivial assignment operator whose left-hand side might involve a union member access.
  static bool  EvaluateCallArg (const ParmVarDecl *PVD, const Expr *Arg, CallRef Call, EvalInfo &Info, bool NonNull=false)   static bool  EvaluateArgs (ArrayRef< const Expr * > Args, CallRef Call, EvalInfo &Info, const FunctionDecl *Callee, bool RightToLeft=false)   Evaluate the arguments to a function call.
  static bool  handleTrivialCopy (EvalInfo &Info, const ParmVarDecl *Param, const Expr *E, APValue &Result, bool CopyObjectRepresentation)   Perform a trivial copy from Param, which is the parameter of a copy or move constructor or assignment operator.
  static bool  HandleFunctionCall (SourceLocation CallLoc, const FunctionDecl *Callee, const LValue *This, const Expr *E, ArrayRef< const Expr * > Args, CallRef Call, const Stmt *Body, EvalInfo &Info, APValue &Result, const LValue *ResultSlot)   Evaluate a function call.
  static bool  HandleConstructorCall (const Expr *E, const LValue &This, CallRef Call, const CXXConstructorDecl *Definition, EvalInfo &Info, APValue &Result)   Evaluate a constructor call.
  static bool  HandleConstructorCall (const Expr *E, const LValue &This, ArrayRef< const Expr * > Args, const CXXConstructorDecl *Definition, EvalInfo &Info, APValue &Result)   static bool  HandleDestructionImpl (EvalInfo &Info, SourceRange CallRange, const LValue &This, APValue &Value, QualType T)   static bool  HandleOperatorNewCall (EvalInfo &Info, const CallExpr *E, LValue &Result)   Perform a call to 'operator new' or to ‘__builtin_operator_new’.
  static bool  hasVirtualDestructor (QualType T)   static const FunctionDeclgetVirtualOperatorDelete (QualType T)   static std::optional< DynAlloc * >  CheckDeleteKind (EvalInfo &Info, const Expr *E, const LValue &Pointer, DynAlloc::Kind DeallocKind)   Check that the given object is a suitable pointer to a heap allocation that still exists and is of the right kind for the purpose of a deletion.
  static bool  HandleOperatorDeleteCall (EvalInfo &Info, const CallExpr *E)   static bool  HandleLambdaCapture (EvalInfo &Info, const Expr *E, LValue &Result, const CXXMethodDecl *MD, const FieldDecl *FD, bool LValueToRValueConversion)   Get an lvalue to a field of a lambda's closure type.
  static bool  getBytesReturnedByAllocSizeCall (const ASTContext &Ctx, const CallExpr *Call, llvm::APInt &Result)   Attempts to compute the number of bytes available at the pointer returned by a function with the alloc_size attribute.
  static bool  getBytesReturnedByAllocSizeCall (const ASTContext &Ctx, const LValue &LVal, llvm::APInt &Result)   Convenience function.
  static bool  evaluateLValueAsAllocSize (EvalInfo &Info, APValue::LValueBase Base, LValue &Result)   Attempts to evaluate the given LValueBase as the result of a call to a function with the alloc_size attribute.
  static bool  IsDeclSourceLocationCurrent (const FunctionDecl *FD)   static CharUnits  GetAlignOfType (const ASTContext &Ctx, QualType T, UnaryExprOrTypeTrait ExprKind)   CharUnits  GetAlignOfExpr (const ASTContext &Ctx, const Expr *E, UnaryExprOrTypeTrait ExprKind)   static CharUnits  getBaseAlignment (EvalInfo &Info, const LValue &Value)   static bool  getAlignmentArgument (const Expr *E, QualType ForType, EvalInfo &Info, APSInt &Alignment)   Evaluate the value of the alignment argument to __builtin_align_{up,down}, __builtin_is_aligned and __builtin_assume_aligned.
  static bool  isOneByteCharacterType (QualType T)   static bool  EvaluateArrayNewInitList (EvalInfo &Info, LValue &This, APValue &Result, const InitListExpr *ILE, QualType AllocType)   static bool  EvaluateArrayNewConstructExpr (EvalInfo &Info, LValue &This, APValue &Result, const CXXConstructExpr *CCE, QualType AllocType)   static bool  HandleClassZeroInitialization (EvalInfo &Info, const Expr *E, const RecordDecl *RD, const LValue &This, APValue &Result)   Perform zero-initialization on an object of non-union class type.
  static bool  EvaluateRecord (const Expr *E, const LValue &This, APValue &Result, EvalInfo &Info)   static bool  EvaluateVector (const Expr *E, APValue &Result, EvalInfo &Info)   static std::optional< APValuehandleVectorUnaryOperator (ASTContext &Ctx, QualType ResultTy, UnaryOperatorKind Op, APValue Elt)   static bool  handleVectorElementCast (EvalInfo &Info, const FPOptions FPO, const Expr *E, QualType SourceTy, QualType DestTy, APValue const &Original, APValue &Result)   static bool  handleVectorShuffle (EvalInfo &Info, const ShuffleVectorExpr *E, QualType ElemType, APValue const &VecVal1, APValue const &VecVal2, unsigned EltNum, APValue &Result)   static bool  EvaluateArray (const Expr *E, const LValue &This, APValue &Result, EvalInfo &Info)   static bool  MaybeElementDependentArrayFiller (const Expr *FillerExpr)   GCCTypeClass  EvaluateBuiltinClassifyType (QualType T, const LangOptions &LangOpts)   EvaluateBuiltinClassifyType - Evaluate __builtin_classify_type the same way as GCC.
  static GCCTypeClass  EvaluateBuiltinClassifyType (const CallExpr *E, const LangOptions &LangOpts)   EvaluateBuiltinClassifyType - Evaluate __builtin_classify_type the same way as GCC.
  static bool  EvaluateBuiltinConstantPForLValue (const APValue &LV)   EvaluateBuiltinConstantPForLValue - Determine the result of __builtin_constant_p when applied to the given pointer.
  static bool  EvaluateBuiltinConstantP (EvalInfo &Info, const Expr *Arg)   EvaluateBuiltinConstantP - Evaluate __builtin_constant_p as similarly to GCC as we can manage.
  static QualType  getObjectType (APValue::LValueBase B)   Retrieves the "underlying object type" of the given expression, as used by __builtin_object_size.
  static const ExprignorePointerCastsAndParens (const Expr *E)   A more selective version of E->IgnoreParenCasts for tryEvaluateBuiltinObjectSize.
  static bool  isDesignatorAtObjectEnd (const ASTContext &Ctx, const LValue &LVal)   Checks to see if the given LValue's Designator is at the end of the LValue's record layout.
  static bool  refersToCompleteObject (const LValue &LVal)   Tests to see if the LValue has a user-specified designator (that isn't necessarily valid).
  static bool  isUserWritingOffTheEnd (const ASTContext &Ctx, const LValue &LVal)   Attempts to detect a user writing into a piece of memory that's impossible to figure out the size of by just using types.
  static bool  convertUnsignedAPIntToCharUnits (const llvm::APInt &Int, CharUnits &Result)   Converts the given APInt to CharUnits, assuming the APInt is unsigned.
  static void  addFlexibleArrayMemberInitSize (EvalInfo &Info, const QualType &T, const LValue &LV, CharUnits &Size)   If we're evaluating the object size of an instance of a struct that contains a flexible array member, add the size of the initializer.
  static bool  determineEndOffset (EvalInfo &Info, SourceLocation ExprLoc, unsigned Type, const LValue &LVal, CharUnits &EndOffset)   Helper for tryEvaluateBuiltinObjectSize – Given an LValue, this will determine how many bytes exist from the beginning of the object to either the end of the current subobject, or the end of the object itself, depending on what the LValue looks like + the value of Type.
  static bool  tryEvaluateBuiltinObjectSize (const Expr *E, unsigned Type, EvalInfo &Info, uint64_t &Size)   Tries to evaluate the __builtin_object_size for E.
  static bool  getBuiltinAlignArguments (const CallExpr *E, EvalInfo &Info, APValue &Val, APSInt &Alignment)   static bool  isOnePastTheEndOfCompleteObject (const ASTContext &Ctx, const LValue &LV)   Determine whether this is a pointer past the end of the complete object referred to by the lvalue.
  static void  addOrSubLValueAsInteger (APValue &LVal, const APSInt &Index, bool IsSub)   template<class SuccessCB , class AfterCB > static bool  EvaluateComparisonBinaryOperator (EvalInfo &Info, const BinaryOperator *E, SuccessCB &&Success, AfterCB &&DoAfter)   static bool  TryEvaluateBuiltinNaN (const ASTContext &Context, QualType ResultTy, const Expr *Arg, bool SNaN, llvm::APFloat &Result)   void  HandleComplexComplexMul (APFloat A, APFloat B, APFloat C, APFloat D, APFloat &ResR, APFloat &ResI)   void  HandleComplexComplexDiv (APFloat A, APFloat B, APFloat C, APFloat D, APFloat &ResR, APFloat &ResI)   static bool  EvaluateVoid (const Expr *E, EvalInfo &Info)   static bool  FastEvaluateAsRValue (const Expr *Exp, Expr::EvalResult &Result, const ASTContext &Ctx, bool &IsConst)   static bool  hasUnacceptableSideEffect (Expr::EvalStatus &Result, Expr::SideEffectsKind SEK)   static bool  EvaluateAsRValue (const Expr *E, Expr::EvalResult &Result, const ASTContext &Ctx, EvalInfo &Info)   static bool  EvaluateAsInt (const Expr *E, Expr::EvalResult &ExprResult, const ASTContext &Ctx, Expr::SideEffectsKind AllowSideEffects, EvalInfo &Info)   static bool  EvaluateAsFixedPoint (const Expr *E, Expr::EvalResult &ExprResult, const ASTContext &Ctx, Expr::SideEffectsKind AllowSideEffects, EvalInfo &Info)   static bool  EvaluateDestruction (const ASTContext &Ctx, APValue::LValueBase Base, APValue DestroyedValue, QualType Type, SourceLocation Loc, Expr::EvalStatus &EStatus, bool IsConstantDestruction)   static ICEDiag  NoDiag ()   static ICEDiag  Worst (ICEDiag A, ICEDiag B)   static ICEDiag  CheckEvalInICE (const Expr *E, const ASTContext &Ctx)   static ICEDiag  CheckICE (const Expr *E, const ASTContext &Ctx)   static bool  EvaluateCPlusPlus11IntegralConstantExpr (const ASTContext &Ctx, const Expr *E, llvm::APSInt *Value, SourceLocation *Loc)   Evaluate an expression as a C++11 integral constant expression.
  ◆ ABSTRACT_STMT #define ABSTRACT_STMT (   Node ) ◆ ABSTRACT_TYPE #define ABSTRACT_TYPE (   Class,   Base  ) ◆ AMDGPU_TYPE #define AMDGPU_TYPE (   Name,   Id,   SingletonId,   Width,   Align  )    case BuiltinType::Id: ◆ BUILTIN_TYPE #define BUILTIN_TYPE (   ID,   SINGLETON_ID  ) ◆ DEBUG_TYPE ◆ DEPENDENT_TYPE [1/2] #define DEPENDENT_TYPE (   Class,   Base  ) Value:

case Type::Class: \

llvm_unreachable( \

"dependent types aren't supported in the constant evaluator!");

◆ DEPENDENT_TYPE [2/2] #define DEPENDENT_TYPE (   ID,   BASE  )    case Type::ID: ◆ EXPR ◆ EXT_OPAQUE_TYPE #define EXT_OPAQUE_TYPE (   ExtType,   Id,   Ext  )     case BuiltinType::Id: ◆ FLOATING_TYPE ◆ HLSL_INTANGIBLE_TYPE #define HLSL_INTANGIBLE_TYPE (   Name,   Id,   SingletonId  )    case BuiltinType::Id: ◆ IMAGE_TYPE #define IMAGE_TYPE (   ImgType,   Id,   SingletonId,   Access,   Suffix  )     case BuiltinType::Id: ◆ NON_CANONICAL_TYPE [1/2] #define NON_CANONICAL_TYPE (   Class,   Base  ) Value:

case Type::Class: \

llvm_unreachable("non-canonical type should be impossible!");

◆ NON_CANONICAL_TYPE [2/2] #define NON_CANONICAL_TYPE (   ID,   BASE  )    case Type::ID: ◆ NON_CANONICAL_UNLESS_DEPENDENT #define NON_CANONICAL_UNLESS_DEPENDENT (   Class,   Base  ) Value:

case Type::Class: \

llvm_unreachable("either dependent or not canonical!");

◆ NON_CANONICAL_UNLESS_DEPENDENT_TYPE #define NON_CANONICAL_UNLESS_DEPENDENT_TYPE (   ID,   BASE  )    case Type::ID: ◆ PLACEHOLDER_TYPE #define PLACEHOLDER_TYPE (   ID,   SINGLETON_ID  )     case BuiltinType::ID: break; ◆ PPC_VECTOR_TYPE #define PPC_VECTOR_TYPE (   Name,   Id,   Size  )     case BuiltinType::Id: ◆ RVV_TYPE #define RVV_TYPE (   Name,   Id,   SingletonId  )    case BuiltinType::Id: ◆ SIGNED_TYPE ◆ STMT ◆ SVE_TYPE #define SVE_TYPE (   Name,   Id,   SingletonId  )     case BuiltinType::Id: ◆ TYPE [1/2] #define TYPE (   Class,   Base  ) Value:

case Type::Class: \

return visit(cast<Class##Type>(Can.getTypePtr()), Offset);

◆ TYPE [2/2] #define TYPE (   ID,   BASE  ) ◆ WASM_TYPE #define WASM_TYPE (   Name,   Id,   SingletonId  )    case BuiltinType::Id: ◆ CheckedTemporaries

Materialized temporaries that we've already checked to determine if they're initializsed by a constant expression.

Definition at line 2332 of file ExprConstant.cpp.

◆ CheckEvaluationResultKind ◆ SizeOfType ◆ addFlexibleArrayMemberInitSize() static void addFlexibleArrayMemberInitSize ( EvalInfo &  Info, const QualTypeT, const LValue &  LV, CharUnitsSize  ) static ◆ addOrSubLValueAsInteger() static void addOrSubLValueAsInteger ( APValueLVal, const APSIntIndex, bool  IsSub  ) static ◆ AreElementsOfSameArray() static bool AreElementsOfSameArray ( QualType  ObjType, const SubobjectDesignator &  A, const SubobjectDesignator &  B  ) static ◆ ArePotentiallyOverlappingStringLiterals() static bool ArePotentiallyOverlappingStringLiterals ( const EvalInfo &  Info, const LValue &  LHS, const LValue &  RHS  ) static ◆ CastToBaseClass() ◆ CastToDerivedClass() static bool CastToDerivedClass ( EvalInfo &  Info, const ExprE, LValue &  Result, const RecordDeclTruncatedType, unsigned  TruncatedElements  ) static

Cast an lvalue referring to a base subobject to a derived class, by truncating the lvalue's path to the given length.

Definition at line 3248 of file ExprConstant.cpp.

References clang::CSK_Derived, D, E, clang::ASTRecordLayout::getBaseClassOffset(), clang::ASTRecordLayout::getVBaseClassOffset(), and clang::Decl::isInvalidDecl().

Referenced by HandleBaseToDerivedCast(), HandleDynamicCast(), HandleLValueBase(), HandleMemberPointerAccess(), and HandleVirtualDispatch().

◆ CheckArraySize() ◆ CheckConstantExpression() ◆ CheckConstexprFunction() ◆ CheckDeleteKind() static std::optional< DynAlloc * > CheckDeleteKind ( EvalInfo &  Info, const ExprE, const LValue &  Pointer, DynAlloc::Kind  DeallocKind  ) static

Check that the given object is a suitable pointer to a heap allocation that still exists and is of the right kind for the purpose of a deletion.

On success, returns the heap allocation to deallocate. On failure, produces a diagnostic and returns std::nullopt.

Definition at line 7146 of file ExprConstant.cpp.

References E, NoteLValueLocation(), and Pointer.

Referenced by HandleOperatorDeleteCall().

◆ checkDynamicType() static bool checkDynamicType ( EvalInfo &  Info, const ExprE, const LValue &  This, AccessKinds  AK, bool  Polymorphic  ) static ◆ CheckedIntArithmetic()

template<typename Operation >

◆ CheckEvalInICE() static ICEDiag CheckEvalInICE ( const ExprE, const ASTContextCtx  ) static ◆ CheckEvaluationResult()

Definition at line 2569 of file ExprConstant.cpp.

References clang::Type::castAs(), clang::Type::castAsArrayTypeUnsafe(), CheckEvaluationResult(), CheckLValueConstantExpression(), CheckMemberPointerConstantExpression(), clang::RecordDecl::fields(), clang::Type::getAs(), clang::ArrayType::getElementType(), clang::Decl::getLocation(), clang::Value::getType(), clang::APValue::hasValue(), and clang::Value::hasValue().

Referenced by CheckConstantExpression(), CheckEvaluationResult(), CheckFullyInitialized(), and CheckLValueConstantExpression().

◆ checkFloatingPointResult() static bool checkFloatingPointResult ( EvalInfo &  Info, const ExprE, APFloat::opStatus  St  ) static ◆ CheckFullyInitialized() ◆ CheckICE()

Definition at line 17161 of file ExprConstant.cpp.

References CheckEvalInICE(), CheckICE(), D, E, clang::Expr::EvaluateKnownConstInt(), clang::Stmt::getBeginLoc(), clang::CallExpr::getBuiltinCallee(), clang::BinaryConditionalOperator::getCommon(), clang::ConditionalOperator::getCond(), clang::ConditionalOperator::getFalseExpr(), clang::BinaryConditionalOperator::getFalseExpr(), clang::ASTContext::getIntWidth(), clang::UnaryExprOrTypeTraitExpr::getKind(), clang::ASTContext::getLangOpts(), clang::BinaryOperator::getLHS(), clang::UnaryOperator::getOpcode(), clang::BinaryOperator::getOpcode(), clang::BinaryOperator::getRHS(), clang::Stmt::getStmtClass(), clang::UnaryOperator::getSubExpr(), clang::ConditionalOperator::getTrueExpr(), clang::ValueDecl::getType(), clang::Expr::getType(), clang::UnaryExprOrTypeTraitExpr::getTypeOfArgument(), clang::Expr::IgnoreParenCasts(), clang::Expr::IgnoreParenImpCasts(), clang::Type::isIntegralOrEnumerationType(), clang::Expr::isPRValue(), clang::Type::isReferenceType(), clang::Type::isSignedIntegerOrEnumerationType(), clang::VarDecl::isUsableInConstantExpressions(), clang::Expr::isValueDependent(), clang::Type::isVariableArrayType(), NoDiag(), and Worst().

Referenced by CheckICE(), clang::Expr::isCXX98IntegralConstantExpr(), and clang::Expr::isIntegerConstantExpr().

◆ CheckLiteralType() static bool CheckLiteralType ( EvalInfo &  Info, const ExprE, const LValue *  This = nullptr  ) static ◆ CheckLocalVariableDeclaration() static bool CheckLocalVariableDeclaration ( EvalInfo &  Info, const VarDeclVD  ) static ◆ CheckLValueConstantExpression()

Check that this reference or pointer core constant expression is a valid value for an address or reference constant expression.

Return true if we can fold this expression, whether or not it's a constant expression.

Definition at line 2345 of file ExprConstant.cpp.

References CheckEvaluationResult(), clang::FixItHint::CreateInsertion(), clang::Type::isAnyPointerType(), clang::QualType::isDestructedType(), IsGlobalLValue(), clang::Type::isReferenceType(), Loc, NoteLValueLocation(), and V.

Referenced by CheckEvaluationResult(), and clang::Expr::EvaluateAsLValue().

◆ CheckMemberPointerConstantExpression() ◆ CheckMemoryLeaks() static bool CheckMemoryLeaks ( EvalInfo &  Info ) static ◆ checkNonVirtualMemberCallThisPointer() static bool checkNonVirtualMemberCallThisPointer ( EvalInfo &  Info, const ExprE, const LValue &  This, const CXXMethodDeclNamedMember  ) static ◆ CheckTrivialDefaultConstructor() ◆ ComputeDynamicType() ◆ convertUnsignedAPIntToCharUnits() static bool convertUnsignedAPIntToCharUnits ( const llvm::APInt &  Int, CharUnitsResult  ) static ◆ determineEndOffset()

Helper for tryEvaluateBuiltinObjectSize – Given an LValue, this will determine how many bytes exist from the beginning of the object to either the end of the current subobject, or the end of the object itself, depending on what the LValue looks like + the value of Type.

If this returns false, the value of Result is undefined.

Definition at line 12698 of file ExprConstant.cpp.

References addFlexibleArrayMemberInitSize(), convertUnsignedAPIntToCharUnits(), getBytesReturnedByAllocSizeCall(), clang::QualType::getNonReferenceType(), getObjectType(), HandleSizeof(), clang::Type::isFunctionType(), clang::Type::isIncompleteType(), clang::QualType::isNull(), clang::Type::isReferenceType(), isUserWritingOffTheEnd(), and refersToCompleteObject().

Referenced by tryEvaluateBuiltinObjectSize().

◆ diagnoseMutableFields()

Diagnose an attempt to read from any unreadable field within the specified type, which might be a class type.

Definition at line 3760 of file ExprConstant.cpp.

References clang::CXXRecordDecl::bases(), diagnoseMutableFields(), E, clang::RecordDecl::fields(), clang::Type::getAsCXXRecordDecl(), clang::Type::getBaseElementTypeUnsafe(), clang::Expr::getType(), clang::CXXRecordDecl::hasMutableFields(), isReadByLvalueToRvalueConversion(), clang::TagDecl::isUnion(), and clang::T.

Referenced by diagnoseMutableFields(), and findSubobject().

◆ EvalPointerValueAsBool() static bool EvalPointerValueAsBool ( const APValueValue, boolResult  ) static ◆ Evaluate()

Definition at line 16508 of file ExprConstant.cpp.

References clang::C, E, EvaluateArray(), EvaluateAtomic(), EvaluateComplex(), EvaluateFloat(), EvaluateLValue(), EvaluateMemberPointer(), EvaluatePointer(), EvaluateRecord(), EvaluateVector(), EvaluateVoid(), clang::Expr::getType(), clang::Type::hasPointerRepresentation(), clang::Type::isAnyComplexType(), clang::Type::isArrayType(), clang::Type::isAtomicType(), clang::Type::isFixedPointType(), clang::Type::isFunctionType(), clang::Expr::isGLValue(), clang::Type::isIntegralOrEnumerationType(), clang::Type::isMemberPointerType(), clang::Type::isRealFloatingType(), clang::Type::isRecordType(), clang::Expr::isValueDependent(), clang::Type::isVectorType(), clang::Type::isVoidType(), P, and clang::T.

Referenced by EvaluateAsBooleanCondition(), EvaluateAsRValue(), EvaluateIgnoredValue(), EvaluateInPlace(), EvaluateStmt(), clang::Expr::EvaluateWithSubstitution(), handleLValueToRValueConversion(), and clang::Expr::isPotentialConstantExprUnevaluated().

◆ EvaluateArgs() ◆ EvaluateArray() static bool EvaluateArray ( const ExprE, const LValue &  This, APValueResult, EvalInfo &  Info  ) static ◆ EvaluateArrayNewConstructExpr() ◆ EvaluateArrayNewInitList() ◆ EvaluateAsBooleanCondition() static bool EvaluateAsBooleanCondition ( const ExprE, boolResult, EvalInfo &  Info  ) static ◆ EvaluateAsFixedPoint() ◆ EvaluateAsInt() ◆ EvaluateAsRValue() [1/2] ◆ EvaluateAsRValue() [2/2] static bool EvaluateAsRValue ( EvalInfo &  Info, const ExprE, APValueResult  ) static

EvaluateAsRValue - Try to evaluate this expression, performing an implicit lvalue-to-rvalue cast if it is an lvalue.

Definition at line 16622 of file ExprConstant.cpp.

References CheckConstantExpression(), CheckLiteralType(), CheckMemoryLeaks(), E, Evaluate(), clang::Expr::getExprLoc(), clang::Expr::getType(), handleLValueToRValueConversion(), clang::Expr::isGLValue(), clang::QualType::isNull(), and clang::Expr::isValueDependent().

Referenced by CheckEvalInICE(), clang::Expr::EvaluateAsBooleanCondition(), EvaluateAsFixedPoint(), clang::Expr::EvaluateAsFloat(), EvaluateAsInt(), EvaluateAsRValue(), EvaluateBuiltinConstantP(), clang::Expr::EvaluateForOverflow(), clang::Expr::EvaluateKnownConstInt(), clang::Expr::EvaluateKnownConstIntCheckOverflow(), clang::Expr::isCXX11ConstantExpr(), clang::Expr::isEvaluatable(), and tryEvaluateBuiltinObjectSize().

◆ EvaluateAtomic() static bool EvaluateAtomic ( const ExprE, const LValue *  This, APValueResult, EvalInfo &  Info  ) static ◆ EvaluateBuiltinClassifyType() [1/2] ◆ EvaluateBuiltinClassifyType() [2/2] ◆ EvaluateBuiltinConstantP() static bool EvaluateBuiltinConstantP ( EvalInfo &  Info, const ExprArg  ) static ◆ EvaluateBuiltinConstantPForLValue() static bool EvaluateBuiltinConstantPForLValue ( const APValueLV ) static ◆ EvaluateBuiltinStrLen() static bool EvaluateBuiltinStrLen ( const ExprE, uint64_t &  Result, EvalInfo &  Info, std::string *  StringResult = nullptr  ) static

Definition at line 17842 of file ExprConstant.cpp.

References E, EvaluatePointer(), clang::APValue::getInt(), clang::Type::getPointeeType(), clang::Expr::getType(), HandleLValueArrayAdjustment(), handleLValueToRValueConversion(), clang::Type::hasPointerRepresentation(), clang::APValue::isInt(), and clang::Expr::isPRValue().

Referenced by clang::Expr::tryEvaluateString(), and clang::Expr::tryEvaluateStrLen().

◆ EvaluateCallArg() ◆ EvaluateComparisonBinaryOperator()

template<class SuccessCB , class AfterCB >

static bool EvaluateComparisonBinaryOperator ( EvalInfo &  Info, const BinaryOperatorE, SuccessCB &&  Success, AfterCB &&  DoAfter  ) static

Definition at line 14242 of file ExprConstant.cpp.

References ArePotentiallyOverlappingStringLiterals(), E, clang::Equal, EvaluateComplex(), EvaluateFixedPointOrInteger(), EvaluateFloat(), EvaluateInteger(), EvaluateLValue(), EvaluateMemberPointer(), EvaluatePointer(), FindDesignatorMismatch(), clang::Decl::getAccess(), clang::Expr::getFPFeaturesInEffect(), clang::FieldDecl::getParent(), clang::CharUnits::getQuantity(), clang::Expr::getType(), HasSameBase(), clang::Type::isAnyComplexType(), clang::Type::isFixedPointType(), clang::FPOptions::isFPConstrained(), IsGlobalLValue(), clang::Type::isIncompleteType(), clang::Type::isIntegralOrEnumerationType(), clang::Type::isMemberPointerType(), clang::Type::isNullPtrType(), isOnePastTheEndOfCompleteObject(), IsOpaqueConstantCall(), clang::Type::isPointerType(), clang::Type::isRealFloatingType(), clang::TagDecl::isUnion(), clang::Expr::isValueDependent(), IsWeakLValue(), isZeroSized(), clang::Reversed, and clang::Success.

◆ EvaluateComplex() static bool EvaluateComplex ( const ExprE, ComplexValue &  Res, EvalInfo &  Info  ) static ◆ EvaluateCond() static bool EvaluateCond ( EvalInfo &  Info, const VarDeclCondDecl, const ExprCond, boolResult  ) static ◆ EvaluateCPlusPlus11IntegralConstantExpr() ◆ EvaluateDecl() static bool EvaluateDecl ( EvalInfo &  Info, const DeclD  ) static ◆ EvaluateDependentExpr() static bool EvaluateDependentExpr ( const ExprE, EvalInfo &  Info  ) static ◆ EvaluateDestruction() ◆ EvaluateFixedPoint() static bool EvaluateFixedPoint ( const ExprE, APFixedPoint &  Result, EvalInfo &  Info  ) static ◆ EvaluateFixedPointOrInteger() static bool EvaluateFixedPointOrInteger ( const ExprE, APFixedPoint &  Result, EvalInfo &  Info  ) static ◆ EvaluateFloat() static bool EvaluateFloat ( const ExprE, APFloat &  Result, EvalInfo &  Info  ) static ◆ EvaluateIgnoredValue() static bool EvaluateIgnoredValue ( EvalInfo &  Info, const ExprE  ) static ◆ EvaluateInPlace() static bool EvaluateInPlace ( APValueResult, EvalInfo &  Info, const LValue &  This, const ExprE, bool  AllowNonLiteralTypes  ) static

EvaluateInPlace - Evaluate an expression in-place in an APValue.

In some cases, the in-place evaluation is essential, since later initializers for an object can indirectly refer to subobjects which were initialized earlier.

Definition at line 16594 of file ExprConstant.cpp.

References CheckLiteralType(), E, Evaluate(), EvaluateArray(), EvaluateAtomic(), EvaluateRecord(), clang::Expr::getType(), clang::Type::isArrayType(), clang::Type::isAtomicType(), clang::Expr::isPRValue(), clang::Type::isRecordType(), clang::Expr::isValueDependent(), and clang::T.

Referenced by clang::Expr::EvaluateAsConstantExpr(), clang::Expr::EvaluateAsInitializer(), EvaluateCallArg(), EvaluateStmt(), EvaluateVarDecl(), HandleClassZeroInitialization(), and HandleConstructorCall().

◆ EvaluateInteger() static bool EvaluateInteger ( const ExprE, APSIntResult, EvalInfo &  Info  ) static

Definition at line 12155 of file ExprConstant.cpp.

References E, EvaluateIntegerOrLValue(), clang::APValue::getInt(), clang::APValue::isInt(), and clang::Expr::isValueDependent().

Referenced by clang::Expr::EvaluateCharRangeAsString(), EvaluateComparisonBinaryOperator(), EvaluateFixedPointOrInteger(), EvaluateSwitch(), getAlignmentArgument(), getBuiltinAlignArguments(), and HandleOperatorNewCall().

◆ EvaluateIntegerOrLValue() static bool EvaluateIntegerOrLValue ( const ExprE, APValueResult, EvalInfo &  Info  ) static ◆ EvaluateLoopBody() static EvalStmtResult EvaluateLoopBody ( StmtResult &  Result, EvalInfo &  Info, const StmtBody, const SwitchCaseCase = nullptr  ) static ◆ EvaluateLValue() static bool EvaluateLValue ( const ExprE, LValue &  Result, EvalInfo &  Info, bool  InvalidBaseOK  ) static

Evaluate an expression as an lvalue.

This can be legitimately called on expressions which are not glvalues, in three cases:

Definition at line 8872 of file ExprConstant.cpp.

References E, clang::Expr::getType(), clang::Expr::IgnoreParens(), clang::Type::isFunctionType(), clang::Expr::isGLValue(), clang::Expr::isValueDependent(), and clang::Type::isVoidType().

Referenced by Evaluate(), clang::Expr::EvaluateAsLValue(), EvaluateComparisonBinaryOperator(), and EvaluateObjectArgument().

◆ evaluateLValueAsAllocSize()

Attempts to evaluate the given LValueBase as the result of a call to a function with the alloc_size attribute.

If it was possible to do so, this function will return true, make Result's Base point to said function call, and mark Result's Base as invalid.

Definition at line 9366 of file ExprConstant.cpp.

References clang::Type::castAs(), E, clang::VarDecl::getAnyInitializer(), getPointeeType(), clang::ValueDecl::getType(), clang::Expr::getType(), clang::Init, clang::QualType::isConstQualified(), and clang::VarDecl::isLocalVarDecl().

◆ EvaluateMemberPointer() static bool EvaluateMemberPointer ( const ExprE, MemberPtr &  Result, EvalInfo &  Info  ) static ◆ EvaluateObjectArgument() static bool EvaluateObjectArgument ( EvalInfo &  Info, const ExprObject, LValue &  This  ) static ◆ EvaluatePointer() static bool EvaluatePointer ( const ExprE, LValue &  Result, EvalInfo &  Info, bool  InvalidBaseOK = false  ) static

Definition at line 9536 of file ExprConstant.cpp.

References E, clang::Expr::getType(), clang::Type::hasPointerRepresentation(), clang::Expr::isPRValue(), and clang::Expr::isValueDependent().

Referenced by Evaluate(), EvaluateBuiltinStrLen(), clang::Expr::EvaluateCharRangeAsString(), EvaluateComparisonBinaryOperator(), EvaluateObjectArgument(), getBuiltinAlignArguments(), HandleOperatorDeleteCall(), and tryEvaluateBuiltinObjectSize().

◆ EvaluateRecord() static bool EvaluateRecord ( const ExprE, const LValue &  This, APValueResult, EvalInfo &  Info  ) static ◆ EvaluateStmt() static EvalStmtResult EvaluateStmt ( StmtResult &  Result, EvalInfo &  Info, const StmtS, const SwitchCaseSC = nullptr  ) static

Definition at line 5403 of file ExprConstant.cpp.

References clang::CompoundStmt::body(), CheckLocalVariableDeclaration(), D, clang::DeclStmt::decls(), E, Evaluate(), EvaluateAsBooleanCondition(), EvaluateCond(), EvaluateDecl(), EvaluateDependentExpr(), EvaluateIgnoredValue(), EvaluateInPlace(), EvaluateLoopBody(), EvaluateStmt(), EvaluateSwitch(), EvaluateVarDecl(), clang::WhileStmt::getBody(), clang::DoStmt::getBody(), clang::IfStmt::getCond(), clang::WhileStmt::getCond(), clang::DoStmt::getCond(), clang::IfStmt::getConditionVariable(), clang::WhileStmt::getConditionVariable(), clang::IfStmt::getElse(), clang::IfStmt::getInit(), clang::IfStmt::getThen(), clang::Init, clang::IfStmt::isConsteval(), clang::IfStmt::isNonNegatedConsteval(), and clang::Expr::isValueDependent().

Referenced by EvaluateLoopBody(), EvaluateStmt(), EvaluateSwitch(), HandleConstructorCall(), HandleDestructionImpl(), and HandleFunctionCall().

◆ EvaluateSwitch() static EvalStmtResult EvaluateSwitch ( StmtResult &  Result, EvalInfo &  Info, const SwitchStmtSS  ) static

Evaluate a switch statement.

Definition at line 5310 of file ExprConstant.cpp.

References EvaluateDecl(), EvaluateDependentExpr(), EvaluateInteger(), clang::Expr::EvaluateKnownConstInt(), EvaluateStmt(), clang::Found, clang::SwitchStmt::getBody(), clang::SwitchStmt::getCond(), clang::SwitchStmt::getConditionVariable(), clang::SwitchStmt::getInit(), clang::CaseStmt::getLHS(), clang::SwitchCase::getNextSwitchCase(), clang::CaseStmt::getRHS(), clang::SwitchStmt::getSwitchCaseList(), clang::Init, and clang::Expr::isValueDependent().

Referenced by EvaluateStmt().

◆ EvaluateTemporary() static bool EvaluateTemporary ( const ExprE, LValue &  Result, EvalInfo &  Info  ) static ◆ EvaluateVarDecl() static bool EvaluateVarDecl ( EvalInfo &  Info, const VarDeclVD  ) static ◆ evaluateVarDeclInit()

Try to evaluate the initializer for a variable declaration.

Parameters
Info Information about the ongoing evaluation. E An expression to be used when printing diagnostics. VD The variable whose initializer should be obtained. Version The version of the variable within the frame. Frame The frame in which the variable was created. Must be null if this variable is not local to the evaluation. Result Filled in with a pointer to the value of the variable.

Definition at line 3468 of file ExprConstant.cpp.

References E, clang::VarDecl::evaluateValue(), clang::VarDecl::getAnyInitializer(), clang::Stmt::getBeginLoc(), clang::Decl::getDeclContext(), clang::VarDecl::getEvaluatedValue(), clang::ValueDecl::getType(), clang::VarDecl::hasConstantInitialization(), clang::VarDecl::hasICEInitializer(), clang::Init, clang::VarDecl::isInitCapture(), clang::isLambdaCallOperator(), clang::Type::isReferenceType(), clang::Expr::isValueDependent(), clang::ValueDecl::isWeak(), clang::VarDecl::mightBeUsableInConstantExpressions(), and NoteLValueLocation().

Referenced by findCompleteObject().

◆ EvaluateVector() static bool EvaluateVector ( const ExprE, APValueResult, EvalInfo &  Info  ) static ◆ EvaluateVoid() static bool EvaluateVoid ( const ExprE, EvalInfo &  Info  ) static ◆ expandArray() ◆ expandStringLiteral() ◆ extractStringLiteralCharacter() static APSInt extractStringLiteralCharacter ( EvalInfo &  Info, const ExprLit, uint64_t  Index  ) static ◆ extractSubobject() static bool extractSubobject ( EvalInfo &  Info, const ExprE, const CompleteObject &  Obj, const SubobjectDesignator &  Sub, APValueResult, AccessKinds  AK = AK_Read  ) static ◆ FastEvaluateAsRValue() ◆ findCompleteObject() static CompleteObject findCompleteObject ( EvalInfo &  Info, const ExprE, AccessKinds  AK, const LValue &  LVal, QualType  LValType  ) static

Find the complete object to which an LValue refers.

Definition at line 4282 of file ExprConstant.cpp.

References D, E, evaluateVarDeclInit(), clang::APValue::getAsString(), clang::VarDecl::getDefinition(), clang::Decl::getLocation(), clang::VarDecl::hasDefinition(), isAnyAccess(), clang::QualType::isConstant(), clang::VarDecl::isConstexpr(), isFormalAccess(), clang::Type::isIntegralOrEnumerationType(), clang::Decl::isInvalidDecl(), clang::Type::isLiteralType(), isModification(), clang::QualType::isVolatileQualified(), lifetimeStartedInEvaluation(), NoteLValueLocation(), clang::SD_Static, and V.

Referenced by checkDynamicType(), handleAssignment(), handleCompoundAssignment(), HandleDestruction(), handleIncDec(), handleLValueToRValueConversion(), and MaybeHandleUnionActiveMemberChange().

◆ FindDesignatorMismatch() static unsigned FindDesignatorMismatch ( QualType  ObjType, const SubobjectDesignator &  A, const SubobjectDesignator &  B, boolWasArrayIndex  ) static ◆ findSubobject()

template<typename SubobjectHandler >

static SubobjectHandler::result_type findSubobject ( EvalInfo &  Info, const ExprE, const CompleteObject &  Obj, const SubobjectDesignator &  Sub, SubobjectHandler &  handler  ) static

Find the designated sub-object of an rvalue.

Definition at line 3894 of file ExprConstant.cpp.

References clang::AK_Construct, clang::AK_IsWithinLifetime, clang::APValue::allowConstexprUnknown(), clang::Type::castAs(), CheckArraySize(), diagnoseMutableFields(), E, expandArray(), clang::APValue::getArrayFiller(), clang::APValue::getArrayInitializedElt(), clang::APValue::getArrayInitializedElts(), clang::Type::getAs(), clang::Type::getAsCXXRecordDecl(), getBaseIndex(), clang::FieldDecl::getCanonicalDecl(), clang::QualType::getCanonicalType(), clang::APValue::getComplexFloatImag(), clang::APValue::getComplexFloatReal(), clang::APValue::getComplexIntImag(), clang::APValue::getComplexIntReal(), clang::ComplexType::getElementType(), clang::ArrayType::getElementType(), clang::Expr::getExprLoc(), clang::Decl::getLocation(), clang::ConstantArrayType::getSize(), clang::Stmt::getSourceRange(), clang::APValue::getStructBase(), clang::APValue::getStructField(), getSubobjectType(), clang::APValue::getUnionField(), clang::APValue::getUnionValue(), clang::APValue::getVectorElt(), clang::APValue::hasValue(), clang::APValue::isAbsent(), clang::Type::isAnyComplexType(), clang::Type::isArrayType(), clang::FieldDecl::isBitField(), clang::APValue::isComplexFloat(), clang::APValue::isComplexInt(), clang::QualType::isConstQualified(), isFormalAccess(), clang::APValue::isIndeterminate(), isModification(), isRead(), clang::Type::isRecordType(), clang::TagDecl::isUnion(), isValidIndeterminateAccess(), clang::QualType::isVolatileQualified(), Loc, clang::QualType::removeLocalConst(), clang::QualType::removeLocalVolatile(), clang::APValue::setUnion(), and truncateBitfieldValue().

Referenced by checkDynamicType(), extractSubobject(), handleCompoundAssignment(), HandleDestruction(), handleIncDec(), MaybeHandleUnionActiveMemberChange(), and modifySubobject().

◆ getActiveRoundingMode() static llvm::RoundingMode getActiveRoundingMode ( EvalInfo &  Info, const ExprE  ) static ◆ getAlignmentArgument() ◆ GetAlignOfExpr() ◆ GetAlignOfType() ◆ getBaseAlignment() static CharUnits getBaseAlignment ( EvalInfo &  Info, const LValue &  Value  ) static ◆ getBaseClassType() ◆ getBaseIndex() ◆ getBuiltinAlignArguments() ◆ getBytesReturnedByAllocSizeCall() [1/2] static bool getBytesReturnedByAllocSizeCall ( const ASTContextCtx, const CallExprCall, llvm::APInt &  Result  ) static ◆ getBytesReturnedByAllocSizeCall() [2/2] static bool getBytesReturnedByAllocSizeCall ( const ASTContextCtx, const LValue &  LVal, llvm::APInt &  Result  ) static ◆ GetLValueBaseAsString() static bool GetLValueBaseAsString ( const EvalInfo &  Info, const LValue &  LVal, LValueBaseStringAsString  ) static ◆ GetLValueBaseDecl() static const ValueDecl * GetLValueBaseDecl ( const LValue &  LVal ) static ◆ getObjectType()

Retrieves the "underlying object type" of the given expression, as used by __builtin_object_size.

Definition at line 12478 of file ExprConstant.cpp.

References D, clang::APValue::LValueBase::dyn_cast(), E, clang::APValue::LValueBase::getDynamicAllocType(), clang::ValueDecl::getType(), clang::Expr::getType(), clang::APValue::LValueBase::getTypeInfoType(), and clang::APValue::LValueBase::is().

Referenced by clang::SemaObjC::checkInitMethod(), determineEndOffset(), clang::ObjCObjectPointerType::getInterfaceDecl(), clang::ObjCObjectPointerType::getNumProtocols(), clang::ObjCObjectPointerType::getProtocol(), clang::ObjCObjectPointerType::getTypeArgs(), clang::ObjCObjectPointerType::getTypeArgsAsWritten(), clang::ObjCObjectPointerType::isKindOfType(), clang::ObjCObjectPointerType::isObjCClassType(), clang::ObjCObjectPointerType::isObjCIdOrClassType(), clang::ObjCObjectPointerType::isObjCIdType(), clang::ObjCObjectPointerType::isObjCQualifiedClassType(), clang::ObjCObjectPointerType::isObjCQualifiedIdType(), clang::ObjCObjectPointerType::isSpecialized(), clang::ObjCObjectPointerType::isSpecializedAsWritten(), clang::ObjCObjectPointerType::isUnspecialized(), clang::ObjCObjectPointerType::qual_begin(), clang::ObjCObjectPointerType::qual_empty(), and clang::ObjCObjectPointerType::qual_end().

◆ getSubobjectType() ◆ getVirtualOperatorDelete() ◆ handleAssignment() static bool handleAssignment ( EvalInfo &  Info, const ExprE, const LValue &  LVal, QualType  LValType, APValueVal  ) static ◆ HandleBaseToDerivedCast() static bool HandleBaseToDerivedCast ( EvalInfo &  Info, const CastExprE, LValue &  Result  ) static ◆ HandleClassZeroInitialization() static bool HandleClassZeroInitialization ( EvalInfo &  Info, const ExprE, const RecordDeclRD, const LValue &  This, APValueResult  ) static

Perform zero-initialization on an object of non-union class type.

C++11 [dcl.init]p5: To zero-initialize an object or reference of type T means: [...] – if T is a (possibly cv-qualified) non-union class type, each non-static data member and each base-class subobject is zero-initialized

Definition at line 10586 of file ExprConstant.cpp.

References clang::CXXRecordDecl::bases_begin(), clang::CXXRecordDecl::bases_end(), E, EvaluateInPlace(), clang::RecordDecl::field_begin(), clang::RecordDecl::field_end(), clang::RecordDecl::fields(), clang::CXXRecordDecl::getNumBases(), HandleClassZeroInitialization(), HandleLValueDirectBase(), HandleLValueMember(), clang::Decl::isInvalidDecl(), and clang::TagDecl::isUnion().

Referenced by HandleClassZeroInitialization().

◆ handleCompareOpForVector() ◆ handleCompareOpForVectorHelper()

template<typename APTy >

static bool handleCompareOpForVectorHelper ( const APTy &  LHSValue, BinaryOperatorKind  Opcode, const APTy &  RHSValue, APInt &  Result  ) static ◆ HandleComplexComplexDiv() void HandleComplexComplexDiv ( APFloat  A, APFloat  B, APFloat  C, APFloat  D, APFloat &  ResR, APFloat &  ResI  ) ◆ HandleComplexComplexMul() void HandleComplexComplexMul ( APFloat  A, APFloat  B, APFloat  C, APFloat  D, APFloat &  ResR, APFloat &  ResI  ) ◆ handleCompoundAssignment() ◆ HandleConstructorCall() [1/2] ◆ HandleConstructorCall() [2/2]

Evaluate a constructor call.

Definition at line 6615 of file ExprConstant.cpp.

References clang::CXXRecordDecl::bases_begin(), clang::C, clang::Call, clang::declaresSameEntity(), clang::Definition, E, EvaluateDependentExpr(), EvaluateInPlace(), EvaluateStmt(), clang::RecordDecl::field_begin(), clang::RecordDecl::field_end(), clang::Type::getAsCXXRecordDecl(), clang::Expr::getExprLoc(), clang::FieldDecl::getFieldIndex(), clang::CXXRecordDecl::getNumBases(), clang::CXXRecordDecl::getNumVBases(), clang::FieldDecl::getParent(), clang::Stmt::getSourceRange(), clang::CXXBaseSpecifier::getType(), handleDefaultInitValue(), HandleLValueDirectBase(), HandleLValueMember(), handleTrivialCopy(), clang::Value::hasValue(), Indirect, clang::Init, clang::FieldDecl::isBitField(), clang::Decl::isInvalidDecl(), isReadByLvalueToRvalueConversion(), clang::TagDecl::isUnion(), clang::CXXBaseSpecifier::isVirtual(), clang::Success, and truncateBitfieldValue().

Referenced by HandleConstructorCall(), and clang::Expr::isPotentialConstantExpr().

◆ HandleConversionToBool()

Definition at line 2717 of file ExprConstant.cpp.

References clang::APValue::AddrLabelDiff, clang::APValue::Array, clang::APValue::ComplexFloat, clang::APValue::ComplexInt, EvalPointerValueAsBool(), clang::APValue::FixedPoint, clang::APValue::Float, clang::APValue::getComplexFloatImag(), clang::APValue::getComplexFloatReal(), clang::APValue::getComplexIntImag(), clang::APValue::getComplexIntReal(), clang::APValue::getFixedPoint(), clang::APValue::getFloat(), clang::APValue::getInt(), clang::APValue::getKind(), clang::APValue::getMemberPointerDecl(), clang::APValue::Indeterminate, clang::APValue::Int, clang::ValueDecl::isWeak(), clang::APValue::LValue, clang::APValue::MemberPointer, clang::APValue::None, clang::APValue::Struct, clang::APValue::Union, and clang::APValue::Vector.

Referenced by clang::Expr::EvaluateAsBooleanCondition(), and EvaluateAsBooleanCondition().

◆ HandleCovariantReturnAdjustment()

Perform the adjustment from a value returned by a virtual function to a value of the statically expected type, which may be a pointer or reference to a base class of the returned type.

Definition at line 6184 of file ExprConstant.cpp.

References CastToBaseClass(), E, and Path.

◆ handleDefaultInitValue() ◆ HandleDestruction() [1/2] static bool HandleDestruction ( EvalInfo &  Info, const ExprE, const LValue &  This, QualType  ThisType  ) static ◆ HandleDestruction() [2/2] ◆ HandleDestructionImpl()

Definition at line 6842 of file ExprConstant.cpp.

References clang::CXXRecordDecl::bases(), CheckArraySize(), CheckConstexprFunction(), clang::Definition, EvaluateStmt(), expandArray(), clang::RecordDecl::fields(), clang::Type::getAsCXXRecordDecl(), clang::APValue::getAsString(), clang::SourceRange::getBegin(), clang::FunctionDecl::getBody(), clang::CXXRecordDecl::getDestructor(), clang::ArrayType::getElementType(), clang::CXXRecordDecl::getNumBases(), clang::CXXRecordDecl::getNumVBases(), clang::ConstantArrayType::getZExtSize(), HandleDestructionImpl(), HandleLValueArrayAdjustment(), HandleLValueDirectBase(), HandleLValueMember(), clang::CXXRecordDecl::hasTrivialDestructor(), clang::RecordDecl::isAnonymousStructOrUnion(), clang::Type::isNullPtrType(), clang::FunctionDecl::isTrivial(), clang::TagDecl::isUnion(), clang::T, and clang::VK_PRValue.

Referenced by HandleDestruction(), and HandleDestructionImpl().

◆ HandleDynamicCast()

Apply the given dynamic cast operation on the provided lvalue.

This implements the hard case of dynamic_cast, requiring a "runtime check" to find a suitable target subobject.

Definition at line 6225 of file ExprConstant.cpp.

References clang::AK_DynamicCast, clang::AS_public, clang::C, CastToDerivedClass(), clang::Class, ComputeDynamicType(), D, clang::declaresSameEntity(), E, getBaseClassType(), clang::Expr::getType(), clang::QualType::getUnqualifiedType(), HandleLValueBase(), isBaseClassPublic(), clang::Expr::isGLValue(), and clang::Type::isVoidPointerType().

◆ handleFloatFloatBinOp() ◆ HandleFloatToFloatCast() static bool HandleFloatToFloatCast ( EvalInfo &  Info, const ExprE, QualType  SrcType, QualType  DestType, APFloat &  Result  ) static ◆ HandleFloatToIntCast() ◆ HandleFunctionCall()

Evaluate a function call.

Definition at line 6560 of file ExprConstant.cpp.

References clang::Call, E, EvaluateStmt(), clang::CXXRecordDecl::getCaptureFields(), clang::FunctionDecl::getParamDecl(), clang::CXXMethodDecl::getParent(), clang::Stmt::getSourceRange(), clang::CXXMethodDecl::getThisType(), handleAssignment(), handleTrivialCopy(), clang::CXXMethodDecl::isCopyAssignmentOperator(), clang::FunctionDecl::isDefaulted(), clang::isLambdaCallOperator(), clang::CXXMethodDecl::isMoveAssignmentOperator(), isReadByLvalueToRvalueConversion(), clang::FunctionDecl::isTrivial(), and clang::TagDecl::isUnion().

Referenced by clang::Expr::isPotentialConstantExpr().

◆ handleIncDec() ◆ handleIntIntBinOp() ◆ HandleIntToFloatCast() ◆ HandleIntToIntCast() ◆ HandleLambdaCapture() ◆ handleLogicalOpForVector() [1/3] ◆ handleLogicalOpForVector() [2/3] static bool handleLogicalOpForVector ( const APInt &  LHSValue, BinaryOperatorKind  Opcode, const APInt &  RHSValue, APInt &  Result  ) static ◆ handleLogicalOpForVector() [3/3] ◆ HandleLValueArrayAdjustment() [1/2] static bool HandleLValueArrayAdjustment ( EvalInfo &  Info, const ExprE, LValue &  LVal, QualType  EltTy, APSInt  Adjustment  ) static ◆ HandleLValueArrayAdjustment() [2/2] static bool HandleLValueArrayAdjustment ( EvalInfo &  Info, const ExprE, LValue &  LVal, QualType  EltTy, int64_t  Adjustment  ) static ◆ HandleLValueBase() ◆ HandleLValueBasePath() static bool HandleLValueBasePath ( EvalInfo &  Info, const CastExprE, QualType  Type, LValue &  Result  ) static ◆ HandleLValueComplexElement() static bool HandleLValueComplexElement ( EvalInfo &  Info, const ExprE, LValue &  LVal, QualType  EltTy, bool  Imag  ) static

Update an lvalue to refer to a component of a complex number.

Parameters
Info - Information about the ongoing evaluation. LVal - The lvalue to be updated. EltTy - The complex number's component type. Imag - False for the real component, true for the imaginary.

Definition at line 3433 of file ExprConstant.cpp.

References E, clang::Expr::getExprLoc(), and HandleSizeof().

◆ HandleLValueDirectBase() ◆ HandleLValueIndirectMember() ◆ HandleLValueMember() ◆ handleLValueToRValueConversion() static bool handleLValueToRValueConversion ( EvalInfo &  Info, const ExprConv, QualType  Type, const LValue &  LVal, APValueRVal, bool  WantObjectRepresentation = false  ) static

Perform an lvalue-to-rvalue conversion on the given glvalue.

This can also be used for 'lvalue-to-lvalue' conversions for looking up the glvalue referred to by an entity of reference type.

Parameters
Info - Information about the ongoing evaluation. Conv - The expression for which we are performing the conversion. Used for diagnostics. Type - The type of the glvalue (before stripping cv-qualifiers in the case of a non-class type). LVal - The glvalue on which we are attempting to perform this action. RVal - The produced value will be placed here. WantObjectRepresentation - If true, we're looking for the object representation rather than the value, and in particular, there is no requirement that the result be fully initialized.

Definition at line 4565 of file ExprConstant.cpp.

References clang::AK_Read, clang::AK_ReadObjectRepresentation, Evaluate(), extractStringLiteralCharacter(), extractSubobject(), findCompleteObject(), clang::Type::isArrayType(), and clang::QualType::isConstant().

Referenced by EvaluateAsRValue(), EvaluateBuiltinStrLen(), clang::Expr::EvaluateCharRangeAsString(), HandleLambdaCapture(), and handleTrivialCopy().

◆ HandleLValueVectorElement() static bool HandleLValueVectorElement ( EvalInfo &  Info, const ExprE, LValue &  LVal, QualType  EltTy, uint64_t  Size, uint64_t  Idx  ) static ◆ HandleMemberPointerAccess() [1/2] ◆ HandleMemberPointerAccess() [2/2] static const ValueDecl * HandleMemberPointerAccess ( EvalInfo &  Info, QualType  LVType, LValue &  LV, const ExprRHS, bool  IncludeMember = true  ) static ◆ HandleOperatorDeleteCall() static bool HandleOperatorDeleteCall ( EvalInfo &  Info, const CallExprE  ) static ◆ HandleOperatorNewCall() static bool HandleOperatorNewCall ( EvalInfo &  Info, const CallExprE, LValue &  Result  ) static

Perform a call to 'operator new' or to ‘__builtin_operator_new’.

Definition at line 7065 of file ExprConstant.cpp.

References E, EvaluateIgnoredValue(), EvaluateInteger(), clang::Stmt::getBeginLoc(), clang::Expr::getExprLoc(), clang::CharUnits::getQuantity(), clang::Expr::getType(), HandleSizeof(), clang::Type::isFunctionType(), clang::Type::isIncompleteType(), and clang::Type::isNothrowT().

◆ HandleOverflow()

template<typename T >

static bool HandleOverflow ( EvalInfo &  Info, const ExprE, const T &  SrcValue, QualType  DestType  ) static ◆ HandleSizeof() ◆ handleTrivialCopy() ◆ handleVectorElementCast() ◆ handleVectorShuffle() ◆ handleVectorUnaryOperator() ◆ handleVectorVectorBinOp()

Definition at line 3177 of file ExprConstant.cpp.

References clang::Type::castAs(), E, clang::APValue::Float, clang::APValue::getFloat(), clang::APValue::getInt(), clang::APValue::getKind(), clang::VectorType::getNumElements(), clang::Expr::getType(), clang::APValue::getVectorElt(), clang::APValue::getVectorLength(), handleCompareOpForVector(), handleFloatFloatBinOp(), handleIntIntBinOp(), handleLogicalOpForVector(), clang::BinaryOperator::isComparisonOp(), clang::Type::isFloatingType(), clang::Type::isIntegerType(), clang::BinaryOperator::isLogicalOp(), clang::APValue::isLValue(), clang::Type::isUnsignedIntegerType(), clang::APValue::isVector(), and clang::Success.

◆ HandleVirtualDispatch() ◆ HasSameBase() static bool HasSameBase ( const LValue &  A, const LValue &  B  ) static ◆ hasUnacceptableSideEffect() ◆ hasVirtualDestructor() ◆ ignorePointerCastsAndParens() static const Expr * ignorePointerCastsAndParens ( const ExprE ) static ◆ isAnyAccess() ◆ isBaseClassPublic() ◆ IsDeclSourceLocationCurrent() ◆ isDesignatorAtObjectEnd() static bool isDesignatorAtObjectEnd ( const ASTContextCtx, const LValue &  LVal  ) static

Checks to see if the given LValue's Designator is at the end of the LValue's record layout.

e.g. struct { struct { int a, b; } fst, snd; } obj; obj.fst // no obj.snd // yes obj.fst.a // no obj.fst.b // no obj.snd.a // no obj.snd.b // yes

Please note: this function is specialized for how __builtin_object_size views "objects".

If this encounters an invalid RecordDecl or otherwise cannot determine the correct result, it will always return true.

Definition at line 12536 of file ExprConstant.cpp.

References clang::Type::castAs(), E, clang::ASTContext::getAsArrayType(), clang::ASTContext::getASTRecordLayout(), clang::ArrayType::getElementType(), clang::ASTRecordLayout::getFieldCount(), clang::FieldDecl::getFieldIndex(), clang::FieldDecl::getParent(), getPointeeType(), clang::ValueDecl::getType(), clang::ConstantArrayType::getZExtSize(), clang::Invalid, clang::Type::isAnyComplexType(), clang::Type::isArrayType(), clang::Type::isIncompleteArrayType(), and Parent.

Referenced by isUserWritingOffTheEnd().

◆ isFormalAccess() ◆ IsGlobalLValue()

Definition at line 2103 of file ExprConstant.cpp.

References D, clang::APValue::LValueBase::dyn_cast(), E, clang::APValue::LValueBase::get(), clang::Stmt::getStmtClass(), clang::APValue::LValueBase::is(), clang::CompoundLiteralExpr::isFileScope(), clang::Expr::isLValue(), IsOpaqueConstantCall(), and clang::SD_Static.

Referenced by CheckLValueConstantExpression(), EvaluateComparisonBinaryOperator(), and clang::Expr::EvalResult::isGlobalLValue().

◆ isModification()

Definition at line 1536 of file ExprConstant.cpp.

References clang::AK_Assign, clang::AK_Construct, clang::AK_Decrement, clang::AK_Destroy, clang::AK_DynamicCast, clang::AK_Increment, clang::AK_IsWithinLifetime, clang::AK_MemberCall, clang::AK_Read, clang::AK_ReadObjectRepresentation, and clang::AK_TypeId.

Referenced by findCompleteObject(), findSubobject(), and isAnyAccess().

◆ isOneByteCharacterType() ◆ isOnePastTheEndOfCompleteObject() static bool isOnePastTheEndOfCompleteObject ( const ASTContextCtx, const LValue &  LV  ) static ◆ IsOpaqueConstantCall() [1/2] ◆ IsOpaqueConstantCall() [2/2] static bool IsOpaqueConstantCall ( const LValue &  LVal ) static ◆ isRead() ◆ isReadByLvalueToRvalueConversion() [1/2] ◆ isReadByLvalueToRvalueConversion() [2/2] ◆ isUserWritingOffTheEnd() static bool isUserWritingOffTheEnd ( const ASTContextCtx, const LValue &  LVal  ) static ◆ isValidIndeterminateAccess()

Is this kind of axcess valid on an indeterminate object value?

Definition at line 1566 of file ExprConstant.cpp.

References clang::AK_Assign, clang::AK_Construct, clang::AK_Decrement, clang::AK_Destroy, clang::AK_DynamicCast, clang::AK_Increment, clang::AK_IsWithinLifetime, clang::AK_MemberCall, clang::AK_Read, clang::AK_ReadObjectRepresentation, and clang::AK_TypeId.

Referenced by findSubobject().

◆ IsWeakLValue() static bool IsWeakLValue ( const LValue &  Value ) static ◆ isZeroSized() static bool isZeroSized ( const LValue &  Value ) static ◆ lifetimeStartedInEvaluation() ◆ MaybeElementDependentArrayFiller() static bool MaybeElementDependentArrayFiller ( const ExprFillerExpr ) static ◆ MaybeHandleUnionActiveMemberChange() static bool MaybeHandleUnionActiveMemberChange ( EvalInfo &  Info, const ExprLHSExpr, const LValue &  LHS  ) static ◆ modifySubobject() static bool modifySubobject ( EvalInfo &  Info, const ExprE, const CompleteObject &  Obj, const SubobjectDesignator &  Sub, APValueNewVal  ) static ◆ negateAsSigned() static void negateAsSigned ( APSIntInt ) static

Negate an APSInt in place, converting it to a signed form if necessary, and preserving its value (by extending by up to one bit as needed).

Definition at line 1943 of file ExprConstant.cpp.

◆ NoDiag() static ICEDiag NoDiag ( ) static ◆ NoteLValueLocation() ◆ refersToCompleteObject() static bool refersToCompleteObject ( const LValue &  LVal ) static

Tests to see if the LValue has a user-specified designator (that isn't necessarily valid).

Note that this always returns 'true' if the LValue has an unsized array as its first designator entry, because there's currently no way to tell if the user typed *foo or foo[0].

Definition at line 12610 of file ExprConstant.cpp.

References E.

Referenced by determineEndOffset().

◆ truncateBitfieldValue() ◆ TryEvaluateBuiltinNaN() ◆ tryEvaluateBuiltinObjectSize() static bool tryEvaluateBuiltinObjectSize ( const ExprE, unsigned  Type, EvalInfo &  Info, uint64_t &  Size  ) static ◆ Worst() static ICEDiag Worst ( ICEDiag  A, ICEDiag  B  ) static

RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4