+++ /dev/null
-// { dg-options "-I $srcdir/gdc.dg -I $srcdir/gdc.dg/imports -Wno-psabi" }
-// { dg-additional-sources "imports/gdc27.d imports/gdc231.d" }
-// { dg-do compile }
-
-import core.simd;
-import gcc.attribute;
-
-/******************************************/
-// https://bugzilla.gdcproject.org/show_bug.cgi?id=27
-
-import imports.gdc27;
-
-interface I_B : I_A
-{
- void b();
-}
-
-abstract class C_B : C_A, I_B
-{
- abstract void b();
-}
-
-/******************************************/
-// https://bugzilla.gdcproject.org/show_bug.cgi?id=108
-
-@attribute("forceinline")
-void forceinline108()
-{
-}
-
-@attribute("noinline")
-void noinline108()
-{
-}
-
-@attribute("flatten")
-void flatten108()
-{
-}
-
-/******************************************/
-// https://bugzilla.gdcproject.org/show_bug.cgi?id=170
-
-import imports.gdc170;
-
-void test170()
-{
- foo!void.foo1!void();
- foo!void.foo2!void();
- foo!void.foo3();
- foo!void.foo3!void();
- foo!void.foo4();
- foo!void.foo4!void();
- foo!void.foo5!void(null);
- foo!void.foo6!void(null);
- foo!void.foo7(null);
- foo!void.foo7!void(null);
- foo!void.foo8(null);
- foo!void.foo8!void(null);
-}
-
-/******************************************/
-// https://bugzilla.gdcproject.org/show_bug.cgi?id=212
-
-template hasElaborateAssign212(S)
-{
- enum hasElaborateAssign212 = is(typeof(S.init.opAssign(rvalueOf212!S))) ||
- is(typeof(lvalueOf212!S)) ;
-}
-
-T rvalueOf212(T)();
-
-T lvalueOf212(T)();
-
-
-template TypeTuple212(TList...)
-{
- alias TypeTuple212 = TList;
-}
-
-template Tuple212()
-{
- struct Tuple212
- {
- void opAssign(R)(R)
- {
- if (hasElaborateAssign212!R)
- {
- }
- }
- }
-}
-
-ref emplaceRef212()
-{
- static if (!hasElaborateAssign212!(Tuple212!()))
- chunk;
-}
-
-class TaskPool212
-{
- void reduce()
- {
- Tuple212!() seed = void;
- Tuple212!()[] results;
- foreach(i; TypeTuple212!(0, 1))
- results[i] = seed;
- }
-}
-
-/******************************************/
-// https://bugzilla.gdcproject.org/show_bug.cgi?id=213
-
-struct S213
-{
- int4 vec;
-}
-
-void test213()
-{
- S213 s, b;
-
- assert(s == b);
-}
-
-/******************************************/
-// https://bugzilla.gdcproject.org/show_bug.cgi?id=218
-
-struct S218a
-{
- this(int* pdata_)
- {
- pdata = pdata_;
- }
-
- void opIndexAssign(int, size_t) { }
- int* pdata;
-};
-
-struct S218
-{
- S218a getS218a()
- {
- return S218a(data.ptr);
- }
-
- int[] data;
- int[] tab2;
-};
-
-S218 f()
-{
- S218 r;
-
- for(int i = 0; i < 1; ++i)
- r.getS218a()[0] = 0;
-
- return r;
-}
-
-S218 var;
-
-static this()
-{
- var = f();
-}
-
-/******************************************/
-// https://bugzilla.gdcproject.org/show_bug.cgi?id=223
-
-struct S223
-{
- long[8] field;
-}
-
-class C223
-{
- long[8] field;
-}
-
-S223 test223_1();
-real test223_2();
-string[long[8]] test223_3();
-C223 test223_4();
-long test223_5();
-long[] test223_6();
-long[8] test223_7();
-C223[8] test223_8();
-void delegate() test223_9();
-
-bool test223()
-{
- return test223_1() == test223_1() &&
- test223_1() is test223_1() &&
- test223_2() == test223_2() &&
- test223_2() is test223_2() &&
- test223_3() == test223_3() &&
- test223_3() is test223_3() &&
- test223_4() == test223_4() &&
- test223_4() is test223_4() &&
- test223_5() == test223_5() &&
- test223_5() is test223_5() &&
- test223_6() == test223_6() &&
- test223_6() is test223_6() &&
- test223_7() == test223_7() &&
- test223_7() is test223_7() &&
- test223_8() == test223_8() &&
- test223_8() is test223_8() &&
- test223_9() == test223_9() &&
- test223_9() is test223_9();
-}
-
-/******************************************/
-// https://bugzilla.gdcproject.org/show_bug.cgi?id=231
-
-import imports.gdc231;
-
-class Range231 : Widget231
-{
- override void* getStruct()
- {
- return null;
- }
-}
-
-/******************************************/
-// https://bugzilla.gdcproject.org/show_bug.cgi?id=239
-
-import imports.gdc239;
-
-class C239
-{
- C239a *foo;
-}
-
-/******************************************/
-// https://bugzilla.gdcproject.org/show_bug.cgi?id=240
-
-interface I204
-{
- void f();
-}
-
-class C204 : I204
-{
- void f();
-}
-
-/******************************************/
-// https://bugzilla.gdcproject.org/show_bug.cgi?id=241
-
-import imports.gdc241a;
-public import imports.gdc241b : S241, C241, E241, N241;
-
-/******************************************/
-// https://bugzilla.gdcproject.org/show_bug.cgi?id=242
-
-struct S242a
-{
- enum M = S242a();
- void iter() { }
-}
-
-void test242a()
-{
- return S242a.M.iter;
-}
-
-struct S242b
-{
- enum M = S242b();
- void iter() { }
-}
-
-void test242b()
-{
- S242b.M.iter;
-}
-
-/******************************************/
-// https://bugzilla.gdcproject.org/show_bug.cgi?id=251
-
-import imports.gdc251a;
-import imports.gdc251b : C251;
-
-/******************************************/
-// https://bugzilla.gdcproject.org/show_bug.cgi?id=253
-
-import imports.gdc253;
-
-class C253 : C253a
-{
- void test253() { }
-}
-
-/******************************************/
-// https://bugzilla.gdcproject.org/show_bug.cgi?id=255
-
-class C255
-{
- void f2()
- {
- class C1
- {
- void f1()
- {
- void f0()
- {
- class C0
- {
- void test255()
- {
- f2();
- }
- }
- }
- }
- }
- }
-}
-
-class C255a
-{
- void f3()
- {
- class C1
- {
- void f2()
- {
- void f1()
- {
- void f0()
- {
- class C0
- {
- void test255a()
- {
- f3();
- }
- }
- }
- }
- }
- }
- }
-}
-
-class C255b
-{
- void f4()
- {
- class C2
- {
- void f3()
- {
- void f2()
- {
- class C1
- {
- void f1()
- {
- void f0()
- {
- class C0
- {
- void test255b()
- {
- f4();
- }
- }
- }
- }
- }
- }
- }
- }
- }
-}
-
-/******************************************/
-// https://bugzilla.gdcproject.org/show_bug.cgi?id=256
-
-import imports.gdcpkg256 : gdc256;
-
-/******************************************/
-// https://bugzilla.gdcproject.org/show_bug.cgi?id=261
-
-void test261()
-{
- class C1
- {
- void f1()
- {
- class C2
- {
- void f2()
- {
- auto v = &f1;
- }
- }
- }
- }
-}
-
-/******************************************/
-// https://bugzilla.gdcproject.org/show_bug.cgi?id=280
-
-struct RBNode280
-{
- RBNode280* _parent;
-
- @property left(RBNode280*)
- {
- _parent = &this;
- }
-}
-
-class RedBlackTree280
-{
- RBNode280* _end;
- RBNode280* _begin;
-
- this(int[] elems...)
- {
- _end = new RBNode280;
-
- foreach (e; elems)
- {
- _end.left = _begin;
- }
- }
-}
-
-__gshared s = new RedBlackTree280('h');
-
-/******************************************/
-// https://bugzilla.gdcproject.org/show_bug.cgi?id=284
-
-alias v284 = __vector(int[2]);
-
-v284 test284(v284 a, ...)
-{
- return a + a;
-}
--- /dev/null
+// https://bugzilla.gdcproject.org/show_bug.cgi?id=108
+// { dg-do compile }
+
+import gcc.attribute;
+
+@attribute("forceinline")
+void forceinline108()
+{
+}
+
+@attribute("noinline")
+void noinline108()
+{
+}
+
+@attribute("flatten")
+void flatten108()
+{
+}
--- /dev/null
+// https://bugzilla.gdcproject.org/show_bug.cgi?id=115
+// { dg-do run { target hw } }
+// { dg-skip-if "needs gcc/config.d" { ! d_runtime } }
+
+void main()
+{
+ union U
+ {
+ float f;
+ uint i;
+ }
+ float a = 123.0;
+ const l = U(a);
+
+ assert(l.i == U(a).i);
+}
--- /dev/null
+// https://bugzilla.gdcproject.org/show_bug.cgi?id=121
+// { dg-do compile }
+
+immutable char C121 = void; // ICE
--- /dev/null
+// https://bugzilla.gdcproject.org/show_bug.cgi?id=122
+// { dg-do compile }
+
+struct map(alias fun)
+{
+ @property run()
+ {
+ }
+}
+
+struct Task(Args)
+{
+ Args _args;
+}
+
+class TaskPool
+{
+ template reduce(functions...)
+ {
+ auto reduce(Args)(Args args)
+ {
+ alias RTask = Task!(typeof(args));
+ auto task = RTask();
+ }
+ }
+}
+
+TaskPool taskPool() {
+ return new TaskPool;
+}
+
+void test122()
+{
+ enum delta = 1;
+ taskPool.reduce!"a + b"(map!({ immutable x = delta; })());
+}
--- /dev/null
+// https://bugzilla.gdcproject.org/show_bug.cgi?id=127
+// { dg-do compile }
+
+int[0] test127a; // OK
+int[1][0] test127b; // OK
+int[0][1] test127c; // ICE
--- /dev/null
+// https://bugzilla.gdcproject.org/show_bug.cgi?id=131
+// { dg-do run { target hw } }
+// { dg-skip-if "needs gcc/config.d" { ! d_runtime } }
+
+struct S131
+{
+ this(string ) { }
+ string opAssign(string v) { return v; }
+}
+
+void main()
+{
+ S131[string] s;
+ s["foo"] = "bar";
+}
--- /dev/null
+// https://bugzilla.gdcproject.org/show_bug.cgi?id=133
+// { dg-do compile }
+
+void delegate()[] D133;
+
+void test133a(void delegate() dg)
+{
+ D133 ~= dg;
+}
+
+void test133()
+{
+ void nested()
+ {}
+ test133a(&nested);
+}
--- /dev/null
+// https://bugzilla.gdcproject.org/show_bug.cgi?id=141
+// { dg-do run { target hw } }
+// { dg-skip-if "needs gcc/config.d" { ! d_runtime } }
+
+bool test141(int a)
+{
+ return a > (a + 1);
+}
+
+void main()
+{
+ assert(test141(int.min) == false);
+ assert(test141(int.max) == true);
+}
--- /dev/null
+// https://bugzilla.gdcproject.org/show_bug.cgi?id=142
+// { dg-do compile }
+
+import gcc.attribute;
+
+@attribute("noinline")
+int test142a()()
+{
+ return 142;
+}
+
+void test142()
+{
+ enum E142 = test142a();
+}
--- /dev/null
+// https://bugzilla.gdcproject.org/show_bug.cgi?id=15
+// { dg-do compile }
+
+template map(fun...)
+{
+ auto map(Range)(Range r)
+ {
+ return MapResult!(fun, Range)(r);
+ }
+}
+
+private struct MapResult(alias fun, Range)
+{
+ Range _input;
+
+ this(Range input)
+ {
+ _input = input;
+ }
+}
+
+class B
+{
+ class A { }
+ A a;
+}
+
+class C
+{
+ void visit(B b)
+ {
+ auto as = [b.a];
+ map!((d) { return d; })(as);
+ }
+}
--- /dev/null
+// https://bugzilla.gdcproject.org/show_bug.cgi?id=17
+// { dg-do run { target hw } }
+// { dg-skip-if "needs gcc/config.d" { ! d_runtime } }
+
+/**
+ * Parameters are not copied into a frame to be accessed from
+ * the method's __require function.
+ */
+void contractTest(string path)
+{
+ assert(path[0] == 't');
+ assert(path.length == 9);
+ assert(path[8] == 'i');
+}
+
+interface ModuleSaver
+{
+ void save(string str)
+ in
+ {
+ contractTest(str);
+ }
+}
+
+class ModuleWriter : ModuleSaver
+{
+ void save (string str)
+ in {}
+ do
+ {
+ }
+}
+
+void main()
+{
+ (new ModuleWriter()).save ("test.0.mci");
+}
--- /dev/null
+// https://bugzilla.gdcproject.org/show_bug.cgi?id=170
+// { dg-options "-I $srcdir/gdc.dg" }
+// { dg-do compile }
+
+import imports.gdc170;
+
+void test170()
+{
+ foo!void.foo1!void();
+ foo!void.foo2!void();
+ foo!void.foo3();
+ foo!void.foo3!void();
+ foo!void.foo4();
+ foo!void.foo4!void();
+ foo!void.foo5!void(null);
+ foo!void.foo6!void(null);
+ foo!void.foo7(null);
+ foo!void.foo7!void(null);
+ foo!void.foo8(null);
+ foo!void.foo8!void(null);
+}
--- /dev/null
+// https://bugzilla.gdcproject.org/show_bug.cgi?id=171
+// { dg-do run { target hw } }
+// { dg-skip-if "needs gcc/config.d" { ! d_runtime } }
+
+void test171a()
+{
+ int count = 0;
+ short a = -1;
+ while (a != 0)
+ {
+ a >>>= 1;
+ count++;
+ assert(count <= 16);
+ }
+}
+
+void test171b()
+{
+ uint[3] lhs = [99, 201, 300],
+ rhs = [-1, 0, 0];
+ long t = 0;
+
+ for (int i = 0; i < 3; i++)
+ {
+ t += lhs[i];
+ t -= rhs[i];
+ lhs[i] = cast(uint) t;
+ t >>= uint.sizeof * 8;
+ }
+
+ assert(lhs == [100, 200, 300]);
+}
+
+void main()
+{
+ test171a();
+ test171b();
+}
--- /dev/null
+// https://bugzilla.gdcproject.org/show_bug.cgi?id=179
+// { dg-do run { target hw } }
+// { dg-skip-if "needs gcc/config.d" { ! d_runtime } }
+
+import core.stdc.stdio;
+
+struct S179a
+{
+ @disable this(this);
+}
+
+struct S179b
+{
+ S179a s1;
+ void connect() { printf("this=%p\n", &this); }
+}
+
+class C179
+{
+ private S179b s2;
+ ref S179b value() @property
+ {
+ printf("this=%p\n", &s2);
+ return s2;
+ }
+}
+
+void main()
+{
+ C179 a = new C179;
+ a.value.connect();
+}
--- /dev/null
+// https://bugzilla.gdcproject.org/show_bug.cgi?id=183
+// { dg-do compile }
+
+struct S183a
+{
+ union I183a
+ {
+ struct
+ {
+ double x, y, z;
+ }
+ struct
+ {
+ double a, b, c;
+ }
+ }
+
+ I183a inner;
+
+ this(double x, double y, double z)
+ {
+ this.inner.x = x;
+ this.inner.y = y;
+ this.inner.z = z;
+ }
+}
+
+struct S183b
+{
+ @property get()
+ {
+ union Buf
+ {
+ void[0] result;
+ }
+ const Buf buf = { };
+ return buf.result;
+ }
+}
+
+struct S183c
+{
+ @property get()
+ {
+ union Buf
+ {
+ TypeInfo info;
+ void[0] result;
+ }
+ const Buf buf = { };
+ return buf.result;
+ }
+}
+
+void test183()
+{
+ auto v1 = S183a(0, 0, 0);
+ auto v2 = S183b().get;
+ auto v3 = S183c().get;
+}
--- /dev/null
+// https://bugzilla.gdcproject.org/show_bug.cgi?id=186
+// { dg-do run { target hw } }
+// { dg-skip-if "needs gcc/config.d" { ! d_runtime } }
+
+struct S186
+{
+ union
+ {
+ struct
+ {
+ ubyte fieldA;
+ byte fieldB = -1;
+ byte fieldC = -1;
+ }
+ size_t _complete;
+ }
+
+ this(size_t complete)
+ {
+ this._complete = complete;
+ }
+}
+
+static if (size_t.sizeof == 8)
+ enum checkval = 0x0200000000000002;
+else
+ enum checkval = 0x02000002;
+
+void check186(in S186 obj, byte fieldB)
+{
+ assert(obj.fieldA == 2);
+ assert(obj.fieldB == 0);
+ assert(obj.fieldC == 0);
+ assert(obj._complete == checkval);
+ assert(fieldB == 0);
+}
+
+void test186(size_t val)
+{
+ S186 obj = S186(val);
+ check186(obj, obj.fieldB);
+
+ assert(obj.fieldA == 2);
+ assert(obj.fieldB == 0);
+ assert(obj.fieldC == 0);
+ assert(obj._complete == checkval);
+
+ obj = S186(val);
+ check186(obj, obj.fieldB);
+
+ assert(obj.fieldA == 2);
+ assert(obj.fieldB == 0);
+ assert(obj.fieldC == 0);
+ assert(obj._complete == checkval);
+}
+
+void main()
+{
+ test186(checkval);
+}
--- /dev/null
+// https://bugzilla.gdcproject.org/show_bug.cgi?id=187
+// { dg-do run { target hw } }
+// { dg-skip-if "needs gcc/config.d" { ! d_runtime } }
+
+align(1) struct S187b
+{
+ align(1)
+ {
+ uint unpaddedA;
+ ushort unpaddedB;
+ }
+}
+
+struct S187a
+{
+ S187b[3] unpaddedArray;
+ ubyte wontInitialize = ubyte.init;
+}
+
+struct S187
+{
+ S187a interesting;
+}
+
+
+void prepareStack()
+{
+ byte[255] stackGarbage;
+ foreach(i, ref b; stackGarbage)
+ {
+ b = cast(byte)(-i);
+ }
+}
+
+void main()
+{
+ prepareStack();
+ auto a = S187(S187a());
+ assert(a.interesting.wontInitialize == 0);
+}
--- /dev/null
+// https://bugzilla.gdcproject.org/show_bug.cgi?id=19
+// { dg-do compile }
+
+void test19()
+{
+ byte b;
+ --b = b;
+}
--- /dev/null
+// https://bugzilla.gdcproject.org/show_bug.cgi?id=191
+// { dg-do run { target hw } }
+// { dg-skip-if "needs gcc/config.d" { ! d_runtime } }
+
+class C191
+{
+ int count = 0;
+
+ void testA()
+ {
+ class Inner
+ {
+ void test()
+ {
+ void localFunction()
+ {
+ if (++count != 5)
+ testA();
+ }
+ localFunction();
+ }
+ }
+ scope ic = new Inner();
+ ic.test();
+ }
+
+ void testB()
+ {
+ class Inner
+ {
+ void test()
+ {
+ void localFunction()
+ {
+ void anotherLocalFunction()
+ {
+ if (++count != 10)
+ testB();
+ }
+ anotherLocalFunction();
+ }
+ localFunction();
+ }
+ }
+ scope ic = new Inner();
+ ic.test();
+ }
+
+ void testC()
+ {
+ class Inner
+ {
+ int a = 1;
+
+ void test()
+ {
+ void localFunction()
+ {
+ count += a;
+ if (count != 15)
+ testC();
+ assert(a == 1);
+ }
+ localFunction();
+ }
+ }
+ scope ic = new Inner();
+ ic.test();
+ }
+
+ void testD()
+ {
+ class Inner
+ {
+ void test()
+ {
+ int a = 1;
+
+ void localFunction()
+ {
+ count += a;
+ if (count != 20)
+ testD();
+ assert(a == 1);
+ }
+ localFunction();
+ }
+ }
+ scope ic = new Inner();
+ ic.test();
+ }
+
+ void testE()
+ {
+ class Inner
+ {
+ int a = 1;
+
+ void test()
+ {
+ void localFunction()
+ {
+ void anotherLocalFunction()
+ {
+ count += a;
+ if (count != 25)
+ testE();
+ assert(a == 1);
+ }
+
+ anotherLocalFunction();
+ }
+
+ localFunction();
+ }
+ }
+ scope ic = new Inner();
+ ic.test();
+ }
+
+ void testF()
+ {
+ class Inner
+ {
+ void test()
+ {
+ int a = 1;
+
+ void localFunction()
+ {
+ void anotherLocalFunction()
+ {
+ count += a;
+ if (count != 30)
+ testF();
+ assert(a == 1);
+ }
+
+ anotherLocalFunction();
+ }
+
+ localFunction();
+ }
+ }
+ scope ic = new Inner();
+ ic.test();
+ }
+
+ void testG()
+ {
+ class Inner
+ {
+ void test()
+ {
+ void localFunction()
+ {
+ int a = 1;
+
+ void anotherLocalFunction()
+ {
+ count += a;
+ if (count != 35)
+ testG();
+ assert(a == 1);
+ }
+
+ anotherLocalFunction();
+ }
+
+ localFunction();
+ }
+ }
+ scope ic = new Inner();
+ ic.test();
+ }
+}
+
+void main()
+{
+ scope oc = new C191();
+ oc.testA();
+ assert(oc.count == 5);
+
+ oc.testB();
+ assert(oc.count == 10);
+
+ oc.testC();
+ assert(oc.count == 15);
+
+ oc.testD();
+ assert(oc.count == 20);
+
+ oc.testE();
+ assert(oc.count == 25);
+
+ oc.testF();
+ assert(oc.count == 30);
+
+ oc.testG();
+ assert(oc.count == 35);
+}
--- /dev/null
+// https://bugzilla.gdcproject.org/show_bug.cgi?id=194
+// { dg-do compile }
+
+auto test194(ref bool overflow)
+{
+ import core.checkedint;
+
+ return adds(1, 1, overflow);
+}
--- /dev/null
+// https://bugzilla.gdcproject.org/show_bug.cgi?id=196
+// { dg-do assemble }
+// { dg-skip-if "needs gcc/config.d" { ! d_runtime } }
+
+class C196
+{
+ int a;
+}
+
+struct S196
+{
+ int a;
+}
+
+void test196()
+{
+ __gshared c = new C196();
+ __gshared s = new S196(0);
+ c.a = 1;
+ s.a = 1;
+}
--- /dev/null
+// https://bugzilla.gdcproject.org/show_bug.cgi?id=198
+// { dg-do run { target hw } }
+// { dg-skip-if "needs gcc/config.d" { ! d_runtime } }
+
+struct S198a
+{
+ union
+ {
+ float[3] v;
+ struct
+ {
+ float x;
+ float y;
+ float z;
+ }
+ }
+
+ this(float x_, float y_, float z_)
+ {
+ x = x_;
+ y = y_;
+ z = z_;
+ }
+
+ ref S198a opOpAssign(string op)(S198a operand)
+ if (op == "+")
+ {
+ x += operand.x;
+ y += operand.y;
+ z += operand.z;
+ return this;
+ }
+}
+
+struct S198b
+{
+ @property get()
+ {
+ union Buf
+ {
+ void[0] result;
+ }
+ const Buf buf = { };
+ return buf.result;
+ }
+}
+
+struct S198c
+{
+ @property get()
+ {
+ union Buf
+ {
+ TypeInfo info;
+ void[0] result;
+ }
+ const Buf buf = { };
+ return buf.result;
+ }
+}
+
+
+void main()
+{
+ S198a sum = S198a(0, 0, 0);
+
+ foreach(size_t v; 0 .. 3)
+ sum += S198a(1, 2, 3);
+
+ assert(sum.v == [3, 6, 9]);
+}
--- /dev/null
+// https://bugzilla.gdcproject.org/show_bug.cgi?id=200
+// { dg-do run { target hw } }
+// { dg-skip-if "needs gcc/config.d" { ! d_runtime } }
+
+void test200a(double x, double y)
+{
+ const double y2 = x + 1.0;
+ assert(y == y2);
+}
+
+void main()
+{
+ const double x = .012;
+ const double y = x + 1.0;
+ test200a(x, y);
+}
--- /dev/null
+// https://bugzilla.gdcproject.org/show_bug.cgi?id=204
+// { dg-do compile }
+
+interface I204
+{
+ void f();
+}
+
+class C204 : I204
+{
+ void f();
+}
--- /dev/null
+// https://bugzilla.gdcproject.org/show_bug.cgi?id=210
+// { dg-do run { target hw } }
+// { dg-skip-if "needs gcc/config.d" { ! d_runtime } }
+
+struct S210
+{
+ ubyte a;
+ uint b;
+}
+
+union U210
+{
+ S210 a;
+ uint b;
+}
+
+S210 test210a()
+{
+ S210 s = S210(1, 2);
+ return s;
+}
+
+S210[2] test210b()
+{
+ S210[2] s = [S210(1, 2), S210(3, 4)];
+ return s;
+}
+
+U210 test210c()
+{
+ U210 s = U210(S210(1, 2));
+ return s;
+}
+
+U210[2] test210d()
+{
+ U210[2] s = [U210(S210(1, 2)), U210(S210(3, 4))];
+ return s;
+}
+
+void main()
+{
+ S210 a = S210(1, 2);
+ assert(a == S210(1, 2));
+ assert(a == test210a());
+ assert(a != S210(2, 1));
+
+ S210[2] b = [S210(1, 2), S210(3, 4)];
+ assert(b == [S210(1, 2), S210(3, 4)]);
+ assert(b == test210b());
+ assert(b != [S210(2, 1), S210(3, 4)]);
+
+ U210 c = U210(S210(1, 2));
+ assert(c == U210(S210(1, 2)));
+ assert(c == test210c());
+ assert(c != U210(S210(2, 1)));
+
+ U210[2] d = [U210(S210(1, 2)), U210(S210(3, 4))];
+ assert(d == [U210(S210(1, 2)), U210(S210(3, 4))]);
+ assert(d == test210d());
+ assert(d != [U210(S210(2, 1)), U210(S210(3, 4))]);
+}
--- /dev/null
+// https://bugzilla.gdcproject.org/show_bug.cgi?id=212
+// { dg-do compile }
+
+template hasElaborateAssign212(S)
+{
+ enum hasElaborateAssign212 = is(typeof(S.init.opAssign(rvalueOf212!S))) ||
+ is(typeof(lvalueOf212!S)) ;
+}
+
+T rvalueOf212(T)();
+
+T lvalueOf212(T)();
+
+
+template TypeTuple212(TList...)
+{
+ alias TypeTuple212 = TList;
+}
+
+template Tuple212()
+{
+ struct Tuple212
+ {
+ void opAssign(R)(R)
+ {
+ if (hasElaborateAssign212!R)
+ {
+ }
+ }
+ }
+}
+
+ref emplaceRef212()
+{
+ static if (!hasElaborateAssign212!(Tuple212!()))
+ chunk;
+}
+
+class TaskPool212
+{
+ void reduce()
+ {
+ Tuple212!() seed = void;
+ Tuple212!()[] results;
+ foreach(i; TypeTuple212!(0, 1))
+ results[i] = seed;
+ }
+}
--- /dev/null
+// https://bugzilla.gdcproject.org/show_bug.cgi?id=213
+// { dg-options "-Wno-psabi" }
+// { dg-do compile }
+
+import core.simd;
+
+struct S213
+{
+ int4 vec;
+}
+
+void test213()
+{
+ S213 s, b;
+
+ assert(s == b);
+}
--- /dev/null
+// https://bugzilla.gdcproject.org/show_bug.cgi?id=218
+// { dg-do compile }
+
+struct S218a
+{
+ this(int* pdata_)
+ {
+ pdata = pdata_;
+ }
+
+ void opIndexAssign(int, size_t) { }
+ int* pdata;
+};
+
+struct S218
+{
+ S218a getS218a()
+ {
+ return S218a(data.ptr);
+ }
+
+ int[] data;
+ int[] tab2;
+};
+
+S218 f()
+{
+ S218 r;
+
+ for(int i = 0; i < 1; ++i)
+ r.getS218a()[0] = 0;
+
+ return r;
+}
+
+S218 var;
+
+static this()
+{
+ var = f();
+}
--- /dev/null
+// https://bugzilla.gdcproject.org/show_bug.cgi?id=223
+// { dg-do compile }
+
+struct S223
+{
+ long[8] field;
+}
+
+class C223
+{
+ long[8] field;
+}
+
+S223 test223_1();
+real test223_2();
+string[long[8]] test223_3();
+C223 test223_4();
+long test223_5();
+long[] test223_6();
+long[8] test223_7();
+C223[8] test223_8();
+void delegate() test223_9();
+
+bool test223()
+{
+ return test223_1() == test223_1() &&
+ test223_1() is test223_1() &&
+ test223_2() == test223_2() &&
+ test223_2() is test223_2() &&
+ test223_3() == test223_3() &&
+ test223_3() is test223_3() &&
+ test223_4() == test223_4() &&
+ test223_4() is test223_4() &&
+ test223_5() == test223_5() &&
+ test223_5() is test223_5() &&
+ test223_6() == test223_6() &&
+ test223_6() is test223_6() &&
+ test223_7()[] is test223_7()[] &&
+ test223_8() == test223_8() &&
+ test223_8()[] is test223_8()[] &&
+ test223_9() == test223_9() &&
+ test223_9() is test223_9();
+}
--- /dev/null
+// https://bugzilla.gdcproject.org/show_bug.cgi?id=231
+// { dg-additional-sources "imports/gdc231.d" }
+// { dg-do compile }
+
+import imports.gdc231;
+
+class Range231 : Widget231
+{
+ override void* getStruct()
+ {
+ return null;
+ }
+}
--- /dev/null
+// https://bugzilla.gdcproject.org/show_bug.cgi?id=239
+// { dg-options "-I $srcdir/gdc.dg" }
+// { dg-do compile }
+
+import imports.gdc239;
+
+class C239
+{
+ C239a *foo;
+}
--- /dev/null
+// https://bugzilla.gdcproject.org/show_bug.cgi?id=24
+// { dg-do compile }
+
+void test24()
+{
+ struct S24
+ {
+ char[1] b;
+ }
+
+ S24 a;
+
+ if (*a.b.ptr)
+ return;
+}
--- /dev/null
+// https://bugzilla.gdcproject.org/show_bug.cgi?id=240
+// { dg-do run { target hw } }
+// { dg-skip-if "needs gcc/config.d" { ! d_runtime } }
+
+void test240(int a, int b)
+{
+ assert(a == 0);
+ assert(b == 0);
+}
+
+void main()
+{
+ int a = 0;
+ test240(a, a++);
+ assert(a == 1);
+}
--- /dev/null
+// https://bugzilla.gdcproject.org/show_bug.cgi?id=241
+// { dg-options "-I $srcdir/gdc.dg" }
+// { dg-do compile }
+
+import imports.gdc241a;
+public import imports.gdc241b : S241, C241, E241, N241;
--- /dev/null
+// https://bugzilla.gdcproject.org/show_bug.cgi?id=242
+// { dg-do compile }
+
+struct S242a
+{
+ enum M = S242a();
+ void iter() { }
+}
+
+void test242a()
+{
+ return S242a.M.iter;
+}
+
+struct S242b
+{
+ enum M = S242b();
+ void iter() { }
+}
+
+void test242b()
+{
+ S242b.M.iter;
+}
--- /dev/null
+// https://bugzilla.gdcproject.org/show_bug.cgi?id=242
+// { dg-do run { target hw } }
+// { dg-skip-if "needs gcc/config.d" { ! d_runtime } }
+
+struct S242
+{
+ enum M = S242();
+ int a = 42;
+
+ auto iter()
+ {
+ this.a = 24;
+ return this;
+ }
+}
+
+S242 test242()
+{
+ return S242.M.iter;
+}
+
+void main()
+{
+ assert(test242() == S242(24));
+}
--- /dev/null
+// https://bugzilla.gdcproject.org/show_bug.cgi?id=248
+// { dg-do run { target hw } }
+// { dg-skip-if "needs gcc/config.d" { ! d_runtime } }
+
+class C248b
+{
+ bool isintegral()
+ {
+ return false;
+ }
+}
+
+class C248a
+{
+ int count = 0;
+
+ C248b getMemtype()
+ {
+ count++;
+ return new C248b();
+ }
+}
+
+class C248
+{
+ C248a sym;
+
+ this()
+ {
+ this.sym = new C248a();
+ }
+
+ bool isintegral()
+ {
+ return sym.getMemtype().isintegral();
+ }
+}
+
+void main()
+{
+ C248 e = new C248();
+ e.isintegral();
+ assert(e.sym.count == 1);
+}
--- /dev/null
+// https://bugzilla.gdcproject.org/show_bug.cgi?id=250
+// { dg-do run { target hw } }
+// { dg-skip-if "needs gcc/config.d" { ! d_runtime } }
+
+void main()
+{
+ struct S
+ {
+ string data;
+ }
+
+ auto a = S("hello");
+ auto b = S("hello".dup);
+
+ assert(a.data == b.data);
+ assert(a == b);
+ assert([a] == [b]);
+}
--- /dev/null
+// https://bugzilla.gdcproject.org/show_bug.cgi?id=251
+// { dg-options "-I $srcdir/gdc.dg" }
+// { dg-do compile }
+
+import imports.gdc251a;
+import imports.gdc251b : C251;
--- /dev/null
+// https://bugzilla.gdcproject.org/show_bug.cgi?id=253
+// { dg-additional-sources "imports/gdc253a.d" }
+// { dg-do compile }
+
+import imports.gdc253a;
+
+class C253 : C253a
+{
+ void test253() { }
+}
--- /dev/null
+// https://bugzilla.gdcproject.org/show_bug.cgi?id=253
+// { dg-additional-sources "imports/gdc253b.d" }
+// { dg-options "-I $srcdir/gdc.dg" }
+// { dg-do compile }
+
+import imports.gdc253b;
+
+interface A253
+{
+ void test253(int[int]);
+}
+
+interface C253 : A253
+{
+}
+
+class D253 : B253, C253
+{
+}
--- /dev/null
+// https://bugzilla.gdcproject.org/show_bug.cgi?id=255
+// { dg-do compile }
+
+class C255
+{
+ void f2()
+ {
+ class C1
+ {
+ void f1()
+ {
+ void f0()
+ {
+ class C0
+ {
+ void test255()
+ {
+ f2();
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+class C255a
+{
+ void f3()
+ {
+ class C1
+ {
+ void f2()
+ {
+ void f1()
+ {
+ void f0()
+ {
+ class C0
+ {
+ void test255a()
+ {
+ f3();
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+class C255b
+{
+ void f4()
+ {
+ class C2
+ {
+ void f3()
+ {
+ void f2()
+ {
+ class C1
+ {
+ void f1()
+ {
+ void f0()
+ {
+ class C0
+ {
+ void test255b()
+ {
+ f4();
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
--- /dev/null
+// https://bugzilla.gdcproject.org/show_bug.cgi?id=256
+// { dg-options "-I $srcdir/gdc.dg" }
+// { dg-do compile }
+
+import imports.gdcpkg256 : gdc256;
--- /dev/null
+// https://bugzilla.gdcproject.org/show_bug.cgi?id=261
+// { dg-do compile }
+
+void test261()
+{
+ class C1
+ {
+ void f1()
+ {
+ class C2
+ {
+ void f2()
+ {
+ auto v = &f1;
+ }
+ }
+ }
+ }
+}
--- /dev/null
+// { dg-options "-I $srcdir/gdc.dg/imports" }
+// { dg-additional-sources "imports/gdc27.d" }
+// { dg-do compile }
+
+/******************************************/
+// https://bugzilla.gdcproject.org/show_bug.cgi?id=27
+
+import imports.gdc27;
+
+interface I_B : I_A
+{
+ void b();
+}
+
+abstract class C_B : C_A, I_B
+{
+ abstract void b();
+}
--- /dev/null
+// https://bugzilla.gdcproject.org/show_bug.cgi?id=273
+// { dg-do run { target hw } }
+// { dg-skip-if "needs gcc/config.d" { ! d_runtime } }
+
+class B273
+{
+ B273[] members;
+}
+
+class D273 : B273
+{
+}
+
+void main()
+{
+ auto noPointers = ClassInfo.ClassFlags.noPointers;
+ assert((B273.classinfo.m_flags & noPointers) == 0);
+ assert((D273.classinfo.m_flags & noPointers) == 0);
+}
--- /dev/null
+// https://bugzilla.gdcproject.org/show_bug.cgi?id=280
+// { dg-do compile }
+
+struct RBNode280
+{
+ RBNode280* _parent;
+
+ @property left(RBNode280*)
+ {
+ _parent = &this;
+ }
+}
+
+class RedBlackTree280
+{
+ RBNode280* _end;
+ RBNode280* _begin;
+
+ this(int[] elems...)
+ {
+ _end = new RBNode280;
+
+ foreach (e; elems)
+ {
+ _end.left = _begin;
+ }
+ }
+}
+
+__gshared s = new RedBlackTree280('h');
--- /dev/null
+// https://bugzilla.gdcproject.org/show_bug.cgi?id=284
+// { dg-options "-Wno-psabi" }
+// { dg-do compile }
+
+alias v284 = __vector(int[2]);
+
+v284 test284(v284 a, ...)
+{
+ return a + a;
+}
--- /dev/null
+// https://bugzilla.gdcproject.org/show_bug.cgi?id=285
+// { dg-do run { target hw } }
+// { dg-skip-if "needs gcc/config.d" { ! d_runtime } }
+
+inout(char)[] test285(inout(char)* s) @nogc @system pure nothrow
+{
+ import core.stdc.string : strlen;
+ return s ? s[0 .. strlen(s)] : null;
+}
+
+void main()
+{
+ assert(test285(null) == null);
+ assert(test285("foo") == "foo");
+}
--- /dev/null
+// https://bugzilla.gdcproject.org/show_bug.cgi?id=286
+// { dg-do run { target hw } }
+// { dg-skip-if "needs gcc/config.d" { ! d_runtime } }
+
+void main()
+{
+ struct K286
+ {
+ int count;
+ this(this)
+ {
+ count++;
+ }
+ }
+
+ struct S286
+ {
+ int data;
+ this(K286 key)
+ {
+ data = key.count;
+ }
+ }
+
+ S286 getData(K286 key)
+ {
+ static S286[K286] getCache;
+ auto p = key in getCache;
+ if (p)
+ return *p;
+ return (getCache[key] = S286(key));
+ }
+
+ auto s = getData(K286());
+ if (s.data == 0)
+ assert(0);
+}
--- /dev/null
+// https://bugzilla.gdcproject.org/show_bug.cgi?id=300
+// { dg-additional-options "-fmain" }
+// { dg-do link { target d_runtime_has_std_library } }
+
+struct S300(Range)
+{
+ double test(size_t remaining)
+ {
+ double r;
+ return r ^^ remaining;
+ }
+}
+
+auto link300a(Range)(Range)
+{
+ return S300!(Range)();
+}
+
+void link300()
+{
+ struct I {}
+ static assert(is(typeof(link300a(I())) == struct));
+ auto sample = link300a(I());
+ sample.test(5);
+}
--- /dev/null
+// https://bugzilla.gdcproject.org/show_bug.cgi?id=309
+// { dg-do run { target hw } }
+// { dg-skip-if "needs gcc/config.d" { ! d_runtime } }
+
+void main()
+{
+ creal f1 = +0.0 + 0.0i;
+ creal f2 = +0.0 - 0.0i;
+ creal f3 = -0.0 + 0.0i;
+ creal f4 = +0.0 + 0.0i;
+
+ assert(f1 !is f2);
+ assert(f1 !is f3);
+ assert(f2 !is f3);
+ assert(f1 is f4);
+
+ assert(!(f1 is f2));
+ assert(!(f1 is f3));
+ assert(!(f2 is f3));
+ assert(!(f1 !is f4));
+
+ struct CReal
+ {
+ creal value;
+ }
+
+ CReal s1 = CReal(+0.0 + 0.0i);
+ CReal s2 = CReal(+0.0 - 0.0i);
+ CReal s3 = CReal(-0.0 + 0.0i);
+ CReal s4 = CReal(+0.0 + 0.0i);
+
+ assert(s1 !is s2);
+ assert(s1 !is s3);
+ assert(s2 !is s3);
+ assert(s1 is s4);
+
+ assert(!(s1 is s2));
+ assert(!(s1 is s3));
+ assert(!(s2 is s3));
+ assert(!(s1 !is s4));
+}
--- /dev/null
+// https://bugzilla.gdcproject.org/show_bug.cgi?id=31
+// { dg-do compile }
+
+class RedBlackTree(T, alias less)
+{
+ struct Range
+ {
+ @property empty() { }
+ }
+
+ Range opSlice()
+ {
+ return Range();
+ }
+}
+
+auto redBlackTree(alias less, E)()
+{
+ return new RedBlackTree!(E, less);
+}
+
+void test31()
+{
+ redBlackTree!((a){}, double)();
+}
--- /dev/null
+// https://bugzilla.gdcproject.org/show_bug.cgi?id=35
+// { dg-do run { target hw } }
+// { dg-skip-if "needs gcc/config.d" { ! d_runtime } }
+
+/**
+ * Here the BinaryHeap instance uses an alias parameter and therefore
+ * the instance's functions (percolateDown) need to be generated in
+ * topNIndex->BinaryHeap scope and not in the declaration scope
+ * (module->BinaryHeap).
+ */
+void topNIndex()()
+{
+ bool indirectLess(int a, int b)
+ {
+ return a > b;
+ }
+
+ auto a = BinaryHeap!(indirectLess)();
+}
+
+struct BinaryHeap(alias less)
+{
+ void percolateDown()
+ {
+ less(0, 1);
+ }
+}
+
+void test35a()
+{
+ topNIndex();
+}
+
+/*
+ * Similar as test35a but with an additional indirection.
+ * The nested function chain for percolateDown should look like this:
+ * topNIndex2->BinaryHeap2->percolateDown.
+ */
+void topNIndex2()()
+{
+ bool indirectLess(int a, int b)
+ {
+ return a > b;
+ }
+ auto a = BinaryHeap2!(S35b!(indirectLess)())();
+}
+
+struct S35b(alias a)
+{
+ void foo()
+ {
+ a(0, 0);
+ }
+}
+
+struct BinaryHeap2(alias less)
+{
+ void percolateDown()
+ {
+ less.foo();
+ }
+}
+
+void test35b()
+{
+ topNIndex2();
+}
+
+void main()
+{
+ test35a();
+ test35b();
+}
--- /dev/null
+// https://bugzilla.gdcproject.org/show_bug.cgi?id=36
+// { dg-additional-sources "imports/gdc36.d" }
+// { dg-options "-I $srcdir/gdc.dg" }
+// { dg-do run { target hw } }
+// { dg-skip-if "needs gcc/config.d" { ! d_runtime } }
+
+module gdc36;
+
+import imports.gdc36;
+
+/**
+ * Here getChar is a function in a template where template.isnested == false
+ * but getChar still is a nested function and needs to get a static chain
+ * containing test36a.
+ */
+void test36a()(char val)
+{
+ void error()
+ {
+ }
+
+ void getChar()()
+ {
+ error();
+ }
+
+ void parseString()
+ {
+ getChar();
+ }
+}
+
+/**
+ * Similar as test36a, but a little more complicated:
+ * Here getChar is nested in a struct template which is nested in a function.
+ * getChar's static chain still needs to contain test36b.
+ */
+void test36b()(char val)
+{
+ void error()
+ {
+ }
+
+ struct S(T)
+ {
+ void getChar()
+ {
+ error();
+ }
+ }
+
+
+ void parseString()
+ {
+ S!(int)().getChar();
+ }
+}
+
+/**
+ * If g had accessed a, the frontend would have generated a closure.
+ *
+ * As we do not access it, there's no closure. We have to be careful
+ * not to set a static chain for g containing test36c_1 though,
+ * as g can be called from outside (here from test1c). In the end
+ * we have to treat this as if everything in test36c_1 was declared
+ * at module scope.
+ */
+auto test36c_1()
+{
+ int a;
+ void c() {}
+ class Result
+ {
+ int b;
+ void g() { c(); /*a = 42;*/ }
+ }
+
+ return new Result();
+}
+
+void test36c()
+{
+ test36c_1().g();
+}
+
+/**
+ * empty is a (private) function which is nested in lightPostprocess.
+ * At the same time it's a template instance, so it has to be declared as
+ * weak or otherwise one-only. imports/gdc36.d creates another instance
+ * of Regex!char to verify that.
+ */
+struct Parser(R)
+{
+ @property program()
+ {
+ return Regex!char();
+ }
+}
+
+struct Regex(Char)
+{
+ @trusted lightPostprocess()
+ {
+ struct FixedStack(T)
+ {
+ @property empty() { return false; }
+ }
+ auto counterRange = FixedStack!uint();
+ }
+}
+
+void test36d()
+{
+ auto parser = Parser!(char[])();
+ imports.gdc36.test36d_1;
+}
+
+void main()
+{
+ test36a('n');
+ test36b('n');
+ test36c();
+ test36d();
+}
+
--- /dev/null
+// https://bugzilla.gdcproject.org/show_bug.cgi?id=37
+// { dg-do compile }
+
+struct S37
+{
+ int bar(const S37 s)
+ {
+ return 0;
+ }
+}
+
+int test37()
+{
+ S37 s;
+ return s.bar(s);
+}
--- /dev/null
+// https://bugzilla.gdcproject.org/show_bug.cgi?id=4
+// { dg-do compile }
+
+void test4()
+{
+ string str = "allo";
+ static assert(!__traits(compiles, str.reverse));
+ static assert(!__traits(compiles, str.sort));
+}
--- /dev/null
+// https://bugzilla.gdcproject.org/show_bug.cgi?id=43
+// { dg-do compile }
+
+void main()
+{
+ import core.vararg;
+ import core.stdc.stdio;
+
+ void formatArray(ref va_list argptr)
+ {
+ auto a = va_arg!(const(float)[])(argptr);
+ foreach(f; a)
+ {
+ printf("%f\n", f);
+ }
+ }
+
+ void doFormat(TypeInfo[] arguments, va_list argptr)
+ {
+ formatArray(argptr);
+ }
+
+ void format(...)
+ {
+ doFormat(_arguments, _argptr);
+ }
+
+ format([1.0f, 2.0f, 3.0f]);
+}
--- /dev/null
+// https://bugzilla.gdcproject.org/show_bug.cgi?id=47
+// { dg-do compile }
+
+template Foo47()
+{
+ void test47()
+ {
+ asm { "nop"; }
+ }
+}
+
+mixin Foo47!();
--- /dev/null
+// https://bugzilla.gdcproject.org/show_bug.cgi?id=51
+// { dg-do run { target hw } }
+// { dg-skip-if "needs gcc/config.d" { ! d_runtime } }
+
+struct S51
+{
+ int x;
+ int pad;
+
+ this(this)
+ {
+ ++x;
+ }
+}
+
+void main()
+{
+ S51 s;
+ auto sarr = new S51[1];
+ auto sarr2 = sarr;
+
+ // postblit all fields.
+ sarr2 ~= s;
+
+ assert (sarr2[0].x == 1);
+ assert (sarr2[1].x == 1);
+ assert (sarr[0].x == 0);
+ assert (s.x == 0);
+}
--- /dev/null
+// https://bugzilla.gdcproject.org/show_bug.cgi?id=57
+// { dg-do run { target hw } }
+// { dg-skip-if "needs gcc/config.d" { ! d_runtime } }
+
+struct S57
+{
+ int a;
+ long b;
+ // Doesn't happen for bigger structs
+}
+
+S57 bar57()
+{
+ return S57(4, 42);
+}
+
+void main()
+{
+ S57 s = bar57();
+ assert (s is S57(4, 42));
+}
--- /dev/null
+// https://bugzilla.gdcproject.org/show_bug.cgi?id=66
+// { dg-do run { target hw } }
+// { dg-skip-if "needs gcc/config.d" { ! d_runtime } }
+
+void main()
+{
+ int pos = 0;
+
+ foreach(x; 0 .. 64)
+ {
+ ++pos %= 4;
+ assert (pos != 4);
+ }
+}
--- /dev/null
+// https://bugzilla.gdcproject.org/show_bug.cgi?id=67
+// { dg-do compile }
+
+__vector(float[4])[2] d; // ICE
--- /dev/null
+// https://bugzilla.gdcproject.org/show_bug.cgi?id=71
+// { dg-do compile }
+
+struct CanonicalHuffman
+{
+ int[] table;
+
+ void print()
+ {
+ table.sort!(a => a);
+ }
+}
+
+struct SortedRange(alias pred )
+{
+ auto trisect() { }
+}
+
+auto assumeSorted(alias pred , R)(R )
+{
+ return SortedRange!pred();
+}
+
+SortedRange!(less) sort(alias less, Range)(Range r)
+{
+ return assumeSorted!less(r);
+}
--- /dev/null
+// https://bugzilla.gdcproject.org/show_bug.cgi?id=77
+// { dg-do compile }
+
+void fun(size_t n)(ubyte[n] val)
+{
+}
+
+void test77(ubyte[3] buf)
+{
+ fun(buf[0..2]);
+}
-import std.path : buildNormalizedPath;
+module imports.gdc239;
class C239a
{
auto bar()
{
- auto path = buildNormalizedPath("/", "foo");
+ chainPath();
}
}
+
+auto chainPath()
+{
+ struct OnlyResult { }
+ chain([], OnlyResult(), []);
+}
+
+auto chain(Ranges...)(Ranges rs)
+{
+ static struct Result
+ {
+ Ranges source;
+ this(Ranges)
+ {
+ }
+ }
+ Result(rs);
+}
-import compilable;
+module imports.gdc241a;
+
+import gdc241;
S241 *s241; // Use indirectly imported struct
C241 *c241; // Use indirectly imported class
+module imports.gdc241b;
class C241 { }
module imports.gdc251a;
import imports.gdc251b;
-import compilable;
+import gdc251;
C251 config;
+++ /dev/null
-module imports.gdc253;
-
-interface I253a
-{
-}
-
-interface I253b
-{
- size_t printf(...);
- void flush();
-}
-
-class C253a : I253a , I253b
-{
- size_t printf(...)
- {
- return 0;
- }
-
- void flush()
- {
- }
-}
--- /dev/null
+module imports.gdc253a;
+
+interface I253a
+{
+}
+
+interface I253b
+{
+ size_t printf(...);
+ void flush();
+}
+
+class C253a : I253a , I253b
+{
+ size_t printf(...)
+ {
+ return 0;
+ }
+
+ void flush()
+ {
+ }
+}
--- /dev/null
+module imports.gdc253b;
+
+import gdc253b;
+
+class B253 : A253
+{
+ void test253(int[int] a)
+ {
+ if (a.get(0, 1))
+ return;
+ }
+}
--- /dev/null
+module imports.gdc36;
+
+private import gdc36;
+
+void test36d_1()
+{
+ auto parser = Parser!(char[])();
+}
+++ /dev/null
-module imports.runnable;
-
-private import runnable;
-
-/******************************************/
-// https://bugzilla.gdcproject.org/show_bug.cgi?id=36
-
-void test36d_1()
-{
- auto parser = Parser!(char[])();
-}
-
-/******************************************/
-// https://bugzilla.gdcproject.org/show_bug.cgi?id=253
-
-class B253 : A253
-{
- void test253(int[int] a)
- {
- if (a.get(0, 1))
- return;
- }
-}
+++ /dev/null
-// { dg-do link { target d_runtime_has_std_library } }
-
-/******************************************/
-
-class C1()
-{
- static struct S1 { A1 a; }
-}
-
-enum E1 = is(C1!());
-
-/******************************************/
-// https://bugzilla.gdcproject.org/show_bug.cgi?id=300
-
-struct S300(Range)
-{
- double test(size_t remaining)
- {
- double r;
- return r ^^ remaining;
- }
-}
-
-auto link300a(Range)(Range)
-{
- return S300!(Range)();
-}
-
-void link300()
-{
- struct I {}
- static assert(is(typeof(link300a(I())) == struct));
- auto sample = link300a(I());
- sample.test(5);
-}
-
-/******************************************/
-
-void main() {}
+++ /dev/null
-// { dg-additional-sources "imports/runnable.d" }
-// { dg-do run { target hw } }
-// { dg-skip-if "needs gcc/config.d" { ! d_runtime } }
-
-module runnable;
-
-import imports.runnable;
-import core.stdc.stdio;
-import gcc.attribute;
-
-
-/******************************************/
-// https://bugzilla.gdcproject.org/show_bug.cgi?id=4
-
-void test4()
-{
- string str = "allo";
- static assert(!__traits(compiles, str.reverse));
- static assert(!__traits(compiles, str.sort));
-}
-
-/******************************************/
-// https://bugzilla.gdcproject.org/show_bug.cgi?id=17
-
-/**
- * Parameters are not copied into a frame to be accessed from
- * the method's __require function.
- */
-void contractTest(string path)
-{
- assert(path[0] == 't');
- assert(path.length == 9);
- assert(path[8] == 'i');
-}
-
-interface ModuleSaver
-{
- void save(string str)
- in
- {
- contractTest(str);
- }
-}
-
-class ModuleWriter : ModuleSaver
-{
- void save (string str)
- in {}
- body
- {
- }
-}
-
-void test17()
-{
- (new ModuleWriter()).save ("test.0.mci");
-}
-
-/******************************************/
-// https://bugzilla.gdcproject.org/show_bug.cgi?id=19
-
-void test19()
-{
- byte b;
- --b = b;
-}
-
-/******************************************/
-// https://bugzilla.gdcproject.org/show_bug.cgi?id=24
-
-void test24()
-{
- struct S24
- {
- char[1] b;
- }
-
- S24 a;
-
- if (*a.b.ptr)
- return;
-}
-
-/******************************************/
-// https://bugzilla.gdcproject.org/show_bug.cgi?id=31
-
-class RedBlackTree(T, alias less)
-{
- struct Range
- {
- @property empty() { }
- }
-
- Range opSlice()
- {
- return Range();
- }
-}
-
-auto redBlackTree(alias less, E)()
-{
- return new RedBlackTree!(E, less);
-}
-
-void test31()
-{
- redBlackTree!((a){}, double)();
-}
-
-/******************************************/
-// https://bugzilla.gdcproject.org/show_bug.cgi?id=35
-
-/**
- * Here the BinaryHeap instance uses an alias parameter and therefore
- * the instance's functions (percolateDown) need to be generated in
- * topNIndex->BinaryHeap scope and not in the declaration scope
- * (module->BinaryHeap).
- */
-void topNIndex()()
-{
- bool indirectLess(int a, int b)
- {
- return a > b;
- }
-
- auto a = BinaryHeap!(indirectLess)();
-}
-
-struct BinaryHeap(alias less)
-{
- void percolateDown()
- {
- less(0, 1);
- }
-}
-
-void test35a()
-{
- topNIndex();
-}
-
-/*
- * Similar as test35a but with an additional indirection.
- * The nested function chain for percolateDown should look like this:
- * topNIndex2->BinaryHeap2->percolateDown.
- */
-void topNIndex2()()
-{
- bool indirectLess(int a, int b)
- {
- return a > b;
- }
- auto a = BinaryHeap2!(S35b!(indirectLess)())();
-}
-
-struct S35b(alias a)
-{
- void foo()
- {
- a(0, 0);
- }
-}
-
-struct BinaryHeap2(alias less)
-{
- void percolateDown()
- {
- less.foo();
- }
-}
-
-void test35b()
-{
- topNIndex2();
-}
-
-void test35()
-{
- test35a();
- test35b();
-}
-
-/******************************************/
-// https://bugzilla.gdcproject.org/show_bug.cgi?id=36
-
-/**
- * Here getChar is a function in a template where template.isnested == false
- * but getChar still is a nested function and needs to get a static chain
- * containing test36a.
- */
-void test36a()(char val)
-{
- void error()
- {
- }
-
- void getChar()()
- {
- error();
- }
-
- void parseString()
- {
- getChar();
- }
-}
-
-/**
- * Similar as test36a, but a little more complicated:
- * Here getChar is nested in a struct template which is nested in a function.
- * getChar's static chain still needs to contain test36b.
- */
-void test36b()(char val)
-{
- void error()
- {
- }
-
- struct S(T)
- {
- void getChar()
- {
- error();
- }
- }
-
-
- void parseString()
- {
- S!(int)().getChar();
- }
-}
-
-/**
- * If g had accessed a, the frontend would have generated a closure.
- *
- * As we do not access it, there's no closure. We have to be careful
- * not to set a static chain for g containing test36c_1 though,
- * as g can be called from outside (here from test1c). In the end
- * we have to treat this as if everything in test36c_1 was declared
- * at module scope.
- */
-auto test36c_1()
-{
- int a;
- void c() {}
- class Result
- {
- int b;
- void g() { c(); /*a = 42;*/ }
- }
-
- return new Result();
-}
-
-void test36c()
-{
- test36c_1().g();
-}
-
-/**
- * empty is a (private) function which is nested in lightPostprocess.
- * At the same time it's a template instance, so it has to be declared as
- * weak or otherwise one-only. imports/runnable.d creates another instance
- * of Regex!char to verify that.
- */
-struct Parser(R)
-{
- @property program()
- {
- return Regex!char();
- }
-}
-
-struct Regex(Char)
-{
- @trusted lightPostprocess()
- {
- struct FixedStack(T)
- {
- @property empty() { return false; }
- }
- auto counterRange = FixedStack!uint();
- }
-}
-
-void test36d()
-{
- auto parser = Parser!(char[])();
- imports.runnable.test36d_1;
-}
-
-void test36()
-{
- test36a('n');
- test36b('n');
- test36c();
- test36d();
-}
-
-/******************************************/
-// https://bugzilla.gdcproject.org/show_bug.cgi?id=37
-
-struct S37
-{
- int bar(const S37 s)
- {
- return 0;
- }
-}
-
-int test37()
-{
- S37 s;
- return s.bar(s);
-}
-
-/******************************************/
-// https://bugzilla.gdcproject.org/show_bug.cgi?id=43
-
-void test43()
-{
- import core.vararg;
- import core.stdc.stdio;
-
- void formatArray(ref va_list argptr)
- {
- auto a = va_arg!(const(float)[])(argptr);
- foreach(f; a)
- {
- printf("%f\n", f);
- }
- }
-
- void doFormat(TypeInfo[] arguments, va_list argptr)
- {
- formatArray(argptr);
- }
-
- void format(...)
- {
- doFormat(_arguments, _argptr);
- }
-
- format([1.0f, 2.0f, 3.0f]);
-}
-
-/******************************************/
-// https://bugzilla.gdcproject.org/show_bug.cgi?id=47
-
-template Foo47()
-{
- void test47()
- {
- asm { "nop"; }
- }
-}
-
-mixin Foo47!();
-
-/******************************************/
-// https://bugzilla.gdcproject.org/show_bug.cgi?id=51
-
-struct S51
-{
- int x;
- int pad;
-
- this(this)
- {
- ++x;
- }
-}
-
-void test51()
-{
- S51 s;
- auto sarr = new S51[1];
- auto sarr2 = sarr;
-
- // postblit all fields.
- sarr2 ~= s;
-
- assert (sarr2[0].x == 1);
- assert (sarr2[1].x == 1);
- assert (sarr[0].x == 0);
- assert (s.x == 0);
-}
-
-/******************************************/
-// https://bugzilla.gdcproject.org/show_bug.cgi?id=57
-
-struct S57
-{
- int a;
- long b;
- // Doesn't happen for bigger structs
-}
-
-S57 bar57()
-{
- return S57(4, 42);
-}
-
-void test57()
-{
- S57 s = bar57();
- assert (s is S57(4, 42));
-}
-
-/******************************************/
-// https://bugzilla.gdcproject.org/show_bug.cgi?id=66
-
-void test66()
-{
- int pos = 0;
-
- foreach(x; 0 .. 64)
- {
- ++pos %= 4;
- assert (pos != 4);
- }
-}
-
-/******************************************/
-// https://bugzilla.gdcproject.org/show_bug.cgi?id=67
-
-__vector(float[4]) d[2]; // ICE
-
-
-/******************************************/
-// https://bugzilla.gdcproject.org/show_bug.cgi?id=115
-
-void test115()
-{
- union U
- {
- float f;
- uint i;
- }
- float a = 123.0;
- const l = U(a);
-
- assert(l.i == U(a).i);
-}
-
-/******************************************/
-// https://bugzilla.gdcproject.org/show_bug.cgi?id=121
-
-immutable char C121 = void; // ICE
-
-/******************************************/
-// https://bugzilla.gdcproject.org/show_bug.cgi?id=127
-
-int[0] test127a; // OK
-int[1][0] test127b; // OK
-int[0][1] test127c; // ICE
-
-/******************************************/
-// https://bugzilla.gdcproject.org/show_bug.cgi?id=131
-
-struct S131
-{
- this(string ) { }
- string opAssign(string v) { return v; }
-}
-
-void test131()
-{
- S131[string] s;
- s["foo"] = "bar";
-}
-
-/******************************************/
-// https://bugzilla.gdcproject.org/show_bug.cgi?id=133
-
-void delegate()[] D133;
-
-void test133a(void delegate() dg)
-{
- D133 ~= dg;
-}
-
-void test133()
-{
- void nested()
- {}
- test133a(&nested);
-}
-
-/******************************************/
-// https://bugzilla.gdcproject.org/show_bug.cgi?id=141
-
-bool test141a(int a)
-{
- return a > (a + 1);
-}
-
-void test141()
-{
- assert(test141a(int.min) == false);
- assert(test141a(int.max) == true);
-}
-
-/******************************************/
-// https://bugzilla.gdcproject.org/show_bug.cgi?id=142
-
-@attribute("noinline")
-int test142a()()
-{
- return 142;
-}
-
-void test142()
-{
- enum E142 = test142a();
-}
-
-/******************************************/
-// https://bugzilla.gdcproject.org/show_bug.cgi?id=171
-
-void test171a()
-{
- int count = 0;
- short a = -1;
- while (a != 0)
- {
- a >>>= 1;
- count++;
- assert(count <= 16);
- }
-}
-
-void test171b()
-{
- uint[3] lhs = [99, 201, 300],
- rhs = [-1, 0, 0];
- long t = 0;
-
- for (int i = 0; i < 3; i++)
- {
- t += lhs[i];
- t -= rhs[i];
- lhs[i] = cast(uint) t;
- t >>= uint.sizeof * 8;
- }
-
- assert(lhs == [100, 200, 300]);
-}
-
-void test171()
-{
- test171a();
- test171b();
-}
-
-/******************************************/
-// https://bugzilla.gdcproject.org/show_bug.cgi?id=179
-
-struct S179a
-{
- @disable this(this);
-}
-
-struct S179b
-{
- S179a s1;
- void connect() { printf("this=%p\n", &this); }
-}
-
-class C179
-{
- private S179b s2;
- ref S179b value() @property
- {
- printf("this=%p\n", &s2);
- return s2;
- }
-}
-
-void test179()
-{
- C179 a = new C179;
- a.value.connect();
-}
-
-/******************************************/
-// https://bugzilla.gdcproject.org/show_bug.cgi?id=183
-
-struct S183a
-{
- union I183a
- {
- struct
- {
- double x, y, z;
- }
- struct
- {
- double a, b, c;
- }
- }
-
- I183a inner;
-
- this(double x, double y, double z)
- {
- this.inner.x = x;
- this.inner.y = y;
- this.inner.z = z;
- }
-}
-
-struct S183b
-{
- @property get()
- {
- union Buf
- {
- void[0] result;
- }
- const Buf buf = { };
- return buf.result;
- }
-}
-
-struct S183c
-{
- @property get()
- {
- union Buf
- {
- TypeInfo info;
- void[0] result;
- }
- const Buf buf = { };
- return buf.result;
- }
-}
-
-void test183()
-{
- auto v1 = S183a(0, 0, 0);
- auto v2 = S183b().get;
- auto v3 = S183c().get;
-}
-
-/******************************************/
-// https://bugzilla.gdcproject.org/show_bug.cgi?id=186
-
-struct S186
-{
- union
- {
- struct
- {
- ubyte fieldA;
- byte fieldB = -1;
- byte fieldC = -1;
- }
- size_t _complete;
- }
-
- this(size_t complete)
- {
- this._complete = complete;
- }
-}
-
-static if (size_t.sizeof == 8)
- enum checkval = 0x0200000000000002;
-else
- enum checkval = 0x02000002;
-
-void check186(in S186 obj, byte fieldB)
-{
- assert(obj.fieldA == 2);
- assert(obj.fieldB == 0);
- assert(obj.fieldC == 0);
- assert(obj._complete == checkval);
- assert(fieldB == 0);
-}
-
-void test186a(size_t val)
-{
- S186 obj = S186(val);
- check186(obj, obj.fieldB);
-
- assert(obj.fieldA == 2);
- assert(obj.fieldB == 0);
- assert(obj.fieldC == 0);
- assert(obj._complete == checkval);
-
- obj = S186(val);
- check186(obj, obj.fieldB);
-
- assert(obj.fieldA == 2);
- assert(obj.fieldB == 0);
- assert(obj.fieldC == 0);
- assert(obj._complete == checkval);
-}
-
-void test186()
-{
- test186a(checkval);
-}
-
-/******************************************/
-// https://bugzilla.gdcproject.org/show_bug.cgi?id=187
-
-align(1) struct S187b
-{
- align(1)
- {
- uint unpaddedA;
- ushort unpaddedB;
- }
-}
-
-struct S187a
-{
- S187b[3] unpaddedArray;
- ubyte wontInitialize = ubyte.init;
-}
-
-struct S187
-{
- S187a interesting;
-}
-
-
-void prepareStack()
-{
- byte[255] stackGarbage;
- foreach(i, ref b; stackGarbage)
- {
- b = cast(byte)(-i);
- }
-}
-
-void test187()
-{
- prepareStack();
- auto a = S187(S187a());
- assert(a.interesting.wontInitialize == 0);
-}
-
-/******************************************/
-// https://bugzilla.gdcproject.org/show_bug.cgi?id=191
-
-class C191
-{
- int count = 0;
-
- void testA()
- {
- class Inner
- {
- void test()
- {
- void localFunction()
- {
- if (++count != 5)
- testA();
- }
- localFunction();
- }
- }
- scope ic = new Inner();
- ic.test();
- }
-
- void testB()
- {
- class Inner
- {
- void test()
- {
- void localFunction()
- {
- void anotherLocalFunction()
- {
- if (++count != 10)
- testB();
- }
- anotherLocalFunction();
- }
- localFunction();
- }
- }
- scope ic = new Inner();
- ic.test();
- }
-
- void testC()
- {
- class Inner
- {
- int a = 1;
-
- void test()
- {
- void localFunction()
- {
- count += a;
- if (count != 15)
- testC();
- assert(a == 1);
- }
- localFunction();
- }
- }
- scope ic = new Inner();
- ic.test();
- }
-
- void testD()
- {
- class Inner
- {
- void test()
- {
- int a = 1;
-
- void localFunction()
- {
- count += a;
- if (count != 20)
- testD();
- assert(a == 1);
- }
- localFunction();
- }
- }
- scope ic = new Inner();
- ic.test();
- }
-
- void testE()
- {
- class Inner
- {
- int a = 1;
-
- void test()
- {
- void localFunction()
- {
- void anotherLocalFunction()
- {
- count += a;
- if (count != 25)
- testE();
- assert(a == 1);
- }
-
- anotherLocalFunction();
- }
-
- localFunction();
- }
- }
- scope ic = new Inner();
- ic.test();
- }
-
- void testF()
- {
- class Inner
- {
- void test()
- {
- int a = 1;
-
- void localFunction()
- {
- void anotherLocalFunction()
- {
- count += a;
- if (count != 30)
- testF();
- assert(a == 1);
- }
-
- anotherLocalFunction();
- }
-
- localFunction();
- }
- }
- scope ic = new Inner();
- ic.test();
- }
-
- void testG()
- {
- class Inner
- {
- void test()
- {
- void localFunction()
- {
- int a = 1;
-
- void anotherLocalFunction()
- {
- count += a;
- if (count != 35)
- testG();
- assert(a == 1);
- }
-
- anotherLocalFunction();
- }
-
- localFunction();
- }
- }
- scope ic = new Inner();
- ic.test();
- }
-}
-
-void test191()
-{
- scope oc = new C191();
- oc.testA();
- assert(oc.count == 5);
-
- oc.testB();
- assert(oc.count == 10);
-
- oc.testC();
- assert(oc.count == 15);
-
- oc.testD();
- assert(oc.count == 20);
-
- oc.testE();
- assert(oc.count == 25);
-
- oc.testF();
- assert(oc.count == 30);
-
- oc.testG();
- assert(oc.count == 35);
-}
-
-/******************************************/
-// https://bugzilla.gdcproject.org/show_bug.cgi?id=194
-
-auto test194(ref bool overflow)
-{
- import core.checkedint;
-
- return adds(1, 1, overflow);
-}
-
-/******************************************/
-// https://bugzilla.gdcproject.org/show_bug.cgi?id=196
-
-class C196
-{
- int a;
-}
-
-struct S196
-{
- int a;
-}
-
-void test196()
-{
- __gshared c = new C196();
- __gshared s = new S196(0);
- c.a = 1;
- s.a = 1;
-}
-
-/******************************************/
-// https://bugzilla.gdcproject.org/show_bug.cgi?id=198
-
-struct S198a
-{
- union
- {
- float[3] v;
- struct
- {
- float x;
- float y;
- float z;
- }
- }
-
- this(float x_, float y_, float z_)
- {
- x = x_;
- y = y_;
- z = z_;
- }
-
- ref S198a opOpAssign(string op)(S198a operand)
- if (op == "+")
- {
- x += operand.x;
- y += operand.y;
- z += operand.z;
- return this;
- }
-}
-
-struct S198b
-{
- @property get()
- {
- union Buf
- {
- void[0] result;
- }
- const Buf buf = { };
- return buf.result;
- }
-}
-
-struct S198c
-{
- @property get()
- {
- union Buf
- {
- TypeInfo info;
- void[0] result;
- }
- const Buf buf = { };
- return buf.result;
- }
-}
-
-
-auto test198()
-{
- S198a sum = S198a(0, 0, 0);
-
- foreach(size_t v; 0 .. 3)
- sum += S198a(1, 2, 3);
-
- assert(sum.v == [3, 6, 9]);
-}
-
-/******************************************/
-// https://bugzilla.gdcproject.org/show_bug.cgi?id=200
-
-void test200a(double x, double y)
-{
- const double y2 = x + 1.0;
- assert(y == y2);
-}
-
-void test200()
-{
- const double x = .012;
- const double y = x + 1.0;
- test200a(x, y);
-}
-
-/******************************************/
-// https://bugzilla.gdcproject.org/show_bug.cgi?id=210
-
-struct S210
-{
- ubyte a;
- uint b;
-}
-
-union U210
-{
- S210 a;
- uint b;
-}
-
-S210 test210a()
-{
- S210 s = S210(1, 2);
- return s;
-}
-
-S210[2] test210b()
-{
- S210[2] s = [S210(1, 2), S210(3, 4)];
- return s;
-}
-
-U210 test210c()
-{
- U210 s = U210(S210(1, 2));
- return s;
-}
-
-U210[2] test210d()
-{
- U210[2] s = [U210(S210(1, 2)), U210(S210(3, 4))];
- return s;
-}
-
-void test210()
-{
- S210 a = S210(1, 2);
- assert(a == S210(1, 2));
- assert(a == test210a());
- assert(a != S210(2, 1));
-
- S210[2] b = [S210(1, 2), S210(3, 4)];
- assert(b == [S210(1, 2), S210(3, 4)]);
- assert(b == test210b());
- assert(b != [S210(2, 1), S210(3, 4)]);
-
- U210 c = U210(S210(1, 2));
- assert(c == U210(S210(1, 2)));
- assert(c == test210c());
- assert(c != U210(S210(2, 1)));
-
- U210[2] d = [U210(S210(1, 2)), U210(S210(3, 4))];
- assert(d == [U210(S210(1, 2)), U210(S210(3, 4))]);
- assert(d == test210d());
- assert(d != [U210(S210(2, 1)), U210(S210(3, 4))]);
-}
-
-/******************************************/
-// https://bugzilla.gdcproject.org/show_bug.cgi?id=240
-
-void test240a(int a, int b)
-{
- assert(a == 0);
- assert(b == 0);
-}
-
-void test240()
-{
- int a = 0;
- test240a(a, a++);
- assert(a == 1);
-}
-
-/******************************************/
-// https://bugzilla.gdcproject.org/show_bug.cgi?id=242
-
-struct S242
-{
- enum M = S242();
- int a = 42;
-
- auto iter()
- {
- this.a = 24;
- return this;
- }
-}
-
-S242 test242a()
-{
- return S242.M.iter;
-}
-
-void test242()
-{
- assert(test242a() == S242(24));
-}
-
-/******************************************/
-// https://bugzilla.gdcproject.org/show_bug.cgi?id=248
-
-class C248b
-{
- bool isintegral()
- {
- return false;
- }
-}
-
-class C248a
-{
- int count = 0;
-
- C248b getMemtype()
- {
- count++;
- return new C248b();
- }
-}
-
-class C248
-{
- C248a sym;
-
- this()
- {
- this.sym = new C248a();
- }
-
- bool isintegral()
- {
- return sym.getMemtype().isintegral();
- }
-}
-
-void test248()
-{
- C248 e = new C248();
- e.isintegral();
- assert(e.sym.count == 1);
-}
-
-/******************************************/
-// https://bugzilla.gdcproject.org/show_bug.cgi?id=250
-
-void test250()
-{
- struct S
- {
- string data;
- }
-
- auto a = S("hello");
- auto b = S("hello".dup);
-
- assert(a.data == b.data);
- assert(a == b);
- assert([a] == [b]);
-}
-
-/******************************************/
-// https://bugzilla.gdcproject.org/show_bug.cgi?id=253
-
-interface A253
-{
- void test253(int[int]);
-}
-
-interface C253 : A253
-{
-}
-
-class D253 : B253, C253
-{
-}
-
-/******************************************/
-// https://bugzilla.gdcproject.org/show_bug.cgi?id=273
-
-class B273
-{
- B273[] members;
-}
-
-class D273 : B273
-{
-}
-
-void test273()
-{
- auto noPointers = ClassInfo.ClassFlags.noPointers;
- assert((B273.classinfo.m_flags & noPointers) == 0);
- assert((D273.classinfo.m_flags & noPointers) == 0);
-}
-
-/******************************************/
-// https://bugzilla.gdcproject.org/show_bug.cgi?id=285
-
-inout(char)[] test285a(inout(char)* s) @nogc @system pure nothrow
-{
- import core.stdc.string : strlen;
- return s ? s[0 .. strlen(s)] : null;
-}
-
-void test285()
-{
- assert(test285a(null) == null);
- assert(test285a("foo") == "foo");
-}
-
-/******************************************/
-// https://bugzilla.gdcproject.org/show_bug.cgi?id=286
-
-void test286()
-{
- struct K286
- {
- int count;
- this(this)
- {
- count++;
- }
- }
-
- struct S286
- {
- int data;
- this(K286 key)
- {
- data = key.count;
- }
- }
-
- S286 getData(K286 key)
- {
- static S286[K286] getCache;
- auto p = key in getCache;
- if (p)
- return *p;
- return (getCache[key] = S286(key));
- }
-
- auto s = getData(K286());
- if (s.data == 0)
- assert(0);
-}
-
-/******************************************/
-// https://bugzilla.gdcproject.org/show_bug.cgi?id=309
-
-void test309()
-{
- creal f1 = +0.0 + 0.0i;
- creal f2 = +0.0 - 0.0i;
- creal f3 = -0.0 + 0.0i;
- creal f4 = +0.0 + 0.0i;
-
- assert(f1 !is f2);
- assert(f1 !is f3);
- assert(f2 !is f3);
- assert(f1 is f4);
-
- assert(!(f1 is f2));
- assert(!(f1 is f3));
- assert(!(f2 is f3));
- assert(!(f1 !is f4));
-
- struct CReal
- {
- creal value;
- }
-
- CReal s1 = CReal(+0.0 + 0.0i);
- CReal s2 = CReal(+0.0 - 0.0i);
- CReal s3 = CReal(-0.0 + 0.0i);
- CReal s4 = CReal(+0.0 + 0.0i);
-
- assert(s1 !is s2);
- assert(s1 !is s3);
- assert(s2 !is s3);
- assert(s1 is s4);
-
- assert(!(s1 is s2));
- assert(!(s1 is s3));
- assert(!(s2 is s3));
- assert(!(s1 !is s4));
-}
-
-/******************************************/
-
-void main()
-{
- test4();
- test17();
- test35();
- test36();
- test43();
- test51();
- test57();
- test66();
- test115();
- test131();
- test133();
- test141();
- test179();
- test186();
- test187();
- test191();
- test196();
- test198();
- test200();
- test210();
- test240();
- test242();
- test248();
- test250();
- test273();
- test285();
- test286();
- test309();
-
- printf("Success!\n");
-}
+++ /dev/null
-// { dg-do run { target { hw && d_runtime_has_std_library } } }
-
-module runnable;
-
-import core.stdc.stdio;
-import gcc.attribute;
-
-
-/******************************************/
-// https://bugzilla.gdcproject.org/show_bug.cgi?id=2
-
-struct S
-{
- string toString() { return "foo"; }
-}
-
-void test2()
-{
- import std.string : format;
- assert(format("%s", S()) == "foo");
-}
-
-/******************************************/
-// https://bugzilla.gdcproject.org/show_bug.cgi?id=15
-
-class B
-{
- class A { }
- A a;
-}
-
-class C
-{
- void visit(B b)
- {
- import std.algorithm : map;
- auto as = [b.a];
- as.map!(d => d);
- }
-}
-
-/******************************************/
-// https://bugzilla.gdcproject.org/show_bug.cgi?id=16
-
-void test16()
-{
- import std.parallelism : taskPool;
-
- taskPool.reduce!"a+b"([0, 1, 2, 3]);
-}
-
-/******************************************/
-// https://bugzilla.gdcproject.org/show_bug.cgi?id=18
-
-class C18
-{
- struct Link
- {
- int x;
- int y;
- }
-
- void sort_links()
- {
- import std.algorithm : sort;
- import std.array : empty;
- import std.exception : enforce;
-
- enforce(!_link.empty);
-
- bool lt(Link a, Link b)
- {
- if(a.x > b.x)
- return false;
- if(a.x < b.x)
- return true;
- if(a.y >= b.y)
- return false;
- else
- return true;
- }
- sort!(lt)(_link);
- }
-
- this()
- {
- _link ~= Link(8, 3);
- _link ~= Link(4, 7);
- _link ~= Link(4, 6);
- _link ~= Link(3, 7);
- _link ~= Link(2, 7);
- _link ~= Link(2, 2);
- _link ~= Link(4, 1);
- }
-
- Link[] _link;
-}
-
-void test18()
-{
- C18 foo = new C18;
- foo.sort_links();
-}
-
-/******************************************/
-// https://bugzilla.gdcproject.org/show_bug.cgi?id=29
-
-void test29()
-{
- import std.string : format;
- import std.conv : text;
-
- string s;
- for (auto i = 0; i < 100000; i++)
- {
- s = format("%d", i);
- s = text(i);
- }
-}
-
-/******************************************/
-// https://bugzilla.gdcproject.org/show_bug.cgi?id=52
-
-class C52
-{
- C52 a;
-
- this()
- {
- printf("Construct: this=%p\n", cast(void*)this);
- a = this;
- }
-
- bool check()
- {
- printf("Check: this=%p a=%p\n", cast(void*)this, cast(void*)a);
- return this is a;
- }
-}
-
-auto test52a()
-{
- import std.conv, std.traits;
-
- struct Scoped
- {
- void[__traits (classInstanceSize, C52) ] Scoped_store = void;
-
- inout(C52) Scoped_payload() inout
- {
- void* alignedStore = cast(void*) Scoped_store.ptr;
- return cast(inout (C52)) alignedStore;
- }
- alias Scoped_payload this;
- }
-
- Scoped result;
- emplace!(Unqual!C52)(result.Scoped_store);
- assert(result.Scoped_payload().check);
- return result;
-}
-
-void test52()
-{
- auto a1 = test52a();
- assert(a1.Scoped_payload().check);
-}
-
-/******************************************/
-// https://bugzilla.gdcproject.org/show_bug.cgi?id=71
-
-struct Leaf
-{
- ubyte symbol;
- ubyte codeLen;
-}
-
-struct CanonicalHuffman
-{
- Leaf[] table;
-
- void print()
- {
- import std.algorithm;
- import std.range;
-
- auto list = zip(iota(table.length), table.dup).array
- .sort!((a, b) => a[1].symbol < b[1].symbol)
- .uniq!((a, b) => (a[0] & (1 << a[1].codeLen) - 1) == (b[0] & (1 << b[1].codeLen) - 1));
- }
-}
-
-/******************************************/
-// https://bugzilla.gdcproject.org/show_bug.cgi?id=77
-
-void fun(ubyte[3] buf)
-{
- import std.bitmanip : bigEndianToNative;
- bigEndianToNative!ushort(buf[0..2]);
-}
-
-void test77()
-{
- fun([1,2,3]);
-}
-
-/******************************************/
-// https://bugzilla.gdcproject.org/show_bug.cgi?id=108
-
-@attribute("forceinline")
-void test108()
-{
- import std.stdio : writeln;
- writeln("Here");
-}
-
-/******************************************/
-// https://bugzilla.gdcproject.org/show_bug.cgi?id=122
-
-void test122()
-{
- import std.algorithm : map;
- import std.parallelism : taskPool;
- import std.range : iota;
-
- immutable n = 10000;
- enum delta = 1.0 / n; // XBUG: was 'immutable delta' https://issues.dlang.org/show_bug.cgi?id=17092
- immutable pi = 4.0 * delta * taskPool.reduce!"a + b"(
- map!((int i) { immutable x = (i - 0.5) * delta; return 1.0 / (1.0 + x * x); })(iota(n)));
-}
-
-/******************************************/
-
-void main()
-{
- test2();
- test16();
- test18();
- test52();
- test77();
- test108();
-
- printf("Success!\n");
-}
// { dg-do run { target hw } }
import core.simd;
import core.stdc.string;
-import std.stdio;
alias TypeTuple(T...) = T;
void test9304()
{
auto a = foo9304([0, 1, 2, 3]);
- //writeln(a.array);
assert(a.array == [0,-1,-2,-3]);
}