struct.c revision bf20b68e925f2b0e87eff0da49dae8a4dbc0fac7
1// RUN: clang %s -emit-llvm 2 3struct { 4 int x; 5 int y; 6} point; 7 8void fn1() { 9 point.x = 42; 10} 11 12/* Nested member */ 13struct { 14 struct { 15 int a; 16 int b; 17 } p1; 18} point2; 19 20void fn2() { 21 point2.p1.a = 42; 22} 23 24/* Indirect reference */ 25typedef struct __sf { 26 unsigned char *c; 27 short flags; 28} F; 29 30typedef struct __sf2 { 31 F *ff; 32} F2; 33 34int fn3(F2 *c) { 35 if (c->ff->c >= 0) 36 return 1; 37 else 38 return 0; 39} 40 41/* Nested structs */ 42typedef struct NA { 43 int data; 44 struct NA *next; 45} NA; 46void f1() { NA a; } 47 48typedef struct NB { 49 int d1; 50 struct _B2 { 51 int d2; 52 struct NB *n2; 53 } B2; 54} NB; 55 56void f2() { NB b; } 57 58extern NB *f3(); 59void f4() { 60 f3()->d1 = 42; 61} 62 63void f5() { 64 (f3())->d1 = 42; 65} 66 67/* Function calls */ 68typedef struct { 69 int location; 70 int length; 71} range; 72 73extern range f6(); 74void f7() 75{ 76 range r = f6(); 77} 78 79/* Member expressions */ 80typedef struct { 81 range range1; 82 range range2; 83} rangepair; 84 85void f8() 86{ 87 rangepair p; 88 89 range r = p.range1; 90} 91 92void f9(range *p) 93{ 94 range r = *p; 95} 96 97void f10(range *p) 98{ 99 range r = p[0]; 100} 101 102/* _Bool types */ 103 104struct _w 105{ 106 short a,b; 107 short c,d; 108 short e,f; 109 short g; 110 111 unsigned int h,i; 112 113 _Bool j,k; 114} ws; 115 116/* Implicit casts (due to typedefs) */ 117typedef struct _a 118{ 119 int a; 120} a; 121 122void f11() 123{ 124 struct _a a1; 125 a a2; 126 127 a1 = a2; 128 a2 = a1; 129} 130 131/* Implicit casts (due to const) */ 132void f12() 133{ 134 struct _a a1; 135 const struct _a a2; 136 137 a1 = a2; 138} 139 140/* struct initialization */ 141struct a13 {int b; int c;}; 142struct a13 c13 = {5}; 143typedef struct a13 a13; 144struct a14 { short a; int b; } x = {1, 1}; 145 146/* flexible array members */ 147struct a15 {char a; int b[];} c15; 148int a16(void) {c15.a = 1;} 149 150/* compound literals */ 151void f13() 152{ 153 a13 x; x = (a13){1,2}; 154} 155 156/* va_arg */ 157int f14(int i, ...) { 158 __builtin_va_list l; 159 __builtin_va_start(l,i); 160 a13 b = __builtin_va_arg(l, a13); 161 return b.b; 162} 163