Fix ObjCPropertRefExpr to be able to encode all the information for
uses which refer to methods not properties.
 - Not yet wired in Sema.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@55681 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/AST/StmtSerialization.cpp b/lib/AST/StmtSerialization.cpp
index 1c61b66..23879ee 100644
--- a/lib/AST/StmtSerialization.cpp
+++ b/lib/AST/StmtSerialization.cpp
@@ -998,7 +998,14 @@
 void ObjCPropertyRefExpr::EmitImpl(Serializer& S) const {
   S.Emit(Loc);
   S.Emit(getType());
-  S.EmitPtr(getDecl());
+  unsigned Kind = getKind();
+  S.Emit(Kind);
+  if (Kind == PropertyRef) {
+    S.EmitPtr(getProperty());
+  } else {
+    S.EmitPtr(getGetterMethod());
+    S.EmitPtr(getSetterMethod());
+  }
 }
   
 ObjCPropertyRefExpr* ObjCPropertyRefExpr::CreateImpl(Deserializer& D, 
@@ -1006,7 +1013,13 @@
   SourceLocation Loc = SourceLocation::ReadVal(D);
   QualType T = QualType::ReadVal(D);
   ObjCPropertyRefExpr* dr = new ObjCPropertyRefExpr(NULL,T,Loc,0);
-  D.ReadPtr(dr->D,false);  
+  unsigned Kind = D.ReadInt();
+  if (Kind == PropertyRef) {
+    D.ReadPtr(dr->Referent.AsProperty,false);
+  } else {
+    D.ReadPtr(dr->Referent.AsMethod.Setter,false);
+    D.ReadPtr(dr->Referent.AsMethod.Getter,false);
+  }
   return dr;
 }