casts.m revision f7afe4abd29062b1761e06ec22d2e4216c22519e
1// RUN: %clang_cc1 -analyze -analyzer-checker=core,experimental.core -analyzer-store=region -verify %s 2 3// Test function pointer casts. Currently we track function addresses using 4// loc::FunctionVal. Because casts can be arbitrary, do we need to model 5// functions with regions? 6typedef void* (*MyFuncTest1)(void); 7 8MyFuncTest1 test1_aux(void); 9void test1(void) { 10 void *x; 11 void* (*p)(void); 12 p = ((void*) test1_aux()); 13 if (p != ((void*) 0)) x = (*p)(); 14} 15 16// Test casts from void* to function pointers. Same issue as above: 17// should we eventually model function pointers using regions? 18void* test2(void *p) { 19 MyFuncTest1 fp = (MyFuncTest1) p; 20 return (*fp)(); 21} 22 23// <radar://10087620> 24// A cast from int onjective C property reference to int. 25typedef signed char BOOL; 26@protocol NSObject - (BOOL)isEqual:(id)object; @end 27@interface NSObject <NSObject> {} - (id)init; @end 28typedef enum { 29 AIMediaTypeAudio, 30 AIMediaTypeVideo 31} AIMediaType; 32@interface AIMedia : NSObject { 33 AIMediaType mediaType; 34} 35@property (readwrite, nonatomic) AIMediaType mediaType; 36static void 37adium_media_ready_cb(AIMedia *adiumMedia, const char *sid) 38{ 39 adiumMedia.mediaType |= AIMediaTypeVideo; 40} 41@end