From: Fariborz Jahanian Date: Fri, 26 Oct 2007 20:50:24 +0000 (+0000) Subject: This patch allows synthesis generation of ivar offset for legacy objective-c @impleme... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=7780d2d52bda7f2bd9ecfa23d534d28817e98ba4;p=clang This patch allows synthesis generation of ivar offset for legacy objective-c @implementation decl without an @interface decl. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@43403 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/Sema/SemaDecl.cpp b/Sema/SemaDecl.cpp index db10de2a44..b2845978bf 100644 --- a/Sema/SemaDecl.cpp +++ b/Sema/SemaDecl.cpp @@ -1237,6 +1237,7 @@ Sema::DeclTy *Sema::ActOnStartClassImplementation( IDecl = new ObjcInterfaceDecl(SourceLocation(), 0, ClassName); IDecl->setNext(ClassName->getFETokenInfo()); ClassName->setFETokenInfo(IDecl); + IDecl->setSuperClass(SDecl); // Remember that this needs to be removed when the scope is popped. TUScope->AddDecl(IDecl); @@ -1256,10 +1257,16 @@ void Sema::CheckImplementationIvars(ObjcImplementationDecl *ImpDecl, ObjcIvarDecl **ivars, unsigned numIvars) { assert(ImpDecl && "missing implementation decl"); ObjcInterfaceDecl* IDecl = getObjCInterfaceDecl(ImpDecl->getIdentifier()); - /// 2nd check is added to accomodate case of non-existing @interface decl. + if (!IDecl) + return; + /// Check case of non-existing @interface decl. /// (legacy objective-c @implementation decl without an @interface decl). - if (!IDecl || IDecl->ImplicitInterfaceDecl()) + /// Add implementations's ivar to the synthesize class's ivar list. + if (IDecl->ImplicitInterfaceDecl()) { + IDecl->ObjcAddInstanceVariablesToClass(ivars, numIvars); return; + } + assert(ivars && "missing @implementation ivars"); // Check interface's Ivar list against those in the implementation.