On Nov 16, 2013, at 3:22 PM, Fariborz Jahanian <[email protected]> wrote:
> Author: fjahanian > Date: Sat Nov 16 17:22:37 2013 > New Revision: 194938 > > URL: http://llvm.org/viewvc/llvm-project?rev=194938&view=rev > Log: > ObjectiveC ARC. More validation of toll-free bridging of > CF objects with objc_bridge'ing annotaiton. > // rdar://15454846 > > Modified: > cfe/trunk/lib/Sema/SemaExprObjC.cpp > cfe/trunk/test/SemaObjC/objcbridge-attribute.m > > Modified: cfe/trunk/lib/Sema/SemaExprObjC.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExprObjC.cpp?rev=194938&r1=194937&r2=194938&view=diff > ============================================================================== > --- cfe/trunk/lib/Sema/SemaExprObjC.cpp (original) > +++ cfe/trunk/lib/Sema/SemaExprObjC.cpp Sat Nov 16 17:22:37 2013 > @@ -3190,7 +3190,11 @@ static bool CheckObjCBridgeNSCast(Sema & > S.Diag(castExpr->getLocStart(), diag::warn_objc_invalid_bridge) > << TDNDecl->getName() << Target->getName() << > CastClass->getName(); > return true; > - } > + } else { > + S.Diag(castExpr->getLocStart(), diag::warn_objc_invalid_bridge) > + << TDNDecl->getName() << Target->getName() << castType; > + return true; > + } > } > } > S.Diag(castExpr->getLocStart(), > diag::err_objc_cf_bridged_not_interface) > @@ -3233,6 +3237,11 @@ static bool CheckObjCBridgeCFCast(Sema & > << ExprClass->getName() << TDNDecl->getName(); > S.Diag(TDNDecl->getLocStart(), diag::note_declared_at); > return true; > + } else { > + S.Diag(castExpr->getLocStart(), > diag::warn_objc_invalid_bridge_to_cf) > + << castExpr->getType() << castType; > + S.Diag(TDNDecl->getLocStart(), diag::note_declared_at); > + return true; > } > } > } > > Modified: cfe/trunk/test/SemaObjC/objcbridge-attribute.m > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaObjC/objcbridge-attribute.m?rev=194938&r1=194937&r2=194938&view=diff > ============================================================================== > --- cfe/trunk/test/SemaObjC/objcbridge-attribute.m (original) > +++ cfe/trunk/test/SemaObjC/objcbridge-attribute.m Sat Nov 16 17:22:37 2013 > @@ -1,7 +1,7 @@ > // RUN: %clang_cc1 -fsyntax-only -fobjc-arc -verify -Wno-objc-root-class %s > // rdar://15454846 > > -typedef struct __CFErrorRef * __attribute__ ((objc_bridge(NSError))) > CFErrorRef; // expected-note {{declared here}} > +typedef struct __CFErrorRef * __attribute__ ((objc_bridge(NSError))) > CFErrorRef; // expected-note 2 {{declared here}} > > typedef struct __CFMyColor * __attribute__((objc_bridge(12))) CFMyColorRef; > // expected-error {{parameter of 'objc_bridge' attribute must be a single > name of an Objective-C class}} > > @@ -48,10 +48,12 @@ typedef CFErrorRef1 CFErrorRef2; > > @class NSString; > > -void Test2(CFErrorRef2 cf, NSError *ns, NSString *str) { > +void Test2(CFErrorRef2 cf, NSError *ns, NSString *str, Class c) { > (void)(NSString *)cf; // expected-warning {{CFErrorRef bridges to NSError, > not NSString}} > (void)(NSError *)cf; // okay > (void)(MyError*)cf; // okay, > (void)(CFErrorRef)ns; // okay > (void)(CFErrorRef)str; // expected-warning {{NSString cannot bridge to > CFErrorRef}} > + (void)(Class)cf; // expected-warning {{CFErrorRef bridges to NSError, not > 'Class'}} > + (void)(CFErrorRef)c; // expected-warning {{'Class' cannot bridge to > 'CFErrorRef’}} ‘Class’ behaves like ‘id’, doesn’t it? Shouldn’t these be accepted without a warning? - Doug > } > > > _______________________________________________ > 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
