forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			36 lines
		
	
	
		
			814 B
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			36 lines
		
	
	
		
			814 B
		
	
	
	
		
			C++
		
	
	
	
| // RUN: %clang_analyze_cc1 -analyzer-checker=core.builtin -verify -DCHECK_FOR_CRASH %s
 | |
| // RUN: %clang_analyze_cc1 -analyzer-checker=core -verify -analyzer-output=text %s
 | |
| 
 | |
| #ifdef CHECK_FOR_CRASH
 | |
| // expected-no-diagnostics
 | |
| #endif
 | |
| 
 | |
| namespace PerformTrivialCopyForUndefs {
 | |
| struct A {
 | |
|   int x;
 | |
| };
 | |
| 
 | |
| struct B {
 | |
|   A a;
 | |
| };
 | |
| 
 | |
| struct C {
 | |
|   B b;
 | |
| };
 | |
| 
 | |
| void foo() {
 | |
|   C c1;
 | |
|   C *c2;
 | |
| #ifdef CHECK_FOR_CRASH
 | |
|   // If the value of variable is not defined and checkers that check undefined
 | |
|   // values are not enabled, performTrivialCopy should be able to handle the
 | |
|   // case with undefined values, too.
 | |
|   c1.b.a = c2->b.a;
 | |
| #else
 | |
|   c1.b.a = c2->b.a; // expected-warning{{1st function call argument is an uninitialized value}}
 | |
|                     // expected-note@-1{{1st function call argument is an uninitialized value}}
 | |
| #endif
 | |
| }
 | |
| }
 | |
| 
 |