]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/testsuite/gdc.test/runnable/imports/link15194std.d
d: Import dmd b8384668f, druntime e6caaab9, phobos 5ab9ad256 (v2.098.0-beta.1)
[thirdparty/gcc.git] / gcc / testsuite / gdc.test / runnable / imports / link15194std.d
CommitLineData
b4c522fa
IB
1module imports.link15194std;
2
3// std.algorithm.setopts
4
5/* setUnion template function is instantiated in module link15194 as root,
6 * and linked into executable.
7 *
8 * - In "original case", due to link to typeid(const RBRange!(RBNode!int*)),
9 * unSpeculative should be called for the type of typeid operand.
10 *
11 * - In "additional case", typeid(const RBRange!(RBNode!int*)*) returns
12 * TypeInfo_Pointer instance. But later its 'next' field access will reference
13 * RBRange instance. Therefore typeid should also unSpeculative the bottom struct
14 * of operand type.
15 */
16version (A)
17{
18 // additional case
19
20 TypeInfo setUnion(Rs...)(Rs )
21 {
22 return typeid(const Rs[0]*).next;
23
24 // semanticTypeInfo should also unSpaculate TypePointer.next.
25 }
26}
27else
28{
29 // original case
30
31 struct SetUnion(Rs...)
32 {
b4c522fa
IB
33 Rs r;
34
35 // Rs[0] == RBRange!(RBNode!int*)
36 // Rs[1] == int[]
37
38 // size_t toHash() is implicitly generated by buildXtoHash.
39 // And from that,
40 // typeid(const RBRange!(RBNode!int*))
41 // and
42 // typeid(const int[])
43 // are referenced to invoke TypeInfo.getHash().
44 }
45
46 SetUnion!(Rs) setUnion(Rs...)(Rs )
47 {
48 return typeof(return)();
49 }
50}
51
52// std.container.rbtree
53
54struct RBNode(V) {}
55
56struct RBRange(N) {}
57
58class RedBlackTree(Elem)
59{
60 alias Range = RBRange!(RBNode!Elem*);
61
62 Range opSlice()
63 {
64 return Range();
65 }
66}