diff --git a/AST/Decl.cpp b/AST/Decl.cpp
index 1e3636c..f986c63 100644
--- a/AST/Decl.cpp
+++ b/AST/Decl.cpp
@@ -393,12 +393,11 @@
   IdentifierInfo *ID, ObjcInterfaceDecl *&clsDeclared) {
   ObjcInterfaceDecl* ClassDecl = this;
   while (ClassDecl != NULL) {
-    ObjcIvarDecl **ivars = ClassDecl->getInstanceVariables();
-    int ivarCount = ClassDecl->getNumInstanceVariables();
-    for (int i = 0; i < ivarCount; ++i) {
-      if (ivars[i]->getIdentifier() == ID) {
+    for (ivar_iterator I = ClassDecl->ivar_begin(), E = ClassDecl->ivar_end();
+         I != E; ++I) {
+      if ((*I)->getIdentifier() == ID) {
         clsDeclared = ClassDecl;
-        return ivars[i];
+        return *I;
       }
     }
     ClassDecl = ClassDecl->getSuperClass();
diff --git a/Driver/ASTConsumers.cpp b/Driver/ASTConsumers.cpp
index 2286341..790baf5 100644
--- a/Driver/ASTConsumers.cpp
+++ b/Driver/ASTConsumers.cpp
@@ -172,14 +172,12 @@
   else
     Out << '\n';
   
-  int NumIvars = OID->getNumInstanceVariables();
-  if (NumIvars > 0) {
-    ObjcIvarDecl **Ivars = OID->getInstanceVariables();
+  if (OID->getNumInstanceVariables() > 0) {
     Out << '{';
-    for (int i = 0; i < NumIvars; i++) {
-      Out << '\t' << Ivars[i]->getType().getAsString()
-          << ' '  << Ivars[i]->getName()
-          << ";\n";      
+    for (ObjcInterfaceDecl::ivar_iterator I = OID->ivar_begin(),
+         E = OID->ivar_end(); I != E; ++I) {
+      Out << '\t' << (*I)->getType().getAsString()
+          << ' '  << (*I)->getName() << ";\n";      
     }
     Out << "}\n";
   }
diff --git a/Driver/RewriteTest.cpp b/Driver/RewriteTest.cpp
index c8c8f9d..6edfcb1 100644
--- a/Driver/RewriteTest.cpp
+++ b/Driver/RewriteTest.cpp
@@ -2090,10 +2090,6 @@
                                            std::string &Result) {
   ObjcInterfaceDecl *CDecl = IDecl->getClassInterface();
   
-  // Build _objc_ivar_list metadata for classes ivars if needed
-  int NumIvars = IDecl->getImplDeclNumIvars() > 0 
-                   ? IDecl->getImplDeclNumIvars() 
-                   : (CDecl ? CDecl->getNumInstanceVariables() : 0);
   // Explictly declared @interface's are already synthesized.
   if (CDecl->ImplicitInterfaceDecl()) {
     // FIXME: Implementation of a class with no @interface (legacy) doese not 
@@ -2101,6 +2097,10 @@
     SynthesizeObjcInternalStruct(CDecl, Result);
   }
   
+  // Build _objc_ivar_list metadata for classes ivars if needed
+  int NumIvars = IDecl->getImplDeclNumIvars() > 0 
+                   ? IDecl->getImplDeclNumIvars() 
+                   : (CDecl ? CDecl->getNumInstanceVariables() : 0);
   if (NumIvars > 0) {
     static bool objc_ivar = false;
     if (!objc_ivar) {
@@ -2133,28 +2133,33 @@
       "{\n\t";
     Result += utostr(NumIvars);
     Result += "\n";
-          
-    ObjcIvarDecl **Ivars = IDecl->getImplDeclIVars() 
-                             ? IDecl->getImplDeclIVars() 
-                             : CDecl->getInstanceVariables();
+    
+    ObjcInterfaceDecl::ivar_iterator IVI, IVE;
+    if (IDecl->getImplDeclNumIvars() > 0) {
+      IVI = IDecl->ivar_begin();
+      IVE = IDecl->ivar_end();
+    } else {
+      IVI = CDecl->ivar_begin();
+      IVE = CDecl->ivar_end();
+    }
     Result += "\t,{{\"";
-    Result += Ivars[0]->getName();
+    Result += (*IVI)->getName();
     Result += "\", \"";
     std::string StrEncoding;
-    Context->getObjcEncodingForType(Ivars[0]->getType(), StrEncoding);
+    Context->getObjcEncodingForType((*IVI)->getType(), StrEncoding);
     Result += StrEncoding;
     Result += "\", ";
-    SynthesizeIvarOffsetComputation(IDecl, Ivars[0], Result);
+    SynthesizeIvarOffsetComputation(IDecl, *IVI, Result);
     Result += "}\n";
-    for (int i = 1; i < NumIvars; i++) {
+    for (++IVI; IVI != IVE; ++IVI) {
       Result += "\t  ,{\"";
-      Result += Ivars[i]->getName();
+      Result += (*IVI)->getName();
       Result += "\", \"";
       std::string StrEncoding;
-      Context->getObjcEncodingForType(Ivars[i]->getType(), StrEncoding);
+      Context->getObjcEncodingForType((*IVI)->getType(), StrEncoding);
       Result += StrEncoding;
       Result += "\", ";
-      SynthesizeIvarOffsetComputation(IDecl, Ivars[i], Result);
+      SynthesizeIvarOffsetComputation(IDecl, (*IVI), Result);
       Result += "}\n";
     }
     
diff --git a/include/clang/AST/DeclObjC.h b/include/clang/AST/DeclObjC.h
index fd763d5..a1b73cd 100644
--- a/include/clang/AST/DeclObjC.h
+++ b/include/clang/AST/DeclObjC.h
@@ -111,9 +111,12 @@
   }
   int getNumIntfRefProtocols() const { return NumReferencedProtocols; }
   
-  ObjcIvarDecl **getInstanceVariables() const { return Ivars; }
   int getNumInstanceVariables() const { return NumIvars; }
   
+  typedef ObjcIvarDecl * const *ivar_iterator;
+  ivar_iterator ivar_begin() const { return Ivars; }
+  ivar_iterator ivar_end() const { return Ivars+(NumIvars == -1 ?0 : NumIvars);}
+  
   ObjcMethodDecl** getInstanceMethods() const { return InstanceMethods; }
   int getNumInstanceMethods() const { return NumInstanceMethods; }
   
@@ -580,7 +583,6 @@
   unsigned getNumInstanceMethods() const { return InstanceMethods.size(); }
   unsigned getNumClassMethods() const { return ClassMethods.size(); }
 
-  ObjcIvarDecl **getImplDeclIVars() const { return Ivars; }
   unsigned getImplDeclNumIvars() const { return NumIvars; }
   
   
