Home | History | Annotate | Download | only in Analysis
      1 // RUN: %clang_cc1 -analyze -analyzer-checker=core,core.experimental -analyzer-store=basic -verify %s
      2 // RUN: %clang_cc1 -analyze -analyzer-checker=core,core.experimental -analyzer-store=region -verify %s
      3 
      4 // Test function pointer casts.  Currently we track function addresses using
      5 // loc::FunctionVal.  Because casts can be arbitrary, do we need to model
      6 // functions with regions?
      7 typedef void* (*MyFuncTest1)(void);
      8 
      9 MyFuncTest1 test1_aux(void);
     10 void test1(void) {
     11   void *x;
     12   void* (*p)(void);
     13   p = ((void*) test1_aux());
     14   if (p != ((void*) 0)) x = (*p)();
     15 }
     16 
     17 // Test casts from void* to function pointers.  Same issue as above:
     18 // should we eventually model function pointers using regions?
     19 void* test2(void *p) {
     20   MyFuncTest1 fp = (MyFuncTest1) p;
     21   return (*fp)();
     22 }
     23