| Devang Patel | 41b6625 | 2007-10-23 20:28:39 +0000 | [diff] [blame] | 1 | // RUN: clang %s -emit-llvm |
| 2 | |||||
| 3 | struct { | ||||
| 4 | int x; | ||||
| 5 | int y; | ||||
| 6 | } point; | ||||
| 7 | |||||
| 8 | void fn1() { | ||||
| 9 | point.x = 42; | ||||
| 10 | } | ||||
| 11 | |||||
| 12 | /* Nested member */ | ||||
| 13 | struct { | ||||
| 14 | struct { | ||||
| 15 | int a; | ||||
| 16 | int b; | ||||
| 17 | } p1; | ||||
| 18 | } point2; | ||||
| 19 | |||||
| 20 | void fn2() { | ||||
| 21 | point2.p1.a = 42; | ||||
| 22 | } | ||||
| 23 | |||||
| 24 | /* Indirect reference */ | ||||
| 25 | typedef struct __sf { | ||||
| 26 | unsigned char *c; | ||||
| 27 | short flags; | ||||
| 28 | } F; | ||||
| 29 | |||||
| 30 | typedef struct __sf2 { | ||||
| 31 | F *ff; | ||||
| 32 | } F2; | ||||
| 33 | |||||
| 34 | int fn3(F2 *c) { | ||||
| 35 | if (c->ff->c >= 0) | ||||
| 36 | return 1; | ||||
| 37 | else | ||||
| 38 | return 0; | ||||
| 39 | } | ||||
| Devang Patel | 317c716 | 2007-10-23 23:26:46 +0000 | [diff] [blame] | 40 | |
| 41 | /* Nested structs */ | ||||
| 42 | typedef struct NA { | ||||
| 43 | int data; | ||||
| 44 | struct NA *next; | ||||
| 45 | } NA; | ||||
| Devang Patel | 50279e1 | 2007-10-23 23:29:51 +0000 | [diff] [blame] | 46 | void f1() { NA a; } |
| Devang Patel | 317c716 | 2007-10-23 23:26:46 +0000 | [diff] [blame] | 47 | |
| 48 | typedef struct NB { | ||||
| 49 | int d1; | ||||
| 50 | struct _B2 { | ||||
| 51 | int d2; | ||||
| 52 | struct NB *n2; | ||||
| 53 | } B2; | ||||
| 54 | } NB; | ||||
| 55 | |||||
| 56 | void f2() { NB b; } | ||||
| 57 | |||||
| Devang Patel | 9dd3e2b | 2007-10-24 22:26:28 +0000 | [diff] [blame] | 58 | extern NB *f3(); |
| 59 | void f4() { | ||||
| 60 | f3()->d1 = 42; | ||||
| 61 | } | ||||
| Devang Patel | 2b24fd9 | 2007-10-26 18:15:21 +0000 | [diff] [blame] | 62 | |
| 63 | void f5() { | ||||
| 64 | (f3())->d1 = 42; | ||||
| 65 | } | ||||
| Anders Carlsson | 0ae1541 | 2007-10-31 22:04:46 +0000 | [diff] [blame] | 66 | |
| 67 | /* Function calls */ | ||||
| 68 | typedef struct { | ||||
| 69 | int location; | ||||
| 70 | int length; | ||||
| 71 | } range; | ||||
| 72 | |||||
| 73 | extern range f6(); | ||||
| 74 | void f7() | ||||
| 75 | { | ||||
| Anders Carlsson | edf4e23 | 2007-11-02 16:59:10 +0000 | [diff] [blame] | 76 | range r = f6(); |
| 77 | } | ||||
| 78 | |||||
| 79 | /* Member expressions */ | ||||
| 80 | typedef struct { | ||||
| 81 | range range1; | ||||
| 82 | range range2; | ||||
| 83 | } rangepair; | ||||
| 84 | |||||
| 85 | void f8() | ||||
| 86 | { | ||||
| 87 | rangepair p; | ||||
| 88 | |||||
| 89 | range r = p.range1; | ||||
| Anders Carlsson | 0ae1541 | 2007-10-31 22:04:46 +0000 | [diff] [blame] | 90 | } |
| 91 | |||||
| 92 | |||||