aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.9/gcc/testsuite/obj-c++.dg/private-1.mm
diff options
context:
space:
mode:
Diffstat (limited to 'gcc-4.9/gcc/testsuite/obj-c++.dg/private-1.mm')
-rw-r--r--gcc-4.9/gcc/testsuite/obj-c++.dg/private-1.mm58
1 files changed, 58 insertions, 0 deletions
diff --git a/gcc-4.9/gcc/testsuite/obj-c++.dg/private-1.mm b/gcc-4.9/gcc/testsuite/obj-c++.dg/private-1.mm
new file mode 100644
index 000000000..0c25aea55
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/obj-c++.dg/private-1.mm
@@ -0,0 +1,58 @@
+/* Test errors for accessing @private and @protected variables. */
+/* Based on work by: Nicola Pero <nicola@brainstorm.co.uk>. */
+/* { dg-do compile } */
+#include <objc/objc.h>
+
+@interface MySuperClass
+{
+@private
+ int _private;
+
+@protected
+ int _protected;
+
+@public
+ int _public;
+}
+- (void) test;
+@end
+
+@implementation MySuperClass
+- (void) test
+{
+ _private = 12; /* Ok */
+ _protected = 12; /* Ok */
+ _public = 12; /* Ok */
+}
+@end
+
+
+@interface MyClass : MySuperClass
+@end
+
+@implementation MyClass
+- (void) test
+{
+ /* Private variables simply don't exist in the subclass. */
+ _private = 12; /* { dg-error "instance variable \\'_private\\' is declared private" } */
+
+ _protected = 12; /* Ok */
+ _public = 12; /* Ok */
+}
+@end
+
+int main (void)
+{
+ MyClass *m = nil;
+
+ if (m != nil)
+ {
+ int access;
+
+ access = m->_private; /* { dg-warning "is @private" } */
+ access = m->_protected; /* { dg-warning "is @protected" } */
+ access = m->_public; /* Ok */
+ }
+
+ return 0;
+}