// 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 | |
} |