From f9371395300cc20d7a302e647de9ecda4bdf6b7e Mon Sep 17 00:00:00 2001 From: Alex Lorenz Date: Thu, 23 Mar 2017 11:44:25 +0000 Subject: Support attributes for Objective-C categories rdar://31095315 Differential Revision: https://reviews.llvm.org/D31179 llvm-svn: 298589 --- clang/lib/Sema/SemaDeclObjC.cpp | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) (limited to 'clang/lib/Sema') diff --git a/clang/lib/Sema/SemaDeclObjC.cpp b/clang/lib/Sema/SemaDeclObjC.cpp index b43e5b9e327..e50f8b20677 100644 --- a/clang/lib/Sema/SemaDeclObjC.cpp +++ b/clang/lib/Sema/SemaDeclObjC.cpp @@ -258,7 +258,8 @@ static void DiagnoseObjCImplementedDeprecations(Sema &S, S.Diag(ND->getLocation(), diag::note_method_declared_at) << ND->getDeclName(); else - S.Diag(ND->getLocation(), diag::note_previous_decl) << "class"; + S.Diag(ND->getLocation(), diag::note_previous_decl) + << (isa(ND) ? "category" : "class"); } } @@ -1724,7 +1725,8 @@ ActOnStartCategoryInterface(SourceLocation AtInterfaceLoc, Decl * const *ProtoRefs, unsigned NumProtoRefs, const SourceLocation *ProtoLocs, - SourceLocation EndProtoLoc) { + SourceLocation EndProtoLoc, + AttributeList *AttrList) { ObjCCategoryDecl *CDecl; ObjCInterfaceDecl *IDecl = getObjCInterfaceDecl(ClassName, ClassLoc, true); @@ -1801,6 +1803,9 @@ ActOnStartCategoryInterface(SourceLocation AtInterfaceLoc, NumProtoRefs, Context); } + if (AttrList) + ProcessDeclAttributeList(TUScope, CDecl, AttrList); + CheckObjCDeclScope(CDecl); return ActOnObjCContainerStartDefinition(CDecl); } @@ -1865,9 +1870,10 @@ Decl *Sema::ActOnStartCategoryImplementation( CatIDecl->setImplementation(CDecl); // Warn on implementating category of deprecated class under // -Wdeprecated-implementations flag. - DiagnoseObjCImplementedDeprecations(*this, - dyn_cast(IDecl), - CDecl->getLocation(), 2); + DiagnoseObjCImplementedDeprecations( + *this, + CatIDecl->isDeprecated() ? CatIDecl : dyn_cast(IDecl), + CDecl->getLocation(), 2); } } -- cgit v1.2.3