Home | History | Annotate | Download | only in Analysis
      1 // RUN: %clang -target x86_64-unknown-linux --analyze %s
      2 
      3 #include "Inputs/system-header-simulator.h"
      4 
      5 #define __GFP_ZERO 0x8000
      6 #define NULL ((void *)0)
      7 
      8 void *kmalloc(size_t, int);
      9 
     10 struct test {
     11 };
     12 
     13 void foo(struct test *);
     14 
     15 void test_zeroed() {
     16   struct test **list, *t;
     17   int i;
     18 
     19   list = kmalloc(sizeof(*list) * 10, __GFP_ZERO);
     20   if (list == NULL)
     21     return;
     22 
     23   for (i = 0; i < 10; i++) {
     24     t = list[i];
     25     foo(t);
     26   }
     27   free(list); // no-warning
     28 }
     29 
     30 void test_nonzero() {
     31   struct test **list, *t;
     32   int i;
     33 
     34   list = kmalloc(sizeof(*list) * 10, 0);
     35   if (list == NULL)
     36     return;
     37 
     38   for (i = 0; i < 10; i++) {
     39     t = list[i]; // expected-warning{{undefined}}
     40     foo(t);
     41   }
     42   free(list);
     43 }
     44 
     45 void test_indeterminate(int flags) {
     46   struct test **list, *t;
     47   int i;
     48 
     49   list = kmalloc(sizeof(*list) * 10, flags);
     50   if (list == NULL)
     51     return;
     52 
     53   for (i = 0; i < 10; i++) {
     54     t = list[i]; // expected-warning{{undefined}}
     55     foo(t);
     56   }
     57   free(list);
     58 }
     59