1 // RUN: %clang_cc1 -analyze -fexceptions -fobjc-exceptions -fcxx-exceptions -analyzer-checker=core,unix.Malloc,debug.ExprInspection -verify %s 2 3 void clang_analyzer_checkInlined(bool); 4 5 typedef typeof(sizeof(int)) size_t; 6 void *malloc(size_t); 7 void free(void *); 8 9 10 id getException(); 11 void inlinedObjC() { 12 clang_analyzer_checkInlined(true); // expected-warning{{TRUE}} 13 @throw getException(); 14 } 15 16 int 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 25 void inlinedCXX() { 26 clang_analyzer_checkInlined(true); // expected-warning{{TRUE}} 27 throw -1; 28 } 29 30 int 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