annotate gcc/testsuite/gdc.dg/pr94777b.d @ 152:2b5abeee2509

update gcc11
author anatofuz
date Mon, 25 May 2020 07:50:57 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
152
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
1 // https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94777
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
2 // { dg-additional-options "-fmain -funittest" }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
3 // { dg-do run { target hw } }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
4 // { dg-skip-if "needs gcc/config.d" { ! d_runtime } }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
5
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
6 void testVariadic(T)(int nargs, ...)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
7 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
8 import core.stdc.stdarg;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
9 foreach(i; 0 .. nargs)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
10 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
11 auto arg = va_arg!T(_argptr);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
12 static if (__traits(compiles, arg.value))
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
13 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
14 assert(arg.value == i);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
15 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
16 else static if (__traits(compiles, arg[0]))
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
17 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
18 foreach (value; arg)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
19 assert(value == i);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
20 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
21 else
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
22 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
23 assert(arg == T.init);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
24 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
25 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
26 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
27
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
28 /******************************************/
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
29
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
30 struct Constructor
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
31 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
32 static int count;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
33 int value;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
34 this(int v) { count++; this.value = v; }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
35 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
36
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
37 unittest
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
38 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
39 auto a0 = Constructor(0);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
40 auto a1 = Constructor(1);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
41 auto a2 = Constructor(2);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
42 testVariadic!Constructor(3, a0, a1, a2);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
43 assert(Constructor.count == 3);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
44 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
45
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
46 /******************************************/
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
47
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
48 struct Postblit
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
49 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
50 static int count = 0;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
51 int value;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
52 this(this) { count++; }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
53 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
54
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
55 unittest
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
56 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
57 auto a0 = Postblit(0);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
58 auto a1 = Postblit(1);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
59 auto a2 = Postblit(2);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
60 testVariadic!Postblit(3, a0, a1, a2);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
61 assert(Postblit.count == 3);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
62 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
63
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
64 /******************************************/
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
65
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
66 struct Destructor
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
67 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
68 static int count = 0;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
69 int value;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
70 ~this() { count++; }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
71 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
72
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
73 unittest
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
74 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
75 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
76 auto a0 = Destructor(0);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
77 auto a1 = Destructor(1);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
78 auto a2 = Destructor(2);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
79 static assert(!__traits(compiles, testVariadic!Destructor(3, a0, a1, a2)));
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
80 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
81 assert(Destructor.count == 3);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
82 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
83
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
84 /******************************************/
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
85
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
86 struct CopyConstructor
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
87 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
88 static int count = 0;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
89 int value;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
90 this(int v) { this.value = v; }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
91 this(ref typeof(this) other) { count++; this.value = other.value; }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
92 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
93
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
94 unittest
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
95 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
96 auto a0 = CopyConstructor(0);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
97 auto a1 = CopyConstructor(1);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
98 auto a2 = CopyConstructor(2);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
99 testVariadic!CopyConstructor(3, a0, a1, a2);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
100 // NOTE: Cpctors are not implemented yet.
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
101 assert(CopyConstructor.count == 0 || CopyConstructor.count == 3);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
102 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
103
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
104 /******************************************/
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
105
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
106 unittest
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
107 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
108 struct Nested
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
109 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
110 int value;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
111 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
112
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
113 auto a0 = Nested(0);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
114 auto a1 = Nested(1);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
115 auto a2 = Nested(2);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
116 testVariadic!Nested(3, a0, a1, a2);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
117 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
118
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
119 /******************************************/
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
120
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
121 unittest
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
122 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
123 struct Nested2
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
124 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
125 int value;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
126 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
127
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
128 void testVariadic2(int nargs, ...)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
129 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
130 import core.stdc.stdarg;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
131 foreach(i; 0 .. nargs)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
132 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
133 auto arg = va_arg!Nested2(_argptr);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
134 assert(arg.value == i);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
135 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
136 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
137
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
138 auto a0 = Nested2(0);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
139 auto a1 = Nested2(1);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
140 auto a2 = Nested2(2);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
141 testVariadic2(3, a0, a1, a2);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
142 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
143
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
144 /******************************************/
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
145
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
146 struct EmptyStruct
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
147 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
148 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
149
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
150 unittest
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
151 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
152 auto a0 = EmptyStruct();
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
153 auto a1 = EmptyStruct();
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
154 auto a2 = EmptyStruct();
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
155 testVariadic!EmptyStruct(3, a0, a1, a2);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
156 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
157
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
158 /******************************************/
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
159
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
160 alias StaticArray = int[4];
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
161
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
162 unittest
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
163 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
164 StaticArray a0 = 0;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
165 StaticArray a1 = 1;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
166 StaticArray a2 = 2;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
167 // XBUG: Front-end rewrites static arrays as dynamic arrays.
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
168 //testVariadic!StaticArray(3, a0, a1, a2);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
169 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
170
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
171 /******************************************/
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
172
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
173 alias EmptyArray = void[0];
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
174
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
175 unittest
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
176 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
177 auto a0 = EmptyArray.init;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
178 auto a1 = EmptyArray.init;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
179 auto a2 = EmptyArray.init;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
180 testVariadic!EmptyArray(3, a0, a1, a2);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
181 }