1651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// RUN: %clang -target x86_64-unknown-linux --analyze %s 2651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 3651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines#include "Inputs/system-header-simulator.h" 4651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 5651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines#define __GFP_ZERO 0x8000 6651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines#define NULL ((void *)0) 7651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 8651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesvoid *kmalloc(size_t, int); 9651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 10651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct test { 11651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}; 12651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 13651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesvoid foo(struct test *); 14651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 15651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesvoid test_zeroed() { 16651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines struct test **list, *t; 17651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines int i; 18651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 19651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines list = kmalloc(sizeof(*list) * 10, __GFP_ZERO); 20651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines if (list == NULL) 21651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return; 22651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 23651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines for (i = 0; i < 10; i++) { 24651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines t = list[i]; 25651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines foo(t); 26651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines } 27651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines free(list); // no-warning 28651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 29651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 30651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesvoid test_nonzero() { 31651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines struct test **list, *t; 32651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines int i; 33651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 34651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines list = kmalloc(sizeof(*list) * 10, 0); 35651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines if (list == NULL) 36651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return; 37651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 38651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines for (i = 0; i < 10; i++) { 39651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines t = list[i]; // expected-warning{{undefined}} 40651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines foo(t); 41651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines } 42651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines free(list); 43651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 44651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 45651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesvoid test_indeterminate(int flags) { 46651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines struct test **list, *t; 47651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines int i; 48651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 49651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines list = kmalloc(sizeof(*list) * 10, flags); 50651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines if (list == NULL) 51651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return; 52651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 53651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines for (i = 0; i < 10; i++) { 54651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines t = list[i]; // expected-warning{{undefined}} 55651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines foo(t); 56651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines } 57651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines free(list); 58651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 59