// RUN: %clang_cc1 -triple i386-unknown-unknown %s -emit-llvm -o - | |
struct { | |
int x; | |
int y; | |
} point; | |
void fn1() { | |
point.x = 42; | |
} | |
/* Nested member */ | |
struct { | |
struct { | |
int a; | |
int b; | |
} p1; | |
} point2; | |
void fn2() { | |
point2.p1.a = 42; | |
} | |
/* Indirect reference */ | |
typedef struct __sf { | |
unsigned char *c; | |
short flags; | |
} F; | |
typedef struct __sf2 { | |
F *ff; | |
} F2; | |
int fn3(F2 *c) { | |
if (c->ff->c >= 0) | |
return 1; | |
else | |
return 0; | |
} | |
/* Nested structs */ | |
typedef struct NA { | |
int data; | |
struct NA *next; | |
} NA; | |
void f1() { NA a; } | |
typedef struct NB { | |
int d1; | |
struct _B2 { | |
int d2; | |
struct NB *n2; | |
} B2; | |
} NB; | |
void f2() { NB b; } | |
extern NB *f3(); | |
void f4() { | |
f3()->d1 = 42; | |
} | |
void f5() { | |
(f3())->d1 = 42; | |
} | |
/* Function calls */ | |
typedef struct { | |
int location; | |
int length; | |
} range; | |
extern range f6(); | |
void f7() { | |
range r = f6(); | |
} | |
/* Member expressions */ | |
typedef struct { | |
range range1; | |
range range2; | |
} rangepair; | |
void f8() { | |
rangepair p; | |
range r = p.range1; | |
} | |
void f9(range *p) { | |
range r = *p; | |
} | |
void f10(range *p) { | |
range r = p[0]; | |
} | |
/* _Bool types */ | |
struct _w { | |
short a,b; | |
short c,d; | |
short e,f; | |
short g; | |
unsigned int h,i; | |
_Bool j,k; | |
} ws; | |
/* Implicit casts (due to typedefs) */ | |
typedef struct _a { | |
int a; | |
} a; | |
void f11() { | |
struct _a a1; | |
a a2; | |
a1 = a2; | |
a2 = a1; | |
} | |
/* Implicit casts (due to const) */ | |
void f12() { | |
struct _a a1; | |
const struct _a a2; | |
a1 = a2; | |
} | |
/* struct initialization */ | |
struct a13 {int b; int c;}; | |
struct a13 c13 = {5}; | |
typedef struct a13 a13; | |
struct a14 { short a; int b; } x = {1, 1}; | |
/* flexible array members */ | |
struct a15 {char a; int b[];} c15; | |
int a16(void) {c15.a = 1;} | |
/* compound literals */ | |
void f13() { | |
a13 x; x = (a13){1,2}; | |
} | |
/* va_arg */ | |
int f14(int i, ...) { | |
__builtin_va_list l; | |
__builtin_va_start(l,i); | |
a13 b = __builtin_va_arg(l, a13); | |
int c = __builtin_va_arg(l, a13).c; | |
return b.b; | |
} | |
/* Attribute packed */ | |
struct __attribute__((packed)) S2839 { double a[19]; signed char b; } s2839[5]; | |
struct __attribute__((packed)) SS { long double a; char b; } SS; | |
/* As lvalue */ | |
int f15() { | |
extern range f15_ext(); | |
return f15_ext().location; | |
} | |
range f16() { | |
extern rangepair f16_ext(); | |
return f16_ext().range1; | |
} | |
int f17() { | |
extern range f17_ext(); | |
range r; | |
return (r = f17_ext()).location; | |
} | |
range f18() { | |
extern rangepair f18_ext(); | |
rangepair rp; | |
return (rp = f18_ext()).range1; | |
} |