expr-address-of.c revision 1e76ce6e5f892c89c9958657d44c323fb70f748c
1// RUN: clang %s -verify -fsyntax-only 2struct xx { int bitf:1; }; 3 4struct entry { struct xx *whatever; 5 int value; 6 int bitf:1; }; 7void add_one(int *p) { (*p)++; } 8 9void test() { 10 register struct entry *p; 11 add_one(&p->value); 12 struct entry pvalue; 13 add_one(&p->bitf); // expected-error {{address of bit-field requested}} 14 add_one(&pvalue.bitf); // expected-error {{address of bit-field requested}} 15 add_one(&p->whatever->bitf); // expected-error {{address of bit-field requested}} 16} 17 18void foo() { 19 register int x[10]; 20 &x[10]; // expected-error {{address of register variable requested}} 21 22 register int *y; 23 24 int *x2 = &y; // expected-error {{address of register variable requested}} 25 int *x3 = &y[10]; 26} 27 28void testVectorComponentAccess() { 29 typedef float v4sf __attribute__ ((vector_size (16))); 30 static v4sf q; 31 float* r = &q[0]; // expected-error {{address of vector requested}} 32} 33 34 35void f0() { 36 register int *x0; 37 int *_dummy0 = &(*x0); 38 39 register int *x1; 40 int *_dummy1 = &(*(x1 + 1)); 41} 42 43void f1() { 44 register int x0[10]; 45 int *_dummy0 = &(*x0); // expected-error {{address of register variable requested}} 46 47 register int x1[10]; 48 int *_dummy1 = &(*(x1 + 1)); // expected-error {{address of register variable requested}} 49 50 register int *x2; 51 int *_dummy2 = &(*(x2 + 1)); 52 53 register int x3[10][10][10]; 54 int *_dummy3 = &x3[0][0]; // expected-error {{address of register variable requested}} 55 56 register struct { int f0[10]; } x4; 57 int *_dummy4 = &x4.f0[2]; // expected-error {{address of register variable requested}} 58} 59 60void f2() { 61 register int *y; 62 63 int *_dummy0 = &y; // expected-error {{address of register variable requested}} 64 int *_dummy1 = &y[10]; 65} 66 67void f3() { 68 extern void f4(); 69 void (*_dummy0)() = &****f4; 70} 71 72void f4() { 73 register _Complex int x; 74 75 int *_dummy0 = &__real__ x; // expected-error {{address of register variable requested}} 76} 77 78void f5() { 79 register int arr[2]; 80 81 /* This is just here because if we happened to support this as an 82 lvalue we would need to give a warning. Note that gcc warns about 83 this as a register before it warns about it as an invalid 84 lvalue. */ 85 int *_dummy0 = &(int*) arr; // expected-error {{address expression must be an lvalue or a function designator}} 86 int *_dummy1 = &(arr + 1); // expected-error {{address expression must be an lvalue or a function designator}} 87} 88 89