clang
3.7.0
|
#include "clang/Sema/SemaInternal.h"
#include "TreeTransform.h"
#include "clang/AST/ASTConsumer.h"
#include "clang/AST/ASTContext.h"
#include "clang/AST/ASTLambda.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/AnalysisBasedWarnings.h"
#include "clang/Sema/DeclSpec.h"
#include "clang/Sema/DelayedDiagnostic.h"
#include "clang/Sema/Designator.h"
#include "clang/Sema/Initialization.h"
#include "clang/Sema/Lookup.h"
#include "clang/Sema/ParsedTemplate.h"
#include "clang/Sema/Scope.h"
#include "clang/Sema/ScopeInfo.h"
#include "clang/Sema/SemaFixItUtils.h"
#include "clang/Sema/Template.h"
#include "llvm/Support/ConvertUTF.h"
#include "clang/AST/DeclNodes.inc"
#include "clang/AST/BuiltinTypes.def"
#include "clang/AST/TypeNodes.def"
Go to the source code of this file.
Macros | |
#define | ABSTRACT_DECL(kind) |
#define | VALUE(type, base) |
#define | DECL(type, base) case Decl::type: |
#define | PLACEHOLDER_TYPE(ID, SINGLETON_ID) |
#define | BUILTIN_TYPE(ID, SINGLETON_ID) case BuiltinType::ID: |
#define | TYPE(Class, Base) |
#define | ABSTRACT_TYPE(Class, Base) |
#define | NON_CANONICAL_TYPE(Class, Base) |
#define | DEPENDENT_TYPE(Class, Base) case Type::Class: |
#define | NON_CANONICAL_UNLESS_DEPENDENT_TYPE(Class, Base) |
#define | BUILTIN_TYPE(Id, SingletonId) case BuiltinType::Id: |
#define | PLACEHOLDER_TYPE(Id, SingletonId) |
Typedefs | |
typedef ExprResult | PerformCastFn (Sema &S, Expr *operand, QualType toType) |
Enumerations | |
enum | NonConstCaptureKind { NCCK_None, NCCK_Block, NCCK_Lambda } |
enum | |
Functions | |
static void | DiagnoseUnusedOfDecl (Sema &S, NamedDecl *D, SourceLocation Loc) |
static bool | HasRedeclarationWithoutAvailabilityInCategory (const Decl *D) |
static AvailabilityResult | DiagnoseAvailabilityOfDecl (Sema &S, NamedDecl *D, SourceLocation Loc, const ObjCInterfaceDecl *UnknownObjCClass, bool ObjCPropertyAccess) |
static bool | hasAnyExplicitStorageClass (const FunctionDecl *D) |
Determine whether a FunctionDecl was ever declared with an explicit storage class. More... | |
static void | diagnoseUseOfInternalDeclInInlineFunction (Sema &S, const NamedDecl *D, SourceLocation Loc) |
Check whether we're in an extern inline function and referring to a variable or function with internal linkage (C11 6.7.4p3). More... | |
static void | CheckForNullPointerDereference (Sema &S, Expr *E) |
static void | DiagnoseDirectIsaAccess (Sema &S, const ObjCIvarRefExpr *OIRE, SourceLocation AssignLoc, const Expr *RHS) |
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() More... | |
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() More... | |
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() More... | |
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() More... | |
template<PerformCastFn doLHSCast, PerformCastFn doRHSCast> | |
static QualType | handleIntegerConversion (Sema &S, ExprResult &LHS, ExprResult &RHS, QualType LHSType, QualType RHSType, bool IsCompAssign) |
Handle integer arithmetic conversions. Helper function of UsualArithmeticConversions() More... | |
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() More... | |
static SourceLocation | getUDSuffixLoc (Sema &S, SourceLocation TokLoc, unsigned Offset) |
static ExprResult | BuildCookedLiteralOperatorCall (Sema &S, Scope *Scope, IdentifierInfo *UDSuffix, SourceLocation UDSuffixLoc, ArrayRef< Expr * > Args, SourceLocation LitEndLoc) |
static void | emitEmptyLookupTypoDiagnostic (const TypoCorrection &TC, Sema &SemaRef, const CXXScopeSpec &SS, DeclarationName Typo, SourceLocation TypoLoc, ArrayRef< Expr * > Args, unsigned DiagnosticID, unsigned DiagnosticSuggestID) |
static Expr * | recoverFromMSUnqualifiedLookup (Sema &S, ASTContext &Context, DeclarationNameInfo &NameInfo, SourceLocation TemplateKWLoc, const TemplateArgumentListInfo *TemplateArgs) |
static bool | CheckDeclInExpr (Sema &S, SourceLocation Loc, NamedDecl *D) |
static void | ConvertUTF8ToWideString (unsigned CharByteWidth, StringRef Source, SmallString< 32 > &Target) |
static Expr * | BuildFloatingLiteral (Sema &S, NumericLiteralParser &Literal, QualType Ty, SourceLocation Loc) |
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 void | warnOnSizeofOnArrayDecay (Sema &S, SourceLocation Loc, QualType T, Expr *E) |
Check whether E is a pointer from a decayed array type (the decayed pointer type is equal to T) and emit a warning if it is. More... | |
static bool | CheckAlignOfExpr (Sema &S, Expr *E) |
static QualType | CheckRealImagOperand (Sema &S, ExprResult &V, SourceLocation Loc, bool IsReal) |
static bool | checkArithmeticOnObjCPointer (Sema &S, SourceLocation opLoc, Expr *op) |
Diagnose if arithmetic on the given ObjC pointer is illegal. More... | |
static TypoCorrection | TryTypoCorrectionForCall (Sema &S, Expr *Fn, FunctionDecl *FDecl, ArrayRef< Expr * > Args) |
static void | DiagnoseCalleeStaticArrayParam (Sema &S, ParmVarDecl *PVD) |
static ExprResult | rebuildUnknownAnyFunction (Sema &S, Expr *fn) |
static bool | isPlaceholderToRemoveAsArg (QualType type) |
static bool | checkArgsForPlaceholders (Sema &S, MultiExprArg args) |
static FunctionDecl * | rewriteBuiltinFunctionDecl (Sema *Sema, ASTContext &Context, const FunctionDecl *FDecl, MultiExprArg ArgExprs) |
static bool | breakDownVectorType (QualType type, uint64_t &len, QualType &eltType) |
static bool | VectorTypesMatch (Sema &S, QualType srcTy, QualType destTy) |
static bool | checkCondition (Sema &S, Expr *Cond, SourceLocation QuestionLoc) |
Return false if the condition expression is valid, true otherwise. More... | |
static QualType | checkConditionalVoidType (Sema &S, ExprResult &LHS, ExprResult &RHS) |
Handle when one or both operands are void type. More... | |
static bool | checkConditionalNullPointer (Sema &S, ExprResult &NullExpr, QualType PointerTy) |
Return false if the NullExpr can be promoted to PointerTy, true otherwise. More... | |
static QualType | checkConditionalPointerCompatibility (Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc) |
Checks compatibility between two pointers and return the resulting type. More... | |
static QualType | checkConditionalBlockPointerCompatibility (Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc) |
Return the resulting type when the operands are both block pointers. More... | |
static QualType | checkConditionalObjectPointersCompatibility (Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc) |
Return the resulting type when the operands are both pointers. More... | |
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. More... | |
static QualType | OpenCLArithmeticConversions (Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation QuestionLoc) |
Simple conversion between integer and floating point types. More... | |
static QualType | OpenCLConvertScalarsToVectors (Sema &S, ExprResult &LHS, ExprResult &RHS, QualType CondTy, SourceLocation QuestionLoc) |
Convert scalar operands to a vector that matches the condition in length. More... | |
static bool | checkOpenCLConditionVector (Sema &S, Expr *Cond, SourceLocation QuestionLoc) |
Return false if this is a valid OpenCL condition vector. More... | |
static bool | checkVectorResult (Sema &S, QualType CondTy, QualType VecResTy, SourceLocation QuestionLoc) |
Return false if the vector condition type and the vector result type are compatible. More... | |
static QualType | OpenCLCheckVectorConditional (Sema &S, ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, SourceLocation QuestionLoc) |
Return the resulting type for the conditional operator in OpenCL (aka "ternary selection operator", OpenCL v1.1 s6.3.i) when the condition is a vector type. More... | |
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. More... | |
static bool | tryVectorConvertAndSplat (Sema &S, ExprResult *scalar, QualType scalarTy, QualType vectorEltTy, QualType vectorTy) |
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. More... | |
static void | diagnoseArithmeticOnVoidPointer (Sema &S, SourceLocation Loc, Expr *Pointer) |
Diagnose invalid arithmetic on a void pointer. More... | |
static void | diagnoseArithmeticOnTwoFunctionPointers (Sema &S, SourceLocation Loc, Expr *LHS, Expr *RHS) |
Diagnose invalid arithmetic on two function pointers. More... | |
static void | diagnoseArithmeticOnFunctionPointer (Sema &S, SourceLocation Loc, Expr *Pointer) |
Diagnose invalid arithmetic on a function pointer. More... | |
static bool | checkArithmeticIncompletePointerType (Sema &S, SourceLocation Loc, Expr *Operand) |
Emit error if Operand is incomplete pointer type. More... | |
static bool | checkArithmeticOpPointerOperand (Sema &S, SourceLocation Loc, Expr *Operand) |
Check the validity of an arithmetic pointer operand. More... | |
static bool | checkArithmeticBinOpPointerOperands (Sema &S, SourceLocation Loc, Expr *LHSExpr, Expr *RHSExpr) |
Check the validity of a binary arithmetic operation w.r.t. pointer operands. More... | |
static void | diagnoseStringPlusInt (Sema &Self, SourceLocation OpLoc, Expr *LHSExpr, Expr *RHSExpr) |
static void | diagnoseStringPlusChar (Sema &Self, SourceLocation OpLoc, Expr *LHSExpr, Expr *RHSExpr) |
Emit a warning when adding a char literal to a string. More... | |
static void | diagnosePointerIncompatibility (Sema &S, SourceLocation Loc, Expr *LHSExpr, Expr *RHSExpr) |
Emit error when two pointers are incompatible. More... | |
static bool | isScopedEnumerationType (QualType T) |
static void | DiagnoseBadShiftValues (Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, unsigned Opc, QualType LHSType) |
static QualType | checkOpenCLVectorShift (Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign) |
Return the resulting type when an OpenCL vector is shifted by a scalar or vector shift amount. More... | |
static bool | IsWithinTemplateSpecialization (Decl *D) |
static void | checkEnumComparison (Sema &S, SourceLocation Loc, Expr *LHS, Expr *RHS) |
If two different enums are compared, raise a warning. More... | |
static void | diagnoseDistinctPointerComparison (Sema &S, SourceLocation Loc, ExprResult &LHS, ExprResult &RHS, bool IsError) |
Diagnose bad pointer comparisons. More... | |
static bool | convertPointersToCompositeType (Sema &S, SourceLocation Loc, ExprResult &LHS, ExprResult &RHS) |
Returns false if the pointers are converted to a composite type, true otherwise. More... | |
static void | diagnoseFunctionPointerToVoidComparison (Sema &S, SourceLocation Loc, ExprResult &LHS, ExprResult &RHS, bool IsError) |
static bool | isObjCObjectLiteral (ExprResult &E) |
static bool | hasIsEqualMethod (Sema &S, const Expr *LHS, const Expr *RHS) |
static void | diagnoseObjCLiteralComparison (Sema &S, SourceLocation Loc, ExprResult &LHS, ExprResult &RHS, BinaryOperator::Opcode Opc) |
static void | diagnoseLogicalNotOnLHSofComparison (Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, unsigned OpaqueOpc) |
static ValueDecl * | getCompareDecl (Expr *E) |
static bool | IsReadonlyMessage (Expr *E, Sema &S) |
static NonConstCaptureKind | isReferenceToNonConstCapture (Sema &S, Expr *E) |
static bool | IsTypeModifiable (QualType Ty, bool IsDereference) |
static void | DiagnoseConstAssignment (Sema &S, const Expr *E, SourceLocation Loc) |
static bool | CheckForModifiableLvalue (Expr *E, SourceLocation Loc, Sema &S) |
static void | CheckIdentityFieldAssignment (Expr *LHSExpr, Expr *RHSExpr, SourceLocation Loc, Sema &Sema) |
static QualType | CheckCommaOperands (Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc) |
static QualType | CheckIncrementDecrementOperand (Sema &S, Expr *Op, ExprValueKind &VK, ExprObjectKind &OK, SourceLocation OpLoc, bool IsInc, bool IsPrefix) |
static ValueDecl * | getPrimaryDecl (Expr *E) |
static void | diagnoseAddressOfInvalidType (Sema &S, SourceLocation Loc, Expr *E, unsigned Type) |
Diagnose invalid operand for address of operations. More... | |
static void | RecordModifiableNonNullParam (Sema &S, const Expr *Exp) |
static QualType | CheckIndirectionOperand (Sema &S, Expr *Op, ExprValueKind &VK, SourceLocation OpLoc) |
CheckIndirectionOperand - Type check unary indirection (prefix '*'). More... | |
static UnaryOperatorKind | ConvertTokenKindToUnaryOpcode (tok::TokenKind Kind) |
static void | DiagnoseSelfAssignment (Sema &S, Expr *LHSExpr, Expr *RHSExpr, SourceLocation OpLoc) |
static void | checkObjCPointerIntrospection (Sema &S, ExprResult &L, ExprResult &R, SourceLocation OpLoc) |
static NamedDecl * | getDeclFromExpr (Expr *E) |
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. More... | |
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. More... | |
static bool | EvaluatesAsTrue (Sema &S, Expr *E) |
Returns true if the given expression can be evaluated as a constant 'true'. More... | |
static bool | EvaluatesAsFalse (Sema &S, Expr *E) |
Returns true if the given expression can be evaluated as a constant 'false'. More... | |
static void | DiagnoseLogicalAndInLogicalOrLHS (Sema &S, SourceLocation OpLoc, Expr *LHSExpr, Expr *RHSExpr) |
Look for '&&' in the left hand of a '||' expr. More... | |
static void | DiagnoseLogicalAndInLogicalOrRHS (Sema &S, SourceLocation OpLoc, Expr *LHSExpr, Expr *RHSExpr) |
Look for '&&' in the right hand of a '||' expr. More... | |
static void | DiagnoseBitwiseAndInBitwiseOr (Sema &S, SourceLocation OpLoc, Expr *OrArg) |
Look for '&' in the left or right hand of a '|' expr. More... | |
static void | DiagnoseAdditionInShift (Sema &S, SourceLocation OpLoc, Expr *SubExpr, StringRef Shift) |
static void | DiagnoseShiftCompare (Sema &S, SourceLocation OpLoc, Expr *LHSExpr, Expr *RHSExpr) |
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. More... | |
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. More... | |
static Expr * | maybeRebuildARCConsumingStmt (Stmt *Statement) |
static bool | IsPotentiallyEvaluatedContext (Sema &SemaRef) |
static void | diagnoseUncapturableValueReference (Sema &S, SourceLocation loc, VarDecl *var, DeclContext *DC) |
static bool | isVariableAlreadyCapturedInScopeInfo (CapturingScopeInfo *CSI, VarDecl *Var, bool &SubCapturesAreNested, QualType &CaptureType, QualType &DeclRefType) |
static DeclContext * | getParentOfCapturingContextOrNull (DeclContext *DC, VarDecl *Var, SourceLocation Loc, const bool Diagnose, Sema &S) |
static bool | isVariableCapturable (CapturingScopeInfo *CSI, VarDecl *Var, SourceLocation Loc, const bool Diagnose, Sema &S) |
static bool | captureInBlock (BlockScopeInfo *BSI, VarDecl *Var, SourceLocation Loc, const bool BuildAndDiagnose, QualType &CaptureType, QualType &DeclRefType, const bool Nested, Sema &S) |
static bool | captureInCapturedRegion (CapturedRegionScopeInfo *RSI, VarDecl *Var, SourceLocation Loc, const bool BuildAndDiagnose, QualType &CaptureType, QualType &DeclRefType, const bool RefersToCapturedVariable, Sema &S) |
Capture the given variable in the captured region. More... | |
static void | addAsFieldToClosureType (Sema &S, LambdaScopeInfo *LSI, VarDecl *Var, QualType FieldType, QualType DeclRefType, SourceLocation Loc, bool RefersToCapturedVariable) |
Create a field within the lambda class for the variable being captured. More... | |
static bool | captureInLambda (LambdaScopeInfo *LSI, VarDecl *Var, SourceLocation Loc, const bool BuildAndDiagnose, QualType &CaptureType, QualType &DeclRefType, const bool RefersToCapturedVariable, const Sema::TryCaptureKind Kind, SourceLocation EllipsisLoc, const bool IsTopScope, Sema &S) |
Capture the given variable in the lambda. More... | |
static bool | IsVariableNonDependentAndAConstantExpression (VarDecl *Var, ASTContext &Context) |
static void | DoMarkVarDeclReferenced (Sema &SemaRef, SourceLocation Loc, VarDecl *Var, Expr *E) |
static void | MarkExprReferenced (Sema &SemaRef, SourceLocation Loc, Decl *D, Expr *E, bool OdrUse) |
static ExprResult | diagnoseUnknownAnyExpr (Sema &S, Expr *E) |
#define ABSTRACT_DECL | ( | kind | ) |
#define ABSTRACT_TYPE | ( | Class, | |
Base | |||
) |
#define BUILTIN_TYPE | ( | ID, | |
SINGLETON_ID | |||
) | case BuiltinType::ID: |
#define BUILTIN_TYPE | ( | Id, | |
SingletonId | |||
) | case BuiltinType::Id: |
#define DECL | ( | type, | |
base | |||
) | case Decl::type: |
#define DEPENDENT_TYPE | ( | Class, | |
Base | |||
) | case Type::Class: |
#define NON_CANONICAL_TYPE | ( | Class, | |
Base | |||
) |
#define NON_CANONICAL_UNLESS_DEPENDENT_TYPE | ( | Class, | |
Base | |||
) |
#define PLACEHOLDER_TYPE | ( | ID, | |
SINGLETON_ID | |||
) |
#define PLACEHOLDER_TYPE | ( | Id, | |
SingletonId | |||
) |
#define TYPE | ( | Class, | |
Base | |||
) |
#define VALUE | ( | type, | |
base | |||
) |
typedef ExprResult PerformCastFn(Sema &S, Expr *operand, QualType toType) |
Definition at line 1128 of file SemaExpr.cpp.
anonymous enum |
Definition at line 9629 of file SemaExpr.cpp.
enum NonConstCaptureKind |
Is the given expression (which must be 'const') a reference to a variable which was originally non-const, but which has become 'const' due to being captured within a block?
Enumerator | |
---|---|
NCCK_None | |
NCCK_Block | |
NCCK_Lambda |
Definition at line 9050 of file SemaExpr.cpp.
|
static |
Create a field within the lambda class for the variable being captured.
Definition at line 12646 of file SemaExpr.cpp.
References clang::DeclContext::addDecl(), clang::AS_private, clang::Sema::Context, clang::FieldDecl::Create(), clang::ASTContext::getTrivialTypeSourceInfo(), clang::ICIS_NoInit, clang::sema::LambdaScopeInfo::Lambda, clang::Decl::setAccess(), and clang::Decl::setImplicit().
Referenced by captureInLambda().
Definition at line 5385 of file SemaExpr.cpp.
References clang::Type::getAs(), clang::Type::isRealType(), clang::Type::isScalarType(), and clang::ast_matchers::type.
Referenced by VectorTypesMatch().
|
static |
BuildCookedLiteralOperatorCall - A user-defined literal was found. Look up the corresponding cooked (non-raw) literal operator, and build a call to it.
Definition at line 1493 of file SemaExpr.cpp.
References clang::Sema::BuildLiteralOperatorCall(), clang::Sema::Context, clang::ASTContext::DeclarationNames, clang::ExprError(), clang::ASTContext::getArrayDecayedType(), clang::DeclarationNameTable::getCXXLiteralOperatorName(), clang::Sema::LOLR_Error, clang::Sema::LookupLiteralOperator(), clang::Sema::LookupOrdinaryName, and clang::DeclarationNameInfo::setCXXLiteralOperatorNameLoc().
Referenced by clang::Sema::ActOnCharacterConstant().
|
static |
Definition at line 3142 of file SemaExpr.cpp.
References clang::Sema::Context, clang::FloatingLiteral::Create(), clang::Sema::Diag(), clang::ASTContext::getFloatTypeSemantics(), and clang::NumericLiteralParser::GetFloatValue().
Referenced by clang::Sema::ActOnNumericConstant().
|
static |
Build an overloaded binary operator expression in the given scope.
Definition at line 10492 of file SemaExpr.cpp.
References clang::Sema::CreateOverloadedBinOp(), clang::BinaryOperator::getOverloadedOperator(), clang::Expr::getType(), clang::Sema::LookupOverloadedOperatorName(), and clang::OO_None.
Referenced by clang::Sema::BuildBinOp().
|
static |
Definition at line 12508 of file SemaExpr.cpp.
References clang::sema::CapturingScopeInfo::addCapture(), clang::Sema::Context, clang::Sema::Diag(), clang::Sema::FinalizeVarWithDestructor(), clang::ActionResult< PtrTy, CompressInvalid >::get(), clang::Type::getAs(), clang::NamedDecl::getDeclName(), clang::Sema::getLangOpts(), clang::Decl::getLocation(), clang::QualType::getNonReferenceType(), clang::QualType::getObjCLifetime(), clang::Decl::hasAttr(), clang::InitializedEntity::InitializeBlock(), clang::Type::isArrayType(), clang::ActionResult< PtrTy, CompressInvalid >::isInvalid(), clang::Type::isReferenceType(), clang::Sema::MaybeCreateExprWithCleanups(), clang::Qualifiers::OCL_Autoreleasing, clang::Sema::PerformCopyInitialization(), clang::Sema::PotentiallyEvaluated, clang::Result, clang::VK_LValue, and clang::QualType::withConst().
Referenced by clang::Sema::tryCaptureVariable().
|
static |
Capture the given variable in the captured region.
Definition at line 12599 of file SemaExpr.cpp.
References clang::sema::CapturingScopeInfo::addCapture(), clang::DeclContext::addDecl(), clang::AS_private, clang::Sema::Context, clang::FieldDecl::Create(), clang::Sema::getLangOpts(), clang::ASTContext::getLValueReferenceType(), clang::ASTContext::getTrivialTypeSourceInfo(), clang::QualType::getUnqualifiedType(), clang::ICIS_NoInit, clang::Sema::IsOpenMPCapturedVar(), clang::Decl::markUsed(), clang::Decl::setAccess(), clang::Decl::setImplicit(), clang::Decl::setReferenced(), clang::sema::CapturedRegionScopeInfo::TheRecordDecl, and clang::VK_LValue.
Referenced by clang::Sema::tryCaptureVariable().
|
static |
Capture the given variable in the lambda.
Definition at line 12663 of file SemaExpr.cpp.
References addAsFieldToClosureType(), clang::sema::CapturingScopeInfo::addCapture(), clang::QualType::addConst(), clang::Sema::Context, clang::Sema::Diag(), clang::Type::getAs(), clang::NamedDecl::getDeclName(), clang::Decl::getLocation(), clang::ASTContext::getLValueReferenceType(), clang::QualType::getNonReferenceType(), clang::QualType::getObjCLifetime(), clang::Type::getPointeeType(), clang::sema::CapturingScopeInfo::ImpCap_LambdaByref, clang::sema::CapturingScopeInfo::ImpCaptureStyle, clang::Type::isDependentType(), clang::Type::isReferenceType(), clang::sema::LambdaScopeInfo::Mutable, clang::Qualifiers::OCL_Autoreleasing, clang::Sema::RequireCompleteType(), clang::Sema::RequireNonAbstractType(), clang::Sema::TryCapture_ExplicitByRef, and clang::Sema::TryCapture_Implicit.
Referenced by clang::Sema::tryCaptureVariable().
Definition at line 3721 of file SemaExpr.cpp.
References clang::Sema::CheckUnaryExprOrTypeTraitOperand(), clang::Sema::Diag(), clang::Expr::getExprLoc(), clang::Expr::getObjectKind(), clang::Expr::IgnoreParens(), clang::Expr::isTypeDependent(), clang::OK_BitField, and clang::UETT_AlignOf.
Referenced by clang::Sema::CreateUnaryExprOrTypeTraitExpr().
|
static |
Check an argument list for placeholders that we won't try to handle later.
Definition at line 4633 of file SemaExpr.cpp.
References clang::Sema::CheckPlaceholderExpr(), clang::Sema::CorrectDelayedTyposInExpr(), clang::ActionResult< PtrTy, CompressInvalid >::get(), clang::ActionResult< PtrTy, CompressInvalid >::isInvalid(), and isPlaceholderToRemoveAsArg().
Referenced by clang::Sema::ActOnCallExpr().
|
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
Definition at line 7588 of file SemaExpr.cpp.
References checkArithmeticIncompletePointerType(), clang::Sema::Diag(), diagnoseArithmeticOnFunctionPointer(), diagnoseArithmeticOnTwoFunctionPointers(), diagnoseArithmeticOnTwoVoidPointers(), diagnoseArithmeticOnVoidPointer(), clang::Type::getAs(), clang::Sema::getLangOpts(), clang::Type::getPointeeType(), clang::Expr::getType(), clang::PointerType::isAddressSpaceOverlapping(), clang::Type::isAnyPointerType(), clang::Type::isFunctionType(), and clang::Type::isVoidType().
Referenced by clang::Sema::CheckSubtractionOperands().
|
static |
Emit error if Operand is incomplete pointer type.
Definition at line 7535 of file SemaExpr.cpp.
References clang::Type::getAs(), clang::Type::getPointeeType(), clang::Expr::getType(), clang::Type::isAnyPointerType(), clang::Type::isDependentType(), and clang::Sema::RequireCompleteType().
Referenced by checkArithmeticBinOpPointerOperands(), checkArithmeticOpPointerOperand(), and CheckIncrementDecrementOperand().
|
static |
Definition at line 7387 of file SemaExpr.cpp.
References clang::Sema::Diag(), and clang::ActionResult< PtrTy, CompressInvalid >::get().
Referenced by clang::Sema::CheckAdditionOperands(), clang::Sema::CheckBitwiseOperands(), clang::Sema::CheckCompareOperands(), clang::Sema::CheckMultiplyDivideOperands(), clang::Sema::CheckRemainderOperands(), clang::Sema::CheckShiftOperands(), and clang::Sema::CheckSubtractionOperands().
|
static |
Diagnose if arithmetic on the given ObjC pointer is illegal.
Definition at line 3929 of file SemaExpr.cpp.
References clang::ObjCRuntime::allowsPointerArithmetic(), clang::Type::castAs(), clang::Sema::Diag(), clang::Expr::getType(), clang::Type::isObjCObjectPointerType(), clang::Sema::LangOpts, and clang::LangOptions::ObjCRuntime.
Referenced by clang::Sema::CheckAdditionOperands(), CheckIncrementDecrementOperand(), and clang::Sema::CheckSubtractionOperands().
|
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.
Definition at line 7556 of file SemaExpr.cpp.
References checkArithmeticIncompletePointerType(), diagnoseArithmeticOnFunctionPointer(), diagnoseArithmeticOnVoidPointer(), clang::Type::getAs(), clang::Sema::getLangOpts(), clang::Type::getPointeeType(), clang::Expr::getType(), clang::Type::isAnyPointerType(), clang::Type::isFunctionType(), and clang::Type::isVoidType().
Referenced by clang::Sema::CheckAdditionOperands(), CheckIncrementDecrementOperand(), and clang::Sema::CheckSubtractionOperands().
|
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 6682 of file SemaExpr.cpp.
References clang::Sema::Compatible, clang::Sema::CompatiblePointerDiscardsQualifiers, clang::Sema::Context, clang::Sema::getLangOpts(), clang::Sema::IncompatibleBlockPointer, clang::QualType::isCanonical(), and clang::ASTContext::typesAreBlockPointerCompatible().
Referenced by clang::Sema::CheckAssignmentConstraints().
|
static |
Definition at line 9456 of file SemaExpr.cpp.
References clang::Sema::CheckPlaceholderExpr(), clang::Sema::DefaultFunctionArrayLvalueConversion(), clang::Sema::DiagnoseUnusedExprResult(), clang::ActionResult< PtrTy, CompressInvalid >::get(), clang::Sema::getLangOpts(), clang::Sema::IgnoredValueConversions(), clang::ActionResult< PtrTy, CompressInvalid >::isInvalid(), and clang::Sema::RequireCompleteType().
Referenced by clang::Sema::CreateBuiltinBinOp().
|
static |
Return false if the condition expression is valid, true otherwise.
Definition at line 5710 of file SemaExpr.cpp.
References clang::Sema::Diag(), clang::Sema::getLangOpts(), clang::Expr::getType(), clang::Type::isFloatingType(), and clang::Type::isScalarType().
Referenced by clang::Sema::CheckConditionalOperands().
|
static |
Return the resulting type when the operands are both block pointers.
Definition at line 5831 of file SemaExpr.cpp.
References checkConditionalPointerCompatibility(), clang::CK_BitCast, clang::Sema::Context, clang::Sema::Diag(), clang::ActionResult< PtrTy, CompressInvalid >::get(), clang::ASTContext::getPointerType(), clang::Sema::ImpCastExprToType(), clang::Type::isBlockPointerType(), clang::Type::isVoidPointerType(), and clang::ASTContext::VoidTy.
Referenced by clang::Sema::CheckConditionalOperands().
|
static |
Return false if the NullExpr can be promoted to PointerTy, true otherwise.
Definition at line 5747 of file SemaExpr.cpp.
References clang::CK_NullToPointer, clang::Sema::Context, clang::ActionResult< PtrTy, CompressInvalid >::get(), clang::Sema::ImpCastExprToType(), clang::Type::isAnyPointerType(), clang::Type::isBlockPointerType(), and clang::Expr::NPC_ValueDependentIsNull.
Referenced by clang::Sema::CheckConditionalOperands().
|
static |
Return the resulting type when the operands are both pointers.
Definition at line 5857 of file SemaExpr.cpp.
References checkConditionalPointerCompatibility(), clang::CK_BitCast, clang::CK_NoOp, clang::Sema::Context, clang::ActionResult< PtrTy, CompressInvalid >::get(), clang::Type::getAs(), clang::ASTContext::getPointerType(), clang::ASTContext::getQualifiedType(), clang::QualType::getQualifiers(), clang::Sema::ImpCastExprToType(), clang::Type::isIncompleteOrObjectType(), and clang::Type::isVoidType().
Referenced by clang::Sema::CheckConditionalOperands().
|
static |
Checks compatibility between two pointers and return the resulting type.
Definition at line 5760 of file SemaExpr.cpp.
References clang::Type::castAs(), clang::CK_BitCast, clang::Sema::Context, clang::Sema::Diag(), clang::ActionResult< PtrTy, CompressInvalid >::get(), clang::Type::getAs(), clang::ASTContext::getBlockPointerType(), clang::Qualifiers::getCVRQualifiers(), clang::Type::getPointeeType(), clang::ASTContext::getPointerType(), clang::ASTContext::getQualifiedType(), clang::QualType::getQualifiers(), clang::QualType::getUnqualifiedType(), clang::ASTContext::hasSameType(), clang::Sema::ImpCastExprToType(), clang::QualType::isNull(), clang::ASTContext::mergeTypes(), clang::Qualifiers::removeCVRQualifiers(), clang::ASTContext::VoidTy, and clang::QualType::withCVRQualifiers().
Referenced by checkConditionalBlockPointerCompatibility(), and checkConditionalObjectPointersCompatibility().
|
static |
Handle when one or both operands are void type.
Definition at line 5729 of file SemaExpr.cpp.
References clang::CK_ToVoid, clang::Sema::Context, clang::Sema::Diag(), clang::ActionResult< PtrTy, CompressInvalid >::get(), clang::Expr::getType(), clang::Sema::ImpCastExprToType(), clang::Type::isVoidType(), and clang::ASTContext::VoidTy.
Referenced by clang::Sema::CheckConditionalOperands().
|
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 2744 of file SemaExpr.cpp.
References clang::Sema::Diag(), and clang::NamedDecl::getDeclName().
Referenced by clang::Sema::BuildDeclarationNameExpr().
|
static |
If two different enums are compared, raise a warning.
Definition at line 8136 of file SemaExpr.cpp.
References clang::Sema::Context, clang::Sema::Diag(), clang::Type::getAs(), clang::EnumType::getDecl(), clang::NamedDecl::getIdentifier(), clang::Expr::getType(), clang::ASTContext::hasSameUnqualifiedType(), and clang::Expr::IgnoreParenImpCasts().
Referenced by clang::Sema::CheckCompareOperands().
|
static |
Definition at line 3511 of file SemaExpr.cpp.
References clang::Sema::Diag(), clang::Type::isFunctionType(), clang::Type::isVoidType(), clang::Sema::LangOpts, clang::UETT_AlignOf, and clang::UETT_SizeOf.
Referenced by clang::Sema::CheckUnaryExprOrTypeTraitOperand().
|
static |
CheckForModifiableLvalue - Verify that E is a modifiable lvalue. If not, emit an error and return true. If so, return false.
Definition at line 9213 of file SemaExpr.cpp.
References clang::Sema::Context, clang::Sema::Diag(), DiagnoseConstAssignment(), clang::Sema::getCurMethodDecl(), clang::DeclRefExpr::getDecl(), clang::Sema::getLangOpts(), clang::ObjCMethodDecl::getSelfDecl(), clang::TypeSourceInfo::getType(), clang::Expr::getType(), clang::DeclaratorDecl::getTypeSourceInfo(), clang::Expr::hasPlaceholderType(), clang::Expr::IgnoreParenCasts(), clang::VarDecl::isARCPseudoStrong(), clang::ObjCMethodDecl::isClassMethod(), clang::QualType::isConstQualified(), clang::Expr::isModifiableLvalue(), IsReadonlyMessage(), isReferenceToNonConstCapture(), clang::Expr::MLV_ArrayTemporary, clang::Expr::MLV_ArrayType, clang::Expr::MLV_ClassTemporary, clang::Expr::MLV_ConstAddrSpace, clang::Expr::MLV_ConstQualified, clang::Expr::MLV_DuplicateVectorComponents, clang::Expr::MLV_IncompleteType, clang::Expr::MLV_IncompleteVoidType, clang::Expr::MLV_InvalidExpression, clang::Expr::MLV_InvalidMessageExpression, clang::Expr::MLV_LValueCast, clang::Expr::MLV_MemberFunction, clang::Expr::MLV_NoSetterProperty, clang::Expr::MLV_NotObjectType, clang::Expr::MLV_SubObjCPropertySetting, clang::Expr::MLV_Valid, NCCK_Block, and clang::Sema::RequireCompleteType().
Referenced by clang::Sema::BuildVAArgExpr(), clang::Sema::CheckAssignmentOperands(), and CheckIncrementDecrementOperand().
Definition at line 535 of file SemaExpr.cpp.
References clang::Sema::Context, clang::Sema::DiagRuntimeBehavior(), clang::Expr::IgnoreParenCasts(), clang::Expr::NPC_ValueDependentIsNotNull, clang::Sema::PDiag(), and clang::UO_Deref.
Referenced by clang::Sema::CheckAssignmentOperands(), and clang::Sema::DefaultLvalueConversion().
|
static |
Definition at line 9329 of file SemaExpr.cpp.
References clang::Sema::Diag(), clang::ObjCIvarRefExpr::getBase(), clang::MemberExpr::getBase(), clang::ObjCIvarRefExpr::getDecl(), clang::DeclRefExpr::getDecl(), clang::MemberExpr::getMemberDecl(), and clang::Expr::IgnoreImpCasts().
Referenced by clang::Sema::CheckAssignmentOperands().
|
static |
CheckIncrementDecrementOperand - unlike most "Check" methods, this routine doesn't need to call UsualUnaryConversions or UsualArithmeticConversions.
Definition at line 9489 of file SemaExpr.cpp.
References clang::VectorType::AltiVecBool, checkArithmeticIncompletePointerType(), checkArithmeticOnObjCPointer(), checkArithmeticOpPointerOperand(), CheckForModifiableLvalue(), clang::Sema::CheckPlaceholderExpr(), clang::Sema::Context, clang::ASTContext::DependentTy, clang::Sema::Diag(), clang::ActionResult< PtrTy, CompressInvalid >::get(), clang::Type::getAs(), getElementType(), clang::Sema::getLangOpts(), clang::Expr::getObjectKind(), clang::Expr::getType(), clang::Type::isIntegerType(), clang::ActionResult< PtrTy, CompressInvalid >::isInvalid(), clang::Expr::isTypeDependent(), clang::VK_LValue, and clang::VK_RValue.
Referenced by clang::Sema::CreateBuiltinUnaryOp().
|
static |
CheckIndirectionOperand - Type check unary indirection (prefix '*').
Definition at line 9868 of file SemaExpr.cpp.
References clang::Sema::CheckCompatibleReinterpretCast(), clang::Sema::CheckPlaceholderExpr(), clang::Sema::Context, clang::ASTContext::DependentTy, clang::Sema::Diag(), clang::ActionResult< PtrTy, CompressInvalid >::get(), clang::Type::getAs(), clang::Sema::getLangOpts(), clang::Type::getPointeeType(), clang::Expr::getType(), clang::Expr::IgnoreParenCasts(), clang::QualType::isCForbiddenLValueType(), clang::ActionResult< PtrTy, CompressInvalid >::isInvalid(), clang::QualType::isNull(), clang::Expr::isTypeDependent(), clang::Type::isVoidType(), clang::Result, clang::Sema::UsualUnaryConversions(), clang::VK_LValue, and clang::VK_RValue.
Referenced by clang::Sema::CreateBuiltinUnaryOp().
|
static |
Check if a bitwise-& is performed on an Objective-C pointer. This is usually indicative of introspection within the Objective-C pointer.
Definition at line 10023 of file SemaExpr.cpp.
References Diag(), clang::Sema::Diag(), clang::ActionResult< PtrTy, CompressInvalid >::get(), clang::Sema::getLangOpts(), clang::Selector::getNameForSlot(), clang::Expr::getType(), clang::Expr::IgnoreParenCasts(), and clang::Type::isObjCObjectPointerType().
Referenced by clang::Sema::CreateBuiltinBinOp().
|
static |
checkObjCPointerTypesForAssignment - Compares two objective-c pointer types for assignment compatibility.
Definition at line 6712 of file SemaExpr.cpp.
References clang::Sema::Compatible, clang::Sema::CompatiblePointerDiscardsQualifiers, clang::Sema::Context, clang::Type::getAs(), clang::Sema::IncompatibleObjCQualifiedId, clang::Sema::IncompatiblePointer, clang::QualType::isAtLeastAsQualifiedAs(), clang::QualType::isCanonical(), clang::Type::isObjCBuiltinType(), clang::Type::isObjCClassType(), clang::Type::isObjCQualifiedClassType(), clang::Type::isObjCQualifiedIdType(), and clang::ASTContext::typesAreCompatible().
Referenced by clang::Sema::CheckAssignmentConstraints().
|
static |
Definition at line 3540 of file SemaExpr.cpp.
References clang::ObjCRuntime::allowsSizeofAlignof(), clang::Sema::Diag(), clang::Type::isObjCObjectType(), clang::Sema::LangOpts, clang::LangOptions::ObjCRuntime, and clang::UETT_SizeOf.
Referenced by clang::Sema::CheckUnaryExprOrTypeTraitOperand().
|
static |
Return false if this is a valid OpenCL condition vector.
Definition at line 6015 of file SemaExpr.cpp.
References clang::Sema::Diag(), clang::Type::getAs(), clang::VectorType::getElementType(), clang::Expr::getType(), and clang::Type::isIntegerType().
Referenced by OpenCLCheckVectorConditional().
|
static |
Return the resulting type when an OpenCL vector is shifted by a scalar or vector shift amount.
Definition at line 8000 of file SemaExpr.cpp.
References clang::CK_VectorSplat, clang::Sema::Context, clang::Sema::Diag(), clang::ActionResult< PtrTy, CompressInvalid >::get(), clang::Type::getAs(), clang::VectorType::getElementType(), clang::ASTContext::getExtVectorType(), clang::VectorType::getNumElements(), clang::Sema::ImpCastExprToType(), clang::ActionResult< PtrTy, CompressInvalid >::isInvalid(), and clang::Sema::UsualUnaryConversions().
Referenced by clang::Sema::CheckShiftOperands().
|
static |
Return false if the first expression is not an integer and the second expression is not a pointer, true otherwise.
Definition at line 5896 of file SemaExpr.cpp.
References clang::CK_IntegralToPointer, clang::Sema::Diag(), clang::ActionResult< PtrTy, CompressInvalid >::get(), clang::Expr::getType(), clang::Sema::ImpCastExprToType(), and clang::Type::isPointerType().
Referenced by clang::Sema::CheckConditionalOperands().
|
static |
Definition at line 6558 of file SemaExpr.cpp.
References clang::Sema::Compatible, clang::Sema::CompatiblePointerDiscardsQualifiers, clang::Qualifiers::compatiblyIncludes(), clang::Qualifiers::compatiblyIncludesObjCLifetime(), clang::Sema::Context, clang::Sema::FunctionVoidPointer, clang::ASTContext::getCorrespondingUnsignedType(), clang::Sema::getLangOpts(), clang::Qualifiers::getObjCLifetime(), clang::if(), clang::Sema::IncompatibleNestedPointerQualifiers, clang::Sema::IncompatiblePointer, clang::Sema::IncompatiblePointerDiscardsQualifiers, clang::Sema::IncompatiblePointerSign, clang::Qualifiers::isAddressSpaceSupersetOf(), clang::QualType::isCanonical(), clang::Sema::IsNoReturnConversion(), clang::Qualifiers::removeObjCLifetime(), clang::ASTContext::typesAreCompatible(), clang::ASTContext::UnsignedCharTy, clang::Qualifiers::withoutObjCGCAttr(), and clang::Qualifiers::withoutObjCLifetime().
Referenced by clang::Sema::CheckAssignmentConstraints().
|
static |
Definition at line 3872 of file SemaExpr.cpp.
References clang::Sema::CheckPlaceholderExpr(), clang::Sema::Context, clang::Sema::DefaultLvalueConversion(), clang::ASTContext::DependentTy, clang::Sema::Diag(), clang::ActionResult< PtrTy, CompressInvalid >::get(), clang::if(), clang::ActionResult< PtrTy, CompressInvalid >::isInvalid(), and clang::OK_Ordinary.
Referenced by clang::Sema::CreateBuiltinUnaryOp().
|
static |
Definition at line 3493 of file SemaExpr.cpp.
References clang::Sema::Diag(), clang::Type::isArithmeticType(), clang::Type::isIncompleteType(), clang::Type::isVectorType(), and clang::Type::isVoidType().
Referenced by clang::Sema::CheckUnaryExprOrTypeTraitOperand().
|
static |
Return false if the vector condition type and the vector result type are compatible.
OpenCL v1.1 s6.11.6 requires that both vector types have the same number of elements, and their element types have the same number of bits.
Definition at line 6035 of file SemaExpr.cpp.
References clang::Sema::Context, clang::Sema::Diag(), clang::Type::getAs(), clang::VectorType::getElementType(), clang::VectorType::getNumElements(), and clang::ASTContext::getTypeSize().
Referenced by OpenCLCheckVectorConditional().
|
static |
Constructs a transparent union from an expression that is used to initialize the transparent union.
Definition at line 7043 of file SemaExpr.cpp.
References AttributeLangSupport::C, clang::ActionResult< PtrTy, CompressInvalid >::get(), clang::ASTContext::getTrivialTypeSourceInfo(), clang::InitListExpr::setInitializedFieldInUnion(), clang::Expr::setType(), and clang::VK_RValue.
Referenced by clang::Sema::CheckTransparentUnionArgumentConstraints().
|
static |
Returns false if the pointers are converted to a composite type, true otherwise.
Definition at line 8174 of file SemaExpr.cpp.
References clang::CK_BitCast, clang::Sema::Diag(), diagnoseDistinctPointerComparison(), clang::Sema::FindCompositePointerType(), clang::ActionResult< PtrTy, CompressInvalid >::get(), clang::Sema::ImpCastExprToType(), clang::Type::isMemberPointerType(), clang::QualType::isNull(), clang::Type::isPointerType(), and clang::Sema::isSFINAEContext().
Referenced by clang::Sema::CheckCompareOperands().
|
inlinestatic |
Definition at line 9967 of file SemaExpr.cpp.
References clang::UO_AddrOf, clang::UO_Deref, clang::UO_Extension, clang::UO_Imag, clang::UO_LNot, clang::UO_Minus, clang::UO_Not, clang::UO_Plus, clang::UO_PreDec, clang::UO_PreInc, and clang::UO_Real.
Referenced by clang::Sema::ActOnUnaryOp().
|
static |
Definition at line 3006 of file SemaExpr.cpp.
Referenced by clang::Sema::BuildPredefinedExpr().
|
static |
Definition at line 10401 of file SemaExpr.cpp.
References clang::BO_Add, clang::BO_Sub, clang::Sema::Diag(), clang::Sema::PDiag(), and SuggestParentheses().
Referenced by DiagnoseBinOpPrecedence().
|
static |
Diagnose invalid operand for address of operations.
Type | The type of operand which cannot have its address taken. |
Definition at line 9640 of file SemaExpr.cpp.
References clang::Sema::Diag().
Referenced by clang::Sema::CheckAddressOfOperand().
|
static |
Diagnose invalid arithmetic on a function pointer.
Definition at line 7521 of file SemaExpr.cpp.
References clang::Sema::Diag(), clang::Sema::getLangOpts(), clang::Type::getPointeeType(), clang::Expr::getType(), and clang::Type::isAnyPointerType().
Referenced by checkArithmeticBinOpPointerOperands(), and checkArithmeticOpPointerOperand().
|
static |
Diagnose invalid arithmetic on two function pointers.
Definition at line 7505 of file SemaExpr.cpp.
References clang::Sema::Context, clang::Sema::Diag(), clang::Sema::getLangOpts(), clang::Type::getPointeeType(), clang::Expr::getType(), clang::ASTContext::hasSameUnqualifiedType(), and clang::Type::isAnyPointerType().
Referenced by checkArithmeticBinOpPointerOperands().
|
static |
Diagnose invalid arithmetic on two void pointers.
Definition at line 7486 of file SemaExpr.cpp.
References clang::Sema::Diag(), and clang::Sema::getLangOpts().
Referenced by checkArithmeticBinOpPointerOperands().
|
static |
Diagnose invalid arithmetic on a void pointer.
Definition at line 7496 of file SemaExpr.cpp.
References clang::Sema::Diag(), and clang::Sema::getLangOpts().
Referenced by checkArithmeticBinOpPointerOperands(), and checkArithmeticOpPointerOperand().
|
static |
Definition at line 102 of file SemaExpr.cpp.
References clang::Sema::AD_Deprecation, clang::Sema::AD_Partial, clang::Sema::AD_Unavailable, clang::AR_Available, clang::AR_Deprecated, clang::AR_NotYetIntroduced, clang::AR_Unavailable, clang::Sema::EmitAvailabilityWarning(), clang::ObjCPropertyDecl::findPropertyDecl(), clang::Type::getAs(), clang::Decl::getAttr(), clang::Decl::getAvailability(), clang::Sema::getCurContextAvailability(), clang::NamedDecl::getMostRecentDecl(), clang::Decl::getPreviousDecl(), HasRedeclarationWithoutAvailabilityInCategory(), and clang::Result.
Referenced by clang::Sema::DiagnoseUseOfDecl().
|
static |
Definition at line 7919 of file SemaExpr.cpp.
References clang::BO_Shl, clang::Sema::Context, clang::Sema::Diag(), clang::Sema::DiagRuntimeBehavior(), clang::ActionResult< PtrTy, CompressInvalid >::get(), clang::Sema::getLangOpts(), clang::ASTContext::getTypeSize(), clang::Type::hasUnsignedIntegerRepresentation(), clang::Sema::PDiag(), and clang::Result.
Referenced by clang::Sema::CheckShiftOperands().
|
static |
DiagnoseBinOpPrecedence - Emit warnings for expressions with tricky precedence.
Definition at line 10444 of file SemaExpr.cpp.
References clang::BO_LOr, clang::BO_Or, clang::BO_Shl, clang::BO_Shr, DiagnoseAdditionInShift(), DiagnoseBitwiseAndInBitwiseOr(), DiagnoseBitwisePrecedence(), DiagnoseLogicalAndInLogicalOrLHS(), DiagnoseLogicalAndInLogicalOrRHS(), DiagnoseShiftCompare(), clang::Sema::getASTContext(), clang::BinaryOperator::getOpcodeStr(), clang::Expr::getType(), clang::BinaryOperator::isBitwiseOp(), clang::BinaryOperator::isComparisonOp(), clang::Type::isIntegralType(), clang::SourceLocation::isMacroID(), and clang::prec::Shift.
Referenced by clang::Sema::ActOnBinOp().
|
static |
Look for '&' in the left or right hand of a '|' expr.
Definition at line 10393 of file SemaExpr.cpp.
References clang::BO_And, and EmitDiagnosticForBitwiseAndInBitwiseOr().
Referenced by DiagnoseBinOpPrecedence().
|
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 10271 of file SemaExpr.cpp.
References clang::Sema::Diag(), clang::BinaryOperator::getOpcodeStr(), clang::BinaryOperator::getRHS(), clang::BinaryOperator::isBitwiseOp(), clang::BinaryOperator::isComparisonOp(), clang::Sema::PDiag(), and SuggestParentheses().
Referenced by DiagnoseBinOpPrecedence().
|
static |
Definition at line 4530 of file SemaExpr.cpp.
References clang::Sema::Diag(), clang::TypeLoc::getAs(), clang::Decl::getLocation(), clang::TypeSourceInfo::getTypeLoc(), and clang::DeclaratorDecl::getTypeSourceInfo().
Referenced by clang::Sema::CheckStaticArrayArgument().
|
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 6446 of file SemaExpr.cpp.
References clang::Sema::Diag(), ExprLooksBoolean(), clang::BinaryOperator::getOpcodeStr(), IsArithmeticBinaryExpr(), clang::Sema::PDiag(), and SuggestParentheses().
Referenced by clang::Sema::ActOnConditionalOp().
|
static |
Emit the "read-only variable not assignable" error and print notes to give more information about why the variable is not assignable, such as pointing to the declaration of a const variable, showing that a method is const, or that the function is returning a const reference.
Definition at line 9089 of file SemaExpr.cpp.
References clang::Sema::Diag(), clang::SourceRange::getBegin(), clang::Sema::getFunctionLevelDeclContext(), clang::Decl::getLocation(), clang::FunctionDecl::getReturnType(), clang::FunctionDecl::getReturnTypeSourceRange(), clang::Expr::IgnoreParenImpCasts(), and IsTypeModifiable().
Referenced by CheckForModifiableLvalue().
|
static |
Definition at line 554 of file SemaExpr.cpp.
References clang::Sema::Context, clang::FixItHint::CreateInsertion(), clang::FixItHint::CreateReplacement(), clang::Sema::Diag(), clang::IdentifierTable::get(), clang::Type::getAs(), clang::DeclarationName::getAsIdentifierInfo(), clang::ObjCIvarRefExpr::getBase(), clang::ObjCIvarRefExpr::getDecl(), clang::NamedDecl::getDeclName(), clang::Expr::getExprLoc(), clang::Decl::getLocation(), clang::ObjCIvarRefExpr::getLocation(), clang::ObjCIvarRefExpr::getLocEnd(), clang::Preprocessor::getLocForEndOfToken(), clang::ObjCIvarRefExpr::getLocStart(), clang::ObjCIvarRefExpr::getOpLoc(), clang::Type::getPointeeType(), clang::ObjCInterfaceDecl::getSuperClass(), clang::Expr::getType(), clang::ASTContext::Idents, clang::ObjCIvarRefExpr::isArrow(), clang::IdentifierInfo::isStr(), clang::ObjCInterfaceDecl::ivar_begin(), clang::Sema::LookupOrdinaryName, clang::Sema::LookupSingleName(), clang::Sema::PP, and clang::Sema::TUScope.
Referenced by clang::Sema::CreateBuiltinBinOp(), and clang::Sema::DefaultLvalueConversion().
|
static |
Diagnose bad pointer comparisons.
Definition at line 8163 of file SemaExpr.cpp.
References clang::Sema::Diag(), and clang::ActionResult< PtrTy, CompressInvalid >::get().
Referenced by clang::Sema::CheckCompareOperands(), and convertPointersToCompositeType().
|
static |
Definition at line 8219 of file SemaExpr.cpp.
References clang::Sema::Diag(), and clang::ActionResult< PtrTy, CompressInvalid >::get().
Referenced by clang::Sema::CheckCompareOperands().
|
static |
Look for '&&' in the left hand of a '||' expr.
Definition at line 10356 of file SemaExpr.cpp.
References clang::BO_LAnd, clang::BO_LOr, EmitDiagnosticForLogicalAndInLogicalOr(), EvaluatesAsFalse(), and EvaluatesAsTrue().
Referenced by DiagnoseBinOpPrecedence().
|
static |
Look for '&&' in the right hand of a '||' expr.
Definition at line 10378 of file SemaExpr.cpp.
References clang::BO_LAnd, EmitDiagnosticForLogicalAndInLogicalOr(), EvaluatesAsFalse(), and EvaluatesAsTrue().
Referenced by DiagnoseBinOpPrecedence().
|
static |
Definition at line 8379 of file SemaExpr.cpp.
References clang::FixItHint::CreateInsertion(), clang::Sema::Diag(), clang::ActionResult< PtrTy, CompressInvalid >::get(), clang::Sema::getLangOpts(), clang::Preprocessor::getLocForEndOfToken(), clang::UnaryOperator::getOpcode(), clang::UnaryOperator::getOperatorLoc(), clang::Sema::getPreprocessor(), clang::UnaryOperator::getSubExpr(), clang::Expr::getType(), clang::Expr::IgnoreImpCasts(), clang::Type::isBooleanType(), clang::SourceLocation::isInvalid(), and clang::UO_LNot.
Referenced by clang::Sema::CheckCompareOperands().
|
static |
Definition at line 8330 of file SemaExpr.cpp.
References clang::BO_EQ, clang::Sema::CheckLiteralKind(), clang::FixItHint::CreateInsertion(), clang::FixItHint::CreateReplacement(), clang::Sema::Diag(), End, clang::ActionResult< PtrTy, CompressInvalid >::get(), clang::Sema::getASTContext(), clang::CharSourceRange::getCharRange(), clang::Preprocessor::getLocForEndOfToken(), hasIsEqualMethod(), clang::Expr::IgnoreParenCasts(), clang::BinaryOperator::isEqualityOp(), clang::Expr::isNullPointerConstant(), isObjCObjectLiteral(), clang::Sema::LK_Block, clang::Sema::LK_None, clang::Sema::LK_String, clang::Expr::NPC_ValueDependentIsNotNull, and clang::Sema::PP.
Referenced by clang::Sema::CheckCompareOperands().
|
static |
Emit error when two pointers are incompatible.
Definition at line 7733 of file SemaExpr.cpp.
References clang::Sema::Diag(), clang::Expr::getType(), and clang::Type::isAnyPointerType().
Referenced by clang::Sema::CheckSubtractionOperands().
|
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 9990 of file SemaExpr.cpp.
References clang::Sema::ActiveTemplateInstantiations, clang::Sema::Diag(), clang::Type::getAs(), clang::Decl::getCanonicalDecl(), clang::DeclRefExpr::getDecl(), clang::DeclRefExpr::getLocation(), 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 |
Definition at line 10415 of file SemaExpr.cpp.
References clang::Sema::Diag(), clang::CallExpr::getArg(), clang::CallExpr::getDirectCallee(), clang::CXXOperatorCallExpr::getOperatorLoc(), clang::FunctionDecl::getOverloadedOperator(), clang::CXXOperatorCallExpr::getSourceRange(), clang::FunctionDecl::isOverloadedOperator(), clang::Sema::PDiag(), and SuggestParentheses().
Referenced by DiagnoseBinOpPrecedence().
|
static |
Emit a warning when adding a char literal to a string.
Definition at line 7682 of file SemaExpr.cpp.
References clang::ASTContext::CharTy, clang::FixItHint::CreateInsertion(), clang::FixItHint::CreateReplacement(), clang::Sema::Diag(), clang::Sema::getASTContext(), clang::ASTContext::getCharWidth(), clang::Preprocessor::getLocForEndOfToken(), clang::Type::getPointeeType(), clang::Expr::getType(), clang::CharacterLiteral::getValue(), clang::Expr::IgnoreImpCasts(), clang::Type::isAnyCharacterType(), clang::Type::isAnyPointerType(), and clang::Sema::PP.
Referenced by clang::Sema::CheckAdditionOperands().
|
static |
diagnoseStringPlusInt - Emit a warning when adding an integer to a string literal.
Definition at line 7643 of file SemaExpr.cpp.
References clang::FixItHint::CreateInsertion(), clang::FixItHint::CreateReplacement(), clang::Sema::Diag(), clang::Sema::getASTContext(), clang::StringLiteral::getLength(), clang::Preprocessor::getLocForEndOfToken(), clang::Expr::getType(), clang::Expr::IgnoreImpCasts(), clang::Type::isIntegralOrUnscopedEnumerationType(), and clang::Sema::PP.
Referenced by clang::Sema::CheckAdditionOperands().
|
static |
Definition at line 12360 of file SemaExpr.cpp.
References clang::Sema::CurContext, clang::Sema::Diag(), clang::Decl::getDeclContext(), clang::NamedDecl::getIdentifier(), clang::Sema::getLangOpts(), clang::Decl::getLocation(), clang::DeclContext::getParent(), and clang::DeclContext::isFunctionOrMethod().
Referenced by getParentOfCapturingContextOrNull(), and clang::Sema::tryCaptureVariable().
|
static |
Definition at line 14186 of file SemaExpr.cpp.
References clang::Sema::Diag(), clang::ExprError(), clang::Expr::getExprLoc(), and clang::Expr::IgnoreParenImpCasts().
Referenced by clang::Sema::CheckPlaceholderExpr().
|
static |
Definition at line 76 of file SemaExpr.cpp.
References clang::Sema::Diag(), clang::Sema::getCurObjCLexicalContext(), clang::NamedDecl::getDeclName(), and clang::Decl::hasAttr().
Referenced by clang::Sema::DiagnoseUseOfDecl().
|
static |
Check whether we're in an extern inline function and referring to a variable or function with internal linkage (C11 6.7.4p3).
This is only a warning because we used to silently accept this code, but in many cases it will not behave correctly. This is not enabled in C++ mode because the restriction language is a bit weaker (C++11 [basic.def.odr]p6) and so while there may still be user mistakes, most of the time we can't prove that there are errors.
Definition at line 256 of file SemaExpr.cpp.
References Current, clang::Sema::Diag(), clang::Sema::getCurFunctionDecl(), clang::NamedDecl::getFormalLinkage(), clang::Sema::getLangOpts(), clang::Sema::getSourceManager(), clang::Decl::hasAttr(), clang::InternalLinkage, clang::NamedDecl::isExternallyVisible(), clang::FunctionDecl::isInlined(), clang::SourceManager::isInMainFile(), and clang::Sema::MaybeSuggestAddingStaticToDecl().
Referenced by clang::Sema::DiagnoseUseOfDecl().
|
static |
Definition at line 13178 of file SemaExpr.cpp.
References clang::TemplateSpecializationType::anyDependentTemplateArguments(), clang::Sema::Context, clang::Sema::CurContext, clang::Sema::getASTMutationListener(), clang::Sema::getCurLambda(), clang::Decl::getDeclContext(), clang::VarDecl::getPointOfInstantiation(), clang::VarTemplateSpecializationDecl::getTemplateArgsInfo(), clang::VarDecl::getTemplateSpecializationKind(), clang::ValueDecl::getType(), clang::VarDecl::hasLocalStorage(), clang::Expr::IgnoreParens(), clang::Sema::InstantiateVariableDefinition(), clang::DeclContext::isFunctionOrMethod(), clang::SourceLocation::isInvalid(), IsPotentiallyEvaluatedContext(), clang::Type::isReferenceType(), clang::isTemplateInstantiation(), clang::Sema::isUnevaluatedContext(), clang::VarDecl::isUsableInConstantExpressions(), clang::IsVariableAConstantExpression(), IsVariableNonDependentAndAConstantExpression(), clang::MarkVarDeclODRUsed(), clang::Sema::MaybeODRUseExprs, clang::Sema::PendingInstantiations, clang::Decl::setReferenced(), clang::VarDecl::setTemplateSpecializationKind(), and clang::TSK_ImplicitInstantiation.
Referenced by MarkExprReferenced(), and clang::Sema::MarkVariableReferenced().
|
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 10313 of file SemaExpr.cpp.
References clang::BO_And, clang::Sema::Diag(), clang::BinaryOperator::getOpcode(), clang::BinaryOperator::getOpcodeStr(), clang::BinaryOperator::getOperatorLoc(), clang::Sema::PDiag(), and SuggestParentheses().
Referenced by DiagnoseBitwiseAndInBitwiseOr().
|
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 10328 of file SemaExpr.cpp.
References clang::BO_LAnd, clang::Sema::Diag(), clang::BinaryOperator::getOpcode(), clang::BinaryOperator::getOpcodeStr(), clang::BinaryOperator::getOperatorLoc(), clang::Sema::PDiag(), and SuggestParentheses().
Referenced by DiagnoseLogicalAndInLogicalOrLHS(), and DiagnoseLogicalAndInLogicalOrRHS().
|
static |
Definition at line 1745 of file SemaExpr.cpp.
References clang::Sema::computeDeclContext(), clang::Sema::Diag(), clang::Sema::diagnoseTypo(), clang::TypoCorrection::getAsString(), clang::DeclarationName::getAsString(), clang::TypoCorrection::getCorrectionDecl(), clang::Sema::getLangOpts(), clang::CXXScopeSpec::getRange(), clang::CXXScopeSpec::isEmpty(), clang::Sema::PDiag(), Typo, and clang::TypoCorrection::WillReplaceSpecifier().
Referenced by clang::Sema::DiagnoseEmptyLookup().
Returns true if the given expression can be evaluated as a constant 'false'.
Definition at line 10349 of file SemaExpr.cpp.
References clang::Expr::EvaluateAsBooleanCondition(), clang::Sema::getASTContext(), and clang::Expr::isValueDependent().
Referenced by DiagnoseLogicalAndInLogicalOrLHS(), and DiagnoseLogicalAndInLogicalOrRHS().
Returns true if the given expression can be evaluated as a constant 'true'.
Definition at line 10341 of file SemaExpr.cpp.
References clang::Expr::EvaluateAsBooleanCondition(), clang::Sema::getASTContext(), and clang::Expr::isValueDependent().
Referenced by DiagnoseLogicalAndInLogicalOrLHS(), and DiagnoseLogicalAndInLogicalOrRHS().
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 6427 of file SemaExpr.cpp.
References clang::Expr::getType(), clang::Expr::IgnoreParenImpCasts(), clang::Type::isBooleanType(), IsLogicOp(), clang::Type::isPointerType(), and clang::UO_LNot.
Referenced by DiagnoseConditionalPrecedence().
Definition at line 8424 of file SemaExpr.cpp.
Referenced by clang::Sema::CheckCompareOperands().
Definition at line 10064 of file SemaExpr.cpp.
Referenced by clang::Sema::CreateBuiltinBinOp().
|
static |
Definition at line 12432 of file SemaExpr.cpp.
References diagnoseUncapturableValueReference(), clang::getLambdaAwareParentOfDeclContext(), clang::VarDecl::hasLocalStorage(), and clang::isLambdaCallOperator().
Referenced by clang::Sema::tryCaptureVariable().
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:
Definition at line 9583 of file SemaExpr.cpp.
References clang::UnaryOperator::getOpcode(), clang::UnaryOperator::getSubExpr(), clang::UO_Extension, clang::UO_Imag, and clang::UO_Real.
Referenced by clang::Sema::CheckAddressOfOperand().
|
static |
getUDSuffixLoc - Create a SourceLocation for a ud-suffix, given the location of the token and the offset of the ud-suffix within it.
Definition at line 1485 of file SemaExpr.cpp.
References clang::Lexer::AdvanceToTokenCharacter(), clang::Sema::getLangOpts(), and clang::Sema::getSourceManager().
Referenced by clang::Sema::ActOnCharacterConstant(), clang::Sema::ActOnNumericConstant(), and clang::Sema::ActOnStringLiteral().
|
static |
Handle arithmetic conversion with complex types. Helper function of UsualArithmeticConversions()
Definition at line 1005 of file SemaExpr.cpp.
References clang::CK_FloatingCast, clang::CK_FloatingComplexCast, clang::Sema::Context, clang::ActionResult< PtrTy, CompressInvalid >::get(), clang::ASTContext::getComplexType(), clang::ASTContext::getFloatingTypeOrder(), handleIntegerToComplexFloatConversion(), and clang::Sema::ImpCastExprToType().
Referenced by clang::Sema::UsualArithmeticConversions().
|
static |
Handle conversions with GCC complex int extension. Helper function of UsualArithmeticConversions()
Definition at line 1196 of file SemaExpr.cpp.
References clang::CK_IntegralRealToComplex, clang::Type::getAsComplexIntegerType(), clang::ComplexType::getElementType(), and S.
Referenced by clang::Sema::UsualArithmeticConversions().
|
static |
Handle arithmethic conversion with floating point types. Helper function of UsualArithmeticConversions()
Definition at line 1092 of file SemaExpr.cpp.
References clang::CK_FloatingCast, clang::Sema::Context, clang::ASTContext::FloatTy, clang::ActionResult< PtrTy, CompressInvalid >::get(), clang::ASTContext::getFloatingTypeOrder(), clang::Sema::getLangOpts(), handleIntToFloatConversion(), clang::Sema::ImpCastExprToType(), clang::Type::isHalfType(), and clang::Type::isRealFloatingType().
Referenced by OpenCLArithmeticConversions(), and clang::Sema::UsualArithmeticConversions().
|
static |
Handle integer arithmetic conversions. Helper function of UsualArithmeticConversions()
Definition at line 1146 of file SemaExpr.cpp.
References clang::Sema::Context, clang::ActionResult< PtrTy, CompressInvalid >::get(), clang::ASTContext::getCorrespondingUnsignedType(), clang::ASTContext::getIntegerTypeOrder(), clang::ASTContext::getIntWidth(), clang::Type::hasSignedIntegerRepresentation(), and S.
|
static |
Converts an integer to complex float type. Helper function of UsualArithmeticConversions()
Definition at line 983 of file SemaExpr.cpp.
References clang::CK_FloatingRealToComplex, clang::CK_IntegralComplexToFloatingComplex, clang::CK_IntegralToFloating, clang::ActionResult< PtrTy, CompressInvalid >::get(), getElementType(), clang::Sema::ImpCastExprToType(), clang::Type::isComplexIntegerType(), clang::Type::isComplexType(), clang::Type::isIntegerType(), and clang::Type::isRealFloatingType().
Referenced by handleComplexFloatConversion().
|
static |
Hande arithmetic conversion from integer to float. Helper function of UsualArithmeticConversions()
Definition at line 1061 of file SemaExpr.cpp.
References clang::CK_FloatingRealToComplex, clang::CK_IntegralComplexToFloatingComplex, clang::CK_IntegralToFloating, clang::Sema::Context, clang::ActionResult< PtrTy, CompressInvalid >::get(), clang::ASTContext::getComplexType(), clang::Sema::ImpCastExprToType(), clang::Type::isComplexIntegerType(), and clang::Type::isIntegerType().
Referenced by handleFloatConversion().
|
static |
Determine whether a FunctionDecl was ever declared with an explicit storage class.
Definition at line 240 of file SemaExpr.cpp.
References clang::Redeclarable< decl_type >::redecls(), and clang::SC_None.
Referenced by clang::Sema::MaybeSuggestAddingStaticToDecl().
Definition at line 8242 of file SemaExpr.cpp.
References clang::Type::getAs(), clang::ObjCObjectPointerType::getPointeeType(), clang::ObjCMethodDecl::getReturnType(), clang::Expr::getType(), clang::ObjCObjectPointerType::isObjCIdType(), clang::Type::isObjCObjectPointerType(), clang::Type::isScalarType(), clang::Sema::LookupInstanceMethodInGlobalPool(), clang::Sema::LookupMethodInObjectType(), clang::Sema::LookupMethodInQualifiedType(), clang::Sema::NSAPIObj, and clang::ObjCMethodDecl::parameters().
Referenced by diagnoseObjCLiteralComparison().
Definition at line 85 of file SemaExpr.cpp.
References clang::ObjCInterfaceDecl::visible_categories().
Referenced by DiagnoseAvailabilityOfDecl().
|
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 6381 of file SemaExpr.cpp.
References clang::BinaryOperator::getOverloadedOpcode(), clang::Expr::IgnoreConversionOperator(), clang::Expr::IgnoreImpCasts(), and IsArithmeticOp().
Referenced by DiagnoseConditionalPrecedence().
|
static |
Definition at line 6373 of file SemaExpr.cpp.
References clang::BO_Mul, and clang::BO_Shr.
Referenced by IsArithmeticBinaryExpr().
|
static |
Definition at line 6420 of file SemaExpr.cpp.
References clang::BO_LAnd, clang::BO_LOr, clang::BO_LT, and clang::BO_NE.
Referenced by ExprLooksBoolean().
|
static |
Definition at line 8229 of file SemaExpr.cpp.
References clang::ActionResult< PtrTy, CompressInvalid >::get().
Referenced by clang::Sema::CheckCompareOperands(), and diagnoseObjCLiteralComparison().
Is the given type a placeholder that we need to lower out immediately during argument processing?
Definition at line 4592 of file SemaExpr.cpp.
References clang::BuiltinType::getKind(), and clang::ast_matchers::type.
Referenced by checkArgsForPlaceholders().
Definition at line 12147 of file SemaExpr.cpp.
References clang::Sema::ConstantEvaluated, clang::Sema::CurContext, clang::Sema::ExprEvalContexts, clang::DeclContext::isDependentContext(), clang::Sema::PotentiallyEvaluated, clang::Sema::PotentiallyEvaluatedIfUsed, clang::Sema::Unevaluated, and clang::Sema::UnevaluatedAbstract.
Referenced by DoMarkVarDeclReferenced(), and clang::Sema::MarkFunctionReferenced().
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 10760 of file SemaExpr.cpp.
References clang::NamedDecl::isCXXClassMember().
Referenced by clang::Sema::BuildUnaryOp().
Definition at line 9037 of file SemaExpr.cpp.
References clang::MemberExpr::getBase(), clang::MemberExpr::getMemberDecl(), clang::ObjCMessageExpr::getMethodDecl(), and clang::Expr::IgnoreParenImpCasts().
Referenced by CheckForModifiableLvalue().
|
static |
Definition at line 9051 of file SemaExpr.cpp.
References clang::Sema::CurContext, clang::DeclRefExpr::getDecl(), clang::Decl::getDeclContext(), clang::DeclContext::getParent(), clang::Expr::getType(), clang::ValueDecl::getType(), clang::VarDecl::hasLocalStorage(), clang::Expr::IgnoreParens(), clang::QualType::isConstQualified(), clang::VarDecl::isInitCapture(), clang::Expr::isLValue(), NCCK_Block, NCCK_Lambda, NCCK_None, and clang::DeclRefExpr::refersToEnclosingVariableOrCapture().
Referenced by CheckForModifiableLvalue().
Definition at line 7913 of file SemaExpr.cpp.
References clang::Type::getAs().
Referenced by clang::Sema::CheckShiftOperands(), and clang::Sema::CreateBuiltinUnaryOp().
Definition at line 9078 of file SemaExpr.cpp.
References clang::QualType::getNonReferenceType(), clang::Type::getPointeeType(), clang::QualType::isConstQualified(), and clang::Type::isPointerType().
Referenced by DiagnoseConstAssignment().
|
static |
Definition at line 12406 of file SemaExpr.cpp.
References clang::QualType::addConst(), clang::sema::CapturingScopeInfo::CaptureMap, clang::sema::CapturingScopeInfo::getCapture(), clang::sema::CapturingScopeInfo::Capture::getCaptureType(), clang::QualType::getNonReferenceType(), and clang::sema::CapturingScopeInfo::Capture::isCopyCapture().
Referenced by clang::Sema::tryCaptureVariable().
|
static |
Definition at line 12447 of file SemaExpr.cpp.
References clang::Sema::Diag(), clang::Type::getAs(), clang::NamedDecl::getDeclName(), clang::Decl::getLocation(), clang::ValueDecl::getType(), clang::Decl::hasAttr(), and clang::Type::isVariablyModifiedType().
Referenced by clang::Sema::tryCaptureVariable().
|
inlinestatic |
Definition at line 13098 of file SemaExpr.cpp.
References clang::VarDecl::ensureEvaluatedStmt(), clang::VarDecl::getAnyInitializer(), clang::ValueDecl::getType(), clang::Type::isDependentType(), clang::Expr::isValueDependent(), clang::IsVariableAConstantExpression(), and clang::EvaluatedStmt::Value.
Referenced by DoMarkVarDeclReferenced(), and clang::Sema::UpdateMarkingForLValueToRValue().
Definition at line 8125 of file SemaExpr.cpp.
References clang::Decl::getDeclContext().
Referenced by clang::Sema::CheckCompareOperands().
|
static |
Definition at line 13301 of file SemaExpr.cpp.
References DoMarkVarDeclReferenced(), clang::MemberExpr::getBase(), clang::Expr::getBestDynamicClassType(), clang::CXXMethodDecl::getCorrespondingMethodInClass(), clang::MemberExpr::getMemberDecl(), clang::MemberExpr::hasQualifier(), clang::FunctionDecl::isPure(), clang::CXXMethodDecl::isVirtual(), and clang::Sema::MarkAnyDeclReferenced().
Referenced by clang::Sema::MarkDeclRefReferenced(), and clang::Sema::MarkMemberReferenced().
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 10866 of file SemaExpr.cpp.
References clang::CK_ARCConsumeObject, clang::CastExpr::getCastKind(), clang::CastExpr::getSubExpr(), clang::ExprWithCleanups::getSubExpr(), clang::Expr::getType(), clang::Expr::getValueKind(), and clang::ExprWithCleanups::setSubExpr().
Referenced by clang::Sema::ActOnStmtExpr().
|
static |
Simple conversion between integer and floating point types.
Used when handling the OpenCL conditional operator where the condition is a vector while the other operands are scalar.
OpenCL v1.1 s6.3.i and s6.11.6 together require that the scalar types are either integer or floating type. Between the two operands, the type with the higher rank is defined as the "result type". The other operand needs to be promoted to the same type. No other type promotion is allowed. We cannot use UsualArithmeticConversions() for this purpose, since it always promotes promotable types.
Definition at line 5926 of file SemaExpr.cpp.
References clang::Sema::Context, clang::Sema::DefaultFunctionArrayLvalueConversion(), clang::Sema::Diag(), clang::ActionResult< PtrTy, CompressInvalid >::get(), clang::ASTContext::getCanonicalType(), handleFloatConversion(), clang::Type::isIntegerType(), clang::ActionResult< PtrTy, CompressInvalid >::isInvalid(), clang::Type::isRealFloatingType(), and S.
Referenced by OpenCLConvertScalarsToVectors().
|
static |
Return the resulting type for the conditional operator in OpenCL (aka "ternary selection operator", OpenCL v1.1 s6.3.i) when the condition is a vector type.
Definition at line 6063 of file SemaExpr.cpp.
References checkOpenCLConditionVector(), clang::Sema::CheckVectorOperands(), checkVectorResult(), clang::Sema::DefaultFunctionArrayLvalueConversion(), clang::ActionResult< PtrTy, CompressInvalid >::get(), clang::ActionResult< PtrTy, CompressInvalid >::isInvalid(), clang::QualType::isNull(), and OpenCLConvertScalarsToVectors().
Referenced by clang::Sema::CheckConditionalOperands().
|
static |
Convert scalar operands to a vector that matches the condition in length.
Used when handling the OpenCL conditional operator where the condition is a vector while the other operands are scalar.
We first compute the "result type" for the scalar operands according to OpenCL v1.1 s6.3.i. Both operands are then converted into a vector of that type where the length matches the condition vector type. s6.11.6 requires that the element types of the result and the condition must have the same number of bits.
Definition at line 5981 of file SemaExpr.cpp.
References clang::CK_VectorSplat, clang::Sema::Context, clang::Sema::Diag(), clang::ActionResult< PtrTy, CompressInvalid >::get(), clang::Type::getAs(), clang::QualType::getAsString(), clang::VectorType::getElementType(), clang::ASTContext::getExtVectorType(), clang::VectorType::getNumElements(), clang::ASTContext::getTypeSize(), clang::QualType::getUnqualifiedType(), clang::Sema::ImpCastExprToType(), clang::QualType::isNull(), and OpenCLArithmeticConversions().
Referenced by OpenCLCheckVectorConditional().
|
static |
Given a function expression of unknown-any type, try to rebuild it to have a function type.
Definition at line 13796 of file SemaExpr.cpp.
References clang::Sema::DefaultFunctionArrayConversion(), clang::ExprError(), clang::ActionResult< PtrTy, CompressInvalid >::get(), clang::ActionResult< PtrTy, CompressInvalid >::isInvalid(), and clang::Result.
Referenced by clang::Sema::ActOnCallExpr(), and clang::Sema::BuildResolvedCallExpr().
Definition at line 9849 of file SemaExpr.cpp.
References clang::Sema::getCurFunction(), clang::DeclRefExpr::getDecl(), clang::Decl::getDeclContext(), and clang::Decl::hasAttr().
Referenced by clang::Sema::CreateBuiltinBinOp(), and clang::Sema::CreateBuiltinUnaryOp().
|
static |
In Microsoft mode, if we are inside a template class whose parent class has dependent base classes, and we can't resolve an unqualified identifier, then assume the identifier is a member of a dependent base class. We can only recover successfully in static methods, instance methods, and other contexts where 'this' is available. This doesn't precisely match MSVC's instantiation model, but it's close enough.
Definition at line 2025 of file SemaExpr.cpp.
References clang::NestedNameSpecifier::Create(), clang::DependentScopeDeclRefExpr::Create(), clang::CXXDependentScopeMemberExpr::Create(), clang::FixItHint::CreateInsertion(), clang::Sema::CurContext, clang::Sema::Diag(), clang::Type::getAsCXXRecordDecl(), clang::Sema::getCurrentThisType(), clang::DeclarationNameInfo::getLoc(), clang::DeclarationNameInfo::getName(), clang::DeclContext::getParent(), clang::Type::getPointeeType(), clang::TypeDecl::getTypeForDecl(), clang::CXXScopeSpec::getWithLocInContext(), clang::CXXRecordDecl::hasAnyDependentBases(), clang::QualType::isNull(), and clang::CXXScopeSpec::MakeTrivial().
Referenced by clang::Sema::ActOnIdExpression().
|
static |
If a builtin function has a pointer argument with no explicit address space, than it should be able to accept a pointer to any address space as input. In order to do this, we need to replace the standard builtin declaration with one that uses the same address space as the call.
Definition at line 4660 of file SemaExpr.cpp.
References clang::ASTContext::BuiltinInfo, clang::ParmVarDecl::Create(), clang::FunctionDecl::Create(), clang::Sema::DefaultFunctionArrayLvalueConversion(), clang::ActionResult< PtrTy, CompressInvalid >::get(), clang::Qualifiers::getAddressSpace(), clang::ASTContext::getAddrSpaceQualType(), clang::FunctionDecl::getBuiltinID(), clang::ASTContext::getFunctionType(), clang::NamedDecl::getIdentifier(), clang::Decl::getLocation(), clang::FunctionProtoType::getNumParams(), clang::FunctionProtoType::getParamType(), clang::Type::getPointeeType(), clang::ASTContext::getPointerType(), clang::QualType::getQualifiers(), clang::FunctionType::getReturnType(), clang::ASTContext::getTranslationUnitDecl(), clang::Expr::getType(), clang::ValueDecl::getType(), clang::Qualifiers::hasAddressSpace(), clang::Builtin::Context::hasPtrArgsOrResult(), clang::Type::isPointerType(), clang::FunctionProtoType::isVariadic(), clang::FunctionProtoType::param_types(), clang::SC_Extern, clang::SC_None, and clang::ParmVarDecl::setScopeInfo().
Referenced by clang::Sema::ActOnCallExpr().
|
static |
SuggestParentheses - Emit a note with a fixit hint that wraps ParenRange in parentheses.
Definition at line 6358 of file SemaExpr.cpp.
References clang::FixItHint::CreateInsertion(), clang::Sema::Diag(), clang::SourceRange::getBegin(), clang::SourceRange::getEnd(), clang::Preprocessor::getLocForEndOfToken(), clang::SourceLocation::isFileID(), clang::SourceLocation::isValid(), and clang::Sema::PP.
Referenced by DiagnoseAdditionInShift(), DiagnoseBitwisePrecedence(), DiagnoseConditionalPrecedence(), DiagnoseShiftCompare(), EmitDiagnosticForBitwiseAndInBitwiseOr(), and EmitDiagnosticForLogicalAndInLogicalOr().
|
static |
Definition at line 4265 of file SemaExpr.cpp.
References clang::AS_none, clang::OverloadCandidateSet::BestViableFunction(), clang::Sema::CorrectTypo(), clang::OverloadCandidateSet::CSK_Normal, clang::Sema::CTK_ErrorRecovery, clang::Sema::CurContext, clang::NamedDecl::getDeclName(), clang::MemberExpr::getMemberLoc(), clang::Sema::getScopeForContext(), clang::Sema::LookupOrdinaryName, clang::DeclAccessPair::make(), clang::OR_Success, and S.
Referenced by clang::Sema::ConvertArgumentsForCall().
|
static |
Try to convert a value of non-vector type to a vector type by converting the type to the element type of the vector and then performing a splat. If the language is OpenCL, we only use conversions that promote scalar rank; for C, Obj-C, and C++ we allow any real scalar conversion except for float->int.
scalar | - if non-null, actually perform the conversions |
Definition at line 7235 of file SemaExpr.cpp.
References clang::CK_FloatingCast, clang::CK_IntegralCast, clang::CK_IntegralToFloating, clang::CK_Invalid, clang::CK_VectorSplat, clang::Sema::Context, clang::ActionResult< PtrTy, CompressInvalid >::get(), clang::ASTContext::getFloatingTypeOrder(), clang::ASTContext::getIntegerTypeOrder(), clang::Sema::getLangOpts(), clang::Sema::ImpCastExprToType(), clang::Type::isIntegralType(), and clang::Type::isRealFloatingType().
Referenced by clang::Sema::CheckVectorOperands().
Definition at line 5404 of file SemaExpr.cpp.
References breakDownVectorType(), clang::Sema::Context, and clang::ASTContext::getTypeSize().
Referenced by clang::Sema::CheckExtVectorCast(), clang::Sema::CheckVectorCast(), and clang::Sema::isLaxVectorConversion().
|
static |
Check whether E is a pointer from a decayed array type (the decayed pointer type is equal to T) and emit a warning if it is.
Definition at line 3558 of file SemaExpr.cpp.
References clang::CK_ArrayToPointerDecay, clang::Sema::Diag(), clang::CastExpr::getCastKind(), clang::CastExpr::getSubExpr(), and clang::Expr::getType().
Referenced by clang::Sema::CheckUnaryExprOrTypeTraitOperand().