expr-address-of.c revision b104b1f6ca76cefab25c6ecb5df3bf87a0f875d3
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 element requested}} 32} 33 34typedef __attribute__(( ext_vector_type(4) )) float float4; 35 36float *testExtVectorComponentAccess(float4 x) { 37 return &x.w; // expected-error {{address of vector element requested}} 38} 39 40void f0() { 41 register int *x0; 42 int *_dummy0 = &(*x0); 43 44 register int *x1; 45 int *_dummy1 = &(*(x1 + 1)); 46} 47 48void f1() { 49 register int x0[10]; 50 int *_dummy0 = &(*x0); // expected-error {{address of register variable requested}} 51 52 register int x1[10]; 53 int *_dummy1 = &(*(x1 + 1)); // expected-error {{address of register variable requested}} 54 55 register int *x2; 56 int *_dummy2 = &(*(x2 + 1)); 57 58 register int x3[10][10][10]; 59 int *_dummy3 = &x3[0][0]; // expected-error {{address of register variable requested}} 60 61 register struct { int f0[10]; } x4; 62 int *_dummy4 = &x4.f0[2]; // expected-error {{address of register variable requested}} 63} 64 65void f2() { 66 register int *y; 67 68 int *_dummy0 = &y; // expected-error {{address of register variable requested}} 69 int *_dummy1 = &y[10]; 70} 71 72void f3() { 73 extern void f4(); 74 void (*_dummy0)() = &****f4; 75} 76 77void f4() { 78 register _Complex int x; 79 80 int *_dummy0 = &__real__ x; // expected-error {{address of register variable requested}} 81} 82 83void f5() { 84 register int arr[2]; 85 86 /* This is just here because if we happened to support this as an 87 lvalue we would need to give a warning. Note that gcc warns about 88 this as a register before it warns about it as an invalid 89 lvalue. */ 90 int *_dummy0 = &(int*) arr; // expected-error {{address expression must be an lvalue or a function designator}} 91 int *_dummy1 = &(arr + 1); // expected-error {{address expression must be an lvalue or a function designator}} 92} 93 94void f6(register int x) { 95 int * dummy0 = &x; // expected-error {{address of register variable requested}} 96} 97