forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			29 lines
		
	
	
		
			868 B
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			29 lines
		
	
	
		
			868 B
		
	
	
	
		
			C++
		
	
	
	
| // RUN: %clang_analyze_cc1 -analyzer-checker=core,debug.ExprInspection\
 | |
| // RUN:   -analyzer-checker cplusplus.Move,cplusplus.SmartPtr\
 | |
| // RUN:   -std=c++11 -verify %s
 | |
| 
 | |
| #include "Inputs/system-header-simulator-cxx.h"
 | |
| 
 | |
| void clang_analyzer_warnIfReached();
 | |
| 
 | |
| void derefAfterMove(std::unique_ptr<int> P) {
 | |
|   std::unique_ptr<int> Q = std::move(P);
 | |
|   if (Q)
 | |
|     clang_analyzer_warnIfReached(); // expected-warning{{REACHABLE}}
 | |
|   *Q.get() = 1; // no-warning
 | |
|   if (P)
 | |
|     clang_analyzer_warnIfReached(); // no-warning
 | |
|   // TODO: Report a null dereference (instead).
 | |
|   *P.get() = 1; // expected-warning {{Method called on moved-from object 'P'}}
 | |
| }
 | |
| 
 | |
| // Don't crash when attempting to model a call with unknown callee.
 | |
| namespace testUnknownCallee {
 | |
| struct S {
 | |
|   void foo();
 | |
| };
 | |
| void bar(S *s, void (S::*func)(void)) {
 | |
|   (s->*func)(); // no-crash
 | |
| }
 | |
| } // namespace testUnknownCallee
 |