197 lines · c
1// RUN: %clang_cc1 -triple i386-unknown-unknown %s -emit-llvm -o -2 3struct {4 int x;5 int y;6} point;7 8void fn1(void) {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(void) {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 else38 return 0;39}40 41/* Nested structs */42typedef struct NA {43 int data;44 struct NA *next;45} NA;46void f1(void) { 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(void) { NB b; }57 58extern NB *f3(void);59void f4(void) {60 f3()->d1 = 42;61}62 63void f5(void) {64 (f3())->d1 = 42;65}66 67/* Function calls */68typedef struct {69 int location;70 int length;71} range;72extern range f6(void);73void f7(void) {74 range r = f6();75}76 77/* Member expressions */78typedef struct {79 range range1;80 range range2;81} rangepair;82 83void f8(void) {84 rangepair p;85 86 range r = p.range1;87}88 89void f9(range *p) {90 range r = *p;91}92 93void f10(range *p) {94 range r = p[0];95}96 97/* _Bool types */98 99struct _w {100 short a,b;101 short c,d;102 short e,f;103 short g;104 105 unsigned int h,i;106 107 _Bool j,k;108} ws;109 110/* Implicit casts (due to typedefs) */111typedef struct _a {112 int a;113} a;114 115void f11(void) {116 struct _a a1;117 a a2;118 119 a1 = a2;120 a2 = a1;121}122 123/* Implicit casts (due to const) */124void f12(void) {125 struct _a a1;126 const struct _a a2;127 128 a1 = a2;129}130 131/* struct initialization */132struct a13 {int b; int c;};133struct a13 c13 = {5};134typedef struct a13 a13;135struct a14 { short a; int b; } x = {1, 1};136 137/* flexible array members */138struct a15 {char a; int b[];} c15;139void a16(void) {c15.a = 1;}140 141/* compound literals */142void f13(void) {143 a13 x; x = (a13){1,2};144}145 146/* va_arg */147int f14(int i, ...) {148 __builtin_va_list l;149 __builtin_va_start(l,i);150 a13 b = __builtin_va_arg(l, a13);151 int c = __builtin_va_arg(l, a13).c;152 return b.b;153}154 155/* Attribute packed */156struct __attribute__((packed)) S2839 { double a[19]; signed char b; } s2839[5];157 158struct __attribute__((packed)) SS { long double a; char b; } SS;159 160 161/* As lvalue */162 163int f15(void) {164 extern range f15_ext(void);165 return f15_ext().location;166}167 168range f16(void) {169 extern rangepair f16_ext(void);170 return f16_ext().range1;171}172 173int f17(void) {174 extern range f17_ext(void);175 range r;176 return (r = f17_ext()).location;177}178 179range f18(void) {180 extern rangepair f18_ext(void);181 rangepair rp;182 return (rp = f18_ext()).range1;183}184 185 186 187// Complex forward reference of struct.188struct f19S;189extern struct f19T {190 struct f19S (*p)(void);191} t;192struct f19S { int i; };193void f19(void) {194 t.p();195}196 197