blob: aea58dad470face7ecc71b026bf780de92f73abe [file] [edit]
// RUN: %clang_analyze_cc1 -verify %s \
// RUN: -analyzer-checker=core,unix.DynamicMemoryModeling \
// RUN: -analyzer-config unix.DynamicMemoryModeling:ModelAllocationFailure=true
// RUN: %clang_analyze_cc1 -verify=nofailurebranch %s \
// RUN: -analyzer-checker=core,unix.DynamicMemoryModeling \
// RUN: -analyzer-config unix.DynamicMemoryModeling:ModelAllocationFailure=false
// nofailurebranch-no-diagnostics
typedef __typeof(sizeof(int)) size_t;
void *malloc(size_t);
void *alloca(size_t);
void *valloc(size_t);
void free(void *);
void *realloc(void *ptr, size_t size);
void *calloc(size_t nmemb, size_t size);
char *strdup(const char *s);
struct if_nameindex { char x; };
struct if_nameindex *if_nameindex(void);
void if_freenameindex(struct if_nameindex *ptr);
void test_malloc(size_t s) {
char *p = malloc(s);
if (s > 0) {
*p = 1; //expected-warning{{Dereference of null pointer}}
} else {
*p = 1;
}
free(p);
}
void test_calloc(size_t n, size_t s) {
char *p = calloc(n, s);
if (n > 0 && s > 0) {
*p = 1; //expected-warning{{Dereference of null pointer}}
} else {
*p = 1;
}
free(p);
}
void test_valloc(size_t s) {
int *p = valloc(s);
*p = 1; //no-warning
free(p);
}
void test_alloca(size_t s) {
int *p = alloca(s);
*p = 1; //no-warning
}
void test_realloc(size_t s) {
char *p = malloc(10);
if (!p)
return;
p = realloc(p, s);
if (s > 0) {
*p = 1; //expected-warning{{Dereference of null pointer}}
} else {
*p = 1;
}
free(p);
}
void test_strdup() {
char *p = strdup("abcd");
*p = 1; //expected-warning{{Dereference of null pointer}}
free(p);
}
void test_ifnameindex() {
struct if_nameindex *p = if_nameindex();
p->x = 1; //expected-warning{{dereference of a null pointer}}
if_freenameindex(p);
}