59 lines
		
	
	
		
			983 B
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			59 lines
		
	
	
		
			983 B
		
	
	
	
		
			C
		
	
	
	
// RUN: %clang -target x86_64-unknown-freebsd --analyze %s
 | 
						|
 | 
						|
#include "Inputs/system-header-simulator.h"
 | 
						|
 | 
						|
#define M_ZERO 0x0100
 | 
						|
#define NULL ((void *)0)
 | 
						|
 | 
						|
void *malloc(size_t, void *, int);
 | 
						|
 | 
						|
struct test {
 | 
						|
};
 | 
						|
 | 
						|
void foo(struct test *);
 | 
						|
 | 
						|
void test_zeroed() {
 | 
						|
  struct test **list, *t;
 | 
						|
  int i;
 | 
						|
 | 
						|
  list = malloc(sizeof(*list) * 10, NULL, M_ZERO);
 | 
						|
  if (list == NULL)
 | 
						|
    return;
 | 
						|
 | 
						|
  for (i = 0; i < 10; i++) {
 | 
						|
    t = list[i];
 | 
						|
    foo(t);
 | 
						|
  }
 | 
						|
  free(list); // no-warning
 | 
						|
}
 | 
						|
 | 
						|
void test_nonzero() {
 | 
						|
  struct test **list, *t;
 | 
						|
  int i;
 | 
						|
 | 
						|
  list = malloc(sizeof(*list) * 10, NULL, 0);
 | 
						|
  if (list == NULL)
 | 
						|
    return;
 | 
						|
 | 
						|
  for (i = 0; i < 10; i++) {
 | 
						|
    t = list[i]; // expected-warning{{undefined}}
 | 
						|
    foo(t);
 | 
						|
  }
 | 
						|
  free(list);
 | 
						|
}
 | 
						|
 | 
						|
void test_indeterminate(int flags) {
 | 
						|
  struct test **list, *t;
 | 
						|
  int i;
 | 
						|
 | 
						|
  list = malloc(sizeof(*list) * 10, NULL, flags);
 | 
						|
  if (list == NULL)
 | 
						|
    return;
 | 
						|
 | 
						|
  for (i = 0; i < 10; i++) {
 | 
						|
    t = list[i]; // expected-warning{{undefined}}
 | 
						|
    foo(t);
 | 
						|
  }
 | 
						|
  free(list);
 | 
						|
}
 |