Why does this only warn under non-GC? Jordan
On Aug 6, 2012, at 16:50 , Fariborz Jahanian <[email protected]> wrote: > Author: fjahanian > Date: Mon Aug 6 18:50:51 2012 > New Revision: 161362 > > URL: http://llvm.org/viewvc/llvm-project?rev=161362&view=rev > Log: > objective-c: Implement gcc's -Wdirect-ivar-access option. > // rdar://6505197 > > Added: > cfe/trunk/test/SemaObjC/warn-direct-ivar-access.m > Modified: > cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td > cfe/trunk/lib/Sema/SemaExpr.cpp > cfe/trunk/lib/Sema/SemaExprMember.cpp > > Modified: cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td?rev=161362&r1=161361&r2=161362&view=diff > ============================================================================== > --- cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td (original) > +++ cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td Mon Aug 6 18:50:51 > 2012 > @@ -5759,6 +5759,8 @@ > def warn_missing_method_return_type : Warning< > "method has no return type specified; defaults to 'id'">, > InGroup<MissingMethodReturnType>, DefaultIgnore; > +def warn_direct_ivar_access : Warning<"instance variable %0 is being " > + "directly accessed">, InGroup<DiagGroup<"direct-ivar-access">>, > DefaultIgnore; > > // Spell-checking diagnostics > def err_unknown_type_or_class_name_suggest : Error< > > Modified: cfe/trunk/lib/Sema/SemaExpr.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExpr.cpp?rev=161362&r1=161361&r2=161362&view=diff > ============================================================================== > --- cfe/trunk/lib/Sema/SemaExpr.cpp (original) > +++ cfe/trunk/lib/Sema/SemaExpr.cpp Mon Aug 6 18:50:51 2012 > @@ -1961,6 +1961,9 @@ > return ExprError(); > > MarkAnyDeclReferenced(Loc, IV); > + if (IV->getType()->isObjCObjectPointerType() && > + getLangOpts().getGC() == LangOptions::NonGC) > + Diag(Loc, diag::warn_direct_ivar_access) << IV->getDeclName(); > return Owned(new (Context) > ObjCIvarRefExpr(IV, IV->getType(), Loc, > SelfExpr.take(), true, true)); > > Modified: cfe/trunk/lib/Sema/SemaExprMember.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExprMember.cpp?rev=161362&r1=161361&r2=161362&view=diff > ============================================================================== > --- cfe/trunk/lib/Sema/SemaExprMember.cpp (original) > +++ cfe/trunk/lib/Sema/SemaExprMember.cpp Mon Aug 6 18:50:51 2012 > @@ -1260,7 +1260,9 @@ > if (DE->getType().getObjCLifetime() == Qualifiers::OCL_Weak) > Diag(DE->getLocation(), diag::error_arc_weak_ivar_access); > } > - > + if (IV->getType()->isObjCObjectPointerType() && > + getLangOpts().getGC() == LangOptions::NonGC) > + Diag(MemberLoc, diag::warn_direct_ivar_access) << IV->getDeclName(); > return Owned(new (Context) ObjCIvarRefExpr(IV, IV->getType(), > MemberLoc, BaseExpr.take(), > IsArrow)); > > Added: cfe/trunk/test/SemaObjC/warn-direct-ivar-access.m > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaObjC/warn-direct-ivar-access.m?rev=161362&view=auto > ============================================================================== > --- cfe/trunk/test/SemaObjC/warn-direct-ivar-access.m (added) > +++ cfe/trunk/test/SemaObjC/warn-direct-ivar-access.m Mon Aug 6 18:50:51 2012 > @@ -0,0 +1,33 @@ > +// RUN: %clang_cc1 -fsyntax-only -Wdirect-ivar-access -verify > -Wno-objc-root-class %s > +// rdar://6505197 > + > +__attribute__((objc_root_class)) @interface MyObject { > +@public > + id _myMaster; > + id _isTickledPink; > +} > +@property(retain) id myMaster; > +@property(assign) id isTickledPink; > +@end > + > +@implementation MyObject > + > +@synthesize myMaster = _myMaster; > +@synthesize isTickledPink = _isTickledPink; > + > +- (void) doSomething { > + _myMaster = _isTickledPink; // expected-warning {{instance variable > '_myMaster' is being directly accessed}} \ > + // expected-warning {{instance variable '_isTickledPink' is being > directly accessed}} > +} > + > +@end > + > +MyObject * foo () > +{ > + MyObject* p=0; > + p.isTickledPink = p.myMaster; // ok > + p->_isTickledPink = (*p)._myMaster; // expected-warning {{instance > variable '_isTickledPink' is being directly accessed}} \ > + // expected-warning {{instance variable '_myMaster' is being > directly accessed}} > + return p->_isTickledPink; // expected-warning {{instance variable > '_isTickledPink' is being directly accessed}} > +} > + > > > _______________________________________________ > cfe-commits mailing list > [email protected] > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
