summaryrefslogtreecommitdiffstats
path: root/clang/test/SemaObjC/subclassing-restricted-attr.m
diff options
context:
space:
mode:
Diffstat (limited to 'clang/test/SemaObjC/subclassing-restricted-attr.m')
-rw-r--r--clang/test/SemaObjC/subclassing-restricted-attr.m36
1 files changed, 36 insertions, 0 deletions
diff --git a/clang/test/SemaObjC/subclassing-restricted-attr.m b/clang/test/SemaObjC/subclassing-restricted-attr.m
new file mode 100644
index 00000000000..d0db5e452f0
--- /dev/null
+++ b/clang/test/SemaObjC/subclassing-restricted-attr.m
@@ -0,0 +1,36 @@
+// RUN: %clang_cc1 -fsyntax-only -verify -Wno-objc-root-class %s
+// RUN: %clang_cc1 -x objective-c++ -fsyntax-only -verify -Wno-objc-root-class %s
+// rdar://16560476
+
+__attribute__((objc_subclassing_restricted))
+@interface Leaf // okay
+@end
+
+__attribute__((objc_subclassing_restricted))
+@interface SubClassOfLeaf : Leaf // expected-note {{class is declared here}}
+@end
+
+
+@interface SubClass : SubClassOfLeaf // expected-error {{cannot subclass a class that was declared with the 'objc_subclassing_restricted' attribute}}
+@end
+
+__attribute__((objc_root_class))
+@interface PlainRoot
+@end
+
+__attribute__((objc_subclassing_restricted))
+@interface Sub2Class : PlainRoot // okay
+@end
+
+// rdar://28753587
+__attribute__((objc_subclassing_restricted))
+@interface SuperImplClass // expected-note {{class is declared here}}
+@end
+@implementation SuperImplClass
+@end
+
+__attribute__((objc_subclassing_restricted))
+@interface SubImplClass : SuperImplClass
+@end
+@implementation SubImplClass // expected-error {{cannot subclass a class that was declared with the 'objc_subclassing_restricted' attribute}}
+@end
OpenPOWER on IntegriCloud