34 lines
		
	
	
		
			764 B
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			34 lines
		
	
	
		
			764 B
		
	
	
	
		
			C++
		
	
	
	
	
	
// RUN: %clang_cc1 -analyze -analyzer-checker=core -analyzer-store region -verify %s
 | 
						|
// expected-no-diagnostics
 | 
						|
 | 
						|
// Intra-procedural C++ tests.
 | 
						|
 | 
						|
// Test relaxing function call arguments invalidation to be aware of const
 | 
						|
// arguments. radar://10595327
 | 
						|
struct InvalidateArgs {
 | 
						|
  void ttt(const int &nptr);
 | 
						|
  virtual void vttt(const int *nptr);
 | 
						|
};
 | 
						|
struct ChildOfInvalidateArgs: public InvalidateArgs {
 | 
						|
  virtual void vttt(const int *nptr);
 | 
						|
};
 | 
						|
void declarationFun(int x) {
 | 
						|
  InvalidateArgs t;
 | 
						|
  x = 3;
 | 
						|
  int y = x + 1;
 | 
						|
  int *p = 0;
 | 
						|
  t.ttt(y);
 | 
						|
  if (x == y)
 | 
						|
      y = *p; // no-warning
 | 
						|
}
 | 
						|
void virtualFun(int x) {
 | 
						|
  ChildOfInvalidateArgs t;
 | 
						|
  InvalidateArgs *pt = &t;
 | 
						|
  x = 3;
 | 
						|
  int y = x + 1;
 | 
						|
  int *p = 0;
 | 
						|
  pt->vttt(&y);
 | 
						|
  if (x == y)
 | 
						|
      y = *p; // no-warning
 | 
						|
}
 |