summaryrefslogtreecommitdiffstats
path: root/clang/test/SemaObjC/conditional-expr.m
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2008-07-26 00:57:24 +0000
committerChris Lattner <sabre@nondot.org>2008-07-26 00:57:24 +0000
commit89026888ef6f80b5e271c3d08666001f998eca74 (patch)
tree4db64af10923c54338f7f15966720bbe19e51eee /clang/test/SemaObjC/conditional-expr.m
parenta075e63bbca031f3d5794e888252cab265cc058c (diff)
downloadbcm5719-llvm-89026888ef6f80b5e271c3d08666001f998eca74.tar.gz
bcm5719-llvm-89026888ef6f80b5e271c3d08666001f998eca74.zip
move all objc sema tests into a new SemaObjC directory. Next step is to
remove the objc- prefix from the tests that use it. llvm-svn: 54084
Diffstat (limited to 'clang/test/SemaObjC/conditional-expr.m')
-rw-r--r--clang/test/SemaObjC/conditional-expr.m44
1 files changed, 44 insertions, 0 deletions
diff --git a/clang/test/SemaObjC/conditional-expr.m b/clang/test/SemaObjC/conditional-expr.m
new file mode 100644
index 00000000000..e3cd041d3a5
--- /dev/null
+++ b/clang/test/SemaObjC/conditional-expr.m
@@ -0,0 +1,44 @@
+// RUN: clang -fsyntax-only -verify -pedantic %s
+@protocol NSObject
+@end
+
+@protocol DTOutputStreams <NSObject>
+@end
+
+@interface DTFilterOutputStream <DTOutputStreams>
+- nextOutputStream;
+@end
+
+@implementation DTFilterOutputStream
+- (id)initWithNextOutputStream:(id <DTOutputStreams>) outputStream {
+ id <DTOutputStreams> nextOutputStream = [self nextOutputStream];
+ self = nextOutputStream;
+ return nextOutputStream ? nextOutputStream : self;
+}
+- nextOutputStream {
+ return self;
+}
+@end
+
+@interface DTFilterOutputStream2
+- nextOutputStream;
+@end
+
+@implementation DTFilterOutputStream2 // expected-warning {{incomplete implementation}} expected-warning {{method definition for 'nextOutputStream' not found}}
+- (id)initWithNextOutputStream:(id <DTOutputStreams>) outputStream {
+ id <DTOutputStreams> nextOutputStream = [self nextOutputStream];
+ // GCC warns about both of these.
+ self = nextOutputStream; // expected-error {{incompatible type assigning 'id<DTOutputStreams>', expected 'DTFilterOutputStream2 *'}}
+ return nextOutputStream ? nextOutputStream : self; // expected-error {{incompatible operand types ('id<DTOutputStreams>' and 'DTFilterOutputStream2 *')}}
+}
+@end
+
+// No @interface declaration for DTFilterOutputStream3
+@implementation DTFilterOutputStream3 // expected-warning {{cannot find interface declaration for 'DTFilterOutputStream3'}}
+- (id)initWithNextOutputStream:(id <DTOutputStreams>) outputStream {
+ id <DTOutputStreams> nextOutputStream = [self nextOutputStream];
+ // GCC warns about both of these as well (no errors).
+ self = nextOutputStream; // expected-error {{incompatible type assigning 'id<DTOutputStreams>', expected 'DTFilterOutputStream3 *'}}
+ return nextOutputStream ? nextOutputStream : self; // expected-error {{incompatible operand types ('id<DTOutputStreams>' and 'DTFilterOutputStream3 *')}}
+}
+@end
OpenPOWER on IntegriCloud