[InstCombine] Preserve NSW flags for `lshr (mul nuw X, C1), C2 -> mul nuw nsw X,...
[llvm-project.git] / clang / test / SemaObjC / infer-availability-from-init.m
blob0c16708f20d052d9294cbc9610e356a2fd8adbca
1 // RUN: %clang_cc1 -triple x86_64-apple-macosx-10.9 -Wunguarded-availability -fblocks -fsyntax-only -verify %s
3 __attribute__((objc_root_class))
4 @interface NSObject
5 +(instancetype)new;
6 -(instancetype)init;
7 @end
9 @interface MyObject : NSObject
10 -(instancetype)init __attribute__((unavailable)); // expected-note{{'init' has been explicitly marked unavailable here}}
11 @end
13 void usemyobject(void) {
14   [MyObject new]; // expected-error{{'new' is unavailable}}
17 @interface MyOtherObject : NSObject
18 +(instancetype)init __attribute__((unavailable));
19 +(instancetype)new;
20 @end
22 void usemyotherobject(void) {
23   [MyOtherObject new]; // no error; new is overrideen.
26 @interface NotGoodOverride : NSObject
27 +(instancetype)init __attribute__((unavailable));
28 -(instancetype)new;
29 +(instancetype)new: (int)x;
30 @end
32 void usenotgoodoverride(void) {
33   [NotGoodOverride new]; // no error
36 @interface NotNSObject
37 +(instancetype)new;
38 -(instancetype)init;
39 @end
41 @interface NotMyObject : NotNSObject
42 -(instancetype)init __attribute__((unavailable));
43 @end
45 void usenotmyobject(void) {
46   [NotMyObject new]; // no error; this isn't NSObject
49 @interface FromSelf : NSObject
50 -(instancetype)init __attribute__((unavailable));
51 +(FromSelf*)another_one;
52 @end
54 @implementation FromSelf
55 +(FromSelf*)another_one {
56   [self new];
58 @end
60 @interface NoInit : NSObject
61 -(instancetype)init __attribute__((unavailable)); // expected-note {{'init' has been explicitly marked unavailable here}}
62 @end
64 @interface NoInitSub : NoInit @end
66 @implementation NoInitSub
67 -(void)meth:(Class)c {
68   [c new]; // No error; unknown interface.
69   [NoInitSub new]; // expected-error {{'new' is unavailable}}
71 @end