mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-18 03:20:23 +08:00
d: Split up the grouped compilable and runnable tests.
The majority of tests in runnable are really compilable/ICE tests, and have have dg-do adjusted where necessary. Tests that had a dependency on Phobos have also been reproduced and reduced with all imports stripped from the test. The end result is a collection of tests that only check the compiler bug that was being fixed, rather than the library, and a reduction in time spent running all tests. gcc/testsuite/ChangeLog: * gdc.dg/compilable.d: Removed. * gdc.dg/gdc108.d: New test. * gdc.dg/gdc115.d: New test. * gdc.dg/gdc121.d: New test. * gdc.dg/gdc122.d: New test. * gdc.dg/gdc127.d: New test. * gdc.dg/gdc131.d: New test. * gdc.dg/gdc133.d: New test. * gdc.dg/gdc141.d: New test. * gdc.dg/gdc142.d: New test. * gdc.dg/gdc15.d: New test. * gdc.dg/gdc17.d: New test. * gdc.dg/gdc170.d: New test. * gdc.dg/gdc171.d: New test. * gdc.dg/gdc179.d: New test. * gdc.dg/gdc183.d: New test. * gdc.dg/gdc186.d: New test. * gdc.dg/gdc187.d: New test. * gdc.dg/gdc19.d: New test. * gdc.dg/gdc191.d: New test. * gdc.dg/gdc194.d: New test. * gdc.dg/gdc196.d: New test. * gdc.dg/gdc198.d: New test. * gdc.dg/gdc200.d: New test. * gdc.dg/gdc204.d: New test. * gdc.dg/gdc210.d: New test. * gdc.dg/gdc212.d: New test. * gdc.dg/gdc213.d: New test. * gdc.dg/gdc218.d: New test. * gdc.dg/gdc223.d: New test. * gdc.dg/gdc231.d: New test. * gdc.dg/gdc239.d: New test. * gdc.dg/gdc24.d: New test. * gdc.dg/gdc240.d: New test. * gdc.dg/gdc241.d: New test. * gdc.dg/gdc242a.d: New test. * gdc.dg/gdc242b.d: New test. * gdc.dg/gdc248.d: New test. * gdc.dg/gdc250.d: New test. * gdc.dg/gdc251.d: New test. * gdc.dg/gdc253a.d: New test. * gdc.dg/gdc253b.d: New test. * gdc.dg/gdc255.d: New test. * gdc.dg/gdc256.d: New test. * gdc.dg/gdc261.d: New test. * gdc.dg/gdc27.d: New test. * gdc.dg/gdc273.d: New test. * gdc.dg/gdc280.d: New test. * gdc.dg/gdc284.d: New test. * gdc.dg/gdc285.d: New test. * gdc.dg/gdc286.d: New test. * gdc.dg/gdc300.d: New test. * gdc.dg/gdc309.d: New test. * gdc.dg/gdc31.d: New test. * gdc.dg/gdc35.d: New test. * gdc.dg/gdc36.d: New test. * gdc.dg/gdc37.d: New test. * gdc.dg/gdc4.d: New test. * gdc.dg/gdc43.d: New test. * gdc.dg/gdc47.d: New test. * gdc.dg/gdc51.d: New test. * gdc.dg/gdc57.d: New test. * gdc.dg/gdc66.d: New test. * gdc.dg/gdc67.d: New test. * gdc.dg/gdc71.d: New test. * gdc.dg/gdc77.d: New test. * gdc.dg/imports/gdc239.d: Remove phobos dependency. * gdc.dg/imports/gdc241a.d: Updated imports. * gdc.dg/imports/gdc241b.d: Likewise. * gdc.dg/imports/gdc251a.d: Likewise. * gdc.dg/imports/gdc253.d: Rename to... * gdc.dg/imports/gdc253a.d: ...this. * gdc.dg/imports/gdc253b.d: New. * gdc.dg/imports/gdc36.d: New. * gdc.dg/imports/runnable.d: Removed. * gdc.dg/link.d: Removed. * gdc.dg/runnable.d: Removed. * gdc.dg/runnable2.d: Removed. * gdc.dg/simd.d: Remove phobos dependency.
This commit is contained in:
parent
239724956d
commit
844fa2de7b
gcc/testsuite/gdc.dg
compilable.dgdc108.dgdc115.dgdc121.dgdc122.dgdc127.dgdc131.dgdc133.dgdc141.dgdc142.dgdc15.dgdc17.dgdc170.dgdc171.dgdc179.dgdc183.dgdc186.dgdc187.dgdc19.dgdc191.dgdc194.dgdc196.dgdc198.dgdc200.dgdc204.dgdc210.dgdc212.dgdc213.dgdc218.dgdc223.dgdc231.dgdc239.dgdc24.dgdc240.dgdc241.dgdc242a.dgdc242b.dgdc248.dgdc250.dgdc251.dgdc253a.dgdc253b.dgdc255.dgdc256.dgdc261.dgdc27.dgdc273.dgdc280.dgdc284.dgdc285.dgdc286.dgdc300.dgdc309.dgdc31.dgdc35.dgdc36.dgdc37.dgdc4.dgdc43.dgdc47.dgdc51.dgdc57.dgdc66.dgdc67.dgdc71.dgdc77.d
imports
runnable.drunnable2.dsimd.d@ -1,444 +0,0 @@
|
||||
// { 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;
|
||||
}
|
19
gcc/testsuite/gdc.dg/gdc108.d
Normal file
19
gcc/testsuite/gdc.dg/gdc108.d
Normal file
@ -0,0 +1,19 @@
|
||||
// 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()
|
||||
{
|
||||
}
|
16
gcc/testsuite/gdc.dg/gdc115.d
Normal file
16
gcc/testsuite/gdc.dg/gdc115.d
Normal file
@ -0,0 +1,16 @@
|
||||
// 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);
|
||||
}
|
4
gcc/testsuite/gdc.dg/gdc121.d
Normal file
4
gcc/testsuite/gdc.dg/gdc121.d
Normal file
@ -0,0 +1,4 @@
|
||||
// https://bugzilla.gdcproject.org/show_bug.cgi?id=121
|
||||
// { dg-do compile }
|
||||
|
||||
immutable char C121 = void; // ICE
|
36
gcc/testsuite/gdc.dg/gdc122.d
Normal file
36
gcc/testsuite/gdc.dg/gdc122.d
Normal file
@ -0,0 +1,36 @@
|
||||
// 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; })());
|
||||
}
|
6
gcc/testsuite/gdc.dg/gdc127.d
Normal file
6
gcc/testsuite/gdc.dg/gdc127.d
Normal file
@ -0,0 +1,6 @@
|
||||
// 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
|
15
gcc/testsuite/gdc.dg/gdc131.d
Normal file
15
gcc/testsuite/gdc.dg/gdc131.d
Normal file
@ -0,0 +1,15 @@
|
||||
// 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";
|
||||
}
|
16
gcc/testsuite/gdc.dg/gdc133.d
Normal file
16
gcc/testsuite/gdc.dg/gdc133.d
Normal file
@ -0,0 +1,16 @@
|
||||
// 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);
|
||||
}
|
14
gcc/testsuite/gdc.dg/gdc141.d
Normal file
14
gcc/testsuite/gdc.dg/gdc141.d
Normal file
@ -0,0 +1,14 @@
|
||||
// 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);
|
||||
}
|
15
gcc/testsuite/gdc.dg/gdc142.d
Normal file
15
gcc/testsuite/gdc.dg/gdc142.d
Normal file
@ -0,0 +1,15 @@
|
||||
// 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();
|
||||
}
|
35
gcc/testsuite/gdc.dg/gdc15.d
Normal file
35
gcc/testsuite/gdc.dg/gdc15.d
Normal file
@ -0,0 +1,35 @@
|
||||
// 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);
|
||||
}
|
||||
}
|
37
gcc/testsuite/gdc.dg/gdc17.d
Normal file
37
gcc/testsuite/gdc.dg/gdc17.d
Normal file
@ -0,0 +1,37 @@
|
||||
// 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");
|
||||
}
|
21
gcc/testsuite/gdc.dg/gdc170.d
Normal file
21
gcc/testsuite/gdc.dg/gdc170.d
Normal file
@ -0,0 +1,21 @@
|
||||
// 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);
|
||||
}
|
38
gcc/testsuite/gdc.dg/gdc171.d
Normal file
38
gcc/testsuite/gdc.dg/gdc171.d
Normal file
@ -0,0 +1,38 @@
|
||||
// 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();
|
||||
}
|
32
gcc/testsuite/gdc.dg/gdc179.d
Normal file
32
gcc/testsuite/gdc.dg/gdc179.d
Normal file
@ -0,0 +1,32 @@
|
||||
// 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();
|
||||
}
|
60
gcc/testsuite/gdc.dg/gdc183.d
Normal file
60
gcc/testsuite/gdc.dg/gdc183.d
Normal file
@ -0,0 +1,60 @@
|
||||
// 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;
|
||||
}
|
60
gcc/testsuite/gdc.dg/gdc186.d
Normal file
60
gcc/testsuite/gdc.dg/gdc186.d
Normal file
@ -0,0 +1,60 @@
|
||||
// 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);
|
||||
}
|
40
gcc/testsuite/gdc.dg/gdc187.d
Normal file
40
gcc/testsuite/gdc.dg/gdc187.d
Normal file
@ -0,0 +1,40 @@
|
||||
// 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);
|
||||
}
|
8
gcc/testsuite/gdc.dg/gdc19.d
Normal file
8
gcc/testsuite/gdc.dg/gdc19.d
Normal file
@ -0,0 +1,8 @@
|
||||
// https://bugzilla.gdcproject.org/show_bug.cgi?id=19
|
||||
// { dg-do compile }
|
||||
|
||||
void test19()
|
||||
{
|
||||
byte b;
|
||||
--b = b;
|
||||
}
|
201
gcc/testsuite/gdc.dg/gdc191.d
Normal file
201
gcc/testsuite/gdc.dg/gdc191.d
Normal file
@ -0,0 +1,201 @@
|
||||
// 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);
|
||||
}
|
9
gcc/testsuite/gdc.dg/gdc194.d
Normal file
9
gcc/testsuite/gdc.dg/gdc194.d
Normal file
@ -0,0 +1,9 @@
|
||||
// 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);
|
||||
}
|
21
gcc/testsuite/gdc.dg/gdc196.d
Normal file
21
gcc/testsuite/gdc.dg/gdc196.d
Normal file
@ -0,0 +1,21 @@
|
||||
// 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;
|
||||
}
|
71
gcc/testsuite/gdc.dg/gdc198.d
Normal file
71
gcc/testsuite/gdc.dg/gdc198.d
Normal file
@ -0,0 +1,71 @@
|
||||
// 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]);
|
||||
}
|
16
gcc/testsuite/gdc.dg/gdc200.d
Normal file
16
gcc/testsuite/gdc.dg/gdc200.d
Normal file
@ -0,0 +1,16 @@
|
||||
// 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);
|
||||
}
|
12
gcc/testsuite/gdc.dg/gdc204.d
Normal file
12
gcc/testsuite/gdc.dg/gdc204.d
Normal file
@ -0,0 +1,12 @@
|
||||
// https://bugzilla.gdcproject.org/show_bug.cgi?id=204
|
||||
// { dg-do compile }
|
||||
|
||||
interface I204
|
||||
{
|
||||
void f();
|
||||
}
|
||||
|
||||
class C204 : I204
|
||||
{
|
||||
void f();
|
||||
}
|
62
gcc/testsuite/gdc.dg/gdc210.d
Normal file
62
gcc/testsuite/gdc.dg/gdc210.d
Normal file
@ -0,0 +1,62 @@
|
||||
// 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))]);
|
||||
}
|
48
gcc/testsuite/gdc.dg/gdc212.d
Normal file
48
gcc/testsuite/gdc.dg/gdc212.d
Normal file
@ -0,0 +1,48 @@
|
||||
// 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;
|
||||
}
|
||||
}
|
17
gcc/testsuite/gdc.dg/gdc213.d
Normal file
17
gcc/testsuite/gdc.dg/gdc213.d
Normal file
@ -0,0 +1,17 @@
|
||||
// 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);
|
||||
}
|
41
gcc/testsuite/gdc.dg/gdc218.d
Normal file
41
gcc/testsuite/gdc.dg/gdc218.d
Normal file
@ -0,0 +1,41 @@
|
||||
// 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();
|
||||
}
|
43
gcc/testsuite/gdc.dg/gdc223.d
Normal file
43
gcc/testsuite/gdc.dg/gdc223.d
Normal file
@ -0,0 +1,43 @@
|
||||
// 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();
|
||||
}
|
13
gcc/testsuite/gdc.dg/gdc231.d
Normal file
13
gcc/testsuite/gdc.dg/gdc231.d
Normal file
@ -0,0 +1,13 @@
|
||||
// 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;
|
||||
}
|
||||
}
|
10
gcc/testsuite/gdc.dg/gdc239.d
Normal file
10
gcc/testsuite/gdc.dg/gdc239.d
Normal file
@ -0,0 +1,10 @@
|
||||
// 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;
|
||||
}
|
15
gcc/testsuite/gdc.dg/gdc24.d
Normal file
15
gcc/testsuite/gdc.dg/gdc24.d
Normal file
@ -0,0 +1,15 @@
|
||||
// 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;
|
||||
}
|
16
gcc/testsuite/gdc.dg/gdc240.d
Normal file
16
gcc/testsuite/gdc.dg/gdc240.d
Normal file
@ -0,0 +1,16 @@
|
||||
// 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);
|
||||
}
|
6
gcc/testsuite/gdc.dg/gdc241.d
Normal file
6
gcc/testsuite/gdc.dg/gdc241.d
Normal file
@ -0,0 +1,6 @@
|
||||
// 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;
|
24
gcc/testsuite/gdc.dg/gdc242a.d
Normal file
24
gcc/testsuite/gdc.dg/gdc242a.d
Normal file
@ -0,0 +1,24 @@
|
||||
// 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;
|
||||
}
|
25
gcc/testsuite/gdc.dg/gdc242b.d
Normal file
25
gcc/testsuite/gdc.dg/gdc242b.d
Normal file
@ -0,0 +1,25 @@
|
||||
// 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));
|
||||
}
|
44
gcc/testsuite/gdc.dg/gdc248.d
Normal file
44
gcc/testsuite/gdc.dg/gdc248.d
Normal file
@ -0,0 +1,44 @@
|
||||
// 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);
|
||||
}
|
18
gcc/testsuite/gdc.dg/gdc250.d
Normal file
18
gcc/testsuite/gdc.dg/gdc250.d
Normal file
@ -0,0 +1,18 @@
|
||||
// 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]);
|
||||
}
|
6
gcc/testsuite/gdc.dg/gdc251.d
Normal file
6
gcc/testsuite/gdc.dg/gdc251.d
Normal file
@ -0,0 +1,6 @@
|
||||
// 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;
|
10
gcc/testsuite/gdc.dg/gdc253a.d
Normal file
10
gcc/testsuite/gdc.dg/gdc253a.d
Normal file
@ -0,0 +1,10 @@
|
||||
// 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() { }
|
||||
}
|
19
gcc/testsuite/gdc.dg/gdc253b.d
Normal file
19
gcc/testsuite/gdc.dg/gdc253b.d
Normal file
@ -0,0 +1,19 @@
|
||||
// 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
|
||||
{
|
||||
}
|
83
gcc/testsuite/gdc.dg/gdc255.d
Normal file
83
gcc/testsuite/gdc.dg/gdc255.d
Normal file
@ -0,0 +1,83 @@
|
||||
// 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
5
gcc/testsuite/gdc.dg/gdc256.d
Normal file
5
gcc/testsuite/gdc.dg/gdc256.d
Normal file
@ -0,0 +1,5 @@
|
||||
// https://bugzilla.gdcproject.org/show_bug.cgi?id=256
|
||||
// { dg-options "-I $srcdir/gdc.dg" }
|
||||
// { dg-do compile }
|
||||
|
||||
import imports.gdcpkg256 : gdc256;
|
19
gcc/testsuite/gdc.dg/gdc261.d
Normal file
19
gcc/testsuite/gdc.dg/gdc261.d
Normal file
@ -0,0 +1,19 @@
|
||||
// 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
18
gcc/testsuite/gdc.dg/gdc27.d
Normal file
18
gcc/testsuite/gdc.dg/gdc27.d
Normal file
@ -0,0 +1,18 @@
|
||||
// { 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();
|
||||
}
|
19
gcc/testsuite/gdc.dg/gdc273.d
Normal file
19
gcc/testsuite/gdc.dg/gdc273.d
Normal file
@ -0,0 +1,19 @@
|
||||
// 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);
|
||||
}
|
30
gcc/testsuite/gdc.dg/gdc280.d
Normal file
30
gcc/testsuite/gdc.dg/gdc280.d
Normal file
@ -0,0 +1,30 @@
|
||||
// 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');
|
10
gcc/testsuite/gdc.dg/gdc284.d
Normal file
10
gcc/testsuite/gdc.dg/gdc284.d
Normal file
@ -0,0 +1,10 @@
|
||||
// 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;
|
||||
}
|
15
gcc/testsuite/gdc.dg/gdc285.d
Normal file
15
gcc/testsuite/gdc.dg/gdc285.d
Normal file
@ -0,0 +1,15 @@
|
||||
// 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");
|
||||
}
|
37
gcc/testsuite/gdc.dg/gdc286.d
Normal file
37
gcc/testsuite/gdc.dg/gdc286.d
Normal file
@ -0,0 +1,37 @@
|
||||
// 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);
|
||||
}
|
@ -1,16 +1,6 @@
|
||||
// { 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
|
||||
// { dg-additional-options "-fmain" }
|
||||
// { dg-do link { target d_runtime_has_std_library } }
|
||||
|
||||
struct S300(Range)
|
||||
{
|
||||
@ -33,7 +23,3 @@ void link300()
|
||||
auto sample = link300a(I());
|
||||
sample.test(5);
|
||||
}
|
||||
|
||||
/******************************************/
|
||||
|
||||
void main() {}
|
41
gcc/testsuite/gdc.dg/gdc309.d
Normal file
41
gcc/testsuite/gdc.dg/gdc309.d
Normal file
@ -0,0 +1,41 @@
|
||||
// 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));
|
||||
}
|
25
gcc/testsuite/gdc.dg/gdc31.d
Normal file
25
gcc/testsuite/gdc.dg/gdc31.d
Normal file
@ -0,0 +1,25 @@
|
||||
// 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)();
|
||||
}
|
73
gcc/testsuite/gdc.dg/gdc35.d
Normal file
73
gcc/testsuite/gdc.dg/gdc35.d
Normal file
@ -0,0 +1,73 @@
|
||||
// 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();
|
||||
}
|
125
gcc/testsuite/gdc.dg/gdc36.d
Normal file
125
gcc/testsuite/gdc.dg/gdc36.d
Normal file
@ -0,0 +1,125 @@
|
||||
// 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();
|
||||
}
|
||||
|
16
gcc/testsuite/gdc.dg/gdc37.d
Normal file
16
gcc/testsuite/gdc.dg/gdc37.d
Normal file
@ -0,0 +1,16 @@
|
||||
// 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);
|
||||
}
|
9
gcc/testsuite/gdc.dg/gdc4.d
Normal file
9
gcc/testsuite/gdc.dg/gdc4.d
Normal file
@ -0,0 +1,9 @@
|
||||
// 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));
|
||||
}
|
29
gcc/testsuite/gdc.dg/gdc43.d
Normal file
29
gcc/testsuite/gdc.dg/gdc43.d
Normal file
@ -0,0 +1,29 @@
|
||||
// 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]);
|
||||
}
|
12
gcc/testsuite/gdc.dg/gdc47.d
Normal file
12
gcc/testsuite/gdc.dg/gdc47.d
Normal file
@ -0,0 +1,12 @@
|
||||
// https://bugzilla.gdcproject.org/show_bug.cgi?id=47
|
||||
// { dg-do compile }
|
||||
|
||||
template Foo47()
|
||||
{
|
||||
void test47()
|
||||
{
|
||||
asm { "nop"; }
|
||||
}
|
||||
}
|
||||
|
||||
mixin Foo47!();
|
29
gcc/testsuite/gdc.dg/gdc51.d
Normal file
29
gcc/testsuite/gdc.dg/gdc51.d
Normal file
@ -0,0 +1,29 @@
|
||||
// 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);
|
||||
}
|
21
gcc/testsuite/gdc.dg/gdc57.d
Normal file
21
gcc/testsuite/gdc.dg/gdc57.d
Normal file
@ -0,0 +1,21 @@
|
||||
// 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));
|
||||
}
|
14
gcc/testsuite/gdc.dg/gdc66.d
Normal file
14
gcc/testsuite/gdc.dg/gdc66.d
Normal file
@ -0,0 +1,14 @@
|
||||
// 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);
|
||||
}
|
||||
}
|
4
gcc/testsuite/gdc.dg/gdc67.d
Normal file
4
gcc/testsuite/gdc.dg/gdc67.d
Normal file
@ -0,0 +1,4 @@
|
||||
// https://bugzilla.gdcproject.org/show_bug.cgi?id=67
|
||||
// { dg-do compile }
|
||||
|
||||
__vector(float[4])[2] d; // ICE
|
27
gcc/testsuite/gdc.dg/gdc71.d
Normal file
27
gcc/testsuite/gdc.dg/gdc71.d
Normal file
@ -0,0 +1,27 @@
|
||||
// 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);
|
||||
}
|
11
gcc/testsuite/gdc.dg/gdc77.d
Normal file
11
gcc/testsuite/gdc.dg/gdc77.d
Normal file
@ -0,0 +1,11 @@
|
||||
// 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]);
|
||||
}
|
@ -1,9 +1,27 @@
|
||||
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);
|
||||
}
|
||||
|
@ -1,4 +1,6 @@
|
||||
import compilable;
|
||||
module imports.gdc241a;
|
||||
|
||||
import gdc241;
|
||||
|
||||
S241 *s241; // Use indirectly imported struct
|
||||
C241 *c241; // Use indirectly imported class
|
||||
|
@ -1,3 +1,4 @@
|
||||
module imports.gdc241b;
|
||||
|
||||
class C241 { }
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
module imports.gdc251a;
|
||||
|
||||
import imports.gdc251b;
|
||||
import compilable;
|
||||
import gdc251;
|
||||
|
||||
C251 config;
|
||||
|
@ -1,4 +1,4 @@
|
||||
module imports.gdc253;
|
||||
module imports.gdc253a;
|
||||
|
||||
interface I253a
|
||||
{
|
12
gcc/testsuite/gdc.dg/imports/gdc253b.d
Normal file
12
gcc/testsuite/gdc.dg/imports/gdc253b.d
Normal file
@ -0,0 +1,12 @@
|
||||
module imports.gdc253b;
|
||||
|
||||
import gdc253b;
|
||||
|
||||
class B253 : A253
|
||||
{
|
||||
void test253(int[int] a)
|
||||
{
|
||||
if (a.get(0, 1))
|
||||
return;
|
||||
}
|
||||
}
|
8
gcc/testsuite/gdc.dg/imports/gdc36.d
Normal file
8
gcc/testsuite/gdc.dg/imports/gdc36.d
Normal file
@ -0,0 +1,8 @@
|
||||
module imports.gdc36;
|
||||
|
||||
private import gdc36;
|
||||
|
||||
void test36d_1()
|
||||
{
|
||||
auto parser = Parser!(char[])();
|
||||
}
|
@ -1,23 +0,0 @@
|
||||
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;
|
||||
}
|
||||
}
|
File diff suppressed because it is too large
Load Diff
@ -1,244 +0,0 @@
|
||||
// { 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");
|
||||
}
|
@ -2,7 +2,6 @@
|
||||
// { dg-do run { target hw } }
|
||||
import core.simd;
|
||||
import core.stdc.string;
|
||||
import std.stdio;
|
||||
|
||||
alias TypeTuple(T...) = T;
|
||||
|
||||
@ -1143,7 +1142,6 @@ float4 foo9304(float4 a)
|
||||
void test9304()
|
||||
{
|
||||
auto a = foo9304([0, 1, 2, 3]);
|
||||
//writeln(a.array);
|
||||
assert(a.array == [0,-1,-2,-3]);
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user