xref: /aosp_15_r20/external/clang/test/SemaObjCXX/arc-objc-lifetime.mm (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li// RUN: %clang_cc1 -x objective-c++ -triple x86_64-apple-darwin11 -fsyntax-only -fobjc-arc -fblocks -Wexplicit-ownership-type -verify -Wno-objc-root-class %s
2*67e74705SXin Li// rdar://10244607
3*67e74705SXin Li
4*67e74705SXin Litypedef const struct __CFString * CFStringRef;
5*67e74705SXin Li@class NSString;
6*67e74705SXin Li
7*67e74705SXin LiNSString *CFBridgingRelease();
8*67e74705SXin Li
9*67e74705SXin Litypedef NSString * PNSString;
10*67e74705SXin Li
11*67e74705SXin Litypedef __autoreleasing NSString * AUTORELEASEPNSString;
12*67e74705SXin Li
13*67e74705SXin Li@interface I @end
14*67e74705SXin Li
15*67e74705SXin Li@implementation I
16*67e74705SXin Li- (CFStringRef)myString
17*67e74705SXin Li{
18*67e74705SXin Li    CFStringRef myString =
19*67e74705SXin Li      (__bridge CFStringRef) (__strong NSString *)CFBridgingRelease(); // expected-error {{explicit ownership qualifier on cast result has no effect}}
20*67e74705SXin Li
21*67e74705SXin Li    myString =
22*67e74705SXin Li      (__bridge CFStringRef) (__autoreleasing PNSString) CFBridgingRelease(); // expected-error {{explicit ownership qualifier on cast result has no effect}}
23*67e74705SXin Li    myString =
24*67e74705SXin Li      (__bridge CFStringRef) (AUTORELEASEPNSString) CFBridgingRelease(); // OK
25*67e74705SXin Li    myString =
26*67e74705SXin Li      (__bridge CFStringRef) (typeof(__strong NSString *)) CFBridgingRelease(); // expected-error {{explicit ownership qualifier on cast result has no effect}}
27*67e74705SXin Li    return myString;
28*67e74705SXin Li}
29*67e74705SXin Li
30*67e74705SXin Li- (void)decodeValueOfObjCType:(const char *)type at:(void *)addr {
31*67e74705SXin Li        __autoreleasing id *stuff = (__autoreleasing id *)addr;
32*67e74705SXin Li}
33*67e74705SXin Li@end
34*67e74705SXin Li
35*67e74705SXin Li// rdar://problem/10711456
36*67e74705SXin Li__strong I *__strong test1; // expected-error {{the type 'I *__strong' is already explicitly ownership-qualified}}
37*67e74705SXin Li__strong I *(__strong test2); // expected-error {{the type 'I *__strong' is already explicitly ownership-qualified}}
38*67e74705SXin Li__strong I *(__strong (test3)); // expected-error {{the type 'I *__strong' is already explicitly ownership-qualified}}
39*67e74705SXin Li__unsafe_unretained __typeof__(test3) test4;
40*67e74705SXin Litypedef __strong I *strong_I;
41*67e74705SXin Li__unsafe_unretained strong_I test5;
42*67e74705SXin Li
43*67e74705SXin Li// rdar://10907090
44*67e74705SXin Litypedef void (^T) ();
45*67e74705SXin Li@interface NSObject @end
46*67e74705SXin Li@protocol P;
47*67e74705SXin Li@interface Radar10907090 @end
48*67e74705SXin Li
49*67e74705SXin Li@implementation Radar10907090
50*67e74705SXin Li- (void) MMM : (NSObject*) arg0 : (NSObject<P>*&)arg : (id) arg1 : (id<P>&) arg2 {} // expected-warning {{method parameter of type 'NSObject<P> *__autoreleasing &' with no explicit ownership}} \
51*67e74705SXin Li					// expected-warning {{method parameter of type '__autoreleasing id<P> &' with no explicit ownership}}
52*67e74705SXin Li- (void) MM : (NSObject*) arg0 : (__strong NSObject**)arg : (id) arg1 : (__strong id*) arg2 {}
53*67e74705SXin Li- (void) M : (NSObject**)arg0 : (id*)arg {} // expected-warning {{method parameter of type 'NSObject *__autoreleasing *' with no explicit ownership}} \
54*67e74705SXin Li                                            // expected-warning {{method parameter of type '__autoreleasing id *' with no explicit ownership}}
55*67e74705SXin Li- (void) N : (__strong NSObject***) arg0 : (__strong NSObject<P>***)arg : (float**) arg1 : (double) arg2 {}
56*67e74705SXin Li- (void) BLOCK : (T&) arg0 : (T)arg  : (__strong T*) arg1 {} // expected-warning {{method parameter of type '__autoreleasing T &' (aka 'void (^__autoreleasing &)()') with no explicit ownership}}
57*67e74705SXin Li@end
58*67e74705SXin Li
59*67e74705SXin Li// rdar://12280826
60*67e74705SXin Li@class NSMutableDictionary, NSError;
61*67e74705SXin Li@interface Radar12280826
62*67e74705SXin Li- (void)createInferiorTransportAndSetEnvironment:(NSMutableDictionary*)environment error:(__autoreleasing NSError*&)error;
63*67e74705SXin Li@end
64*67e74705SXin Li
65*67e74705SXin Li@implementation Radar12280826
66*67e74705SXin Li- (void)createInferiorTransportAndSetEnvironment:(NSMutableDictionary*)environment error:(__autoreleasing NSError*&)error {}
67*67e74705SXin Li@end
68*67e74705SXin Li
69