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 db10de2..b284597 100644
--- a/Sema/SemaDecl.cpp
+++ b/Sema/SemaDecl.cpp
@@ -1237,6 +1237,7 @@
     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 @@
                                     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.
-  /// (legacy objective-c @implementation decl without an @interface decl).
-  if (!IDecl || IDecl->ImplicitInterfaceDecl())
+  if (!IDecl)
     return;
+  /// Check case of non-existing @interface decl.
+  /// (legacy objective-c @implementation decl without an @interface decl).
+  /// 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.