1 // RUN: %clang_cc1 -analyze -analyzer-checker=core,alpha.core.DynamicTypeChecker -verify %s 2 3 4 #define nil 0 5 typedef unsigned long NSUInteger; 6 typedef int BOOL; 7 8 @protocol NSObject 9 + (id)alloc; 10 - (id)init; 11 @end 12 13 @protocol NSCopying 14 @end 15 16 __attribute__((objc_root_class)) 17 @interface NSObject <NSObject> 18 @end 19 20 @interface NSString : NSObject <NSCopying> 21 @end 22 23 @interface NSMutableString : NSString 24 @end 25 26 @interface NSNumber : NSObject <NSCopying> 27 @end 28 29 @class MyType; 30 31 void testTypeCheck(NSString* str) { 32 id obj = str; 33 NSNumber *num = obj; // expected-warning {{}} 34 (void)num; 35 } 36 37 void testForwardDeclarations(NSString* str) { 38 id obj = str; 39 // Do not warn, since no information is available wether MyType is a sub or 40 // super class of any other type. 41 MyType *num = obj; // no warning 42 (void)num; 43 } 44