Home | History | Annotate | Download | only in Analysis
      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