// 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 } |