clang API Documentation

Defines | Enumerations | Functions
SemaExpr.cpp File Reference
#include "clang/Sema/SemaInternal.h"
#include "clang/Sema/DelayedDiagnostic.h"
#include "clang/Sema/Initialization.h"
#include "clang/Sema/Lookup.h"
#include "clang/Sema/ScopeInfo.h"
#include "clang/Sema/AnalysisBasedWarnings.h"
#include "clang/AST/ASTContext.h"
#include "clang/AST/ASTMutationListener.h"
#include "clang/AST/CXXInheritance.h"
#include "clang/AST/DeclObjC.h"
#include "clang/AST/DeclTemplate.h"
#include "clang/AST/EvaluatedExprVisitor.h"
#include "clang/AST/Expr.h"
#include "clang/AST/ExprCXX.h"
#include "clang/AST/ExprObjC.h"
#include "clang/AST/RecursiveASTVisitor.h"
#include "clang/AST/TypeLoc.h"
#include "clang/Basic/PartialDiagnostic.h"
#include "clang/Basic/SourceManager.h"
#include "clang/Basic/TargetInfo.h"
#include "clang/Lex/LiteralSupport.h"
#include "clang/Lex/Preprocessor.h"
#include "clang/Sema/DeclSpec.h"
#include "clang/Sema/Designator.h"
#include "clang/Sema/Scope.h"
#include "clang/Sema/ParsedTemplate.h"
#include "clang/Sema/SemaFixItUtils.h"
#include "clang/Sema/Template.h"
#include "TreeTransform.h"
#include "clang/AST/DeclNodes.inc"
#include "clang/AST/BuiltinTypes.def"
Include dependency graph for SemaExpr.cpp:

Go to the source code of this file.

Defines

#define ABSTRACT_DECL(kind)
#define VALUE(type, base)
#define DECL(type, base)   case Decl::type:
#define BUILTIN_TYPE(Id, SingletonId)   case BuiltinType::Id:
#define PLACEHOLDER_TYPE(Id, SingletonId)

Enumerations

enum  

Functions

static void CheckForNullPointerDereference (Sema &S, Expr *E)
static bool handleIntegerToComplexFloatConversion (Sema &S, ExprResult &IntExpr, ExprResult &ComplexExpr, QualType IntTy, QualType ComplexTy, bool SkipCast)
 Converts an integer to complex float type. Helper function of UsualArithmeticConversions()
static QualType handleComplexFloatToComplexFloatConverstion (Sema &S, ExprResult &LHS, ExprResult &RHS, QualType LHSType, QualType RHSType, bool IsCompAssign)
 Takes two complex float types and converts them to the same type. Helper function of UsualArithmeticConversions()
static QualType handleOtherComplexFloatConversion (Sema &S, ExprResult &ComplexExpr, ExprResult &OtherExpr, QualType ComplexTy, QualType OtherTy, bool ConvertComplexExpr, bool ConvertOtherExpr)
 Converts otherExpr to complex float and promotes complexExpr if necessary. Helper function of UsualArithmeticConversions()
static QualType handleComplexFloatConversion (Sema &S, ExprResult &LHS, ExprResult &RHS, QualType LHSType, QualType RHSType, bool IsCompAssign)
 Handle arithmetic conversion with complex types. Helper function of UsualArithmeticConversions()
static QualType handleIntToFloatConversion (Sema &S, ExprResult &FloatExpr, ExprResult &IntExpr, QualType FloatTy, QualType IntTy, bool ConvertFloat, bool ConvertInt)
 Hande arithmetic conversion from integer to float. Helper function of UsualArithmeticConversions()
static QualType handleFloatConversion (Sema &S, ExprResult &LHS, ExprResult &RHS, QualType LHSType, QualType RHSType, bool IsCompAssign)
 Handle arithmethic conversion with floating point types. Helper function of UsualArithmeticConversions()
static QualType handleComplexIntConversion (Sema &S, ExprResult &LHS, ExprResult &RHS, QualType LHSType, QualType RHSType, bool IsCompAssign)
 Handle conversions with GCC complex int extension. Helper function of UsualArithmeticConversions()
static QualType handleIntegerConversion (Sema &S, ExprResult &LHS, ExprResult &RHS, QualType LHSType, QualType RHSType, bool IsCompAssign)
 Handle integer arithmetic conversions. Helper function of UsualArithmeticConversions()
static bool CheckDeclInExpr (Sema &S, SourceLocation Loc, NamedDecl *D)
static bool shouldBuildBlockDeclRef (ValueDecl *D, Sema &S)
static bool shouldAddConstQualToVarRef (ValueDecl *D, Sema &S)
static ExprResult BuildBlockDeclRefExpr (Sema &S, ValueDecl *VD, const DeclarationNameInfo &NameInfo)
static bool CheckVecStepTraitOperandType (Sema &S, QualType T, SourceLocation Loc, SourceRange ArgRange)
static bool CheckExtensionTraitOperandType (Sema &S, QualType T, SourceLocation Loc, SourceRange ArgRange, UnaryExprOrTypeTrait TraitKind)
static bool CheckObjCTraitOperandConstraints (Sema &S, QualType T, SourceLocation Loc, SourceRange ArgRange, UnaryExprOrTypeTrait TraitKind)
static bool CheckAlignOfExpr (Sema &S, Expr *E)
static QualType CheckRealImagOperand (Sema &S, ExprResult &V, SourceLocation Loc, bool IsReal)
static void DiagnoseCalleeStaticArrayParam (Sema &S, ParmVarDecl *PVD)
static ExprResult rebuildUnknownAnyFunction (Sema &S, Expr *fn)
static void maybeExtendBlockObject (Sema &S, ExprResult &E)
 Do an explicit extend of the given block pointer if we're in ARC.
static bool checkCondition (Sema &S, Expr *Cond)
 Return false if the condition expression is valid, true otherwise.
static bool checkConditionalConvertScalarsToVectors (Sema &S, ExprResult &LHS, ExprResult &RHS, QualType CondTy)
 Return false if the two expressions can be converted to a vector, true otherwise.
static QualType checkConditionalVoidType (Sema &S, ExprResult &LHS, ExprResult &RHS)
 Handle when one or both operands are void type.
static bool checkConditionalNullPointer (Sema &S, ExprResult &NullExpr, QualType PointerTy)
 Return false if the NullExpr can be promoted to PointerTy, true otherwise.
static QualType checkConditionalPointerCompatibility (Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc)
 Checks compatibility between two pointers and return the resulting type.
static QualType checkConditionalBlockPointerCompatibility (Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc)
 Return the resulting type when the operands are both block pointers.
static QualType checkConditionalObjectPointersCompatibility (Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc)
 Return the resulting type when the operands are both pointers.
static bool checkPointerIntegerMismatch (Sema &S, ExprResult &Int, Expr *PointerExpr, SourceLocation Loc, bool IsIntFirstExpr)
 Return false if the first expression is not an integer and the second expression is not a pointer, true otherwise.
static void SuggestParentheses (Sema &Self, SourceLocation Loc, const PartialDiagnostic &Note, SourceRange ParenRange)
static bool IsArithmeticOp (BinaryOperatorKind Opc)
static bool IsArithmeticBinaryExpr (Expr *E, BinaryOperatorKind *Opcode, Expr **RHSExprs)
static bool IsLogicOp (BinaryOperatorKind Opc)
static bool ExprLooksBoolean (Expr *E)
static void DiagnoseConditionalPrecedence (Sema &Self, SourceLocation OpLoc, Expr *Condition, Expr *LHSExpr, Expr *RHSExpr)
static Sema::AssignConvertType checkPointerTypesForAssignment (Sema &S, QualType LHSType, QualType RHSType)
static Sema::AssignConvertType checkBlockPointerTypesForAssignment (Sema &S, QualType LHSType, QualType RHSType)
static Sema::AssignConvertType checkObjCPointerTypesForAssignment (Sema &S, QualType LHSType, QualType RHSType)
static void ConstructTransparentUnion (Sema &S, ASTContext &C, ExprResult &EResult, QualType UnionType, FieldDecl *Field)
 Constructs a transparent union from an expression that is used to initialize the transparent union.
static void checkArithmeticNull (Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompare)
static void diagnoseArithmeticOnTwoVoidPointers (Sema &S, SourceLocation Loc, Expr *LHSExpr, Expr *RHSExpr)
 Diagnose invalid arithmetic on two void pointers.
static void diagnoseArithmeticOnVoidPointer (Sema &S, SourceLocation Loc, Expr *Pointer)
 Diagnose invalid arithmetic on a void pointer.
static void diagnoseArithmeticOnTwoFunctionPointers (Sema &S, SourceLocation Loc, Expr *LHS, Expr *RHS)
 Diagnose invalid arithmetic on two function pointers.
static void diagnoseArithmeticOnFunctionPointer (Sema &S, SourceLocation Loc, Expr *Pointer)
 Diagnose invalid arithmetic on a function pointer.
static bool checkArithmeticIncompletePointerType (Sema &S, SourceLocation Loc, Expr *Operand)
 Emit error if Operand is incomplete pointer type.
static bool checkArithmeticOpPointerOperand (Sema &S, SourceLocation Loc, Expr *Operand)
 Check the validity of an arithmetic pointer operand.
static bool checkArithmeticBinOpPointerOperands (Sema &S, SourceLocation Loc, Expr *LHSExpr, Expr *RHSExpr)
 Check the validity of a binary arithmetic operation w.r.t. pointer operands.
static bool checkArithmethicPointerOnNonFragileABI (Sema &S, SourceLocation OpLoc, Expr *Op)
 Check bad cases where we step over interface counts.
static void diagnosePointerIncompatibility (Sema &S, SourceLocation Loc, Expr *LHSExpr, Expr *RHSExpr)
 Emit error when two pointers are incompatible.
static bool isScopedEnumerationType (QualType T)
static void DiagnoseBadShiftValues (Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, unsigned Opc, QualType LHSType)
static bool IsWithinTemplateSpecialization (Decl *D)
static void checkEnumComparison (Sema &S, SourceLocation Loc, ExprResult &LHS, ExprResult &RHS)
 If two different enums are compared, raise a warning.
static void diagnoseDistinctPointerComparison (Sema &S, SourceLocation Loc, ExprResult &LHS, ExprResult &RHS, bool IsError)
 Diagnose bad pointer comparisons.
static bool convertPointersToCompositeType (Sema &S, SourceLocation Loc, ExprResult &LHS, ExprResult &RHS)
 Returns false if the pointers are converted to a composite type, true otherwise.
static void diagnoseFunctionPointerToVoidComparison (Sema &S, SourceLocation Loc, ExprResult &LHS, ExprResult &RHS, bool IsError)
static bool IsReadonlyProperty (Expr *E, Sema &S)
static bool IsConstProperty (Expr *E, Sema &S)
static bool IsReadonlyMessage (Expr *E, Sema &S)
static bool CheckForModifiableLvalue (Expr *E, SourceLocation Loc, Sema &S)
static QualType CheckCommaOperands (Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc)
static QualType CheckIncrementDecrementOperand (Sema &S, Expr *Op, ExprValueKind &VK, SourceLocation OpLoc, bool IsInc, bool IsPrefix)
static ValueDeclgetPrimaryDecl (Expr *E)
static void diagnoseAddressOfInvalidType (Sema &S, SourceLocation Loc, Expr *E, unsigned Type)
 Diagnose invalid operand for address of operations.
static QualType CheckAddressOfOperand (Sema &S, ExprResult &OrigOp, SourceLocation OpLoc)
static QualType CheckIndirectionOperand (Sema &S, Expr *Op, ExprValueKind &VK, SourceLocation OpLoc)
 CheckIndirectionOperand - Type check unary indirection (prefix '*').
static BinaryOperatorKind ConvertTokenKindToBinaryOpcode (tok::TokenKind Kind)
static UnaryOperatorKind ConvertTokenKindToUnaryOpcode (tok::TokenKind Kind)
static void DiagnoseSelfAssignment (Sema &S, Expr *LHSExpr, Expr *RHSExpr, SourceLocation OpLoc)
static void DiagnoseBitwisePrecedence (Sema &Self, BinaryOperatorKind Opc, SourceLocation OpLoc, Expr *LHSExpr, Expr *RHSExpr)
static void EmitDiagnosticForBitwiseAndInBitwiseOr (Sema &Self, SourceLocation OpLoc, BinaryOperator *Bop)
 It accepts a '&' expr that is inside a '|' one. Emit a diagnostic together with a fixit hint that wraps the '&' expression in parentheses.
static void EmitDiagnosticForLogicalAndInLogicalOr (Sema &Self, SourceLocation OpLoc, BinaryOperator *Bop)
 It accepts a '&&' expr that is inside a '||' one. Emit a diagnostic together with a fixit hint that wraps the '&&' expression in parentheses.
static bool EvaluatesAsTrue (Sema &S, Expr *E)
 Returns true if the given expression can be evaluated as a constant 'true'.
static bool EvaluatesAsFalse (Sema &S, Expr *E)
 Returns true if the given expression can be evaluated as a constant 'false'.
static void DiagnoseLogicalAndInLogicalOrLHS (Sema &S, SourceLocation OpLoc, Expr *LHSExpr, Expr *RHSExpr)
 Look for '&&' in the left hand of a '||' expr.
static void DiagnoseLogicalAndInLogicalOrRHS (Sema &S, SourceLocation OpLoc, Expr *LHSExpr, Expr *RHSExpr)
 Look for '&&' in the right hand of a '||' expr.
static void DiagnoseBitwiseAndInBitwiseOr (Sema &S, SourceLocation OpLoc, Expr *OrArg)
 Look for '&' in the left or right hand of a '|' expr.
static void DiagnoseBinOpPrecedence (Sema &Self, BinaryOperatorKind Opc, SourceLocation OpLoc, Expr *LHSExpr, Expr *RHSExpr)
static ExprResult BuildOverloadedBinOp (Sema &S, Scope *Sc, SourceLocation OpLoc, BinaryOperatorKind Opc, Expr *LHS, Expr *RHS)
 Build an overloaded binary operator expression in the given scope.
static bool isQualifiedMemberAccess (Expr *E)
 Determine whether the given expression is a qualified member access expression, of a form that could be turned into a pointer to member with the address-of operator.
static ExprmaybeRebuildARCConsumingStmt (Stmt *Statement)
static void MakeObjCStringLiteralFixItHint (Sema &SemaRef, QualType DstType, Expr *SrcExpr, FixItHint &Hint)
bool IsPotentiallyEvaluatedContext (Sema &SemaRef)
static void diagnoseUncapturableValueReference (Sema &S, SourceLocation loc, VarDecl *var, DeclContext *DC)
static bool shouldAddConstForScope (CapturingScopeInfo *CSI, VarDecl *VD)
static void MarkVarDeclODRUsed (Sema &SemaRef, VarDecl *Var, SourceLocation Loc)
static void DoMarkVarDeclReferenced (Sema &SemaRef, SourceLocation Loc, VarDecl *Var, Expr *E)
static void MarkExprReferenced (Sema &SemaRef, SourceLocation Loc, Decl *D, Expr *E)
static ExprResult diagnoseUnknownAnyExpr (Sema &S, Expr *E)

Define Documentation

#define ABSTRACT_DECL (   kind)
#define BUILTIN_TYPE (   Id,
  SingletonId 
)    case BuiltinType::Id:
#define DECL (   type,
  base 
)    case Decl::type:
#define PLACEHOLDER_TYPE (   Id,
  SingletonId 
)
#define VALUE (   type,
  base 
)

Enumeration Type Documentation

anonymous enum

Definition at line 7279 of file SemaExpr.cpp.


Function Documentation

static ExprResult BuildBlockDeclRefExpr ( Sema S,
ValueDecl VD,
const DeclarationNameInfo NameInfo 
) [static]
static ExprResult BuildOverloadedBinOp ( Sema S,
Scope Sc,
SourceLocation  OpLoc,
BinaryOperatorKind  Opc,
Expr LHS,
Expr RHS 
) [static]
static QualType CheckAddressOfOperand ( Sema S,
ExprResult OrigOp,
SourceLocation  OpLoc 
) [static]

CheckAddressOfOperand - The operand of & must be either a function designator or an lvalue designating an object. If it is an lvalue, the object cannot be declared with storage class register or be a bit field. Note: The usual conversions are *not* applied to the operand of the & operator (C99 6.3.2.1p[2-4]), and its result is never an lvalue. In C++, the operand might be an overloaded function name, in which case we allow the '&' but retain the overloaded-function type.

Definition at line 7302 of file SemaExpr.cpp.

References clang::Sema::CheckPlaceholderExpr(), clang::Expr::ClassifyLValue(), clang::Sema::Context, clang::ASTContext::DependentTy, clang::Sema::Diag(), diagnoseAddressOfInvalidType(), clang::ActionResult< PtrTy, CompressInvalid >::get(), clang::DeclRefExpr::getDecl(), clang::Decl::getDeclContext(), clang::NamedDecl::getDeclName(), clang::Sema::getLangOptions(), clang::ASTContext::getMemberPointerType(), clang::ASTContext::getObjCObjectPointerType(), clang::Expr::getObjectKind(), clang::DeclContext::getParent(), clang::ASTContext::getPointerType(), getPrimaryDecl(), clang::DeclRefExpr::getQualifier(), clang::Stmt::getSourceRange(), clang::Expr::getType(), clang::ValueDecl::getType(), clang::ASTContext::getTypeDeclType(), clang::QualType::getTypePtr(), clang::Expr::IgnoreParens(), clang::ActionResult< PtrTy, CompressInvalid >::isInvalid(), clang::DeclContext::isRecord(), clang::Sema::isSFINAEContext(), clang::Expr::isTypeDependent(), clang::Expr::LV_ClassTemporary, clang::Expr::LV_IncompleteVoidType, clang::Expr::LV_MemberFunction, clang::Expr::LV_Valid, clang::OK_BitField, clang::OK_VectorComponent, clang::ASTContext::OverloadTy, clang::SC_Register, clang::ActionResult< PtrTy, CompressInvalid >::take(), clang::ASTContext::UnknownAnyTy, and clang::UO_Deref.

Referenced by clang::Sema::CreateBuiltinUnaryOp().

static bool CheckAlignOfExpr ( Sema S,
Expr E 
) [static]
static bool checkArithmethicPointerOnNonFragileABI ( Sema S,
SourceLocation  OpLoc,
Expr Op 
) [static]
static bool checkArithmeticBinOpPointerOperands ( Sema S,
SourceLocation  Loc,
Expr LHSExpr,
Expr RHSExpr 
) [static]

Check the validity of a binary arithmetic operation w.r.t. pointer operands.

This routine will diagnose any invalid arithmetic on pointer operands much like

See also:
checkArithmeticOpPointerOperand. However, it has special logic for emitting a single diagnostic even for operations where both LHS and RHS are (potentially problematic) pointers.
Returns:
True when the operand is valid to use (even if as an extension).

Definition at line 5891 of file SemaExpr.cpp.

References checkArithmeticIncompletePointerType(), diagnoseArithmeticOnFunctionPointer(), diagnoseArithmeticOnTwoFunctionPointers(), diagnoseArithmeticOnTwoVoidPointers(), diagnoseArithmeticOnVoidPointer(), clang::Sema::getLangOptions(), and clang::Expr::getType().

Referenced by clang::Sema::CheckSubtractionOperands().

static bool checkArithmeticIncompletePointerType ( Sema S,
SourceLocation  Loc,
Expr Operand 
) [static]

Emit error if Operand is incomplete pointer type.

Returns:
True if pointer has incomplete type

Definition at line 5840 of file SemaExpr.cpp.

References clang::Stmt::getSourceRange(), clang::Expr::getType(), clang::Sema::PDiag(), and clang::Sema::RequireCompleteType().

Referenced by checkArithmeticBinOpPointerOperands(), and checkArithmeticOpPointerOperand().

static void checkArithmeticNull ( Sema S,
ExprResult LHS,
ExprResult RHS,
SourceLocation  Loc,
bool  IsCompare 
) [static]
static bool checkArithmeticOpPointerOperand ( Sema S,
SourceLocation  Loc,
Expr Operand 
) [static]

Check the validity of an arithmetic pointer operand.

If the operand has pointer type, this code will check for pointer types which are invalid in arithmetic operations. These will be diagnosed appropriately, including whether or not the use is supported as an extension.

Returns:
True when the operand is valid to use (even if as an extension).

Definition at line 5863 of file SemaExpr.cpp.

References checkArithmeticIncompletePointerType(), diagnoseArithmeticOnFunctionPointer(), diagnoseArithmeticOnVoidPointer(), clang::Sema::getLangOptions(), and clang::Expr::getType().

Referenced by clang::Sema::CheckAdditionOperands(), CheckIncrementDecrementOperand(), and clang::Sema::CheckSubtractionOperands().

static Sema::AssignConvertType checkBlockPointerTypesForAssignment ( Sema S,
QualType  LHSType,
QualType  RHSType 
) [static]

checkBlockPointerTypesForAssignment - This routine determines whether two block pointer types are compatible or whether a block and normal pointer are compatible. It is more restrict than comparing two function pointer

Definition at line 5076 of file SemaExpr.cpp.

References clang::Sema::Compatible, clang::Sema::CompatiblePointerDiscardsQualifiers, clang::Sema::Context, clang::Sema::getLangOptions(), clang::Sema::IncompatibleBlockPointer, clang::QualType::isCanonical(), and clang::ASTContext::typesAreBlockPointerCompatible().

Referenced by clang::Sema::CheckAssignmentConstraints().

static QualType CheckCommaOperands ( Sema S,
ExprResult LHS,
ExprResult RHS,
SourceLocation  Loc 
) [static]
static bool checkCondition ( Sema S,
Expr Cond 
) [static]

Return false if the condition expression is valid, true otherwise.

Definition at line 4317 of file SemaExpr.cpp.

References clang::Sema::Diag(), clang::Sema::getLangOptions(), clang::Stmt::getLocStart(), and clang::Expr::getType().

Referenced by clang::Sema::CheckConditionalOperands().

static QualType checkConditionalBlockPointerCompatibility ( Sema S,
ExprResult LHS,
ExprResult RHS,
SourceLocation  Loc 
) [static]
static bool checkConditionalConvertScalarsToVectors ( Sema S,
ExprResult LHS,
ExprResult RHS,
QualType  CondTy 
) [static]
static bool checkConditionalNullPointer ( Sema S,
ExprResult NullExpr,
QualType  PointerTy 
) [static]
static QualType checkConditionalObjectPointersCompatibility ( Sema S,
ExprResult LHS,
ExprResult RHS,
SourceLocation  Loc 
) [static]
static QualType checkConditionalPointerCompatibility ( Sema S,
ExprResult LHS,
ExprResult RHS,
SourceLocation  Loc 
) [static]
static QualType checkConditionalVoidType ( Sema S,
ExprResult LHS,
ExprResult RHS 
) [static]
static bool CheckDeclInExpr ( Sema S,
SourceLocation  Loc,
NamedDecl D 
) [static]

Diagnoses obvious problems with the use of the given declaration as an expression. This is only actually called for lookups that were not overloaded, and it doesn't promise that the declaration will in fact be used.

Definition at line 2032 of file SemaExpr.cpp.

References clang::Sema::Diag(), and clang::NamedDecl::getDeclName().

Referenced by clang::Sema::BuildDeclarationNameExpr().

static void checkEnumComparison ( Sema S,
SourceLocation  Loc,
ExprResult LHS,
ExprResult RHS 
) [static]
static bool CheckExtensionTraitOperandType ( Sema S,
QualType  T,
SourceLocation  Loc,
SourceRange  ArgRange,
UnaryExprOrTypeTrait  TraitKind 
) [static]
static bool CheckForModifiableLvalue ( Expr E,
SourceLocation  Loc,
Sema S 
) [static]
static void CheckForNullPointerDereference ( Sema S,
Expr E 
) [static]
static QualType CheckIncrementDecrementOperand ( Sema S,
Expr Op,
ExprValueKind VK,
SourceLocation  OpLoc,
bool  IsInc,
bool  IsPrefix 
) [static]
static QualType CheckIndirectionOperand ( Sema S,
Expr Op,
ExprValueKind VK,
SourceLocation  OpLoc 
) [static]
static Sema::AssignConvertType checkObjCPointerTypesForAssignment ( Sema S,
QualType  LHSType,
QualType  RHSType 
) [static]
static bool CheckObjCTraitOperandConstraints ( Sema S,
QualType  T,
SourceLocation  Loc,
SourceRange  ArgRange,
UnaryExprOrTypeTrait  TraitKind 
) [static]
static bool checkPointerIntegerMismatch ( Sema S,
ExprResult Int,
Expr PointerExpr,
SourceLocation  Loc,
bool  IsIntFirstExpr 
) [static]
static Sema::AssignConvertType checkPointerTypesForAssignment ( Sema S,
QualType  LHSType,
QualType  RHSType 
) [static]
static QualType CheckRealImagOperand ( Sema S,
ExprResult V,
SourceLocation  Loc,
bool  IsReal 
) [static]
static bool CheckVecStepTraitOperandType ( Sema S,
QualType  T,
SourceLocation  Loc,
SourceRange  ArgRange 
) [static]

Definition at line 2586 of file SemaExpr.cpp.

References clang::Sema::Diag().

Referenced by clang::Sema::CheckUnaryExprOrTypeTraitOperand().

static void ConstructTransparentUnion ( Sema S,
ASTContext C,
ExprResult EResult,
QualType  UnionType,
FieldDecl Field 
) [static]
static bool convertPointersToCompositeType ( Sema S,
SourceLocation  Loc,
ExprResult LHS,
ExprResult RHS 
) [static]
static BinaryOperatorKind ConvertTokenKindToBinaryOpcode ( tok::TokenKind  Kind) [inline, static]
static UnaryOperatorKind ConvertTokenKindToUnaryOpcode ( tok::TokenKind  Kind) [inline, static]
static void diagnoseAddressOfInvalidType ( Sema S,
SourceLocation  Loc,
Expr E,
unsigned  Type 
) [static]

Diagnose invalid operand for address of operations.

Parameters:
TypeThe type of operand which cannot have its address taken.

Definition at line 7290 of file SemaExpr.cpp.

References clang::Sema::Diag(), and clang::Stmt::getSourceRange().

Referenced by CheckAddressOfOperand().

static void diagnoseArithmeticOnFunctionPointer ( Sema S,
SourceLocation  Loc,
Expr Pointer 
) [static]

Diagnose invalid arithmetic on a function pointer.

Definition at line 5826 of file SemaExpr.cpp.

References clang::Sema::Diag(), clang::Sema::getLangOptions(), clang::Stmt::getSourceRange(), and clang::Expr::getType().

Referenced by checkArithmeticBinOpPointerOperands(), and checkArithmeticOpPointerOperand().

static void diagnoseArithmeticOnTwoFunctionPointers ( Sema S,
SourceLocation  Loc,
Expr LHS,
Expr RHS 
) [static]
static void diagnoseArithmeticOnTwoVoidPointers ( Sema S,
SourceLocation  Loc,
Expr LHSExpr,
Expr RHSExpr 
) [static]

Diagnose invalid arithmetic on two void pointers.

Definition at line 5791 of file SemaExpr.cpp.

References clang::Sema::Diag(), clang::Sema::getLangOptions(), and clang::Stmt::getSourceRange().

Referenced by checkArithmeticBinOpPointerOperands().

static void diagnoseArithmeticOnVoidPointer ( Sema S,
SourceLocation  Loc,
Expr Pointer 
) [static]

Diagnose invalid arithmetic on a void pointer.

Definition at line 5801 of file SemaExpr.cpp.

References clang::Sema::Diag(), clang::Sema::getLangOptions(), and clang::Stmt::getSourceRange().

Referenced by checkArithmeticBinOpPointerOperands(), and checkArithmeticOpPointerOperand().

static void DiagnoseBadShiftValues ( Sema S,
ExprResult LHS,
ExprResult RHS,
SourceLocation  Loc,
unsigned  Opc,
QualType  LHSType 
) [static]
static void DiagnoseBinOpPrecedence ( Sema Self,
BinaryOperatorKind  Opc,
SourceLocation  OpLoc,
Expr LHSExpr,
Expr RHSExpr 
) [static]
static void DiagnoseBitwiseAndInBitwiseOr ( Sema S,
SourceLocation  OpLoc,
Expr OrArg 
) [static]

Look for '&' in the left or right hand of a '|' expr.

Definition at line 7870 of file SemaExpr.cpp.

References clang::BO_And, and EmitDiagnosticForBitwiseAndInBitwiseOr().

Referenced by DiagnoseBinOpPrecedence().

static void DiagnoseBitwisePrecedence ( Sema Self,
BinaryOperatorKind  Opc,
SourceLocation  OpLoc,
Expr LHSExpr,
Expr RHSExpr 
) [static]

DiagnoseBitwisePrecedence - Emit a warning when bitwise and comparison operators are mixed in a way that suggests that the programmer forgot that comparison operators have higher precedence. The most typical example of such code is "flags & 0x0020 != 0", which is equivalent to "flags & 1".

Definition at line 7744 of file SemaExpr.cpp.

References clang::Sema::Diag(), clang::Stmt::getLocEnd(), clang::Stmt::getLocStart(), clang::BinaryOperator::getOpcode(), clang::Stmt::getSourceRange(), clang::Sema::PDiag(), and SuggestParentheses().

Referenced by DiagnoseBinOpPrecedence().

static void DiagnoseCalleeStaticArrayParam ( Sema S,
ParmVarDecl PVD 
) [static]
static void DiagnoseConditionalPrecedence ( Sema Self,
SourceLocation  OpLoc,
Expr Condition,
Expr LHSExpr,
Expr RHSExpr 
) [static]

DiagnoseConditionalPrecedence - Emit a warning when a conditional operator and binary operator are mixed in a way that suggests the programmer assumed the conditional operator has higher precedence, for example: "int x = a + someBinaryCondition ? 1 : 2".

Definition at line 4859 of file SemaExpr.cpp.

References clang::Sema::Diag(), ExprLooksBoolean(), clang::Stmt::getLocEnd(), clang::Stmt::getLocStart(), clang::BinaryOperator::getOpcodeStr(), clang::Stmt::getSourceRange(), IsArithmeticBinaryExpr(), clang::Sema::PDiag(), and SuggestParentheses().

Referenced by clang::Sema::ActOnConditionalOp().

static void diagnoseDistinctPointerComparison ( Sema S,
SourceLocation  Loc,
ExprResult LHS,
ExprResult RHS,
bool  IsError 
) [static]
static void diagnoseFunctionPointerToVoidComparison ( Sema S,
SourceLocation  Loc,
ExprResult LHS,
ExprResult RHS,
bool  IsError 
) [static]
static void DiagnoseLogicalAndInLogicalOrLHS ( Sema S,
SourceLocation  OpLoc,
Expr LHSExpr,
Expr RHSExpr 
) [static]

Look for '&&' in the left hand of a '||' expr.

Definition at line 7833 of file SemaExpr.cpp.

References clang::BO_LAnd, clang::BO_LOr, EmitDiagnosticForLogicalAndInLogicalOr(), EvaluatesAsFalse(), and EvaluatesAsTrue().

Referenced by DiagnoseBinOpPrecedence().

static void DiagnoseLogicalAndInLogicalOrRHS ( Sema S,
SourceLocation  OpLoc,
Expr LHSExpr,
Expr RHSExpr 
) [static]

Look for '&&' in the right hand of a '||' expr.

Definition at line 7855 of file SemaExpr.cpp.

References clang::BO_LAnd, EmitDiagnosticForLogicalAndInLogicalOr(), EvaluatesAsFalse(), and EvaluatesAsTrue().

Referenced by DiagnoseBinOpPrecedence().

static void diagnosePointerIncompatibility ( Sema S,
SourceLocation  Loc,
Expr LHSExpr,
Expr RHSExpr 
) [static]

Emit error when two pointers are incompatible.

Definition at line 5944 of file SemaExpr.cpp.

References clang::Sema::Diag(), clang::Stmt::getSourceRange(), and clang::Expr::getType().

Referenced by clang::Sema::CheckSubtractionOperands().

static void DiagnoseSelfAssignment ( Sema S,
Expr LHSExpr,
Expr RHSExpr,
SourceLocation  OpLoc 
) [static]

DiagnoseSelfAssignment - Emits a warning if a value is assigned to itself. This warning is only emitted for builtin assignment operations. It is also suppressed in the event of macro expansions.

Definition at line 7575 of file SemaExpr.cpp.

References clang::Sema::ActiveTemplateInstantiations, clang::Sema::Diag(), clang::Decl::getCanonicalDecl(), clang::DeclRefExpr::getDecl(), clang::DeclRefExpr::getLocation(), clang::Stmt::getSourceRange(), clang::Expr::getType(), clang::ValueDecl::getType(), clang::Expr::IgnoreParenImpCasts(), clang::SourceLocation::isInvalid(), clang::SourceLocation::isMacroID(), and clang::QualType::isVolatileQualified().

Referenced by clang::Sema::CreateBuiltinBinOp().

static void diagnoseUncapturableValueReference ( Sema S,
SourceLocation  loc,
VarDecl var,
DeclContext DC 
) [static]
static ExprResult diagnoseUnknownAnyExpr ( Sema S,
Expr E 
) [static]
static void DoMarkVarDeclReferenced ( Sema SemaRef,
SourceLocation  Loc,
VarDecl Var,
Expr E 
) [static]
static void EmitDiagnosticForBitwiseAndInBitwiseOr ( Sema Self,
SourceLocation  OpLoc,
BinaryOperator Bop 
) [static]

It accepts a '&' expr that is inside a '|' one. Emit a diagnostic together with a fixit hint that wraps the '&' expression in parentheses.

Definition at line 7794 of file SemaExpr.cpp.

References clang::BO_And, clang::Sema::Diag(), clang::BinaryOperator::getOpcode(), clang::BinaryOperator::getOperatorLoc(), clang::BinaryOperator::getSourceRange(), clang::Sema::PDiag(), and SuggestParentheses().

Referenced by DiagnoseBitwiseAndInBitwiseOr().

static void EmitDiagnosticForLogicalAndInLogicalOr ( Sema Self,
SourceLocation  OpLoc,
BinaryOperator Bop 
) [static]

It accepts a '&&' expr that is inside a '||' one. Emit a diagnostic together with a fixit hint that wraps the '&&' expression in parentheses.

Definition at line 7808 of file SemaExpr.cpp.

References clang::BO_LAnd, clang::Sema::Diag(), clang::BinaryOperator::getOpcode(), clang::BinaryOperator::getOperatorLoc(), clang::BinaryOperator::getSourceRange(), clang::Sema::PDiag(), and SuggestParentheses().

Referenced by DiagnoseLogicalAndInLogicalOrLHS(), and DiagnoseLogicalAndInLogicalOrRHS().

static bool EvaluatesAsFalse ( Sema S,
Expr E 
) [static]

Returns true if the given expression can be evaluated as a constant 'false'.

Definition at line 7827 of file SemaExpr.cpp.

References clang::Expr::EvaluateAsBooleanCondition(), and clang::Sema::getASTContext().

Referenced by DiagnoseLogicalAndInLogicalOrLHS(), and DiagnoseLogicalAndInLogicalOrRHS().

static bool EvaluatesAsTrue ( Sema S,
Expr E 
) [static]

Returns true if the given expression can be evaluated as a constant 'true'.

Definition at line 7820 of file SemaExpr.cpp.

References clang::Expr::EvaluateAsBooleanCondition(), and clang::Sema::getASTContext().

Referenced by DiagnoseLogicalAndInLogicalOrLHS(), and DiagnoseLogicalAndInLogicalOrRHS().

static bool ExprLooksBoolean ( Expr E) [static]

ExprLooksBoolean - Returns true if E looks boolean, i.e. it has boolean type or is a logical expression such as (x==y) which has int type, but is commonly interpreted as boolean.

Definition at line 4842 of file SemaExpr.cpp.

References clang::Expr::getType(), clang::Expr::IgnoreParenImpCasts(), IsLogicOp(), and clang::UO_LNot.

Referenced by DiagnoseConditionalPrecedence().

static ValueDecl* getPrimaryDecl ( Expr E) [static]

getPrimaryDecl - Helper function for CheckAddressOfOperand(). This routine allows us to typecheck complex/recursive expressions where the declaration is needed for type checking. We only need to handle cases when the expression references a function designator or is an lvalue. Here are some examples:

  • &(x) => x
  • &*****f => f for f a function designator.
  • &s.xx => s
  • &s.zz[1].yy -> s, if zz is an array
  • *(x + 1) -> x, if x is an array
  • &"123"[2] -> 0
  • & __real__ x -> x

Definition at line 7233 of file SemaExpr.cpp.

References clang::UnaryOperator::getOpcode(), clang::Stmt::getStmtClass(), clang::UnaryOperator::getSubExpr(), clang::UO_Extension, clang::UO_Imag, and clang::UO_Real.

Referenced by CheckAddressOfOperand().

static QualType handleComplexFloatConversion ( Sema S,
ExprResult LHS,
ExprResult RHS,
QualType  LHSType,
QualType  RHSType,
bool  IsCompAssign 
) [static]

Handle arithmetic conversion with complex types. Helper function of UsualArithmeticConversions()

Definition at line 683 of file SemaExpr.cpp.

References handleComplexFloatToComplexFloatConverstion(), handleIntegerToComplexFloatConversion(), and handleOtherComplexFloatConversion().

Referenced by clang::Sema::UsualArithmeticConversions().

static QualType handleComplexFloatToComplexFloatConverstion ( Sema S,
ExprResult LHS,
ExprResult RHS,
QualType  LHSType,
QualType  RHSType,
bool  IsCompAssign 
) [static]

Takes two complex float types and converts them to the same type. Helper function of UsualArithmeticConversions()

Definition at line 622 of file SemaExpr.cpp.

References clang::CK_FloatingComplexCast, clang::Sema::Context, clang::ASTContext::getFloatingTypeOrder(), clang::Sema::ImpCastExprToType(), and clang::ActionResult< PtrTy, CompressInvalid >::take().

Referenced by handleComplexFloatConversion().

static QualType handleComplexIntConversion ( Sema S,
ExprResult LHS,
ExprResult RHS,
QualType  LHSType,
QualType  RHSType,
bool  IsCompAssign 
) [static]
static QualType handleFloatConversion ( Sema S,
ExprResult LHS,
ExprResult RHS,
QualType  LHSType,
QualType  RHSType,
bool  IsCompAssign 
) [static]

Handle arithmethic conversion with floating point types. Helper function of UsualArithmeticConversions()

Definition at line 761 of file SemaExpr.cpp.

References clang::CK_FloatingCast, clang::Sema::Context, clang::ASTContext::getFloatingTypeOrder(), handleIntToFloatConversion(), clang::Sema::ImpCastExprToType(), and clang::ActionResult< PtrTy, CompressInvalid >::take().

Referenced by clang::Sema::UsualArithmeticConversions().

static QualType handleIntegerConversion ( Sema S,
ExprResult LHS,
ExprResult RHS,
QualType  LHSType,
QualType  RHSType,
bool  IsCompAssign 
) [static]
static bool handleIntegerToComplexFloatConversion ( Sema S,
ExprResult IntExpr,
ExprResult ComplexExpr,
QualType  IntTy,
QualType  ComplexTy,
bool  SkipCast 
) [static]

Converts an integer to complex float type. Helper function of UsualArithmeticConversions()

Returns:
false if the integer expression is an integer type and is successfully converted to the complex type.

Definition at line 599 of file SemaExpr.cpp.

References clang::CK_FloatingRealToComplex, clang::CK_IntegralComplexToFloatingComplex, clang::CK_IntegralToFloating, getElementType(), clang::Sema::ImpCastExprToType(), and clang::ActionResult< PtrTy, CompressInvalid >::take().

Referenced by handleComplexFloatConversion().

static QualType handleIntToFloatConversion ( Sema S,
ExprResult FloatExpr,
ExprResult IntExpr,
QualType  FloatTy,
QualType  IntTy,
bool  ConvertFloat,
bool  ConvertInt 
) [static]
static QualType handleOtherComplexFloatConversion ( Sema S,
ExprResult ComplexExpr,
ExprResult OtherExpr,
QualType  ComplexTy,
QualType  OtherTy,
bool  ConvertComplexExpr,
bool  ConvertOtherExpr 
) [static]
static bool IsArithmeticBinaryExpr ( Expr E,
BinaryOperatorKind Opcode,
Expr **  RHSExprs 
) [static]

IsArithmeticBinaryExpr - Returns true if E is an arithmetic binary expression, either using a built-in or overloaded operator, and sets *OpCode to the opcode and *RHSExprs to the right-hand side expression.

Definition at line 4797 of file SemaExpr.cpp.

References clang::BinaryOperator::getOverloadedOpcode(), clang::Expr::IgnoreConversionOperator(), clang::Expr::IgnoreImpCasts(), and IsArithmeticOp().

Referenced by DiagnoseConditionalPrecedence().

static bool IsArithmeticOp ( BinaryOperatorKind  Opc) [static]

Definition at line 4789 of file SemaExpr.cpp.

References clang::BO_Mul, and clang::BO_Shr.

Referenced by IsArithmeticBinaryExpr().

static bool IsConstProperty ( Expr E,
Sema S 
) [static]
static bool IsLogicOp ( BinaryOperatorKind  Opc) [static]

Definition at line 4835 of file SemaExpr.cpp.

References clang::BO_LAnd, clang::BO_LOr, clang::BO_LT, and clang::BO_NE.

Referenced by ExprLooksBoolean().

bool IsPotentiallyEvaluatedContext ( Sema SemaRef)
static bool isQualifiedMemberAccess ( Expr E) [static]

Determine whether the given expression is a qualified member access expression, of a form that could be turned into a pointer to member with the address-of operator.

Definition at line 8146 of file SemaExpr.cpp.

References clang::NamedDecl::isCXXClassMember().

Referenced by clang::Sema::BuildUnaryOp().

static bool IsReadonlyMessage ( Expr E,
Sema S 
) [static]
static bool IsReadonlyProperty ( Expr E,
Sema S 
) [static]

IsReadonlyProperty - Verify that otherwise a valid l-value expression is a read-only property; return true if so. A readonly property expression depends on various declarations and thus must be treated specially.

Definition at line 6891 of file SemaExpr.cpp.

References clang::ObjCPropertyRefExpr::getBase(), clang::ObjCPropertyRefExpr::getExplicitProperty(), clang::ObjCPropertyRefExpr::getSuperReceiverType(), clang::Expr::getType(), clang::ObjCPropertyRefExpr::isImplicitProperty(), clang::Sema::isPropertyReadonly(), and clang::ObjCPropertyRefExpr::isSuperReceiver().

Referenced by CheckForModifiableLvalue().

static bool isScopedEnumerationType ( QualType  T) [static]

Definition at line 6100 of file SemaExpr.cpp.

Referenced by clang::Sema::CheckShiftOperands().

static bool IsWithinTemplateSpecialization ( Decl D) [static]

Definition at line 6217 of file SemaExpr.cpp.

References clang::Decl::getDeclContext().

Referenced by clang::Sema::CheckCompareOperands().

static void MakeObjCStringLiteralFixItHint ( Sema SemaRef,
QualType  DstType,
Expr SrcExpr,
FixItHint Hint 
) [static]
static void MarkExprReferenced ( Sema SemaRef,
SourceLocation  Loc,
Decl D,
Expr E 
) [static]
static void MarkVarDeclODRUsed ( Sema SemaRef,
VarDecl Var,
SourceLocation  Loc 
) [static]
static void maybeExtendBlockObject ( Sema S,
ExprResult E 
) [static]
static Expr* maybeRebuildARCConsumingStmt ( Stmt Statement) [static]

Given the last statement in a statement-expression, check whether the result is a producing expression (like a call to an ns_returns_retained function) and, if so, rebuild it to hoist the release out of the full-expression. Otherwise, return null. Cannot fail.

Definition at line 8252 of file SemaExpr.cpp.

References clang::CK_ARCConsumeObject, clang::CastExpr::getCastKind(), clang::ExprWithCleanups::getSubExpr(), clang::CastExpr::getSubExpr(), clang::Expr::getType(), clang::Expr::getValueKind(), and clang::ExprWithCleanups::setSubExpr().

Referenced by clang::Sema::ActOnStmtExpr().

static ExprResult rebuildUnknownAnyFunction ( Sema S,
Expr FunctionExpr 
) [static]
static bool shouldAddConstForScope ( CapturingScopeInfo CSI,
VarDecl VD 
) [static]

Definition at line 9491 of file SemaExpr.cpp.

References clang::Decl::hasAttr().

Referenced by clang::Sema::TryCaptureVar().

static bool shouldAddConstQualToVarRef ( ValueDecl D,
Sema S 
) [static]
static bool shouldBuildBlockDeclRef ( ValueDecl D,
Sema S 
) [static]
static void SuggestParentheses ( Sema Self,
SourceLocation  Loc,
const PartialDiagnostic Note,
SourceRange  ParenRange 
) [static]