forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			72 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			72 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C
		
	
	
	
| // RUN: %clang_cc1 -Wno-pointer-to-int-cast -fsyntax-only -verify %s
 | |
| // PR3459
 | |
| struct bar {
 | |
|   char n[1];
 | |
| };
 | |
| 
 | |
| struct foo {
 | |
|   char name[(int)&((struct bar *)0)->n];
 | |
|   char name2[(int)&((struct bar *)0)->n - 1]; //expected-error{{'name2' declared as an array with a negative size}}
 | |
| };
 | |
| 
 | |
| // PR3430
 | |
| struct s {
 | |
|   struct st {
 | |
|     int v;
 | |
|   } *ts;
 | |
| };
 | |
| 
 | |
| struct st;
 | |
| 
 | |
| int foo() {
 | |
|   struct st *f;
 | |
|   return f->v + f[0].v;
 | |
| }
 | |
| 
 | |
| // PR3642, PR3671
 | |
| struct pppoe_tag {
 | |
|  short tag_type;
 | |
|  char tag_data[];
 | |
| };
 | |
| struct datatag {
 | |
|   struct pppoe_tag hdr; //expected-warning{{field 'hdr' with variable sized type 'struct pppoe_tag' not at the end of a struct or class is a GNU extension}}
 | |
|   char data;
 | |
| };
 | |
| 
 | |
| 
 | |
| // PR4092
 | |
| struct s0 {
 | |
|   char a;  // expected-note {{previous declaration is here}}
 | |
|   char a;  // expected-error {{duplicate member 'a'}}
 | |
| };
 | |
| 
 | |
| struct s0 f0(void) {}
 | |
| 
 | |
| // <rdar://problem/8177927> - This previously triggered an assertion failure.
 | |
| struct x0 {
 | |
|   unsigned int x1;
 | |
| };
 | |
| 
 | |
| // rdar://problem/9150338
 | |
| static struct test1 { // expected-warning {{'static' ignored on this declaration}}
 | |
|   int x;
 | |
| };
 | |
| const struct test2 { // expected-warning {{'const' ignored on this declaration}}
 | |
|   int x;
 | |
| };
 | |
| inline struct test3 { // expected-error {{'inline' can only appear on functions}}
 | |
|   int x;
 | |
| };
 | |
| 
 | |
| struct hiding_1 {};
 | |
| struct hiding_2 {};
 | |
| void test_hiding() {
 | |
|   struct hiding_1 *hiding_1();
 | |
|   extern struct hiding_2 *hiding_2;
 | |
|   struct hiding_1 *p = hiding_1();
 | |
|   struct hiding_2 *q = hiding_2;
 | |
| }
 | |
| 
 | |
| struct PreserveAttributes {};
 | |
| typedef struct __attribute__((noreturn)) PreserveAttributes PreserveAttributes_t; // expected-warning {{'noreturn' attribute only applies to functions and methods}}
 |