1 // RUN: %clang -target x86_64-unknown-freebsd --analyze %s
2 
3 #include "Inputs/system-header-simulator.h"
4 
5 #define M_ZERO 0x0100
6 #define NULL ((void *)0)
7 
8 void *malloc(size_t, void *, 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 = malloc(sizeof(*list) * 10, NULL, M_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 = malloc(sizeof(*list) * 10, NULL, 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 = malloc(sizeof(*list) * 10, NULL, 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