diff options
Diffstat (limited to 'clang/lib')
-rw-r--r-- | clang/lib/Sema/Sema.h | 5 | ||||
-rw-r--r-- | clang/lib/Sema/SemaExpr.cpp | 4 | ||||
-rw-r--r-- | clang/lib/Sema/SemaExprObjC.cpp | 18 |
3 files changed, 10 insertions, 17 deletions
diff --git a/clang/lib/Sema/Sema.h b/clang/lib/Sema/Sema.h index 989215948b8..d6476be685f 100644 --- a/clang/lib/Sema/Sema.h +++ b/clang/lib/Sema/Sema.h @@ -3847,10 +3847,9 @@ public: Action::OwningExprResult HandleExprPropertyRefExpr(const ObjCObjectPointerType *OPT, - Expr *&BaseExpr, bool &IsArrow, + Expr *BaseExpr, DeclarationName MemberName, - SourceLocation MemberLoc, SourceLocation OpLoc, - CXXScopeSpec &SS, DeclPtrTy ObjCImpDecl); + SourceLocation MemberLoc); virtual OwningExprResult ActOnClassPropertyRefExpr( IdentifierInfo &receiverName, diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp index c350bb9a781..c173705be55 100644 --- a/clang/lib/Sema/SemaExpr.cpp +++ b/clang/lib/Sema/SemaExpr.cpp @@ -3143,9 +3143,7 @@ Sema::LookupMemberExpr(LookupResult &R, Expr *&BaseExpr, if (!IsArrow) if (const ObjCObjectPointerType *OPT = BaseType->getAsObjCInterfacePointerType()) - return HandleExprPropertyRefExpr(OPT, BaseExpr, IsArrow, - MemberName, MemberLoc, - OpLoc, SS, ObjCImpDecl); + return HandleExprPropertyRefExpr(OPT, BaseExpr, MemberName, MemberLoc); // Handle the following exceptional case (*Obj).isa. if (!IsArrow && diff --git a/clang/lib/Sema/SemaExprObjC.cpp b/clang/lib/Sema/SemaExprObjC.cpp index 86d69388e22..327e294f36d 100644 --- a/clang/lib/Sema/SemaExprObjC.cpp +++ b/clang/lib/Sema/SemaExprObjC.cpp @@ -294,11 +294,8 @@ ObjCMethodDecl *Sema::LookupPrivateInstanceMethod(Selector Sel, /// objective C interface. This is a property reference expression. Action::OwningExprResult Sema:: HandleExprPropertyRefExpr(const ObjCObjectPointerType *OPT, - Expr *&BaseExpr, bool &IsArrow, - DeclarationName MemberName, - SourceLocation MemberLoc, SourceLocation OpLoc, - CXXScopeSpec &SS, DeclPtrTy ObjCImpDecl) { - assert(!IsArrow && "Should only be called with '.' expressions"); + Expr *BaseExpr, DeclarationName MemberName, + SourceLocation MemberLoc) { const ObjCInterfaceType *IFaceT = OPT->getInterfaceType(); ObjCInterfaceDecl *IFace = IFaceT->getDecl(); IdentifierInfo *Member = MemberName.getAsIdentifierInfo(); @@ -377,23 +374,22 @@ HandleExprPropertyRefExpr(const ObjCObjectPointerType *OPT, LookupResult Res(*this, MemberName, MemberLoc, LookupOrdinaryName); if (CorrectTypo(Res, 0, 0, IFace, false, OPT) && Res.getAsSingle<ObjCPropertyDecl>()) { + DeclarationName TypoResult = Res.getLookupName(); Diag(MemberLoc, diag::err_property_not_found_suggest) - << MemberName << QualType(OPT, 0) << Res.getLookupName() - << FixItHint::CreateReplacement(MemberLoc, - Res.getLookupName().getAsString()); + << MemberName << QualType(OPT, 0) << TypoResult + << FixItHint::CreateReplacement(MemberLoc, TypoResult.getAsString()); ObjCPropertyDecl *Property = Res.getAsSingle<ObjCPropertyDecl>(); Diag(Property->getLocation(), diag::note_previous_decl) << Property->getDeclName(); - - return LookupMemberExpr(Res, BaseExpr, IsArrow, OpLoc, SS, ObjCImpDecl); + return HandleExprPropertyRefExpr(OPT, BaseExpr, TypoResult, MemberLoc); } + Diag(MemberLoc, diag::err_property_not_found) << MemberName << QualType(OPT, 0); if (Setter && !Getter) Diag(Setter->getLocation(), diag::note_getter_unavailable) << MemberName << BaseExpr->getSourceRange(); return ExprError(); - } |