// RUN: %clang_cc1 -analyze -analyzer-checker=core,osx.cocoa.ObjCGenerics -verify %s #if !__has_feature(objc_generics) # error Compiler does not support Objective-C generics? #endif #define nil 0 typedef unsigned long NSUInteger; typedef int BOOL; @protocol NSCopying @end __attribute__((objc_root_class)) @interface NSObject - (void) myFunction:(int*)p myParam:(int) n; @end @interface MyType : NSObject - (void) myFunction:(int*)p myParam:(int) n; @end @interface NSArray : NSObject - (BOOL)contains:(ObjectType)obj; - (ObjectType)getObjAtIndex:(NSUInteger)idx; - (ObjectType)objectAtIndexedSubscript:(NSUInteger)idx; @property(readonly) ObjectType firstObject; @end @implementation NSObject - (void) myFunction:(int*)p myParam:(int) n { (void)*p;// no warning } @end @implementation MyType - (void) myFunction:(int*)p myParam:(int) n { int i = 5/n; // expected-warning {{}} (void)i; } @end void testReturnType(NSArray *arr) { NSArray *erased = arr; NSObject *element = [erased firstObject]; // TODO: myFunction currently dispatches to NSObject. Make it dispatch to // MyType instead! [element myFunction:0 myParam:0 ]; } void testArgument(NSArray *arr, id element) { NSArray *erased = arr; [erased contains: element]; // TODO: myFunction currently is not dispatched to MyType. Make it dispatch to // MyType! [element myFunction:0 myParam:0 ]; }