
The actual change here is a little more complicated than the summary above. What we want to do is have our generic inlining tests run under whatever mode is the default. However, there are some tests that depend on the presence of C++ inlining, which still has some rough edges. These tests have been explicitly marked as -analyzer-ipa=inlining in preparation for a new mode that limits inlining to C functions and blocks. This will be the default until the false positives for C++ have been brought down to manageable levels. llvm-svn: 162317
39 lines
895 B
Plaintext
39 lines
895 B
Plaintext
// RUN: %clang_cc1 -analyze -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
|
|
}
|