]> granicus.if.org Git - clang/commitdiff
This patch allows synthesis generation of ivar offset for legacy objective-c @impleme...
authorFariborz Jahanian <fjahanian@apple.com>
Fri, 26 Oct 2007 20:50:24 +0000 (20:50 +0000)
committerFariborz Jahanian <fjahanian@apple.com>
Fri, 26 Oct 2007 20:50:24 +0000 (20:50 +0000)
decl without an @interface decl.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@43403 91177308-0d34-0410-b5e6-96231b3b80d8

Sema/SemaDecl.cpp

index db10de2a44f69aa8ea7087ec9a1114445bbe4893..b2845978bf402622774f3be708882c366861bc03 100644 (file)
@@ -1237,6 +1237,7 @@ Sema::DeclTy *Sema::ActOnStartClassImplementation(
     IDecl = new ObjcInterfaceDecl(SourceLocation(), 0, ClassName);
     IDecl->setNext(ClassName->getFETokenInfo<ScopedDecl>());
     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.