forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			24 lines
		
	
	
		
			632 B
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			24 lines
		
	
	
		
			632 B
		
	
	
	
		
			C++
		
	
	
	
// RUN: %clang_analyze_cc1 -analyzer-checker=core -verify %s
 | 
						|
// expected-no-diagnostics
 | 
						|
class B {
 | 
						|
public:
 | 
						|
  bool m;
 | 
						|
  ~B() {} // The destructor ensures that the binary logical operator below is wrapped in the ExprWithCleanups.
 | 
						|
};
 | 
						|
B foo();
 | 
						|
int getBool();
 | 
						|
int *getPtr();
 | 
						|
int test() {
 | 
						|
  int r = 0;
 | 
						|
  for (int x = 0; x< 10; x++) {
 | 
						|
    int *p = getPtr();
 | 
						|
    // Liveness info is not computed correctly due to the following expression.
 | 
						|
    // This happens due to CFG being special cased for short circuit operators.
 | 
						|
    // PR18159
 | 
						|
    if (p != 0 && getBool() && foo().m && getBool()) {
 | 
						|
      r = *p; // no warning
 | 
						|
    }
 | 
						|
  }
 | 
						|
  return r;
 | 
						|
}
 |