blob: 01b08aeda51a0b455ff86bd1ae3eba8027e89992 [file] [log] [blame]
Stephen Hines651f13c2014-04-23 16:59:28 -07001// 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
8void *malloc(size_t, void *, int);
9
10struct test {
11};
12
13void foo(struct test *);
14
15void 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
30void 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
45void 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}