diff options
author | Fariborz Jahanian <fjahanian@apple.com> | 2013-11-16 23:22:37 +0000 |
---|---|---|
committer | Fariborz Jahanian <fjahanian@apple.com> | 2013-11-16 23:22:37 +0000 |
commit | 2c312128275b46f2cd07aba787f8cddd397d610a (patch) | |
tree | da5fc2584b7673cda3be766b5f82efcf2685eafa /clang | |
parent | 565acf92787b8bdfaeb6ecc3d0aa609551cd292b (diff) | |
download | bcm5719-llvm-2c312128275b46f2cd07aba787f8cddd397d610a.tar.gz bcm5719-llvm-2c312128275b46f2cd07aba787f8cddd397d610a.zip |
ObjectiveC ARC. More validation of toll-free bridging of
CF objects with objc_bridge'ing annotaiton.
// rdar://15454846
llvm-svn: 194938
Diffstat (limited to 'clang')
-rw-r--r-- | clang/lib/Sema/SemaExprObjC.cpp | 11 | ||||
-rw-r--r-- | clang/test/SemaObjC/objcbridge-attribute.m | 6 |
2 files changed, 14 insertions, 3 deletions
diff --git a/clang/lib/Sema/SemaExprObjC.cpp b/clang/lib/Sema/SemaExprObjC.cpp index ea1f2a98e3d..b59e0a62381 100644 --- a/clang/lib/Sema/SemaExprObjC.cpp +++ b/clang/lib/Sema/SemaExprObjC.cpp @@ -3190,7 +3190,11 @@ static bool CheckObjCBridgeNSCast(Sema &S, QualType castType, Expr *castExpr) { 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 &S, QualType castType, Expr *castExpr) { << 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; } } } diff --git a/clang/test/SemaObjC/objcbridge-attribute.m b/clang/test/SemaObjC/objcbridge-attribute.m index d961528ebde..d39861f0613 100644 --- a/clang/test/SemaObjC/objcbridge-attribute.m +++ b/clang/test/SemaObjC/objcbridge-attribute.m @@ -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'}} } |