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