clang 22.0.0git
SemaExprObjC.cpp File Reference

Go to the source code of this file.

Classes

class  ArrayRef< T >

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.
static NSAPI::NSClassIdKindKind ClassKindFromLiteralKind (SemaObjC::ObjCLiteralKind LiteralKind)
 Maps ObjCLiteralKind to NSClassIdKindKind.
static bool ValidateObjCLiteralInterfaceDecl (Sema &S, ObjCInterfaceDecl *Decl, SourceLocation Loc, SemaObjC::ObjCLiteralKind LiteralKind)
 Validates ObjCInterfaceDecl availability.
enum  ARCConversionTypeClass {
  ACTC_none , ACTC_retainable , ACTC_indirectRetainable , ACTC_voidPtr ,
  ACTC_coreFoundation
}
static ObjCInterfaceDeclLookupObjCInterfaceDeclForLiteral (Sema &S, SourceLocation Loc, SemaObjC::ObjCLiteralKind LiteralKind)
 Looks up ObjCInterfaceDecl of a given NSClassIdKindKind.
static ObjCMethodDeclgetNSNumberFactoryMethod (SemaObjC &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.
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.
static void CheckObjCDictionaryLiteralDuplicateKeys (Sema &S, ObjCDictionaryLiteral *Literal)
 Check for duplicate keys in an ObjC dictionary literal.
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 ObjCMethodDeclLookupDirectMethodInMethodList (Sema &S, Selector Sel, ObjCMethodList &MethList, bool &onlyDirect, bool &anyDirect)
static ObjCMethodDeclLookupDirectMethodInGlobalPool (Sema &S, Selector Sel, bool &onlyDirect, bool &anyDirect)
static ObjCMethodDeclfindMethodInCurrentClass (Sema &S, Selector Sel)
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.
static const ObjCMethodDeclfindExplicitInstancetypeDeclarer (const ObjCMethodDecl *MD, QualType instancetype)
 Look for an ObjC method whose result type exactly matches the given type.
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.
static bool isMethodDeclaredInRootProtocol (Sema &S, const ObjCMethodDecl *M)
static void RemoveSelectorFromWarningCache (SemaObjC &S, Expr *Arg)
static bool isAnyRetainable (ARCConversionTypeClass ACTC)
static bool isAnyCLike (ARCConversionTypeClass ACTC)
static ARCConversionTypeClass classifyTypeForARCConversion (QualType type)
template<typename DiagBuilderT>
static void addFixitForObjCARCConversion (Sema &S, DiagBuilderT &DiagB, 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, 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.

Enumeration Type Documentation

◆ 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 3442 of file SemaExprObjC.cpp.

Function Documentation

◆ addFixitForObjCARCConversion()

◆ applyCocoaAPICheck()

◆ checkCocoaAPI()

◆ checkFoundationAPI()

◆ CheckObjCBridgeCFCast()

◆ CheckObjCBridgeNSCast()

◆ CheckObjCCollectionLiteralElement()

◆ CheckObjCDictionaryLiteralDuplicateKeys()

void CheckObjCDictionaryLiteralDuplicateKeys ( Sema & S,
ObjCDictionaryLiteral * Literal )
static

Check for duplicate keys in an ObjC dictionary literal.

For instance: NSDictionary *nd = "foo" : @"bar", @"foo" : @"baz" };

Definition at line 901 of file SemaExprObjC.cpp.

References clang::SemaBase::Diag(), clang::Expr::EvaluateAsInt(), clang::Sema::getASTContext(), clang::Expr::IgnoreParenImpCasts(), and clang::Expr::SE_AllowSideEffects.

Referenced by clang::SemaObjC::BuildObjCDictionaryLiteral().

◆ classifyTypeForARCConversion()

◆ ClassKindFromLiteralKind()

◆ DiagnoseCStringFormatDirectiveInObjCAPI()

void DiagnoseCStringFormatDirectiveInObjCAPI ( Sema & S,
ObjCMethodDecl * Method,
Selector Sel,
Expr ** Args,
unsigned NumArgs )
static

◆ DiagnoseMismatchedSelectors()

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

◆ diagnoseObjCARCConversion()

◆ findExplicitInstancetypeDeclarer()

◆ findMethodInCurrentClass()

◆ getBaseMessageSendResultType()

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 1458 of file SemaExprObjC.cpp.

References clang::Sema::Context, clang::Type::getAsObjCInterfaceType(), clang::Sema::getCurMethodDecl(), clang::Type::isObjCClassType(), clang::Type::isObjCQualifiedClassType(), stripObjCInstanceType(), and clang::ast_matchers::type.

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

◆ getNSNumberFactoryMethod()

◆ getObjCBridgeAttr()

◆ HelperToDiagnoseMismatchedMethodsInGlobalPool()

◆ isAnyCLike()

bool isAnyCLike ( ARCConversionTypeClass ACTC)
static

Definition at line 3465 of file SemaExprObjC.cpp.

References ACTC_coreFoundation, ACTC_none, and ACTC_voidPtr.

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

◆ isAnyRetainable()

bool isAnyRetainable ( ARCConversionTypeClass ACTC)
static

◆ isMethodDeclaredInRootProtocol()

◆ LookupDirectMethodInGlobalPool()

ObjCMethodDecl * LookupDirectMethodInGlobalPool ( Sema & S,
Selector Sel,
bool & onlyDirect,
bool & anyDirect )
static

◆ LookupDirectMethodInMethodList()

ObjCMethodDecl * LookupDirectMethodInMethodList ( Sema & S,
Selector Sel,
ObjCMethodList & MethList,
bool & onlyDirect,
bool & anyDirect )
static

◆ LookupObjCInterfaceDeclForLiteral()

◆ maybeUndoReclaimObject()

Expr * maybeUndoReclaimObject ( Expr * e)
static

Look for an ObjCReclaimReturnedObject cast and destroy it.

Definition at line 4609 of file SemaExprObjC.cpp.

References clang::cast().

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

◆ ObjCBridgeRelatedAttrFromType()

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

◆ RemoveSelectorFromWarningCache()

void RemoveSelectorFromWarningCache ( SemaObjC & S,
Expr * Arg )
static

◆ stripObjCInstanceType()

QualType stripObjCInstanceType ( ASTContext & Context,
QualType T )
static

Definition at line 1436 of file SemaExprObjC.cpp.

References clang::T.

Referenced by getBaseMessageSendResultType().

◆ validateBoxingMethod()

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 151 of file SemaExprObjC.cpp.

References clang::SemaBase::Diag(), and clang::Type::isObjCObjectPointerType().

Referenced by clang::SemaObjC::BuildObjCArrayLiteral(), clang::SemaObjC::BuildObjCBoxedExpr(), clang::SemaObjC::BuildObjCDictionaryLiteral(), and getNSNumberFactoryMethod().

◆ ValidateObjCLiteralInterfaceDecl()

bool ValidateObjCLiteralInterfaceDecl ( Sema & S,
ObjCInterfaceDecl * Decl,
SourceLocation Loc,
SemaObjC::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 201 of file SemaExprObjC.cpp.

References ClassKindFromLiteralKind(), clang::SemaBase::Diag(), clang::Sema::getLangOpts(), clang::Decl::getLocation(), clang::IdentifierInfo::getName(), clang::SemaObjC::NSAPIObj, and clang::Sema::ObjC().

Referenced by LookupObjCInterfaceDeclForLiteral().