1 /*
2 TEST_OUTPUT:
3 ---
4 fail_compilation/fail_circular.d(16): Error: circular reference to variable 'fail_circular.a1'
5 fail_compilation/fail_circular.d(17): Error: circular reference to variable 'fail_circular.a2'
6 fail_compilation/fail_circular.d(19): Error: circular reference to variable 'fail_circular.b1'
7 fail_compilation/fail_circular.d(20): Error: circular reference to variable 'fail_circular.b2'
8 fail_compilation/fail_circular.d(22): Error: circular reference to variable 'fail_circular.c1'
9 fail_compilation/fail_circular.d(23): Error: circular reference to variable 'fail_circular.c2'
10 fail_compilation/fail_circular.d(25): Error: circular initialization of variable 'fail_circular.d1'
11 fail_compilation/fail_circular.d(26): Error: circular initialization of variable 'fail_circular.d2'
12 fail_compilation/fail_circular.d(28): Error: circular initialization of variable 'fail_circular.e1'
13 fail_compilation/fail_circular.d(29): Error: circular initialization of variable 'fail_circular.e2'
14 ---
15 */
16 auto a1 =  a1;          // semantic error (cannot determine expression type)
17 auto a2 = .a2;          // semantic error
18 
19 const b1 =  b1;         // semantic error
20 const b2 = .b2;         // semantic error
21 
22 enum c1 =  c1;          // semantic error
23 enum c2 = .c2;          // semantic error
24 
25 const int d1 =  d1;     // CTFE error (expression type is determined to int)
26 const int d2 = .d2;     // CTFE error
27 
28 enum int e1 =  e1;      // CTFE error
29 enum int e2 = .e2;      // CTFE error
30 
31 /*
32 TEST_OUTPUT:
33 ---
34 fail_compilation/fail_circular.d(47): Error: circular reference to variable 'fail_circular.a1a'
35 fail_compilation/fail_circular.d(49): Error: circular reference to variable 'fail_circular.a2a'
36 fail_compilation/fail_circular.d(52): Error: circular reference to variable 'fail_circular.b1a'
37 fail_compilation/fail_circular.d(54): Error: circular reference to variable 'fail_circular.b2a'
38 fail_compilation/fail_circular.d(57): Error: circular reference to variable 'fail_circular.c1a'
39 fail_compilation/fail_circular.d(59): Error: circular reference to variable 'fail_circular.c2a'
40 fail_compilation/fail_circular.d(62): Error: circular initialization of variable 'fail_circular.d1a'
41 fail_compilation/fail_circular.d(64): Error: circular initialization of variable 'fail_circular.d2a'
42 fail_compilation/fail_circular.d(67): Error: circular initialization of variable 'fail_circular.e1a'
43 fail_compilation/fail_circular.d(69): Error: circular initialization of variable 'fail_circular.e2a'
44 ---
45 */
46 auto a1a =  a1b;
47 auto a1b =  a1a;        // semantic error
48 auto a2a =  a2b;
49 auto a2b = .a2a;        // semantic error
50 
51 const b1a =  b1b;
52 const b1b =  b1a;       // semantic error
53 const b2a =  b2b;
54 const b2b = .b2a;       // semantic error
55 
56 enum c1a =  c1b;
57 enum c1b =  c1a;        // semantic error
58 enum c2a =  c2b;
59 enum c2b = .c2a;        // semantic error
60 
61 const int d1a =  d1b;
62 const int d1b =  d1a;   // CTFE error
63 const int d2a =  d2b;
64 const int d2b = .d2a;   // CTFE error
65 
66 enum int e1a =  e1b;
67 enum int e1b =  e1a;    // CTFE error
68 enum int e2a =  e2b;
69 enum int e2b = .e2a;    // CTFE error
70 
71 /*
72 TEST_OUTPUT:
73 ---
74 fail_compilation/fail_circular.d(84): Error: circular reference to variable 'fail_circular.S1.a1'
75 fail_compilation/fail_circular.d(88): Error: circular reference to variable 'fail_circular.S2.b1'
76 fail_compilation/fail_circular.d(92): Error: circular reference to variable 'fail_circular.S3.c1'
77 fail_compilation/fail_circular.d(97): Error: circular reference to variable 'fail_circular.S4.a1a'
78 fail_compilation/fail_circular.d(102): Error: circular reference to variable 'fail_circular.S5.b1a'
79 fail_compilation/fail_circular.d(107): Error: circular reference to variable 'fail_circular.S6.c1a'
80 ---
81 */
82 struct S1
83 {
84     static a1 = S1.a1;          // semantic error
85 }
86 struct S2
87 {
88     static const b1 = S2.b1;     // semantic error
89 }
90 struct S3
91 {
92     enum c1 = S3.c1;             // semantic error
93 }
94 struct S4
95 {
96     static a1a = S4.a1b;
97     static a1b = S4.a1a;         // semantic error
98 }
99 struct S5
100 {
101     static const b1a = S5.b1b;
102     static const b1b = S5.b1a;   // semantic error
103 }
104 struct S6
105 {
106     enum c1a = S6.c1b;
107     enum c1b = S6.c1a;           // semantic error
108 }
109 
110 /*
111 TEST_OUTPUT:
112 ---
113 fail_compilation/fail_circular.d(123): Error: circular reference to variable 'fail_circular.C.a1'
114 fail_compilation/fail_circular.d(125): Error: circular reference to variable 'fail_circular.C.b1'
115 fail_compilation/fail_circular.d(127): Error: circular reference to variable 'fail_circular.C.c1'
116 fail_compilation/fail_circular.d(130): Error: circular reference to variable 'fail_circular.C.a1a'
117 fail_compilation/fail_circular.d(133): Error: circular reference to variable 'fail_circular.C.b1a'
118 fail_compilation/fail_circular.d(136): Error: circular reference to variable 'fail_circular.C.c1a'
119 ---
120 */
121 class C
122 {
123     static a1 = C.a1;           // semantic error
124 
125     static const b1 = C.b1;     // semantic error
126 
127     enum c1 = C.c1;             // semantic error
128 
129     static a1a = C.a1b;
130     static a1b = C.a1a;         // semantic error
131 
132     static const b1a = C.b1b;
133     static const b1b = C.b1a;   // semantic error
134 
135     enum c1a = C.c1b;
136     enum c1b = C.c1a;           // semantic error
137 }
138