blob: 20390429dd246d3bbb1f5a06d6d60e8998875edd [file] [log] [blame]
Chris Lattnera3249072007-11-16 17:46:48 +00001// RUN: clang %s -verify -fsyntax-only
Steve Naroff73cf87e2008-02-29 23:30:25 +00002struct xx { int bitf:1; };
3
4struct entry { struct xx *whatever;
5 int value;
6 int bitf:1; };
Chris Lattnera3249072007-11-16 17:46:48 +00007void add_one(int *p) { (*p)++; }
8
9void test() {
10 register struct entry *p;
11 add_one(&p->value);
Steve Naroff73cf87e2008-02-29 23:30:25 +000012 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}}
Chris Lattnera3249072007-11-16 17:46:48 +000016}
17
18void foo() {
19 register int x[10];
20 &x[10]; // expected-error {{address of register variable requested}}
Anders Carlsson4b3db2b2008-02-01 07:15:58 +000021
22 register int *y;
23
24 int *x2 = &y; // expected-error {{address of register variable requested}}
25 int *x3 = &y[10];
Chris Lattnera3249072007-11-16 17:46:48 +000026}
27
Steve Naroff73cf87e2008-02-29 23:30:25 +000028void 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}
Chris Lattnera3249072007-11-16 17:46:48 +000033
Daniel Dunbarb45f75c2008-08-04 20:02:37 +000034
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