diff --git a/include/clang/AST/DeclObjC.h b/include/clang/AST/DeclObjC.h
index 8ca0a37..76e4c02 100644
--- a/include/clang/AST/DeclObjC.h
+++ b/include/clang/AST/DeclObjC.h
@@ -1009,6 +1009,7 @@
   
   ObjCMethodDecl *GetterMethodDecl; // Declaration of getter instance method
   ObjCMethodDecl *SetterMethodDecl; // Declaration of setter instance method
+  ObjCIvarDecl *PropertyIvarDecl;   // Synthesize ivar for this property
 
   ObjCPropertyDecl(DeclContext *DC, SourceLocation L, IdentifierInfo *Id, 
                    QualType T)
@@ -1016,7 +1017,7 @@
       PropertyAttributes(OBJC_PR_noattr), PropertyImplementation(None),
       GetterName(Selector()), 
       SetterName(Selector()),
-      GetterMethodDecl(0), SetterMethodDecl(0) {}
+      GetterMethodDecl(0), SetterMethodDecl(0) , PropertyIvarDecl(0) {}
 public:
   static ObjCPropertyDecl *Create(ASTContext &C, DeclContext *DC, 
                                   SourceLocation L, 
@@ -1074,6 +1075,13 @@
     return PropertyControl(PropertyImplementation);
   }  
   
+  void setPropertyIvarDecl(ObjCIvarDecl *Ivar) {
+    PropertyIvarDecl = Ivar;
+  }
+  ObjCIvarDecl *getPropertyIvarDecl() const {
+    return PropertyIvarDecl;
+  }
+  
   static bool classof(const Decl *D) {
     return D->getKind() == ObjCProperty;
   }
@@ -1091,7 +1099,6 @@
     Dynamic
   };
 private:
-  unsigned IvarKind : 1;
   SourceLocation AtLoc;   // location of @synthesize or @dynamic
   /// Property declaration being implemented
   ObjCPropertyDecl *PropertyDecl;
@@ -1103,7 +1110,7 @@
                        ObjCPropertyDecl *property, 
                        Kind PK, 
                        ObjCIvarDecl *ivarDecl)
-    : Decl(ObjCPropertyImpl, DC, L), IvarKind(false), AtLoc(atLoc), 
+    : Decl(ObjCPropertyImpl, DC, L), AtLoc(atLoc), 
       PropertyDecl(property), PropertyIvarDecl(ivarDecl) {
     assert (PK == Dynamic || PropertyIvarDecl);
   }
@@ -1128,16 +1135,6 @@
   ObjCIvarDecl *getPropertyIvarDecl() const {
     return PropertyIvarDecl;
   }
-  void SetPropertyIvarDecl(ObjCIvarDecl *Ivar) {
-    assert(PropertyIvarDecl && "PropertyIvarDecl is already defined");
-    PropertyIvarDecl = Ivar;
-  }
-  void SetIvarSynthesized() {
-    IvarKind = true;
-  }
-  bool IsIvarSynthesized() const {
-    return IvarKind;
-  }
   
   static bool classof(const Decl *D) {
     return D->getKind() == ObjCPropertyImpl;
diff --git a/lib/AST/ASTContext.cpp b/lib/AST/ASTContext.cpp
index bb17954..b62438c 100644
--- a/lib/AST/ASTContext.cpp
+++ b/lib/AST/ASTContext.cpp
@@ -608,6 +608,13 @@
     if (!IVDecl->isInvalidDecl())
       Fields.push_back(cast<FieldDecl>(IVDecl));
   }
+  // look into properties.
+  for (ObjCInterfaceDecl::prop_iterator I = OI->prop_begin(),
+       E = OI->prop_end(); I != E; ++I) {
+    ObjCPropertyDecl *PDecl = (*I);
+    if (ObjCIvarDecl *IV = PDecl->getPropertyIvarDecl())
+      Fields.push_back(cast<FieldDecl>(IV));
+  }
 }
 
 /// addRecordToClass - produces record info. for the class for its
diff --git a/lib/AST/DeclObjC.cpp b/lib/AST/DeclObjC.cpp
index 4d2fcb6..855764f 100644
--- a/lib/AST/DeclObjC.cpp
+++ b/lib/AST/DeclObjC.cpp
@@ -137,6 +137,16 @@
         return *I;
       }
     }
+    // look into properties.
+    for (ObjCInterfaceDecl::prop_iterator I = ClassDecl->prop_begin(),
+         E = ClassDecl->prop_end(); I != E; ++I) {
+      ObjCPropertyDecl *PDecl = (*I);
+      if (ObjCIvarDecl *IV = PDecl->getPropertyIvarDecl())
+        if (IV->getIdentifier() == ID) {
+          clsDeclared = ClassDecl;
+          return IV;
+        }
+    }
     ClassDecl = ClassDecl->getSuperClass();
   }
   return NULL;
diff --git a/lib/Sema/SemaDeclObjC.cpp b/lib/Sema/SemaDeclObjC.cpp
index 18e3e4f..c68eede 100644
--- a/lib/Sema/SemaDeclObjC.cpp
+++ b/lib/Sema/SemaDeclObjC.cpp
@@ -1765,17 +1765,22 @@
     // @synthesize
     if (!PropertyIvar)
       PropertyIvar = PropertyId;
+    QualType PropType = Context.getCanonicalType(property->getType());
     // Check that this is a previously declared 'ivar' in 'IDecl' interface
     Ivar = IDecl->lookupInstanceVariable(PropertyIvar);
     if (!Ivar) {
-      if (getLangOptions().ObjCNonFragileABI)
-        Diag(PropertyLoc, diag::error_synthesized_ivar_yet_not_supported) 
-                          << PropertyId;
-      else
+      if (getLangOptions().ObjCNonFragileABI) {
+        Ivar = ObjCIvarDecl::Create(Context, CurContext, PropertyLoc, 
+                                    PropertyIvar, PropType, 
+                                    ObjCIvarDecl::Private,
+                                    (Expr *)0);
+        property->setPropertyIvarDecl(Ivar);
+      }
+      else {
         Diag(PropertyLoc, diag::error_missing_property_ivar_decl) << PropertyId;
-      return DeclPtrTy();
+        return DeclPtrTy();
+      }
     }
-    QualType PropType = Context.getCanonicalType(property->getType());
     QualType IvarType = Context.getCanonicalType(Ivar->getType());
     
     // Check that type of property and its ivar are type compatible.
diff --git a/test/SemaObjC/property-nonfragile-abi.m b/test/SemaObjC/property-nonfragile-abi.m
index 31d415e..e2de77d 100644
--- a/test/SemaObjC/property-nonfragile-abi.m
+++ b/test/SemaObjC/property-nonfragile-abi.m
@@ -16,7 +16,6 @@
 @end
 
 @implementation XCDeviceWillExecuteInfoBaton
-  // Produce an error when compiling for -arch x86_64 (or "non-fragile" ABI)
-  @synthesize sdkPath; // expected-error{{instance variable synthesis not yet supported (need to declare 'sdkPath' explicitly)}}
+  @synthesize sdkPath; 
 @end
 
diff --git a/test/SemaObjC/synthesized-ivar.m b/test/SemaObjC/synthesized-ivar.m
new file mode 100644
index 0000000..de44857
--- /dev/null
+++ b/test/SemaObjC/synthesized-ivar.m
@@ -0,0 +1,13 @@
+// RUN: clang-cc -fsyntax-only -triple x86_64-apple-darwin9 -verify %s
+@interface I
+{
+}
+@property int IP;
+@end
+
+@implementation I
+@synthesize IP;
+- (int) Meth {
+   return IP;
+}
+@end
