1// RUN: %clang_cc1 -analyze -fexceptions -fobjc-exceptions -fcxx-exceptions -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 24 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} 39