blob: 063ce3275913221c3aeed83240f6ba3f09416f4a [file] [log] [blame]
Fariborz Jahanian3ba60612010-05-13 17:19:25 +00001// RUN: %clang_cc1 -fsyntax-only -verify %s
Andy Gibbs8e8fb3b2012-10-19 12:44:48 +00002// expected-no-diagnostics
Fariborz Jahanian3ba60612010-05-13 17:19:25 +00003// rdar: // 7963410
4
5@protocol NSObject @end
6@interface NSObject
7- (id)init;
8- (id) alloc;
9- (id) autorelease;
10@end
11
12template<class T>
13class TNSAutoRef
14{
15public:
16 TNSAutoRef(T t)
17 : fRef(t)
18 { }
19
20 ~TNSAutoRef()
21 { }
22
23 operator T() const
24 { return fRef; }
25
26private:
27 T fRef;
28};
29
30
31#pragma mark -
32
33
34@protocol TFooProtocol <NSObject>
35
36- (void) foo;
37@end
38
39
40#pragma mark -
41
42
43@interface TFoo : NSObject
44
45- (void) setBlah: (id<TFooProtocol>)blah;
46@end
47
48
49#pragma mark -
50
51
52@implementation TFoo
53
54- (void) setBlah: (id<TFooProtocol>)blah
55 { }
56@end
57
58
59#pragma mark -
60
61
62@interface TBar : NSObject
63
64- (void) setBlah: (id)blah;
65@end
66
67#pragma mark -
68
69
70@implementation TBar
71
72- (void) setBlah: (id)blah
73 { }
74@end
75
76
77#pragma mark -
78
79
80int main (int argc, const char * argv[]) {
81
82 NSObject* object1 = [[[NSObject alloc] init] autorelease];
83 TNSAutoRef<NSObject*> object2([[NSObject alloc] init]);
84 TNSAutoRef<TBar*> bar([[TBar alloc] init]);
85 [bar setBlah: object1]; // <== Does not compile. It should.
Fariborz Jahanian648d2002010-08-21 00:17:33 +000086 if (object1 == object2)
87 [bar setBlah: object2]; // <== Does not compile. It should.
Fariborz Jahanian3ba60612010-05-13 17:19:25 +000088 return 0;
89}