diff options
author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2013-12-07 06:08:04 +0000 |
---|---|---|
committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2013-12-07 06:08:04 +0000 |
commit | e818681c889361f23a0ce565dfbe2fdda1846c02 (patch) | |
tree | bc594e2eb8a46531f9273bde28876f96f4fb98df /clang/lib/Sema/SemaDeclAttr.cpp | |
parent | fc127d11971372123b80e492af28e91b1d03efeb (diff) | |
download | bcm5719-llvm-e818681c889361f23a0ce565dfbe2fdda1846c02.tar.gz bcm5719-llvm-e818681c889361f23a0ce565dfbe2fdda1846c02.zip |
Add a SubsetSubject in Attr.td to automate checking of where the objc_designated_initializer
attribute is acceptable.
llvm-svn: 196644
Diffstat (limited to 'clang/lib/Sema/SemaDeclAttr.cpp')
-rw-r--r-- | clang/lib/Sema/SemaDeclAttr.cpp | 19 |
1 files changed, 2 insertions, 17 deletions
diff --git a/clang/lib/Sema/SemaDeclAttr.cpp b/clang/lib/Sema/SemaDeclAttr.cpp index f5a36542185..6d7bc034658 100644 --- a/clang/lib/Sema/SemaDeclAttr.cpp +++ b/clang/lib/Sema/SemaDeclAttr.cpp @@ -3733,24 +3733,9 @@ static void handleObjCBridgeRelatedAttr(Sema &S, Scope *Sc, Decl *D, static void handleObjCDesignatedInitializer(Sema &S, Decl *D, const AttributeList &Attr) { - SourceLocation Loc = Attr.getLoc(); - ObjCMethodDecl *Method = cast<ObjCMethodDecl>(D); - - if (Method->getMethodFamily() != OMF_init) { - S.Diag(D->getLocStart(), diag::err_attr_objc_designated_not_init_family) - << SourceRange(Loc, Loc); - return; - } - ObjCInterfaceDecl *IFace = - dyn_cast<ObjCInterfaceDecl>(Method->getDeclContext()); - if (!IFace) { - S.Diag(D->getLocStart(), diag::err_attr_objc_designated_not_interface) - << SourceRange(Loc, Loc); - return; - } - + ObjCInterfaceDecl *IFace = cast<ObjCInterfaceDecl>(D->getDeclContext()); IFace->setHasDesignatedInitializers(); - Method->addAttr(::new (S.Context) + D->addAttr(::new (S.Context) ObjCDesignatedInitializerAttr(Attr.getRange(), S.Context, Attr.getAttributeSpellingListIndex())); } |