diff options
author | Fariborz Jahanian <fjahanian@apple.com> | 2008-12-18 17:29:46 +0000 |
---|---|---|
committer | Fariborz Jahanian <fjahanian@apple.com> | 2008-12-18 17:29:46 +0000 |
commit | efc4c4bdbd8fee90b93deb3b5cfaeb044ae22557 (patch) | |
tree | ed661077147ecc42999eec82a78377928ee84ad2 /lib | |
parent | d8df6823420c22329a2a9aacd2a440368d38d86c (diff) |
Removed a slot in ObjCMemRegExpr used in
code gen which did not belong there.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@61203 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r-- | lib/AST/ASTContext.cpp | 10 | ||||
-rw-r--r-- | lib/AST/StmtSerialization.cpp | 2 | ||||
-rw-r--r-- | lib/CodeGen/CGExpr.cpp | 4 | ||||
-rw-r--r-- | lib/CodeGen/CGObjC.cpp | 4 | ||||
-rw-r--r-- | lib/Sema/SemaExpr.cpp | 15 |
5 files changed, 24 insertions, 11 deletions
diff --git a/lib/AST/ASTContext.cpp b/lib/AST/ASTContext.cpp index 281b2cd5de..95f95ceb5e 100644 --- a/lib/AST/ASTContext.cpp +++ b/lib/AST/ASTContext.cpp @@ -540,6 +540,16 @@ const RecordDecl *ASTContext::addRecordToClass(const ObjCInterfaceDecl *D) return RD; } +/// setFieldDecl - maps a field for the given Ivar reference node. +// +void ASTContext::setFieldDecl(const ObjCInterfaceDecl *OI, + const ObjCIvarDecl *Ivar, + const ObjCIvarRefExpr *MRef) { + FieldDecl *FD = (const_cast<ObjCInterfaceDecl *>(OI))-> + lookupFieldDeclForIvar(*this, Ivar); + ASTFieldForIvarRef[MRef] = FD; +} + /// getASTObjcInterfaceLayout - Get or compute information about the layout of /// the specified Objective C, which indicates its size and ivar /// position information. diff --git a/lib/AST/StmtSerialization.cpp b/lib/AST/StmtSerialization.cpp index e25c5cd861..686ee68b20 100644 --- a/lib/AST/StmtSerialization.cpp +++ b/lib/AST/StmtSerialization.cpp @@ -1162,7 +1162,7 @@ void ObjCIvarRefExpr::EmitImpl(Serializer& S) const { ObjCIvarRefExpr* ObjCIvarRefExpr::CreateImpl(Deserializer& D, ASTContext& C) { SourceLocation Loc = SourceLocation::ReadVal(D); QualType T = QualType::ReadVal(D); - ObjCIvarRefExpr* dr = new ObjCIvarRefExpr(NULL,NULL,T,Loc); + ObjCIvarRefExpr* dr = new ObjCIvarRefExpr(NULL,T,Loc); D.ReadPtr(dr->D,false); return dr; } diff --git a/lib/CodeGen/CGExpr.cpp b/lib/CodeGen/CGExpr.cpp index 31b63d1fbc..59d7108e19 100644 --- a/lib/CodeGen/CGExpr.cpp +++ b/lib/CodeGen/CGExpr.cpp @@ -995,8 +995,8 @@ LValue CodeGenFunction::EmitObjCIvarRefLValue(const ObjCIvarRefExpr *E) { CVRQualifiers = BaseExpr->getType().getCVRQualifiers(); } - return EmitLValueForIvar(BaseValue, E->getDecl(), E->getFieldDecl(), - CVRQualifiers); + return EmitLValueForIvar(BaseValue, E->getDecl(), + getContext().getFieldDecl(E), CVRQualifiers); } LValue diff --git a/lib/CodeGen/CGObjC.cpp b/lib/CodeGen/CGObjC.cpp index e419a7b959..b8261a0c9f 100644 --- a/lib/CodeGen/CGObjC.cpp +++ b/lib/CodeGen/CGObjC.cpp @@ -275,9 +275,9 @@ void CodeGenFunction::GenerateObjCSetter(ObjCImplementationDecl *IMP, ParmVarDecl *ArgDecl = OMD->getParamDecl(0); DeclRefExpr Arg(ArgDecl, ArgDecl->getType(), Loc); ObjCInterfaceDecl *OI = IMP->getClassInterface(); - FieldDecl *FD = OI->lookupFieldDeclForIvar(getContext(), Ivar); - ObjCIvarRefExpr IvarRef(Ivar, FD, Ivar->getType(), Loc, &Base, + ObjCIvarRefExpr IvarRef(Ivar, Ivar->getType(), Loc, &Base, true, true); + getContext().setFieldDecl(OI, Ivar, &IvarRef); BinaryOperator Assign(&IvarRef, &Arg, BinaryOperator::Assign, Ivar->getType(), Loc); EmitStmt(&Assign); diff --git a/lib/Sema/SemaExpr.cpp b/lib/Sema/SemaExpr.cpp index 096bcbe37b..3ee601faca 100644 --- a/lib/Sema/SemaExpr.cpp +++ b/lib/Sema/SemaExpr.cpp @@ -418,13 +418,14 @@ Sema::ExprResult Sema::ActOnDeclarationNameExpr(Scope *S, SourceLocation Loc, if (SD == 0 || SD->isDefinedOutsideFunctionOrMethod()) { ObjCInterfaceDecl *IFace = getCurMethodDecl()->getClassInterface(); if (ObjCIvarDecl *IV = IFace->lookupInstanceVariable(II)) { - FieldDecl *FD = IFace->lookupFieldDeclForIvar(Context, IV); // FIXME: This should use a new expr for a direct reference, don't turn // this into Self->ivar, just return a BareIVarExpr or something. IdentifierInfo &II = Context.Idents.get("self"); ExprResult SelfExpr = ActOnIdentifierExpr(S, Loc, II, false); - return new ObjCIvarRefExpr(IV, FD, IV->getType(), Loc, - static_cast<Expr*>(SelfExpr.Val), true, true); + ObjCIvarRefExpr *MRef= new ObjCIvarRefExpr(IV, IV->getType(), Loc, + static_cast<Expr*>(SelfExpr.Val), true, true); + Context.setFieldDecl(IFace, IV, MRef); + return MRef; } } // Needed to implement property "super.method" notation. @@ -1266,9 +1267,11 @@ ActOnMemberReferenceExpr(ExprTy *Base, SourceLocation OpLoc, // (*Obj).ivar. if (const ObjCInterfaceType *IFTy = BaseType->getAsObjCInterfaceType()) { if (ObjCIvarDecl *IV = IFTy->getDecl()->lookupInstanceVariable(&Member)) { - FieldDecl *FD = IFTy->getDecl()->lookupFieldDeclForIvar(Context, IV); - return new ObjCIvarRefExpr(IV, FD, IV->getType(), MemberLoc, BaseExpr, - OpKind == tok::arrow); + ObjCIvarRefExpr *MRef= new ObjCIvarRefExpr(IV, IV->getType(), MemberLoc, + BaseExpr, + OpKind == tok::arrow); + Context.setFieldDecl(IFTy->getDecl(), IV, MRef); + return MRef; } return Diag(MemberLoc, diag::err_typecheck_member_reference_ivar) << IFTy->getDecl()->getDeclName() << &Member |