brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.3 KiB · 1e140e8 Raw
50 lines · plain
1// RUN: %clang_cc1 -triple x86_64-apple-darwin11 -fsyntax-only -fobjc-arc -verify %s2 3@interface NSObject4- (id)copy; // expected-note {{method 'copy' declared here}}5- (id) test __attribute__((ns_returns_retained)); // expected-note {{method 'test' declared here}}6+ (id) new ; // expected-note {{method 'new' declared here}}7- (id) init __attribute__((ns_returns_not_retained));8- (id)PlusZero;9- (id)PlusOne __attribute__((ns_returns_retained)); // expected-note {{method 'PlusOne' declared here}}10- (id)self;11@end12 13@interface I : NSObject14{15  SEL sel1;16}17- (id)performSelector:(SEL)aSelector;18- (id)performSelector:(SEL)aSelector withObject:(id)object;19- (id)performSelector:(SEL)aSelector withObject:(id)object1 withObject:(id)object2;20 21- (void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(double)delay inModes:(I *)modes;22 23@end24 25@implementation I26- (id) Meth {27  return [self performSelector : @selector(copy)]; // expected-error {{performSelector names a selector which retains the object}}28  return [self performSelector : @selector(test)]; // expected-error {{performSelector names a selector which retains the object}}29  return [self performSelector : @selector(new)]; // expected-error {{performSelector names a selector which retains the object}}30  return [self performSelector : @selector(init)];31  return [self performSelector : sel1]; // expected-warning {{performSelector may cause a leak because its selector is unknown}} \32					// expected-note {{used here}}33  return [self performSelector: (@selector(PlusZero))];34 35  return [self performSelector : @selector(PlusZero)];36  return [self performSelector : @selector(PlusOne)]; // expected-error {{performSelector names a selector which retains the object}}37 38  // Avoid the unknown selector warning for more complicated performSelector39  // variations because it produces too many false positives.40  [self performSelector: sel1 withObject:0 afterDelay:0 inModes:0];41 42  return [self performSelector: @selector(self)]; // No error, -self is not +1!43}44 45- (id)performSelector:(SEL)aSelector { return 0; }46- (id)performSelector:(SEL)aSelector withObject:(id)object { return 0; }47- (id)performSelector:(SEL)aSelector withObject:(id)object1 withObject:(id)object2 { return 0; }48- (void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(double)delay inModes:(I *)modes { }49@end50