// RUN: %clang_cc1 -analyze -analyzer-checker=core,experimental.core -analyzer-store=region -verify %s // Test function pointer casts. Currently we track function addresses using // loc::FunctionVal. Because casts can be arbitrary, do we need to model // functions with regions? typedef void* (*MyFuncTest1)(void); MyFuncTest1 test1_aux(void); void test1(void) { void *x; void* (*p)(void); p = ((void*) test1_aux()); if (p != ((void*) 0)) x = (*p)(); } // Test casts from void* to function pointers. Same issue as above: // should we eventually model function pointers using regions? void* test2(void *p) { MyFuncTest1 fp = (MyFuncTest1) p; return (*fp)(); } // <radar://10087620> // A cast from int onjective C property reference to int. typedef signed char BOOL; @protocol NSObject - (BOOL)isEqual:(id)object; @end @interface NSObject <NSObject> {} - (id)init; @end typedef enum { EEOne, EETwo } RDR10087620Enum; @interface RDR10087620 : NSObject { RDR10087620Enum elem; } @property (readwrite, nonatomic) RDR10087620Enum elem; @end static void adium_media_ready_cb(RDR10087620 *InObj) { InObj.elem |= EEOne; }