| // RUN: %clang_analyze_cc1 -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 | 
 | } |