clang API Documentation
#include "clang/Sema/SemaInternal.h"
#include "clang/AST/ASTContext.h"
#include "clang/AST/CharUnits.h"
#include "clang/AST/DeclCXX.h"
#include "clang/AST/DeclObjC.h"
#include "clang/AST/EvaluatedExprVisitor.h"
#include "clang/AST/Expr.h"
#include "clang/AST/ExprCXX.h"
#include "clang/AST/ExprObjC.h"
#include "clang/AST/StmtCXX.h"
#include "clang/AST/StmtObjC.h"
#include "clang/Analysis/Analyses/FormatString.h"
#include "clang/Basic/CharInfo.h"
#include "clang/Basic/TargetBuiltins.h"
#include "clang/Basic/TargetInfo.h"
#include "clang/Lex/Lexer.h"
#include "clang/Sema/Initialization.h"
#include "clang/Sema/Lookup.h"
#include "clang/Sema/ScopeInfo.h"
#include "clang/Sema/Sema.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/SmallBitVector.h"
#include "llvm/ADT/SmallString.h"
#include "llvm/Support/ConvertUTF.h"
#include "llvm/Support/raw_ostream.h"
#include <limits>
#include "clang/Basic/Builtins.def"
#include "clang/Basic/arm_neon.inc"
Go to the source code of this file.
Defines | |
#define | BUILTIN(ID, TYPE, ATTRS) |
#define | ATOMIC_BUILTIN(ID, TYPE, ATTRS) |
#define | GET_NEON_OVERLOAD_CHECK |
#define | GET_NEON_IMMEDIATE_CHECK |
#define | BUILTIN_ROW(x) |
Enumerations | |
enum | StringLiteralCheckType |
enum | AbsoluteValueKind { AVK_Integer, AVK_Floating, AVK_Complex } |
enum | { AddressOf, FunctionPointer, ArrayPointer } |
Functions | |
static bool | checkArgCount (Sema &S, CallExpr *call, unsigned desiredArgCount) |
static bool | SemaBuiltinAnnotation (Sema &S, CallExpr *TheCall) |
static bool | SemaBuiltinAddressof (Sema &S, CallExpr *TheCall) |
static void | SemaBuiltinMemChkCall (Sema &S, FunctionDecl *FDecl, CallExpr *TheCall, unsigned SizeIdx, unsigned DstSizeIdx) |
static unsigned | RFT (unsigned t, bool shift=false, bool ForceQuad=false) |
static QualType | getNeonEltType (NeonTypeFlags Flags, ASTContext &Context, bool IsPolyUnsigned, bool IsInt64Long) |
static bool | CheckNonNullExpr (Sema &S, const Expr *Expr) |
Returns true if the value evaluates to null. | |
static void | CheckNonNullArgument (Sema &S, const Expr *ArgExpr, SourceLocation CallSiteLoc) |
static void | DiagnoseCStringFormatDirectiveInCFAPI (Sema &S, const NamedDecl *FDecl, Expr **Args, unsigned NumArgs) |
Diagnose use of s directive in an NSString which is being passed as formatting string to formatting method. | |
static void | CheckNonNullArguments (Sema &S, const NamedDecl *FDecl, ArrayRef< const Expr * > Args, SourceLocation CallSiteLoc) |
static bool | isValidOrderingForOp (int64_t Ordering, AtomicExpr::AtomicOp Op) |
static bool | checkBuiltinArgument (Sema &S, CallExpr *E, unsigned ArgIndex) |
static StringLiteralCheckType | checkFormatStringExpr (Sema &S, const Expr *E, ArrayRef< const Expr * > Args, bool HasVAListArg, unsigned format_idx, unsigned firstDataArg, Sema::FormatStringType Type, Sema::VariadicCallType CallType, bool InFunctionCall, llvm::SmallBitVector &CheckedVarArgs) |
template<typename MemberKind > | |
static llvm::SmallPtrSet < MemberKind *, 1 > | CXXRecordMembersNamed (StringRef Name, Sema &S, QualType Ty) |
static bool | requiresParensToAddCast (const Expr *E) |
static std::pair< QualType, StringRef > | shouldNotPrintDirectly (const ASTContext &Context, QualType IntendedTy, const Expr *E) |
static unsigned | getLargerAbsoluteValueFunction (unsigned AbsFunction) |
static QualType | getAbsoluteValueArgumentType (ASTContext &Context, unsigned AbsType) |
static unsigned | getBestAbsFunction (ASTContext &Context, QualType ArgType, unsigned AbsFunctionKind) |
static AbsoluteValueKind | getAbsoluteValueKind (QualType T) |
static unsigned | changeAbsFunction (unsigned AbsKind, AbsoluteValueKind ValueKind) |
static unsigned | getAbsoluteValueFunctionKind (const FunctionDecl *FDecl) |
static void | emitReplacement (Sema &S, SourceLocation Loc, SourceRange Range, unsigned AbsKind, QualType ArgType) |
static bool | IsFunctionStdAbs (const FunctionDecl *FDecl) |
static bool | CheckMemorySizeofForComparison (Sema &S, const Expr *E, IdentifierInfo *FnName, SourceLocation FnLoc, SourceLocation RParenLoc) |
Takes the expression passed to the size_t parameter of functions such as memcmp, strncat, etc and warns if it's a comparison. | |
static const CXXRecordDecl * | getContainedDynamicClass (QualType T, bool &IsContained) |
Determine whether the given type is or contains a dynamic class type (e.g., whether it has a vtable). | |
static const Expr * | getSizeOfExprArg (const Expr *E) |
If E is a sizeof expression, returns its argument expression, otherwise returns NULL. | |
static QualType | getSizeOfArgType (const Expr *E) |
If E is a sizeof expression, returns its argument type. | |
static const Expr * | ignoreLiteralAdditions (const Expr *Ex, ASTContext &Ctx) |
static bool | isConstantSizeArrayWithMoreThanOneElement (QualType Ty, ASTContext &Context) |
static bool | referToTheSameDecl (const Expr *E1, const Expr *E2) |
Check if two expressions refer to the same declaration. | |
static const Expr * | getStrlenExprArg (const Expr *E) |
static Expr * | EvalVal (Expr *E, SmallVectorImpl< DeclRefExpr * > &refVars, Decl *ParentDecl) |
static Expr * | EvalAddr (Expr *E, SmallVectorImpl< DeclRefExpr * > &refVars, Decl *ParentDecl) |
static void | CheckReturnStackAddr (Sema &S, Expr *RetValExp, QualType lhsType, SourceLocation ReturnLoc) |
static bool | CheckForReference (Sema &SemaRef, const Expr *E, PartialDiagnostic PD) |
static bool | IsInAnyMacroBody (const SourceManager &SM, SourceLocation Loc) |
static const Type * | getElementType (const Expr *BaseExpr) |
static bool | IsTailPaddedMemberArray (Sema &S, llvm::APInt Size, const NamedDecl *ND) |
Check whether this array fits the idiom of a size-one tail padded array member of a struct. | |
static bool | considerVariable (VarDecl *var, Expr *ref, RetainCycleOwner &owner) |
static bool | findRetainCycleOwner (Sema &S, Expr *e, RetainCycleOwner &owner) |
static Expr * | findCapturingExpr (Sema &S, Expr *e, RetainCycleOwner &owner) |
static void | diagnoseRetainCycle (Sema &S, Expr *capturer, RetainCycleOwner &owner) |
static bool | isSetterLikeSelector (Selector sel) |
static bool | checkUnsafeAssignLiteral (Sema &S, SourceLocation Loc, Expr *RHS, bool isProperty) |
static bool | checkUnsafeAssignObject (Sema &S, SourceLocation Loc, Qualifiers::ObjCLifetime LT, Expr *RHS, bool isProperty) |
#define ATOMIC_BUILTIN | ( | ID, | |
TYPE, | |||
ATTRS | |||
) |
#define BUILTIN_ROW | ( | x | ) |
{ Builtin::BI##x##_1, Builtin::BI##x##_2, Builtin::BI##x##_4, \ Builtin::BI##x##_8, Builtin::BI##x##_16 }
#define GET_NEON_IMMEDIATE_CHECK |
#define GET_NEON_OVERLOAD_CHECK |
anonymous enum |
Definition at line 6627 of file SemaChecking.cpp.
enum AbsoluteValueKind |
Definition at line 4045 of file SemaChecking.cpp.
Definition at line 2310 of file SemaChecking.cpp.
static unsigned changeAbsFunction | ( | unsigned | AbsKind, |
AbsoluteValueKind | ValueKind | ||
) | [static] |
Definition at line 4064 of file SemaChecking.cpp.
References AVK_Complex, AVK_Floating, and AVK_Integer.
static bool checkArgCount | ( | Sema & | S, |
CallExpr * | call, | ||
unsigned | desiredArgCount | ||
) | [static] |
Checks that a call expression's argument count is the desired number. This is useful when doing custom type-checking. Returns true on error.
Definition at line 52 of file SemaChecking.cpp.
References clang::Sema::Diag(), clang::CallExpr::getArg(), clang::Stmt::getLocEnd(), clang::CallExpr::getLocEnd(), clang::Stmt::getLocStart(), clang::CallExpr::getNumArgs(), and clang::Stmt::getSourceRange().
Referenced by SemaBuiltinAddressof(), and SemaBuiltinAnnotation().
static bool checkBuiltinArgument | ( | Sema & | S, |
CallExpr * | E, | ||
unsigned | ArgIndex | ||
) | [static] |
checkBuiltinArgument - Given a call to a builtin function, perform normal type-checking on the given argument, updating the call in place. This is useful when a builtin function requires custom type-checking for some of its arguments but not necessarily all of them.
Returns true on error.
Definition at line 1433 of file SemaChecking.cpp.
References clang::Sema::Context, clang::ActionResult< PtrTy, CompressInvalid >::get(), clang::CallExpr::getArg(), clang::CallExpr::getDirectCallee(), clang::FunctionDecl::getParamDecl(), clang::InitializedEntity::InitializeParameter(), clang::ActionResult< PtrTy, CompressInvalid >::isInvalid(), clang::Sema::PerformCopyInitialization(), and clang::CallExpr::setArg().
static StringLiteralCheckType checkFormatStringExpr | ( | Sema & | S, |
const Expr * | E, | ||
ArrayRef< const Expr * > | Args, | ||
bool | HasVAListArg, | ||
unsigned | format_idx, | ||
unsigned | firstDataArg, | ||
Sema::FormatStringType | Type, | ||
Sema::VariadicCallType | CallType, | ||
bool | InFunctionCall, | ||
llvm::SmallBitVector & | CheckedVarArgs | ||
) | [static] |
Definition at line 2322 of file SemaChecking.cpp.
References AttributeLangSupport::C, clang::Sema::CheckFormatString(), clang::Sema::Context, clang::CallExpr::getArg(), clang::Type::getAs(), clang::ASTContext::getAsArrayType(), clang::CallExpr::getCalleeDecl(), clang::DeclRefExpr::getDecl(), clang::AbstractConditionalOperator::getFalseExpr(), clang::Sema::GetFormatStringType(), clang::Stmt::getStmtClass(), clang::StringLiteral::getString(), clang::AbstractConditionalOperator::getTrueExpr(), clang::Expr::getType(), clang::Expr::IgnoreParenCasts(), clang::QualType::isConstant(), clang::Expr::isNullPointerConstant(), clang::Type::isObjCObjectPointerType(), clang::Expr::isTypeDependent(), clang::Expr::isValueDependent(), and clang::Expr::NPC_ValueDependentIsNotNull.
static bool CheckForReference | ( | Sema & | SemaRef, |
const Expr * | E, | ||
PartialDiagnostic | PD | ||
) | [static] |
Definition at line 6635 of file SemaChecking.cpp.
References clang::Sema::Diag(), clang::CallExpr::getCallReturnType(), clang::DeclRefExpr::getDecl(), clang::CallExpr::getDirectCallee(), clang::Expr::getExprLoc(), clang::Decl::getLocation(), clang::ValueDecl::getType(), clang::Expr::IgnoreParenImpCasts(), and clang::Type::isReferenceType().
Referenced by clang::Sema::DiagnoseAlwaysNonNullPointer().
static bool CheckMemorySizeofForComparison | ( | Sema & | S, |
const Expr * | E, | ||
IdentifierInfo * | FnName, | ||
SourceLocation | FnLoc, | ||
SourceLocation | RParenLoc | ||
) | [static] |
Takes the expression passed to the size_t parameter of functions such as memcmp, strncat, etc and warns if it's a comparison.
This is to catch typos like `if (memcmp(&a, &b, sizeof(a) > 0))`.
Definition at line 4340 of file SemaChecking.cpp.
References clang::FixItHint::CreateInsertion(), clang::Sema::Diag(), clang::SourceRange::getBegin(), clang::SourceRange::getEnd(), clang::BinaryOperator::getLHS(), clang::Stmt::getLocEnd(), clang::Sema::getLocForEndOfToken(), clang::BinaryOperator::getOperatorLoc(), clang::Stmt::getSourceRange(), clang::BinaryOperator::isComparisonOp(), clang::BinaryOperator::isEqualityOp(), and clang::BinaryOperator::isLogicalOp().
static void CheckNonNullArgument | ( | Sema & | S, |
const Expr * | ArgExpr, | ||
SourceLocation | CallSiteLoc | ||
) | [static] |
Definition at line 824 of file SemaChecking.cpp.
References CheckNonNullExpr(), clang::Sema::Diag(), and clang::Stmt::getSourceRange().
Referenced by CheckNonNullArguments().
static void CheckNonNullArguments | ( | Sema & | S, |
const NamedDecl * | FDecl, | ||
ArrayRef< const Expr * > | Args, | ||
SourceLocation | CallSiteLoc | ||
) | [static] |
Definition at line 882 of file SemaChecking.cpp.
References CheckNonNullArgument(), clang::Expr::getType(), clang::Decl::hasAttr(), clang::Sema::isValidPointerAttrType(), and clang::Decl::specific_attrs().
static bool CheckNonNullExpr | ( | Sema & | S, |
const Expr * | Expr | ||
) | [static] |
Returns true if the value evaluates to null.
Checks if a the given expression evaluates to null.
Definition at line 805 of file SemaChecking.cpp.
References clang::Sema::Context, clang::Expr::EvaluateAsBooleanCondition(), clang::Type::getAsUnionType(), clang::Expr::getType(), and clang::Expr::isValueDependent().
Referenced by CheckNonNullArgument().
static void CheckReturnStackAddr | ( | Sema & | S, |
Expr * | RetValExp, | ||
QualType | lhsType, | ||
SourceLocation | ReturnLoc | ||
) | [static] |
CheckReturnStackAddr - Check if a return statement returns the address of a stack variable.
Definition at line 4800 of file SemaChecking.cpp.
References clang::Sema::Diag(), EvalAddr(), EvalVal(), clang::NamedDecl::getDeclName(), clang::Sema::getLangOpts(), clang::Decl::getLocation(), clang::Stmt::getLocStart(), clang::Stmt::getSourceRange(), clang::Type::isBlockPointerType(), clang::Type::isPointerType(), and clang::Type::isReferenceType().
static bool checkUnsafeAssignLiteral | ( | Sema & | S, |
SourceLocation | Loc, | ||
Expr * | RHS, | ||
bool | isProperty | ||
) | [static] |
Definition at line 7971 of file SemaChecking.cpp.
References clang::Sema::CheckLiteralKind(), clang::Sema::Diag(), clang::Stmt::getSourceRange(), clang::Expr::IgnoreParenImpCasts(), clang::Sema::LK_None, and clang::Sema::LK_String.
Referenced by checkUnsafeAssignObject().
static bool checkUnsafeAssignObject | ( | Sema & | S, |
SourceLocation | Loc, | ||
Qualifiers::ObjCLifetime | LT, | ||
Expr * | RHS, | ||
bool | isProperty | ||
) | [static] |
Definition at line 7992 of file SemaChecking.cpp.
References checkUnsafeAssignLiteral(), clang::CK_ARCConsumeObject, clang::Sema::Diag(), clang::Stmt::getSourceRange(), clang::Qualifiers::OCL_ExplicitNone, and clang::Qualifiers::OCL_Weak.
Referenced by clang::Sema::checkUnsafeAssigns(), and clang::Sema::checkUnsafeExprAssigns().
static bool considerVariable | ( | VarDecl * | var, |
Expr * | ref, | ||
RetainCycleOwner & | owner | ||
) | [static] |
Consider whether capturing the given variable can possibly lead to a retain cycle.
Definition at line 7709 of file SemaChecking.cpp.
References clang::QualType::getObjCLifetime(), clang::ValueDecl::getType(), and clang::Qualifiers::OCL_Strong.
Referenced by clang::Sema::checkRetainCycles(), and findRetainCycleOwner().
static llvm::SmallPtrSet<MemberKind*, 1> CXXRecordMembersNamed | ( | StringRef | Name, |
Sema & | S, | ||
QualType | Ty | ||
) | [static] |
Definition at line 3175 of file SemaChecking.cpp.
References clang::Sema::Context, clang::ast_matchers::decl, clang::IdentifierTable::get(), clang::Type::getAs(), clang::RecordType::getDecl(), clang::CXXRecordDecl::getDefinition(), clang::ASTContext::Idents, clang::Sema::LookupMemberName, clang::Sema::LookupQualifiedName(), and clang::LookupResult::suppressDiagnostics().
static void DiagnoseCStringFormatDirectiveInCFAPI | ( | Sema & | S, |
const NamedDecl * | FDecl, | ||
Expr ** | Args, | ||
unsigned | NumArgs | ||
) | [static] |
Diagnose use of s directive in an NSString which is being passed as formatting string to formatting method.
Definition at line 843 of file SemaChecking.cpp.
References clang::Sema::Diag(), clang::Sema::FormatStringHasSArg(), clang::NamedDecl::getDeclName(), clang::Expr::getExprLoc(), clang::Sema::GetFormatNSStringIdx(), clang::Decl::getLocation(), clang::NamedDecl::getObjCFStringFormattingFamily(), clang::StringLiteral::getString(), clang::Expr::IgnoreParenImpCasts(), clang::SFF_CFString, and clang::Decl::specific_attrs().
static void diagnoseRetainCycle | ( | Sema & | S, |
Expr * | capturer, | ||
RetainCycleOwner & | owner | ||
) | [static] |
Definition at line 7890 of file SemaChecking.cpp.
References clang::Sema::Diag(), clang::Expr::getExprLoc(), and clang::Stmt::getSourceRange().
Referenced by clang::Sema::checkRetainCycles().
static void emitReplacement | ( | Sema & | S, |
SourceLocation | Loc, | ||
SourceRange | Range, | ||
unsigned | AbsKind, | ||
QualType | ArgType | ||
) | [static] |
Definition at line 4161 of file SemaChecking.cpp.
References clang::ASTContext::BuiltinInfo, clang::Sema::Context, clang::FixItHint::CreateReplacement(), clang::Sema::Diag(), clang::IdentifierTable::get(), getAbsoluteValueKind(), clang::FunctionDecl::getBuiltinID(), clang::Sema::getCurScope(), clang::Builtin::Context::getHeaderName(), clang::Sema::getLangOpts(), clang::Builtin::Context::GetName(), clang::FunctionDecl::getNumParams(), clang::FunctionDecl::getParamDecl(), clang::Sema::getStdNamespace(), clang::ValueDecl::getType(), clang::ASTContext::getTypeSize(), clang::ASTContext::Idents, clang::Type::isAnyComplexType(), clang::Type::isIntegralOrEnumerationType(), clang::Type::isRealFloatingType(), clang::Sema::LookupAnyName, clang::Sema::LookupName(), and clang::Sema::LookupQualifiedName().
static Expr * EvalAddr | ( | Expr * | E, |
SmallVectorImpl< DeclRefExpr * > & | refVars, | ||
Decl * | ParentDecl | ||
) | [static] |
EvalAddr - EvalAddr and EvalVal are mutually recursive functions that check if the expression in a return statement evaluates to an address to a location on the stack, a local block, an address of a label, or a reference to local temporary. The recursion is used to traverse the AST of the return expression, with recursion backtracking when we encounter a subexpression that (1) clearly does not lead to one of the above problematic expressions (2) is something we cannot determine leads to a problematic expression based on such local checking.
Both EvalAddr and EvalVal follow through reference variables to evaluate the expression that they point to. Such variables are added to the 'refVars' vector so that we know what the reference variable "trail" was.
EvalAddr processes expressions that are pointers that are used as references (and not L-values). EvalVal handles all other values. At the base case of the recursion is a check for the above problematic expressions.
This implementation handles:
pointer-to-pointer casts implicit conversions from array references to pointers taking the address of fields arbitrary interplay between "&" and "*" operators pointer arithmetic from an address of a stack variable taking the address of an array element where the array is on the stack
Definition at line 4886 of file SemaChecking.cpp.
References clang::BO_Add, clang::BO_Sub, AttributeLangSupport::C, clang::CK_AnyPointerToBlockPointerCast, clang::CK_ArrayToPointerDecay, clang::CK_BaseToDerived, clang::CK_BitCast, clang::CK_BlockPointerToObjCPointerCast, clang::CK_CPointerToObjCPointerCast, clang::CK_DerivedToBase, clang::CK_Dynamic, clang::CK_LValueToRValue, clang::CK_NoOp, clang::CK_UncheckedDerivedToBase, EvalVal(), clang::DeclRefExpr::getDecl(), clang::BinaryOperator::getLHS(), clang::ConditionalOperator::getLHS(), clang::UnaryOperator::getOpcode(), clang::BinaryOperator::getOpcode(), clang::BinaryOperator::getRHS(), clang::ConditionalOperator::getRHS(), clang::Stmt::getStmtClass(), clang::UnaryOperator::getSubExpr(), clang::Expr::getType(), clang::Expr::IgnoreParens(), clang::Type::isAnyPointerType(), clang::Type::isBlockPointerType(), clang::Type::isObjCQualifiedIdType(), clang::Type::isPointerType(), clang::Expr::isTypeDependent(), clang::Type::isVoidType(), clang::DeclRefExpr::refersToEnclosingLocal(), and clang::UO_AddrOf.
Referenced by CheckReturnStackAddr(), and EvalVal().
static Expr * EvalVal | ( | Expr * | E, |
SmallVectorImpl< DeclRefExpr * > & | refVars, | ||
Decl * | ParentDecl | ||
) | [static] |
EvalVal - This function is complements EvalAddr in the mutual recursion. See the comments for EvalAddr for more details.
Definition at line 5042 of file SemaChecking.cpp.
References AttributeLangSupport::C, EvalAddr(), clang::MemberExpr::getBase(), clang::DeclRefExpr::getDecl(), clang::ConditionalOperator::getLHS(), clang::MemberExpr::getMemberDecl(), clang::UnaryOperator::getOpcode(), clang::ConditionalOperator::getRHS(), clang::Stmt::getStmtClass(), clang::UnaryOperator::getSubExpr(), clang::CastExpr::getSubExpr(), clang::Expr::getType(), clang::ValueDecl::getType(), clang::Expr::getValueKind(), clang::Expr::IgnoreParens(), clang::MemberExpr::isArrow(), clang::Type::isReferenceType(), clang::Expr::isRValue(), clang::Expr::isTypeDependent(), clang::Type::isVoidType(), clang::DeclRefExpr::refersToEnclosingLocal(), clang::UO_Deref, and clang::VK_LValue.
Referenced by CheckReturnStackAddr(), and EvalAddr().
static Expr* findCapturingExpr | ( | Sema & | S, |
Expr * | e, | ||
RetainCycleOwner & | owner | ||
) | [static] |
Check whether the given argument is a block which captures a variable.
Definition at line 7855 of file SemaChecking.cpp.
References clang::BlockDecl::capturesVariable(), clang::Sema::Context, clang::CallExpr::getArg(), clang::BlockExpr::getBlockDecl(), clang::BlockDecl::getBody(), clang::CallExpr::getCalleeDecl(), clang::NamedDecl::getIdentifier(), clang::Selector::getNameForSlot(), clang::CallExpr::getNumArgs(), clang::Expr::IgnoreParenCasts(), clang::IdentifierInfo::isStr(), and clang::Selector::isUnarySelector().
Referenced by clang::Sema::checkRetainCycles().
static bool findRetainCycleOwner | ( | Sema & | S, |
Expr * | e, | ||
RetainCycleOwner & | owner | ||
) | [static] |
Definition at line 7722 of file SemaChecking.cpp.
References clang::CK_ARCReclaimReturnedObject, clang::CK_BitCast, clang::CK_LValueBitCast, clang::CK_LValueToRValue, considerVariable(), clang::ObjCPropertyRefExpr::getBase(), clang::Sema::getCurMethodDecl(), clang::ObjCPropertyRefExpr::getExplicitProperty(), clang::ObjCPropertyRefExpr::getLocation(), clang::QualType::getObjCLifetime(), clang::ObjCMethodDecl::getSelfDecl(), clang::Stmt::getSourceRange(), clang::ValueDecl::getType(), clang::Expr::IgnoreParens(), clang::ObjCPropertyRefExpr::isImplicitProperty(), clang::ObjCPropertyRefExpr::isSuperReceiver(), and clang::Qualifiers::OCL_Strong.
Referenced by clang::Sema::checkRetainCycles().
static QualType getAbsoluteValueArgumentType | ( | ASTContext & | Context, |
unsigned | AbsType | ||
) | [static] |
Definition at line 4004 of file SemaChecking.cpp.
References clang::ASTContext::GE_None, clang::Type::getAs(), clang::ASTContext::GetBuiltinType(), clang::FunctionProtoType::getNumParams(), and clang::FunctionProtoType::getParamType().
Referenced by getBestAbsFunction().
static unsigned getAbsoluteValueFunctionKind | ( | const FunctionDecl * | FDecl | ) | [static] |
Definition at line 4128 of file SemaChecking.cpp.
References clang::FunctionDecl::getBuiltinID(), and clang::NamedDecl::getIdentifier().
static AbsoluteValueKind getAbsoluteValueKind | ( | QualType | T | ) | [static] |
Definition at line 4051 of file SemaChecking.cpp.
References AVK_Complex, AVK_Floating, AVK_Integer, clang::Type::isAnyComplexType(), clang::Type::isIntegralOrEnumerationType(), and clang::Type::isRealFloatingType().
Referenced by emitReplacement().
static unsigned getBestAbsFunction | ( | ASTContext & | Context, |
QualType | ArgType, | ||
unsigned | AbsFunctionKind | ||
) | [static] |
Definition at line 4026 of file SemaChecking.cpp.
References getAbsoluteValueArgumentType(), getLargerAbsoluteValueFunction(), clang::ASTContext::getTypeSize(), and clang::ASTContext::hasSameType().
static const CXXRecordDecl* getContainedDynamicClass | ( | QualType | T, |
bool & | IsContained | ||
) | [static] |
Determine whether the given type is or contains a dynamic class type (e.g., whether it has a vtable).
Definition at line 4369 of file SemaChecking.cpp.
References clang::Type::getAsCXXRecordDecl(), clang::Type::getBaseElementTypeUnsafe(), clang::CXXRecordDecl::getDefinition(), and clang::CXXRecordDecl::isDynamicClass().
static const Type* getElementType | ( | const Expr * | BaseExpr | ) | [static] |
Definition at line 7475 of file SemaChecking.cpp.
References clang::Type::getBaseElementTypeUnsafe(), clang::Type::getPointeeType(), clang::Expr::getType(), clang::QualType::getTypePtr(), clang::Type::isAnyPointerType(), and clang::Type::isArrayType().
Referenced by clang::Sema::ActOnOpenMPLastprivateClause(), clang::Sema::ActOnOpenMPPrivateClause(), addAssociatedClassesAndNamespaces(), clang::Sema::BuildVectorLiteral(), clang::Sema::CheckAssignmentConstraints(), clang::Sema::CheckExtVectorCast(), CheckIncrementDecrementOperand(), computeCachedProperties(), computeLinkageInfo(), clang::CodeGen::CodeGenTypes::ConvertType(), clang::Sema::CreateBuiltinUnaryOp(), CreateCoercedLoad(), CreateCoercedStore(), DeduceTemplateArgumentsByTypeMatch(), emitARCLoadOperation(), emitARCStoreOperation(), clang::CodeGen::CodeGenFunction::EmitARCStoreStrongCall(), clang::CodeGen::CodeGenFunction::emitArrayLength(), clang::CodeGen::CodeGenFunction::emitByrefStructureInit(), clang::CodeGen::CodeGenFunction::EmitCall(), clang::CodeGen::CodeGenFunction::EmitComplexPrePostIncDec(), clang::CodeGen::CodeGenFunction::EmitCXXDeleteExpr(), clang::CodeGen::CodeGenFunction::EmitFunctionProlog(), clang::CodeGen::CodeGenFunction::EmitLoadOfScalar(), clang::CodeGen::CodeGenFunction::EmitMustTailThunk(), clang::CodeGen::CodeGenFunction::EmitObjCMessageExpr(), clang::CodeGen::CodeGenFunction::EmitUnaryOpLValue(), clang::CodeGen::CodeGenFunction::EmitVariablyModifiedType(), emitWriteback(), clang::CodeGen::CodeGenFunction::FinallyInfo::enter(), EnterStructPointerForCoercedAccess(), EvalAndBitcastToAPInt(), findSubobject(), clang::CodeGen::CodeGenFunction::GetAddressOfDirectBaseInCompleteClass(), clang::Type::getArrayElementTypeNoTypeQual(), clang::QualType::getBaseTypeIdentifier(), getNullForVariable(), handleIntegerToComplexFloatConversion(), InitCatchParam(), clang::Type::isIncompleteType(), IsPossiblyOpaquelyQualifiedType(), IsStructurallyEquivalent(), MarkUsedTemplateParameters(), clang::Sema::MaybeBindToTemporary(), clang::Sema::PerformImplicitConversion(), clang::Sema::PrepareScalarCast(), clang::APValue::printPretty(), clang::ComplexType::Profile(), clang::ConstantArrayType::Profile(), clang::IncompleteArrayType::Profile(), clang::DependentSizedArrayType::Profile(), clang::DependentSizedExtVectorType::Profile(), clang::VectorType::Profile(), clang::Sema::SemaBuiltinShuffleVector(), and clang::Sema::tryCaptureVariable().
static unsigned getLargerAbsoluteValueFunction | ( | unsigned | AbsFunction | ) | [static] |
Definition at line 3954 of file SemaChecking.cpp.
Referenced by getBestAbsFunction().
static QualType getNeonEltType | ( | NeonTypeFlags | Flags, |
ASTContext & | Context, | ||
bool | IsPolyUnsigned, | ||
bool | IsInt64Long | ||
) | [static] |
getNeonEltType - Return the QualType corresponding to the elements of the vector type specified by the NeonTypeFlags. This is used to check the pointer arguments for Neon load/store intrinsics.
Definition at line 468 of file SemaChecking.cpp.
References clang::ASTContext::DoubleTy, clang::NeonTypeFlags::Float16, clang::NeonTypeFlags::Float32, clang::NeonTypeFlags::Float64, clang::ASTContext::FloatTy, clang::NeonTypeFlags::getEltType(), clang::ASTContext::HalfTy, clang::NeonTypeFlags::Int16, clang::NeonTypeFlags::Int32, clang::NeonTypeFlags::Int64, clang::NeonTypeFlags::Int8, clang::ASTContext::IntTy, clang::NeonTypeFlags::isUnsigned(), clang::ASTContext::LongLongTy, clang::ASTContext::LongTy, clang::NeonTypeFlags::Poly128, clang::NeonTypeFlags::Poly16, clang::NeonTypeFlags::Poly64, clang::NeonTypeFlags::Poly8, clang::ASTContext::ShortTy, clang::ASTContext::SignedCharTy, clang::ASTContext::UnsignedCharTy, clang::ASTContext::UnsignedIntTy, clang::ASTContext::UnsignedLongLongTy, clang::ASTContext::UnsignedLongTy, and clang::ASTContext::UnsignedShortTy.
static QualType getSizeOfArgType | ( | const Expr * | E | ) | [static] |
If E is a sizeof expression, returns its argument type.
Definition at line 4410 of file SemaChecking.cpp.
References clang::UETT_SizeOf.
static const Expr* getSizeOfExprArg | ( | const Expr * | E | ) | [static] |
If E is a sizeof expression, returns its argument expression, otherwise returns NULL.
Definition at line 4400 of file SemaChecking.cpp.
References clang::Expr::IgnoreParenImpCasts(), and clang::UETT_SizeOf.
static const Expr* getStrlenExprArg | ( | const Expr * | E | ) | [static] |
Definition at line 4695 of file SemaChecking.cpp.
References clang::FunctionDecl::getMemoryFunctionKind().
static const Expr* ignoreLiteralAdditions | ( | const Expr * | Ex, |
ASTContext & | Ctx | ||
) | [static] |
Definition at line 4583 of file SemaChecking.cpp.
References clang::BinaryOperator::getLHS(), clang::BinaryOperator::getRHS(), clang::Expr::IgnoreParenCasts(), and clang::BinaryOperator::isAdditiveOp().
static bool isConstantSizeArrayWithMoreThanOneElement | ( | QualType | Ty, |
ASTContext & | Context | ||
) | [static] |
Definition at line 4605 of file SemaChecking.cpp.
References clang::ASTContext::getAsConstantArrayType(), and clang::Type::isVariableArrayType().
static bool IsFunctionStdAbs | ( | const FunctionDecl * | FDecl | ) | [static] |
Definition at line 4243 of file SemaChecking.cpp.
References clang::Decl::getDeclContext(), clang::NamedDecl::getIdentifier(), clang::DeclContext::isInlineNamespace(), and clang::IdentifierInfo::isStr().
static bool IsInAnyMacroBody | ( | const SourceManager & | SM, |
SourceLocation | Loc | ||
) | [static] |
Definition at line 6668 of file SemaChecking.cpp.
References clang::SourceManager::getImmediateMacroCallerLoc(), clang::SourceLocation::isInvalid(), clang::SourceManager::isMacroBodyExpansion(), and clang::SourceLocation::isMacroID().
Referenced by clang::Sema::DiagnoseAlwaysNonNullPointer().
static bool isSetterLikeSelector | ( | Selector | sel | ) | [static] |
Check for a keyword selector that starts with the word 'add' or 'set'.
Definition at line 7903 of file SemaChecking.cpp.
References clang::Selector::getNameForSlot(), clang::Selector::getNumArgs(), clang::isLowercase(), and clang::Selector::isUnarySelector().
Referenced by clang::Sema::checkRetainCycles().
static bool IsTailPaddedMemberArray | ( | Sema & | S, |
llvm::APInt | Size, | ||
const NamedDecl * | ND | ||
) | [static] |
Check whether this array fits the idiom of a size-one tail padded array member of a struct.
We avoid emitting out-of-bounds access warnings for such arrays as they are commonly used to emulate flexible arrays in C89 code.
Definition at line 7489 of file SemaChecking.cpp.
References clang::TypeLoc::getAs(), clang::Decl::getDeclContext(), clang::Expr::getExprLoc(), clang::Decl::getNextDeclInContext(), clang::TypeSourceInfo::getTypeLoc(), clang::DeclaratorDecl::getTypeSourceInfo(), clang::TypedefNameDecl::getTypeSourceInfo(), clang::SourceLocation::isMacroID(), and clang::TagDecl::isUnion().
static bool isValidOrderingForOp | ( | int64_t | Ordering, |
AtomicExpr::AtomicOp | Op | ||
) | [static] |
Definition at line 1087 of file SemaChecking.cpp.
References clang::AtomicExpr::AO_ABI_memory_order_acq_rel, clang::AtomicExpr::AO_ABI_memory_order_acquire, clang::AtomicExpr::AO_ABI_memory_order_consume, clang::AtomicExpr::AO_ABI_memory_order_relaxed, clang::AtomicExpr::AO_ABI_memory_order_release, and clang::AtomicExpr::AO_ABI_memory_order_seq_cst.
static bool referToTheSameDecl | ( | const Expr * | E1, |
const Expr * | E2 | ||
) | [static] |
Check if two expressions refer to the same declaration.
Definition at line 4688 of file SemaChecking.cpp.
static bool requiresParensToAddCast | ( | const Expr * | E | ) | [static] |
Definition at line 3359 of file SemaChecking.cpp.
References clang::Stmt::getStmtClass(), and clang::Expr::IgnoreImpCasts().
Definition at line 435 of file SemaChecking.cpp.
References clang::NeonTypeFlags::Float16, clang::NeonTypeFlags::Float32, clang::NeonTypeFlags::Float64, clang::NeonTypeFlags::getEltType(), clang::NeonTypeFlags::Int16, clang::NeonTypeFlags::Int32, clang::NeonTypeFlags::Int64, clang::NeonTypeFlags::Int8, clang::NeonTypeFlags::isQuad(), clang::NeonTypeFlags::Poly128, clang::NeonTypeFlags::Poly16, clang::NeonTypeFlags::Poly64, and clang::NeonTypeFlags::Poly8.
static bool SemaBuiltinAddressof | ( | Sema & | S, |
CallExpr * | TheCall | ||
) | [static] |
Check that the argument to __builtin_addressof is a glvalue, and set the result type to the corresponding pointer type.
Definition at line 100 of file SemaChecking.cpp.
References clang::Sema::CheckAddressOfOperand(), checkArgCount(), clang::CallExpr::getArg(), clang::CallExpr::getLocStart(), clang::CallExpr::setArg(), and clang::Expr::setType().
static bool SemaBuiltinAnnotation | ( | Sema & | S, |
CallExpr * | TheCall | ||
) | [static] |
Check that the first argument to __builtin_annotation is an integer and the second argument is a non-wide string literal.
Definition at line 72 of file SemaChecking.cpp.
References checkArgCount(), clang::Sema::Diag(), clang::CallExpr::getArg(), clang::Stmt::getLocStart(), clang::Stmt::getSourceRange(), clang::Expr::getType(), clang::Expr::IgnoreParenCasts(), clang::StringLiteral::isAscii(), clang::Type::isIntegerType(), and clang::Expr::setType().
static void SemaBuiltinMemChkCall | ( | Sema & | S, |
FunctionDecl * | FDecl, | ||
CallExpr * | TheCall, | ||
unsigned | SizeIdx, | ||
unsigned | DstSizeIdx | ||
) | [static] |
Definition at line 114 of file SemaChecking.cpp.
References clang::Sema::Context, clang::Sema::Diag(), clang::Expr::EvaluateAsInt(), clang::CallExpr::getArg(), clang::NamedDecl::getIdentifier(), clang::CallExpr::getLocStart(), clang::CallExpr::getNumArgs(), and clang::Stmt::getSourceRange().
static std::pair<QualType, StringRef> shouldNotPrintDirectly | ( | const ASTContext & | Context, |
QualType | IntendedTy, | ||
const Expr * | E | ||
) | [static] |
Definition at line 3396 of file SemaChecking.cpp.
References clang::Type::getAs(), clang::ASTContext::IntTy, clang::QualType::isNull(), clang::ASTContext::LongTy, clang::ASTContext::UnsignedIntTy, and clang::ASTContext::UnsignedLongTy.