aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/obj-c++.dg/protocol-optional-1.mm
diff options
context:
space:
mode:
authorNicola Pero <nicola.pero@meta-innovation.com>2010-11-17 01:01:49 +0000
committerNicola Pero <nicola@gcc.gnu.org>2010-11-17 01:01:49 +0000
commit354d8ce1084fadee6f9761fb6b1d1dd897b69ef4 (patch)
treec5e43cfa2e004941e7921046bb7a9dcefad68617 /gcc/testsuite/obj-c++.dg/protocol-optional-1.mm
parent109a508a0af670a6b7e927d73661d9412c31c2ef (diff)
downloadgcc-354d8ce1084fadee6f9761fb6b1d1dd897b69ef4.zip
gcc-354d8ce1084fadee6f9761fb6b1d1dd897b69ef4.tar.gz
gcc-354d8ce1084fadee6f9761fb6b1d1dd897b69ef4.tar.bz2
In gcc/objc/: 2010-11-17 Nicola Pero <nicola.pero@meta-innovation.com>
In gcc/objc/: 2010-11-17 Nicola Pero <nicola.pero@meta-innovation.com> * objc-act.c (lookup_method_in_protocol_list): Search methods in PROTOCOL_OPTIONAL_CLS_METHODS / PROTOCOL_OPTIONAL_NST_METHODS if they are not found in PROTOCOL_CLS_METHODS / PROTOCOL_NST_METHODS. In gcc/testsuite/: 2010-11-17 Nicola Pero <nicola.pero@meta-innovation.com> * objc.dg/protocol-optional-1.m: New. * obj-c++.dg/protocol-optional-1.mm: New. From-SVN: r166847
Diffstat (limited to 'gcc/testsuite/obj-c++.dg/protocol-optional-1.mm')
-rw-r--r--gcc/testsuite/obj-c++.dg/protocol-optional-1.mm48
1 files changed, 48 insertions, 0 deletions
diff --git a/gcc/testsuite/obj-c++.dg/protocol-optional-1.mm b/gcc/testsuite/obj-c++.dg/protocol-optional-1.mm
new file mode 100644
index 0000000..bc4a3d0
--- /dev/null
+++ b/gcc/testsuite/obj-c++.dg/protocol-optional-1.mm
@@ -0,0 +1,48 @@
+/* Contributed by Nicola Pero <nicola.pero@meta-innovation.com>, November 2010. */
+/* { dg-do compile } */
+
+#include <objc/objc.h>
+
+/* Test that @optional for @protocol works. */
+
+@protocol MyProtocol
++ (int)classMethod;
+- (int)method;
+@optional
++ (int)optionalClassMethod;
+- (int)optionalMethod;
+@end
+
+@interface MyRootClass <MyProtocol>
+@end
+
+/* The implementation implements both the @required methods, but none
+ of the @optional ones. There should be no warnings as the
+ @optional methods are optional. ;-) */
+@implementation MyRootClass
++ (int)classMethod
+{
+ return 20;
+}
+- (int)method
+{
+ return 11;
+}
+@end
+
+int function (id <MyProtocol> object1,
+ MyRootClass *object2)
+{
+ /* Test that there are no warnings if you try to use an @optional
+ method with an object of the class. */
+ int i = 0;
+
+ i += [object1 method];
+ i += [object2 method];
+ i += [MyRootClass classMethod];
+ i += [object1 optionalMethod];
+ i += [object2 optionalMethod];
+ i += [MyRootClass optionalClassMethod];
+
+ return i;
+}