blob: dab1b5e8c9c8c7ea3d52fc27239fa7739229448d [file] [log] [blame]
Jordan Roseee049592012-08-21 21:44:07 +00001// RUN: %clang_cc1 -analyze -fexceptions -fobjc-exceptions -fcxx-exceptions -analyzer-checker=core,unix.Malloc,debug.ExprInspection -verify %s
Jordan Rose19275bd2012-08-18 00:30:20 +00002
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}