summaryrefslogtreecommitdiffstats
path: root/clang/test/SemaObjC/objcbridge-attribute.m
diff options
context:
space:
mode:
authorFariborz Jahanian <fjahanian@apple.com>2013-11-20 19:01:50 +0000
committerFariborz Jahanian <fjahanian@apple.com>2013-11-20 19:01:50 +0000
commit91fb0be96a34950573780cc8b5db99cd21da5b52 (patch)
tree4e535156798dcee07930806d8a6fca1b23408d7a /clang/test/SemaObjC/objcbridge-attribute.m
parentbeee345ab016d3eecded48517cb4c075010af558 (diff)
downloadbcm5719-llvm-91fb0be96a34950573780cc8b5db99cd21da5b52.tar.gz
bcm5719-llvm-91fb0be96a34950573780cc8b5db99cd21da5b52.zip
ObjectiveC ARC. Better checking of toll free briding
from qualified-id objects to CF types with objc_bridge annotation. // rdar://15454846 llvm-svn: 195264
Diffstat (limited to 'clang/test/SemaObjC/objcbridge-attribute.m')
-rw-r--r--clang/test/SemaObjC/objcbridge-attribute.m24
1 files changed, 24 insertions, 0 deletions
diff --git a/clang/test/SemaObjC/objcbridge-attribute.m b/clang/test/SemaObjC/objcbridge-attribute.m
index c5bf9f843d5..24b7289f8d9 100644
--- a/clang/test/SemaObjC/objcbridge-attribute.m
+++ b/clang/test/SemaObjC/objcbridge-attribute.m
@@ -51,6 +51,7 @@ typedef CFErrorRef1 CFErrorRef2; // expected-note {{declared here}}
@protocol P2 @end
@protocol P3 @end
@protocol P4 @end
+@protocol P5 @end
@interface NSError<P1, P2, P3> @end // expected-note 5 {{declared here}}
@@ -103,3 +104,26 @@ void Test6(id<P1, P2, P3> P123, id ID, id<P1, P2, P3, P4> P1234, id<P1, P2> P12,
(void)(CFMyErrorRef)P12; // expected-warning {{'id<P1,P2>' cannot bridge to 'CFMyErrorRef' (aka 'struct __CFMyErrorRef *')}}
(void)(CFMyErrorRef)P23; // expected-warning {{'id<P2,P3>' cannot bridge to 'CFMyErrorRef' (aka 'struct __CFMyErrorRef *')}}
}
+
+typedef struct __attribute__ ((objc_bridge(MyPersonalError))) __CFMyPersonalErrorRef * CFMyPersonalErrorRef; // expected-note 4 {{declared here}}
+
+@interface MyPersonalError : NSError <P4> // expected-note 4 {{declared here}}
+@end
+
+void Test7(id<P1, P2, P3> P123, id ID, id<P1, P2, P3, P4> P1234, id<P1, P2> P12, id<P2, P3> P23) {
+ (void)(CFMyPersonalErrorRef)ID; // ok
+ (void)(CFMyPersonalErrorRef)P123; // expected-warning {{'id<P1,P2,P3>' cannot bridge to 'CFMyPersonalErrorRef' (aka 'struct __CFMyPersonalErrorRef *')}}
+ (void)(CFMyPersonalErrorRef)P1234; // ok
+ (void)(CFMyPersonalErrorRef)P12; // expected-warning {{'id<P1,P2>' cannot bridge to 'CFMyPersonalErrorRef' (aka 'struct __CFMyPersonalErrorRef *')}}
+ (void)(CFMyPersonalErrorRef)P23; // expected-warning {{'id<P2,P3>' cannot bridge to 'CFMyPersonalErrorRef' (aka 'struct __CFMyPersonalErrorRef *')}}
+}
+
+void Test8(CFMyPersonalErrorRef cf) {
+ (void)(id)cf; // ok
+ (void)(id<P1>)cf; // ok
+ (void)(id<P1, P2>)cf; // ok
+ (void)(id<P1, P2, P3>)cf; // ok
+ (void)(id<P1, P2, P3, P4>)cf; // ok
+ (void)(id<P1, P2, P3, P4, P5>)cf; // expected-warning {{'CFMyPersonalErrorRef' (aka 'struct __CFMyPersonalErrorRef *') bridges to MyPersonalError, not 'id<P1,P2,P3,P4,P5>'}}
+}
+
OpenPOWER on IntegriCloud