mirror of
https://github.com/Gericom/teak-llvm.git
synced 2025-06-21 12:35:47 -04:00

Asserting on invalid input isn't very nice, hence the patch to emit an error instead. This is the first of many patches to overhaul the way we handle checker options. Differential Revision: https://reviews.llvm.org/D57850 llvm-svn: 355704
49 lines
1.0 KiB
C
49 lines
1.0 KiB
C
// RUN: %clang_analyze_cc1 -analyzer-store=region -verify %s \
|
|
// RUN: -analyzer-checker=core \
|
|
// RUN: -analyzer-checker=unix \
|
|
// RUN: -analyzer-checker=core.uninitialized \
|
|
// RUN: -analyzer-config unix.DynamicMemoryModeling:Optimistic=true
|
|
|
|
typedef __typeof(sizeof(int)) size_t;
|
|
void *malloc(size_t);
|
|
void free(void *);
|
|
|
|
char stackBased1 () {
|
|
char buf[2];
|
|
buf[0] = 'a';
|
|
return buf[1]; // expected-warning{{Undefined}}
|
|
}
|
|
|
|
char stackBased2 () {
|
|
char buf[2];
|
|
buf[1] = 'a';
|
|
return buf[0]; // expected-warning{{Undefined}}
|
|
}
|
|
|
|
// Exercise the conditional visitor. Radar://10105448
|
|
char stackBased3 (int *x) {
|
|
char buf[2];
|
|
int *y;
|
|
buf[0] = 'a';
|
|
if (!(y = x)) {
|
|
return buf[1]; // expected-warning{{Undefined}}
|
|
}
|
|
return buf[0];
|
|
}
|
|
|
|
char heapBased1 () {
|
|
char *buf = malloc(2);
|
|
buf[0] = 'a';
|
|
char result = buf[1]; // expected-warning{{undefined}}
|
|
free(buf);
|
|
return result;
|
|
}
|
|
|
|
char heapBased2 () {
|
|
char *buf = malloc(2);
|
|
buf[1] = 'a';
|
|
char result = buf[0]; // expected-warning{{undefined}}
|
|
free(buf);
|
|
return result;
|
|
}
|