On Aug 7, 2012, at 4:48 PM, Fariborz Jahanian <[email protected]> wrote:
> Author: fjahanian > Date: Tue Aug 7 18:48:10 2012 > New Revision: 161458 > > URL: http://llvm.org/viewvc/llvm-project?rev=161458&view=rev > Log: > objc-arc: Make -Wdirect-ivar-access accessible to all > memory models, except when arc is accessing a weak > ivar (which is an error). // rdar://6505197 Thanks! One last question… > Modified: cfe/trunk/lib/Sema/SemaExpr.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExpr.cpp?rev=161458&r1=161457&r2=161458&view=diff > ============================================================================== > --- cfe/trunk/lib/Sema/SemaExpr.cpp (original) > +++ cfe/trunk/lib/Sema/SemaExpr.cpp Tue Aug 7 18:48:10 2012 > @@ -1961,9 +1961,7 @@ > return ExprError(); > > MarkAnyDeclReferenced(Loc, IV); > - if (IV->getType()->isObjCObjectPointerType() && > - getLangOpts().getGC() == LangOptions::NonGC && > - !getLangOpts().ObjCAutoRefCount) { > + if (IV->getType()->isObjCObjectPointerType()) { > ObjCMethodFamily MF = CurMethod->getMethodFamily(); > if (MF != OMF_init && MF != OMF_dealloc && MF != OMF_finalize) > Diag(Loc, diag::warn_direct_ivar_access) << IV->getDeclName(); > > Modified: cfe/trunk/lib/Sema/SemaExprMember.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExprMember.cpp?rev=161458&r1=161457&r2=161458&view=diff > ============================================================================== > --- cfe/trunk/lib/Sema/SemaExprMember.cpp (original) > +++ cfe/trunk/lib/Sema/SemaExprMember.cpp Tue Aug 7 18:48:10 2012 > @@ -1250,6 +1250,7 @@ > << IV->getDeclName(); > } > } > + bool warn = true; > if (getLangOpts().ObjCAutoRefCount) { > Expr *BaseExp = BaseExpr.get()->IgnoreParenImpCasts(); > if (UnaryOperator *UO = dyn_cast<UnaryOperator>(BaseExp)) > @@ -1257,13 +1258,12 @@ > BaseExp = UO->getSubExpr()->IgnoreParenCasts(); > > if (DeclRefExpr *DE = dyn_cast<DeclRefExpr>(BaseExp)) > - if (DE->getType().getObjCLifetime() == Qualifiers::OCL_Weak) > + if (DE->getType().getObjCLifetime() == Qualifiers::OCL_Weak) { > Diag(DE->getLocation(), diag::error_arc_weak_ivar_access); > + warn = false; > + } > } > - if (IV->getType()->isObjCObjectPointerType() && > - getLangOpts().getGC() == LangOptions::NonGC && > - !getLangOpts().ObjCAutoRefCount) { > - bool warn = true; > + if (warn && IV->getType()->isObjCObjectPointerType()) { > if (ObjCMethodDecl *MD = getCurMethodDecl()) { > ObjCMethodFamily MF = MD->getMethodFamily(); > warn = (MF != OMF_init && MF != OMF_dealloc && In both cases, why do we restrict this warning to ivars of Objective-C pointer type? Direct ivar access to an 'int' ivar is still direct access to an ivar, when one should presumably go through a property or method. - Doug _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
