xref: /aosp_15_r20/external/clang/test/Analysis/casts.m (revision 67e74705e28f6214e480b399dd47ea732279e315)
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