d: Merge upstream dmd ff57fec515, druntime ff57fec515, phobos 17bafda79.
[official-gcc.git] / gcc / testsuite / gdc.test / compilable / nogc.d
blob959adc499cc0f2b86b76570276fc02d3cfd82b27
1 // REQUIRED_ARGS: -o-
3 /***************** Covariance ******************/
5 class C1
7 void foo() @nogc;
8 void bar();
11 class D1 : C1
13 override void foo(); // no error
14 override void bar() @nogc; // no error
17 /******************************************/
18 // __traits(compiles)
20 static assert(__traits(compiles, new Object()));
22 void foo_compiles() {}
24 @nogc void test_compiles()
26 auto fp = &foo_compiles;
27 static assert(!__traits(compiles, foo_compiles()));
28 static assert(!__traits(compiles, fp()));
29 static assert(!__traits(compiles, (*fp)()));
31 static assert(!__traits(compiles, [1,2,3]));
32 static assert(!__traits(compiles, [1:1, 2:2]));
34 struct Struct {}
35 static assert(!__traits(compiles, new int));
36 static assert(!__traits(compiles, new Struct()));
37 static assert(!__traits(compiles, new Object()));
39 int* p;
40 static assert(!__traits(compiles, delete p));
42 int[int] aa;
43 static assert( __traits(compiles, aa[0]));
44 static assert(!__traits(compiles, (aa[0] = 10)));
46 int[] a;
47 static assert(!__traits(compiles, a.length = 1));
48 static assert(!__traits(compiles, a.length += 1));
49 static assert(!__traits(compiles, a.length -= 1));
51 static assert(!__traits(compiles, a ~= 1));
52 static assert(!__traits(compiles, a ~ a));
55 /******************************************/
56 // https://issues.dlang.org/show_bug.cgi?id=12630
58 void test12630() @nogc
60 // All of these declarations should cause no errors.
62 static const ex1 = new Exception("invalid");
63 //enum ex2 = new Exception("invalid");
65 static const arr1 = [[1,2], [3, 4]];
66 enum arr2 = [[1,2], [3, 4]];
68 //static const aa1 = [1:1, 2:2];
69 enum aa2 = [1:1, 2:2];
71 //static const v1 = aa1[1];
72 enum v2 = aa2[1];
74 Object o;
75 //static const del1 = (delete o).sizeof;
76 //enum del2 = (delete o).sizeof;
78 int[] a;
79 static const len1 = (a.length = 1).sizeof;
80 enum len2 = (a.length = 1).sizeof;
82 static const cata1 = (a ~= 1).sizeof;
83 enum cata2 = (a ~= 1).sizeof;
85 static const cat1 = (a ~ a).sizeof;
86 enum cat2 = (a ~ a).sizeof;
89 /******************************************/
90 // https://issues.dlang.org/show_bug.cgi?id=12642
92 static if (is(__vector(ulong[2])))
94 import core.simd;
96 ulong2 test12642() @nogc
98 return [0, 0];
102 /******************************************/
103 // https://issues.dlang.org/show_bug.cgi?id=13550
105 auto foo13550() @nogc
107 static int[] bar()
109 return new int[2];
111 return &bar;
114 // https://issues.dlang.org/show_bug.cgi?id=19285
116 void f(bool cond, string s) @nogc {
117 auto inner() { return s; }
118 alias Unused1 = typeof(inner); // OK
119 alias Unused2 = typeof(&inner); // (Does not) INFERS GC (anymore)
120 enum Unused3 = __traits(compiles , &inner);
123 // https://issues.dlang.org/show_bug.cgi?id=24072
125 version (D_SIMD) void f24072() @nogc
127 alias int4 = __vector(int[4]);
128 int4 b = cast(int4)[1, 2, 3, 4];
129 int4 c = cast(int4)[1, 2];