summaryrefslogtreecommitdiffstats
path: root/test/SemaObjC/attr-designated-init.m
diff options
context:
space:
mode:
Diffstat (limited to 'test/SemaObjC/attr-designated-init.m')
-rw-r--r--test/SemaObjC/attr-designated-init.m28
1 files changed, 27 insertions, 1 deletions
diff --git a/test/SemaObjC/attr-designated-init.m b/test/SemaObjC/attr-designated-init.m
index 0508588478..7d1e7008e8 100644
--- a/test/SemaObjC/attr-designated-init.m
+++ b/test/SemaObjC/attr-designated-init.m
@@ -3,7 +3,7 @@
#define NS_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer))
#define NS_UNAVAILABLE __attribute__((unavailable))
-void fnfoo(void) NS_DESIGNATED_INITIALIZER; // expected-error {{only applies to init methods of interface or class extension declarations}}
+void fnfoo(void) NS_DESIGNATED_INITIALIZER; // expected-error {{'objc_designated_initializer' attribute only applies to Objective-C methods}}
@protocol P1
-(id)init NS_DESIGNATED_INITIALIZER; // expected-error {{only applies to init methods of interface or class extension declarations}}
@@ -389,6 +389,19 @@ __attribute__((objc_root_class))
}
@end
+@interface SubTest1Ext : Test1
+-(instancetype)initWithRequiredParameter:(id)foo NS_DESIGNATED_INITIALIZER;
+@end
+// Mark 'init' as unavailable in the extension to silence warning.
+@interface SubTest1Ext()
+-(instancetype)init NS_UNAVAILABLE;
+@end
+@implementation SubTest1Ext
+-(instancetype)initWithRequiredParameter:(id)foo {
+ return [super init];
+}
+@end
+
@interface Test2 : NSObject
@end
@interface SubTest2 : Test2
@@ -428,3 +441,16 @@ __attribute__((objc_root_class))
@interface CategoryForMissingInterface(Cat) // expected-error{{cannot find interface declaration}}
- (instancetype)init NS_DESIGNATED_INITIALIZER; // expected-error{{only applies to init methods of interface or class extension declarations}}
@end
+
+@interface TwoAttrs
+-(instancetype)foo
+ __attribute__((objc_designated_initializer))
+ __attribute__((objc_method_family(init)));
+-(instancetype)bar
+ __attribute__((objc_method_family(init)))
+ __attribute__((objc_designated_initializer));
+-(instancetype)baz
+ __attribute__((objc_designated_initializer, objc_method_family(init)));
+-(instancetype)quux
+ __attribute__((objc_method_family(init), objc_designated_initializer));
+@end