1 // PERMUTE_ARGS:
2
3 /******************************************/
4
5 static int bigarray[100][100];
6
test1()7 void test1()
8 {
9 for (int i = 0; i < 100; i += 1)
10 {
11 for (int j = 0; j < 100; j += 1)
12 {
13 //printf("Array %i %i\n", i, j);
14 bigarray[i][j] = 0;
15 }
16 }
17 }
18
19 /******************************************/
20 // 10629
21
22 class Foo10629 {}
23
24 struct Bar10629
25 {
26 void[__traits(classInstanceSize, Foo10629)] x;
27 }
28
29 /******************************************/
30 // 11233
31
32 struct S11233
33 {
34 uint[0x100000] arr;
35 }
36
37 /******************************************/
38 // 11672
39
test11672()40 void test11672()
41 {
42 struct V { float f; }
43 struct S
44 {
45 V[3] v = V(1);
46 }
47
48 S s;
49 assert(s.v == [V(1), V(1), V(1)]); /* was [V(1), V(nan), V(nan)] */
50 }
51
52 /******************************************/
53 // 12509
54
55 struct A12509
56 {
57 int member;
58 }
59 struct B12509
60 {
61 A12509[0x10000] array;
62 }
63
64 /******************************************/
65 // 13505
66
67 class C13505 { void[10] x; }
68 struct S13505 { void[10] x; }
69
test13505()70 void test13505()
71 {
72 auto c = new C13505();
73 auto s = S13505();
74 }
75
76 /******************************************/
77 // 14699
78
79 struct S14699a { ubyte[0][10] values; }
80 struct S14699b { S14699a tbl; }
81 // +/
82
83 ubyte[0][1] sa14699;
84
test14699()85 void test14699()
86 {
87 //auto p = &sa14699; // Cannot work in Win32 (OMF)
88 }
89
90 /******************************************/
91 // 14805
92
93 struct S14805
94 {
95 ushort one;
96 }
97 auto a14805 = new S14805[513*513];
98
99 /******************************************/
100 // 15664
101
102 struct Data15664A
103 {
104 int[2] a;
105 int[2][2] b;
106 int c;
107 }
108
109 Data15664A d15664a1 = {[1, 2], [[3, 4], [5, 6]], 7}; // OK
110 const Data15664A d15664a2 = {[1, 2], [[3, 4], [5, 6]], 7}; // OK <- NG
111 shared Data15664A d15664a3 = {[1, 2], [[3, 4], [5, 6]], 7}; // OK <- NG
112 shared const Data15664A d15664a4 = {[1, 2], [[3, 4], [5, 6]], 7}; // OK <- NG
113 immutable Data15664A d15664a5 = {[1, 2], [[3, 4], [5, 6]], 7}; // OK <- NG
114
115 struct Data15664B
116 {
117 int[2] a;
118 const int[2][2] b;
119 int c;
120 }
121
122 Data15664B d15664b1 = {[1, 2], [[3, 4], [5, 6]], 7}; // OK
123 const Data15664B d15664b2 = {[1, 2], [[3, 4], [5, 6]], 7}; // OK
124 shared Data15664B d15664b3 = {[1, 2], [[3, 4], [5, 6]], 7}; // OK <- NG
125 shared const Data15664B d15664b4 = {[1, 2], [[3, 4], [5, 6]], 7}; // OK <- NG
126 immutable Data15664B d15664b5 = {[1, 2], [[3, 4], [5, 6]], 7}; // OK <- NG
127
test15664()128 void test15664()
129 {
130 assert(d15664a1.a == [1, 2]);
131 assert(d15664a2.a == [1, 2]);
132 assert(d15664a3.a == cast(shared)[1, 2]);
133 assert(d15664a4.a == cast(shared)[1, 2]);
134 assert(d15664a5.a == [1, 2]);
135 assert(d15664a1.b == [[3, 4], [5, 6]]);
136 assert(d15664a2.b == [[3, 4], [5, 6]]);
137 assert(d15664a3.b == cast(shared)[[3, 4], [5, 6]]);
138 assert(d15664a4.b == cast(shared)[[3, 4], [5, 6]]);
139 assert(d15664a5.b == [[3, 4], [5, 6]]);
140 assert(d15664a1.c == 7); // OK
141 assert(d15664a2.c == 7); // OK <- BG
142 assert(d15664a3.c == 7); // OK <- NG
143 assert(d15664a4.c == 7); // OK <- NG
144 assert(d15664a5.c == 7); // OK <- NG
145
146 assert(d15664b1.a == [1, 2]);
147 assert(d15664b2.a == [1, 2]);
148 assert(d15664b3.a == cast(shared)[1, 2]);
149 assert(d15664b4.a == cast(shared)[1, 2]);
150 assert(d15664b5.a == [1, 2]);
151 assert(d15664b1.b == [[3, 4], [5, 6]]);
152 assert(d15664b2.b == [[3, 4], [5, 6]]);
153 assert(d15664b3.b == cast(shared)[[3, 4], [5, 6]]);
154 assert(d15664b4.b == cast(shared)[[3, 4], [5, 6]]);
155 assert(d15664b5.b == [[3, 4], [5, 6]]);
156 assert(d15664b1.c == 7); // OK
157 assert(d15664b2.c == 7); // OK
158 assert(d15664b3.c == 7); // OK <- NG
159 assert(d15664b4.c == 7); // OK <- NG
160 assert(d15664b5.c == 7); // OK <- NG
161 }
162
163 /******************************************/
164
main()165 int main()
166 {
167 test1();
168 test11672();
169 test15664();
170
171 return 0;
172 }
173