1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
|
// RUN: %clang_analyze_cc1 -fexceptions -fobjc-exceptions -fcxx-exceptions -analyzer-checker=core,unix.Malloc,debug.ExprInspection -verify %s
void clang_analyzer_checkInlined(bool);
typedef typeof(sizeof(int)) size_t;
void *malloc(size_t);
void free(void *);
id getException();
void inlinedObjC() {
clang_analyzer_checkInlined(true); // expected-warning{{TRUE}}
@throw getException();
}
int testObjC() {
int a; // uninitialized
void *mem = malloc(4); // no-warning (ObjC exceptions are usually fatal)
inlinedObjC();
free(mem);
return a; // no-warning
}
void inlinedCXX() {
clang_analyzer_checkInlined(true); // expected-warning{{TRUE}}
throw -1;
}
int testCXX() {
int a; // uninitialized
// FIXME: this should be reported as a leak, because C++ exceptions are
// often not fatal.
void *mem = malloc(4);
inlinedCXX();
free(mem);
return a; // no-warning
}
|