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 
test_zeroed()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 
test_nonzero()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 
test_indeterminate(int flags)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