On Nov 18, 2013, at 4:22 PM, Jordan Rose <[email protected]> wrote:
> > On Nov 18, 2013, at 16:13, Douglas Gregor <[email protected]> wrote: > >> >> 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? > > I don't think so, actually. The only CF type that could represent a class is > the base, CFTypeRef. CoreFoundation objects don't have classes (they have > "type IDs"). That's a good point. Nevermind! - Doug
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
