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;
}