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