39 lines
		
	
	
		
			895 B
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			39 lines
		
	
	
		
			895 B
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| // RUN: %clang_cc1 -analyze -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
 | |
| }
 | 
