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