clang  6.0.0svn
Enumerations | Functions
SemaExprObjC.cpp File Reference
#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"
Include dependency graph for SemaExprObjC.cpp:

Go to the source code of this file.

Enumerations

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 NSAPI::NSClassIdKindKind ClassKindFromLiteralKind (Sema::ObjCLiteralKind LiteralKind)
 Maps ObjCLiteralKind to NSClassIdKindKind. More...
 
static bool ValidateObjCLiteralInterfaceDecl (Sema &S, ObjCInterfaceDecl *Decl, SourceLocation Loc, Sema::ObjCLiteralKind LiteralKind)
 Validates ObjCInterfaceDecl availability. More...
 
enum  ARCConversionTypeClass {
  ACTC_none, ACTC_retainable, ACTC_indirectRetainable, ACTC_voidPtr,
  ACTC_coreFoundation
}
 
static ObjCInterfaceDeclLookupObjCInterfaceDeclForLiteral (Sema &S, SourceLocation Loc, Sema::ObjCLiteralKind LiteralKind)
 Looks up ObjCInterfaceDecl of a given NSClassIdKindKind. More...
 
static ObjCMethodDeclgetNSNumberFactoryMethod (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)
 Determine the result type of a message send based on the receiver type, method, and the kind of message send. More...
 
static const ObjCMethodDeclfindExplicitInstancetypeDeclarer (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 checkFoundationAPI (Sema &S, SourceLocation Loc, const ObjCMethodDecl *Method, ArrayRef< Expr *> Args, QualType ReceiverType, bool IsClassObjectCall)
 
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 bool isMethodDeclaredInRootProtocol (Sema &S, const ObjCMethodDecl *M)
 
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 ExprmaybeUndoReclaimObject (Expr *e)
 Look for an ObjCReclaimReturnedObject cast and destroy it. More...
 

Enumeration Type Documentation

◆ ACCResult

enum ACCResult

A result from the cast checker.

Definition at line 3240 of file SemaExprObjC.cpp.

◆ ARCConversionTypeClass

Enumerator
ACTC_none 

int, void, struct A

ACTC_retainable 

id, void (^)()

ACTC_indirectRetainable 

id*, id***, void (^*)(),

ACTC_voidPtr 

void* might be a normal C type, or it might a CF type.

ACTC_coreFoundation 

struct A*

Definition at line 3170 of file SemaExprObjC.cpp.

Function Documentation

◆ addFixitForObjCARCConversion()

static void addFixitForObjCARCConversion ( Sema S,
DiagnosticBuilder DiagB,
Sema::CheckedConversionKind  CCK,
SourceLocation  afterLParen,
QualType  castType,
Expr castExpr,
Expr realCast,
const char *  bridgeKeyword,
const char *  CFBridgeName 
)
static

◆ applyCocoaAPICheck()

static void applyCocoaAPICheck ( Sema S,
const ObjCMessageExpr Msg,
unsigned  DiagID,
bool(*)(const ObjCMessageExpr *, const NSAPI &, edit::Commit &)  refactor 
)
static

Definition at line 2224 of file SemaExprObjC.cpp.

Referenced by checkCocoaAPI().

◆ checkCocoaAPI()

static void checkCocoaAPI ( Sema S,
const ObjCMessageExpr Msg 
)
static

◆ checkFoundationAPI()

static void checkFoundationAPI ( Sema S,
SourceLocation  Loc,
const ObjCMethodDecl Method,
ArrayRef< Expr *>  Args,
QualType  ReceiverType,
bool  IsClassObjectCall 
)
static

◆ CheckObjCBridgeCFCast()

template<typename TB >
static bool CheckObjCBridgeCFCast ( Sema S,
QualType  castType,
Expr castExpr,
bool HadTheAttribute,
bool  warn 
)
static

◆ CheckObjCBridgeNSCast()

template<typename TB >
static bool CheckObjCBridgeNSCast ( Sema S,
QualType  castType,
Expr castExpr,
bool HadTheAttribute,
bool  warn 
)
static

◆ CheckObjCCollectionLiteralElement()

static ExprResult CheckObjCCollectionLiteralElement ( Sema S,
Expr Element,
QualType  T,
bool  ArrayLiteral = false 
)
static

◆ classifyTypeForARCConversion()

static ARCConversionTypeClass classifyTypeForARCConversion ( QualType  type)
static

◆ ClassKindFromLiteralKind()

static NSAPI::NSClassIdKindKind ClassKindFromLiteralKind ( Sema::ObjCLiteralKind  LiteralKind)
static

◆ DiagnoseCStringFormatDirectiveInObjCAPI()

static void DiagnoseCStringFormatDirectiveInObjCAPI ( Sema S,
ObjCMethodDecl Method,
Selector  Sel,
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 2318 of file SemaExprObjC.cpp.

References clang::Selector::getStringFormatFamily(), and clang::SFF_NSString.

◆ DiagnoseMismatchedSelectors()

static void DiagnoseMismatchedSelectors ( Sema S,
SourceLocation  AtLoc,
ObjCMethodDecl Method,
SourceLocation  LParenLoc,
SourceLocation  RParenLoc,
bool  WarnMultipleSelectors 
)
static

Definition at line 1127 of file SemaExprObjC.cpp.

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

◆ diagnoseObjCARCConversion()

static void diagnoseObjCARCConversion ( Sema S,
SourceRange  castRange,
QualType  castType,
ARCConversionTypeClass  castACTC,
Expr castExpr,
Expr realCast,
ARCConversionTypeClass  exprACTC,
Sema::CheckedConversionKind  CCK 
)
static

◆ findExplicitInstancetypeDeclarer()

static const ObjCMethodDecl* findExplicitInstancetypeDeclarer ( const ObjCMethodDecl MD,
QualType  instancetype 
)
static

◆ getBaseMessageSendResultType()

static QualType getBaseMessageSendResultType ( Sema S,
QualType  ReceiverType,
ObjCMethodDecl Method,
bool  isClassMessage,
bool  isSuperMessage 
)
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 1274 of file SemaExprObjC.cpp.

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

◆ getNSNumberFactoryMethod()

static ObjCMethodDecl* getNSNumberFactoryMethod ( Sema S,
SourceLocation  Loc,
QualType  NumberType,
bool  isLiteral = false,
SourceRange  R = SourceRange() 
)
static

Retrieve the NSNumber factory method that should be used to create an Objective-C literal for the given type.

Definition at line 241 of file SemaExprObjC.cpp.

◆ getObjCBridgeAttr()

template<typename T >
static T* getObjCBridgeAttr ( const TypedefType TD)
inlinestatic

◆ HelperToDiagnoseMismatchedMethodsInGlobalPool()

static bool HelperToDiagnoseMismatchedMethodsInGlobalPool ( Sema S,
SourceLocation  AtLoc,
SourceLocation  LParenLoc,
SourceLocation  RParenLoc,
ObjCMethodDecl Method,
ObjCMethodList MethList 
)
static

Definition at line 1096 of file SemaExprObjC.cpp.

◆ isAnyCLike()

static bool isAnyCLike ( ARCConversionTypeClass  ACTC)
static

Definition at line 3193 of file SemaExprObjC.cpp.

References ACTC_coreFoundation, ACTC_none, and ACTC_voidPtr.

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

◆ isAnyRetainable()

static bool isAnyRetainable ( ARCConversionTypeClass  ACTC)
static

Definition at line 3187 of file SemaExprObjC.cpp.

References ACTC_coreFoundation, ACTC_retainable, and ACTC_voidPtr.

Referenced by diagnoseObjCARCConversion().

◆ isMethodDeclaredInRootProtocol()

static bool isMethodDeclaredInRootProtocol ( Sema S,
const ObjCMethodDecl M 
)
static

◆ LookupObjCInterfaceDeclForLiteral()

static ObjCInterfaceDecl* LookupObjCInterfaceDeclForLiteral ( Sema S,
SourceLocation  Loc,
Sema::ObjCLiteralKind  LiteralKind 
)
static

Looks up ObjCInterfaceDecl of a given NSClassIdKindKind.

Used to create ObjC literals, such as NSDictionary (}), NSArray (@[]) and Boxed Expressions (@())

Definition at line 217 of file SemaExprObjC.cpp.

Referenced by clang::Sema::BuildObjCArrayLiteral(), and clang::Sema::BuildObjCDictionaryLiteral().

◆ maybeUndoReclaimObject()

static Expr* maybeUndoReclaimObject ( Expr e)
static

Look for an ObjCReclaimReturnedObject cast and destroy it.

Definition at line 4319 of file SemaExprObjC.cpp.

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

◆ ObjCBridgeRelatedAttrFromType()

static ObjCBridgeRelatedAttr* ObjCBridgeRelatedAttrFromType ( QualType  T,
TypedefNameDecl *&  TDNDecl 
)
static

◆ RemoveSelectorFromWarningCache()

static void RemoveSelectorFromWarningCache ( Sema S,
Expr Arg 
)
static

◆ stripObjCInstanceType()

static QualType stripObjCInstanceType ( ASTContext Context,
QualType  T 
)
static

Definition at line 1250 of file SemaExprObjC.cpp.

◆ validateBoxingMethod()

static bool validateBoxingMethod ( Sema S,
SourceLocation  Loc,
const ObjCInterfaceDecl Class,
Selector  Sel,
const ObjCMethodDecl Method 
)
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 146 of file SemaExprObjC.cpp.

◆ ValidateObjCLiteralInterfaceDecl()

static bool ValidateObjCLiteralInterfaceDecl ( Sema S,
ObjCInterfaceDecl Decl,
SourceLocation  Loc,
Sema::ObjCLiteralKind  LiteralKind 
)
static

Validates ObjCInterfaceDecl availability.

ObjCInterfaceDecl, used to create ObjC literals, should be defined if clang not in a debugger mode.

Definition at line 195 of file SemaExprObjC.cpp.