1 // RUN: %clang_analyze_cc1 -triple x86_64-unknown-linux %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()15void 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 kfree(list); // no-warning 28 } 29 test_nonzero()30void 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 kfree(list); 43 } 44 test_indeterminate(int flags)45void 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 kfree(list); 58 } 59