clang
3.7.0
|
#include "clang/Sema/SemaInternal.h"
#include "clang/AST/ASTContext.h"
#include "clang/AST/DeclObjC.h"
#include "clang/AST/ExprObjC.h"
#include "clang/AST/StmtVisitor.h"
#include "clang/AST/TypeLoc.h"
#include "clang/Analysis/DomainSpecific/CocoaConventions.h"
#include "clang/Edit/Commit.h"
#include "clang/Edit/Rewriters.h"
#include "clang/Lex/Preprocessor.h"
#include "clang/Sema/Initialization.h"
#include "clang/Sema/Lookup.h"
#include "clang/Sema/Scope.h"
#include "clang/Sema/ScopeInfo.h"
#include "llvm/ADT/SmallString.h"
Go to the source code of this file.
Enumerations | |
enum | ARCConversionTypeClass { ACTC_none, ACTC_retainable, ACTC_indirectRetainable, ACTC_voidPtr, ACTC_coreFoundation } |
enum | ACCResult |
A result from the cast checker. More... | |
Functions | |
static bool | validateBoxingMethod (Sema &S, SourceLocation Loc, const ObjCInterfaceDecl *Class, Selector Sel, const ObjCMethodDecl *Method) |
Emits an error if the given method does not exist, or if the return type is not an Objective-C object. More... | |
static ObjCMethodDecl * | getNSNumberFactoryMethod (Sema &S, SourceLocation Loc, QualType NumberType, bool isLiteral=false, SourceRange R=SourceRange()) |
Retrieve the NSNumber factory method that should be used to create an Objective-C literal for the given type. More... | |
static ExprResult | CheckObjCCollectionLiteralElement (Sema &S, Expr *Element, QualType T, bool ArrayLiteral=false) |
Check that the given expression is a valid element of an Objective-C collection literal. More... | |
static bool | HelperToDiagnoseMismatchedMethodsInGlobalPool (Sema &S, SourceLocation AtLoc, SourceLocation LParenLoc, SourceLocation RParenLoc, ObjCMethodDecl *Method, ObjCMethodList &MethList) |
static void | DiagnoseMismatchedSelectors (Sema &S, SourceLocation AtLoc, ObjCMethodDecl *Method, SourceLocation LParenLoc, SourceLocation RParenLoc, bool WarnMultipleSelectors) |
static QualType | stripObjCInstanceType (ASTContext &Context, QualType T) |
static QualType | getBaseMessageSendResultType (Sema &S, QualType ReceiverType, ObjCMethodDecl *Method, bool isClassMessage, bool isSuperMessage) |
static const ObjCMethodDecl * | findExplicitInstancetypeDeclarer (const ObjCMethodDecl *MD, QualType instancetype) |
Look for an ObjC method whose result type exactly matches the given type. More... | |
static void | applyCocoaAPICheck (Sema &S, const ObjCMessageExpr *Msg, unsigned DiagID, bool(*refactor)(const ObjCMessageExpr *, const NSAPI &, edit::Commit &)) |
static void | checkCocoaAPI (Sema &S, const ObjCMessageExpr *Msg) |
static void | DiagnoseCStringFormatDirectiveInObjCAPI (Sema &S, ObjCMethodDecl *Method, Selector Sel, Expr **Args, unsigned NumArgs) |
Diagnose use of s directive in an NSString which is being passed as formatting string to formatting method. More... | |
static void | RemoveSelectorFromWarningCache (Sema &S, Expr *Arg) |
static bool | isAnyRetainable (ARCConversionTypeClass ACTC) |
static bool | isAnyCLike (ARCConversionTypeClass ACTC) |
static ARCConversionTypeClass | classifyTypeForARCConversion (QualType type) |
static void | addFixitForObjCARCConversion (Sema &S, DiagnosticBuilder &DiagB, Sema::CheckedConversionKind CCK, SourceLocation afterLParen, QualType castType, Expr *castExpr, Expr *realCast, const char *bridgeKeyword, const char *CFBridgeName) |
template<typename T > | |
static T * | getObjCBridgeAttr (const TypedefType *TD) |
static ObjCBridgeRelatedAttr * | ObjCBridgeRelatedAttrFromType (QualType T, TypedefNameDecl *&TDNDecl) |
static void | diagnoseObjCARCConversion (Sema &S, SourceRange castRange, QualType castType, ARCConversionTypeClass castACTC, Expr *castExpr, Expr *realCast, ARCConversionTypeClass exprACTC, Sema::CheckedConversionKind CCK) |
template<typename TB > | |
static bool | CheckObjCBridgeNSCast (Sema &S, QualType castType, Expr *castExpr, bool &HadTheAttribute, bool warn) |
template<typename TB > | |
static bool | CheckObjCBridgeCFCast (Sema &S, QualType castType, Expr *castExpr, bool &HadTheAttribute, bool warn) |
static Expr * | maybeUndoReclaimObject (Expr *e) |
Look for an ObjCReclaimReturnedObject cast and destroy it. More... | |
enum ACCResult |
A result from the cast checker.
Definition at line 3107 of file SemaExprObjC.cpp.
Definition at line 3039 of file SemaExprObjC.cpp.
|
static |
Definition at line 3341 of file SemaExprObjC.cpp.
References clang::DiagnosticBuilder::AddFixItHint(), clang::ast_matchers::castExpr, clang::Sema::CCK_CStyleCast, clang::Sema::CCK_FunctionalCast, clang::Sema::CCK_ImplicitConversion, clang::Sema::CCK_OtherCast, clang::FixItHint::CreateInsertion(), clang::FixItHint::CreateReplacement(), clang::QualType::getAsString(), clang::SourceRange::getBegin(), clang::SourceManager::getCharacterData(), clang::SourceRange::getEnd(), clang::Sema::getLangOpts(), clang::Preprocessor::getLocForEndOfToken(), clang::SourceLocation::getLocWithOffset(), clang::Sema::getSourceManager(), clang::Expr::IgnoreImpCasts(), clang::Lexer::isIdentifierBodyChar(), clang::Sema::PP, and SM.
Referenced by diagnoseObjCARCConversion().
|
static |
Definition at line 2206 of file SemaExprObjC.cpp.
References clang::edit::Commit::Act_Insert, clang::edit::Commit::Act_InsertFromRange, clang::edit::Commit::Act_Remove, clang::DiagnosticBuilder::AddFixItHint(), clang::edit::Commit::Edit::BeforePrev, Builder, clang::FixItHint::CreateInsertion(), clang::FixItHint::CreateInsertionFromRange(), clang::FixItHint::CreateRemoval(), clang::Sema::Diag(), clang::Sema::Diags, clang::edit::Commit::edit_begin(), clang::edit::Commit::edit_end(), clang::Expr::getExprLoc(), clang::edit::Commit::Edit::getFileRange(), clang::edit::Commit::Edit::getInsertFromRange(), clang::ObjCMessageExpr::getSelector(), clang::edit::Commit::isCommitable(), clang::DiagnosticsEngine::isIgnored(), clang::edit::Commit::Edit::Kind, clang::Sema::LangOpts, clang::Sema::NSAPIObj, clang::edit::Commit::Edit::OrigLoc, SM, clang::Sema::SourceMgr, and clang::edit::Commit::Edit::Text.
Referenced by checkCocoaAPI().
|
static |
Definition at line 2245 of file SemaExprObjC.cpp.
References applyCocoaAPICheck(), and clang::edit::rewriteObjCRedundantCallWithLiteral().
Referenced by clang::Sema::BuildClassMessage(), and clang::Sema::BuildInstanceMessage().
|
static |
Definition at line 3658 of file SemaExprObjC.cpp.
References clang::Sema::Context, clang::Sema::Diag(), clang::Type::getAsObjCInterfacePointerType(), clang::LookupResult::getFoundDecl(), clang::Decl::getLocStart(), clang::TypeDecl::getLocStart(), clang::Type::getPointeeType(), clang::Expr::getType(), clang::QualType::getTypePtr(), clang::TypedefNameDecl::getUnderlyingType(), clang::Type::isObjCIdType(), clang::ObjCInterfaceDecl::isSuperClassOf(), clang::Sema::LookupName(), clang::Sema::LookupOrdinaryName, clang::ASTContext::QIdProtocolsAdoptObjCObjectProtocols(), and clang::Sema::TUScope.
|
static |
Definition at line 3593 of file SemaExprObjC.cpp.
References clang::Sema::Context, clang::Sema::Diag(), clang::Type::getAsObjCInterfacePointerType(), clang::LookupResult::getFoundDecl(), clang::Decl::getLocStart(), clang::TypeDecl::getLocStart(), clang::NamedDecl::getName(), clang::Type::getPointeeType(), clang::Expr::getType(), clang::QualType::getTypePtr(), clang::TypedefNameDecl::getUnderlyingType(), clang::Type::isObjCIdType(), clang::ObjCInterfaceDecl::isSuperClassOf(), clang::Sema::LookupName(), clang::Sema::LookupOrdinaryName, clang::ASTContext::ObjCObjectAdoptsQTypeProtocols(), and clang::Sema::TUScope.
|
static |
Check that the given expression is a valid element of an Objective-C collection literal.
Definition at line 332 of file SemaExprObjC.cpp.
References clang::Sema::BuildObjCNumericLiteral(), clang::Sema::BuildObjCStringLiteral(), clang::Sema::CheckPlaceholderExpr(), clang::Sema::Context, clang::InitializationKind::CreateCopy(), clang::FixItHint::CreateInsertion(), clang::Sema::DefaultLvalueConversion(), clang::Sema::Diag(), clang::ExprError(), clang::ActionResult< PtrTy, CompressInvalid >::get(), clang::Sema::getLangOpts(), clang::StringLiteral::getString(), clang::Expr::getType(), clang::InitializedEntity::InitializeParameter(), clang::Type::isBlockPointerType(), clang::ActionResult< PtrTy, CompressInvalid >::isInvalid(), clang::Type::isObjCObjectPointerType(), clang::Type::isRecordType(), clang::Expr::isTypeDependent(), clang::Sema::NSAPIObj, clang::Sema::PerformCopyInitialization(), and clang::Result.
Referenced by clang::Sema::BuildObjCArrayLiteral().
|
static |
Definition at line 3066 of file SemaExprObjC.cpp.
References ACTC_coreFoundation, ACTC_indirectRetainable, ACTC_none, ACTC_retainable, ACTC_voidPtr, clang::Type::getAs(), clang::Type::getAsArrayTypeUnsafe(), clang::Type::getPointeeType(), clang::Type::isObjCARCBridgableType(), clang::Type::isRecordType(), and clang::Type::isVoidType().
Referenced by clang::Sema::CheckObjCARCConversion(), clang::Sema::CheckObjCBridgeRelatedCast(), clang::Sema::CheckObjCBridgeRelatedConversions(), clang::Sema::CheckTollFreeBridgeCast(), clang::Sema::CheckTollFreeBridgeStaticCast(), and clang::Sema::diagnoseARCUnbridgedCast().
|
static |
Diagnose use of s directive in an NSString which is being passed as formatting string to formatting method.
Definition at line 2253 of file SemaExprObjC.cpp.
References clang::Sema::Diag(), clang::Sema::FormatStringHasSArg(), clang::NamedDecl::getDeclName(), clang::Expr::getExprLoc(), clang::Sema::GetFormatNSStringIdx(), clang::Decl::getLocation(), clang::StringLiteral::getString(), clang::Selector::getStringFormatFamily(), clang::Expr::IgnoreParenImpCasts(), clang::SFF_NSString, and clang::Decl::specific_attrs().
Referenced by clang::Sema::BuildClassMessage(), and clang::Sema::BuildInstanceMessage().
|
static |
Definition at line 1131 of file SemaExprObjC.cpp.
References clang::Sema::Diags, HelperToDiagnoseMismatchedMethodsInGlobalPool(), clang::DiagnosticsEngine::isIgnored(), and clang::Sema::MethodPool.
Referenced by clang::Sema::ParseObjCSelectorExpression().
|
static |
Definition at line 3465 of file SemaExprObjC.cpp.
References ACTC_coreFoundation, ACTC_indirectRetainable, ACTC_none, ACTC_retainable, ACTC_voidPtr, addFixitForObjCARCConversion(), clang::Sema::CCK_ImplicitConversion, clang::Sema::CCK_OtherCast, clang::Sema::Context, clang::Sema::Diag(), clang::SourceRange::getBegin(), clang::Expr::getExprLoc(), clang::Preprocessor::getLocForEndOfToken(), clang::Expr::getType(), isAnyRetainable(), clang::Type::isBlockPointerType(), clang::Sema::isKnownName(), clang::Type::isPointerType(), clang::SourceLocation::isValid(), clang::SourceRange::isValid(), clang::Sema::makeUnavailableInSystemHeader(), ObjCBridgeRelatedAttrFromType(), and clang::Sema::PP.
Referenced by clang::Sema::CheckObjCARCConversion(), and clang::Sema::diagnoseARCUnbridgedCast().
|
static |
Look for an ObjC method whose result type exactly matches the given type.
Definition at line 1409 of file SemaExprObjC.cpp.
References clang::Decl::getDeclContext(), clang::ObjCContainerDecl::getMethod(), clang::ObjCMethodDecl::getOverriddenMethods(), clang::ObjCMethodDecl::getReturnType(), clang::ObjCMethodDecl::getSelector(), and clang::ObjCMethodDecl::isInstanceMethod().
Referenced by clang::Sema::EmitRelatedResultTypeNoteForReturn().
|
static |
Determine the result type of a message send based on the receiver type, method, and the kind of message send.
This is the "base" result type, which will still need to be adjusted to account for nullability.
Definition at line 1278 of file SemaExprObjC.cpp.
References clang::Sema::Context, Context, clang::Type::getAsObjCInterfaceType(), clang::ASTContext::getAttributedType(), clang::Sema::getCurMethodDecl(), clang::Type::getNullability(), clang::AttributedType::getNullabilityAttrKind(), clang::ASTContext::getObjCInterfaceType(), clang::ASTContext::getObjCObjectPointerType(), clang::ObjCMethodDecl::getSendResultType(), clang::ObjCMethodDecl::hasRelatedResultType(), clang::ObjCMethodDecl::isInstanceMethod(), clang::Type::isObjCClassType(), clang::Type::isObjCQualifiedClassType(), stripObjCInstanceType(), clang::AttributedType::stripOuterNullability(), and clang::ast_matchers::type.
Referenced by clang::Sema::getMessageSendResultType().
|
static |
Retrieve the NSNumber factory method that should be used to create an Objective-C literal for the given type.
Definition at line 173 of file SemaExprObjC.cpp.
References clang::NSAPI::ClassId_NSNumber, clang::Sema::Context, clang::ObjCMethodDecl::Create(), clang::ObjCInterfaceDecl::Create(), clang::ParmVarDecl::Create(), clang::Sema::Diag(), clang::IdentifierTable::get(), clang::Sema::getLangOpts(), clang::ASTContext::getObjCInterfaceType(), clang::ASTContext::getObjCObjectPointerType(), clang::ASTContext::getTranslationUnitDecl(), clang::ObjCInterfaceDecl::hasDefinition(), clang::ASTContext::Idents, clang::tok::isLiteral(), clang::QualType::isNull(), clang::ObjCInterfaceDecl::lookupClassMethod(), clang::Sema::LookupOrdinaryName, clang::Sema::LookupSingleName(), clang::None, clang::Sema::NSAPIObj, clang::Sema::NSNumberDecl, clang::Sema::NSNumberLiteralMethods, clang::Sema::NSNumberPointer, clang::ObjCMethodDecl::Required, clang::SC_None, clang::ObjCMethodDecl::setMethodParams(), clang::Sema::TUScope, and validateBoxingMethod().
Referenced by clang::Sema::BuildObjCBoxedExpr(), and clang::Sema::BuildObjCNumericLiteral().
|
inlinestatic |
Definition at line 3440 of file SemaExprObjC.cpp.
References clang::Type::getAs(), clang::TypedefType::getDecl(), clang::RecordDecl::getMostRecentDecl(), clang::Type::getPointeeType(), clang::TypedefNameDecl::getUnderlyingType(), and clang::Type::isPointerType().
|
static |
Definition at line 1100 of file SemaExprObjC.cpp.
References clang::FixItHint::CreateInsertion(), clang::Sema::Diag(), clang::Decl::getDeclContext(), clang::NamedDecl::getDeclName(), clang::Decl::getLocation(), clang::ObjCMethodList::getMethod(), clang::ObjCMethodList::getNext(), clang::ObjCMethodDecl::getSelector(), clang::Sema::MatchTwoMethodDeclarations(), and clang::Sema::MMS_loose.
Referenced by DiagnoseMismatchedSelectors().
|
static |
Definition at line 3060 of file SemaExprObjC.cpp.
References ACTC_coreFoundation, ACTC_none, and ACTC_voidPtr.
Referenced by clang::Sema::CheckObjCARCConversion().
|
static |
Definition at line 3055 of file SemaExprObjC.cpp.
References ACTC_coreFoundation, ACTC_retainable, and ACTC_voidPtr.
Referenced by clang::Sema::CheckObjCARCConversion(), and diagnoseObjCARCConversion().
Look for an ObjCReclaimReturnedObject cast and destroy it.
Definition at line 4163 of file SemaExprObjC.cpp.
References clang::CK_ARCReclaimReturnedObject.
Referenced by clang::Sema::BuildObjCBridgedCast().
|
static |
Definition at line 3452 of file SemaExprObjC.cpp.
References clang::QualType::getTypePtr(), and clang::TypedefNameDecl::getUnderlyingType().
Referenced by clang::Sema::checkObjCBridgeRelatedComponents(), and diagnoseObjCARCConversion().
Definition at line 2995 of file SemaExprObjC.cpp.
References clang::Expr::IgnoreParenCasts(), and clang::Sema::ReferencedSelectors.
Referenced by clang::Sema::ActOnInstanceMessage().
|
static |
Definition at line 1254 of file SemaExprObjC.cpp.
References clang::ASTContext::getAttributedType(), clang::AttributedType::getNullabilityAttrKind(), clang::ASTContext::getObjCIdType(), clang::ASTContext::getObjCInstanceType(), and clang::AttributedType::stripOuterNullability().
Referenced by getBaseMessageSendResultType().
|
static |
Emits an error if the given method does not exist, or if the return type is not an Objective-C object.
Definition at line 149 of file SemaExprObjC.cpp.
References clang::Sema::Diag(), clang::Decl::getLocation(), clang::NamedDecl::getName(), clang::ObjCMethodDecl::getReturnType(), and clang::Type::isObjCObjectPointerType().
Referenced by clang::Sema::BuildObjCArrayLiteral(), clang::Sema::BuildObjCBoxedExpr(), clang::Sema::BuildObjCDictionaryLiteral(), and getNSNumberFactoryMethod().