brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.1 KiB · 1f96844 Raw
89 lines · plain
1// RUN: %clang_cc1 -fsyntax-only -verify %s2// expected-no-diagnostics3 4@protocol NSObject @end5@interface NSObject6- (id)init;7- (id) alloc;8- (id) autorelease;9@end10 11template<class T>12class TNSAutoRef13{14public:15	TNSAutoRef(T t)16		:	fRef(t)17		{ }18 19	~TNSAutoRef()20		{ }21 22	operator T() const23		{ return fRef; }24 25private:26	T fRef;27};28 29 30#pragma mark -31 32 33@protocol TFooProtocol <NSObject>34 35- (void) foo;36@end37 38 39#pragma mark -40 41 42@interface TFoo : NSObject43 44- (void) setBlah: (id<TFooProtocol>)blah;45@end46 47 48#pragma mark -49 50 51@implementation TFoo52 53- (void) setBlah: (id<TFooProtocol>)blah54	{ }55@end56 57 58#pragma mark -59 60 61@interface TBar : NSObject62 63- (void) setBlah: (id)blah;64@end65 66#pragma mark -67 68 69@implementation TBar70 71- (void) setBlah: (id)blah72	{ }73@end74 75 76#pragma mark -77 78 79int main (int argc, const char * argv[]) {80 81	NSObject* object1 = [[[NSObject alloc] init] autorelease];82	TNSAutoRef<NSObject*> object2([[NSObject alloc] init]);83	TNSAutoRef<TBar*> bar([[TBar alloc] init]);84	[bar setBlah: object1];				// <== Does not compile.  It should.85        if (object1 == object2)86	  [bar setBlah: object2];				// <== Does not compile.  It should.87	return 0;88}89