]> gcc.gnu.org Git - gcc.git/blob - gcc/testsuite/gdc.test/compilable/bug6963.d
Add D front-end, libphobos library, and D2 testsuite.
[gcc.git] / gcc / testsuite / gdc.test / compilable / bug6963.d
1 // PERMUTE_ARGS:
2 // REQUIRED_ARGS:
3
4 /*
5 TEST_OUTPUT:
6 ---
7 output foo: 1e: pure nothrow @nogc @safe void(int x)
8 output foo: 3e: pure nothrow @nogc @safe void(int x)
9 ---
10 */
11
12 alias void function(int) pure nothrow @safe @nogc FuncPtrType;
13
14 void foo1a(X)(X x) {}
15 void foo1b(X)(X x) {}
16 void foo1c(X)(X x) {}
17 void foo1d(X)(X x) {}
18 void foo1e(X)(X x) {}
19
20 // module level declaration with type inference
21 auto fptr1 = &foo1a!int;
22 static assert(is(typeof(fptr1) == FuncPtrType));
23
24 // array initializer
25 auto fptrlist1 = [&foo1b!int];
26 static assert(is(typeof(fptrlist1) == FuncPtrType[]));
27
28 // static assert
29 static assert(is(typeof(&foo1c!int) == FuncPtrType));
30
31 // static if
32 static if(is(typeof(&foo1d!int) PF))
33 static assert(is(PF == FuncPtrType));
34 else
35 static assert(0);
36
37 // pragma test
38 pragma(msg, "output foo: 1e: ", typeof(foo1e!int).stringof);
39
40 void foo2a(X)(X x) {}
41 void foo2b(X)(X x) {}
42 void foo2c(X)(X x) {}
43
44 FuncPtrType fptr3 = &foo2a!int; // most similar to original issue
45
46 FuncPtrType[] fptrlist3 = [&foo2b!int];
47
48 struct S{ FuncPtrType fp; }
49 S s = { &foo2c!int };
50
51 void foo3a(X)(X x) {}
52 void foo3b(X)(X x) {}
53 void foo3c(X)(X x) {}
54 void foo3d(X)(X x) {}
55 void foo3e(X)(X x) {}
56
57 void main()
58 {
59 auto fptr2 = &foo3a!int;
60 static assert(is(typeof(fptr2) == FuncPtrType));
61
62 auto fptrlist2 = [&foo3b!int];
63 static assert(is(typeof(fptrlist2) == FuncPtrType[]));
64
65 static assert(is(typeof(&foo1c!int) == FuncPtrType));
66
67 static if(is(typeof(&foo1d!int) PF))
68 static assert(is(PF == FuncPtrType));
69 else
70 static assert(0);
71
72 pragma(msg, "output foo: 3e: ", typeof(foo3e!int));
73 }
This page took 0.036988 seconds and 5 git commands to generate.