diff options
author | Fariborz Jahanian <fjahanian@apple.com> | 2010-02-19 20:58:54 +0000 |
---|---|---|
committer | Fariborz Jahanian <fjahanian@apple.com> | 2010-02-19 20:58:54 +0000 |
commit | 34e3cef4836d19e4abec0185ac3c0074da7b7d67 (patch) | |
tree | ce78278f7d4317d8917a8aaa50d818b8fbbbcea7 /clang/lib/Sema/SemaDeclObjC.cpp | |
parent | 350b56eed56a09d47b3e430a711c930e158f4358 (diff) | |
download | bcm5719-llvm-34e3cef4836d19e4abec0185ac3c0074da7b7d67.tar.gz bcm5719-llvm-34e3cef4836d19e4abec0185ac3c0074da7b7d67.zip |
Start supporting declaration of ivars in @implementation
blocks. WIP.
llvm-svn: 96696
Diffstat (limited to 'clang/lib/Sema/SemaDeclObjC.cpp')
-rw-r--r-- | clang/lib/Sema/SemaDeclObjC.cpp | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/clang/lib/Sema/SemaDeclObjC.cpp b/clang/lib/Sema/SemaDeclObjC.cpp index cd64e664816..5f69dc4462e 100644 --- a/clang/lib/Sema/SemaDeclObjC.cpp +++ b/clang/lib/Sema/SemaDeclObjC.cpp @@ -836,7 +836,26 @@ void Sema::CheckImplementationIvars(ObjCImplementationDecl *ImpDecl, return; assert(ivars && "missing @implementation ivars"); - + if (LangOpts.ObjCNonFragileABI2) { + if (ImpDecl->getSuperClass()) + Diag(ImpDecl->getLocation(), diag::warn_on_superclass_use); + for (unsigned i = 0; i < numIvars; i++) { + ObjCIvarDecl* ImplIvar = ivars[i]; + if (const ObjCIvarDecl *ClsIvar = + IDecl->getIvarDecl(ImplIvar->getIdentifier())) { + Diag(ImplIvar->getLocation(), diag::err_duplicate_ivar_declaration); + Diag(ClsIvar->getLocation(), diag::note_previous_definition); + continue; + } + if (ImplIvar->getAccessControl() != ObjCIvarDecl::Private) + Diag(ImplIvar->getLocation(), diag::err_non_private_ivar_declaration); + // Instance ivar to Implementation's DeclContext. + ImplIvar->setLexicalDeclContext(ImpDecl); + IDecl->makeDeclVisibleInContext(ImplIvar, false); + ImpDecl->addDecl(ImplIvar); + } + return; + } // Check interface's Ivar list against those in the implementation. // names and types must match. // |