1*67e74705SXin Li// RUN: %clang_cc1 -analyze -analyzer-checker=core,alpha.core -analyzer-store=region -verify %s 2*67e74705SXin Li// expected-no-diagnostics 3*67e74705SXin Li 4*67e74705SXin Li// Test function pointer casts. 5*67e74705SXin Litypedef void* (*MyFuncTest1)(void); 6*67e74705SXin Li 7*67e74705SXin LiMyFuncTest1 test1_aux(void); 8*67e74705SXin Livoid test1(void) { 9*67e74705SXin Li void *x; 10*67e74705SXin Li void* (*p)(void); 11*67e74705SXin Li p = ((void*) test1_aux()); 12*67e74705SXin Li if (p != ((void*) 0)) x = (*p)(); 13*67e74705SXin Li} 14*67e74705SXin Li 15*67e74705SXin Li// Test casts from void* to function pointers. 16*67e74705SXin Livoid* test2(void *p) { 17*67e74705SXin Li MyFuncTest1 fp = (MyFuncTest1) p; 18*67e74705SXin Li return (*fp)(); 19*67e74705SXin Li} 20*67e74705SXin Li 21*67e74705SXin Li// <radar://10087620> 22*67e74705SXin Li// A cast from int onjective C property reference to int. 23*67e74705SXin Litypedef signed char BOOL; 24*67e74705SXin Li@protocol NSObject - (BOOL)isEqual:(id)object; @end 25*67e74705SXin Li@interface NSObject <NSObject> {} - (id)init; @end 26*67e74705SXin Litypedef enum { 27*67e74705SXin Li EEOne, 28*67e74705SXin Li EETwo 29*67e74705SXin Li} RDR10087620Enum; 30*67e74705SXin Li@interface RDR10087620 : NSObject { 31*67e74705SXin Li RDR10087620Enum elem; 32*67e74705SXin Li} 33*67e74705SXin Li@property (readwrite, nonatomic) RDR10087620Enum elem; 34*67e74705SXin Li@end 35*67e74705SXin Li 36*67e74705SXin Listatic void 37*67e74705SXin Liadium_media_ready_cb(RDR10087620 *InObj) 38*67e74705SXin Li{ 39*67e74705SXin Li InObj.elem |= EEOne; 40*67e74705SXin Li} 41*67e74705SXin Li 42*67e74705SXin Li 43*67e74705SXin Li// PR16690 44*67e74705SXin Li_Bool testLocAsIntegerToBool() { 45*67e74705SXin Li return (long long)&testLocAsIntegerToBool; 46*67e74705SXin Li} 47