forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			57 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			57 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C
		
	
	
	
| // RUN: %clang_cc1 -fsyntax-only -Wuninitialized -verify %s
 | |
| 
 | |
| void init(int *);
 | |
| 
 | |
| void foo(void) {
 | |
|   int i = ({
 | |
|     init(&i);
 | |
|     i;
 | |
|   });
 | |
| }
 | |
| 
 | |
| void foo_bad(void) {
 | |
|   int i = ({
 | |
|     int z = i; // expected-warning{{variable 'i' is uninitialized when used within its own initialization}}
 | |
|     init(&i);
 | |
|     i;
 | |
|   });
 | |
| }
 | |
| 
 | |
| struct widget {
 | |
|   int x, y;
 | |
| };
 | |
| void init2(struct widget *);
 | |
| 
 | |
| void bar(void) {
 | |
|   struct widget my_widget = ({
 | |
|     init2(&my_widget);
 | |
|     my_widget;
 | |
|   });
 | |
|   struct widget a = (init2(&a), a);
 | |
| }
 | |
| 
 | |
| void bar_bad(void) {
 | |
|   struct widget my_widget = ({
 | |
|     struct widget z = my_widget; // expected-warning{{variable 'my_widget' is uninitialized when used within its own initialization}}
 | |
|     int x = my_widget.x;         //FIXME: There should be an uninitialized warning here
 | |
|     init2(&my_widget);
 | |
|     my_widget;
 | |
|   });
 | |
| }
 | |
| 
 | |
| void baz(void) {
 | |
|   struct widget a = ({
 | |
|     struct widget b = ({
 | |
|       b = a; // expected-warning{{variable 'a' is uninitialized when used within its own initialization}}
 | |
|     });
 | |
|     a;
 | |
|   });
 | |
| }
 | |
| 
 | |
| void f(void) {
 | |
|   struct widget *a = ({
 | |
|     init2(a); // expected-warning{{variable 'a' is uninitialized when used within its own initialization}}
 | |
|     a;
 | |
|   });
 | |
| }
 |