forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			26 lines
		
	
	
		
			811 B
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			26 lines
		
	
	
		
			811 B
		
	
	
	
		
			C++
		
	
	
	
| // RUN: %clang_analyze_cc1 -w -x c++ -analyzer-checker=core -analyzer-output=text -verify %s
 | |
| 
 | |
| namespace pr34731 {
 | |
| int b;
 | |
| class c {
 | |
|   class B {
 | |
|    public:
 | |
|     double ***d;
 | |
|     B();
 | |
|   };
 | |
|   void e(double **, int);
 | |
|   void f(B &, int &);
 | |
| };
 | |
| 
 | |
| // Properly track the null pointer in the array field back to the default
 | |
| // constructor of 'h'.
 | |
| void c::f(B &g, int &i) {
 | |
|   e(g.d[9], i); // expected-warning{{Array access (via field 'd') results in a null pointer dereference}}
 | |
|                 // expected-note@-1{{Array access (via field 'd') results in a null pointer dereference}}
 | |
|   B h, a; // expected-note{{Value assigned to 'h.d'}}
 | |
|   a.d == __null; // expected-note{{Assuming the condition is true}}
 | |
|   a.d != h.d; // expected-note{{Assuming 'a.d' is equal to 'h.d'}}
 | |
|   f(h, b); // expected-note{{Calling 'c::f'}}
 | |
| }
 | |
| }
 |