]>
Commit | Line | Data |
---|---|---|
b4c522fa IB |
1 | // PERMUTE_ARGS: |
2 | ||
3 | extern(C) int printf(const char*, ...); | |
4 | ||
5 | interface foo | |
6 | { | |
7 | extern (C) int testc(int i); | |
8 | extern (Windows) int testw(int i); | |
9 | extern (D) int testd(int i); | |
10 | } | |
11 | ||
12 | class bar : foo | |
13 | { | |
14 | int x = 47; | |
15 | ||
16 | extern (C) | |
17 | int testc(int i) | |
18 | { | |
19 | printf("foo.testc(%p)\n", this); | |
20 | assert(x == 47); | |
21 | return i + x; | |
22 | } | |
23 | ||
24 | extern (Windows) | |
25 | int testw(int i) | |
26 | { | |
27 | printf("foo.testw(%p)\n", this); | |
28 | assert(x == 47); | |
29 | return i + x; | |
30 | } | |
31 | ||
32 | extern (D) | |
33 | int testd(int i) | |
34 | { | |
35 | printf("foo.testd(%p)\n", this); | |
36 | assert(x == 47); | |
37 | return i + x; | |
38 | } | |
39 | } | |
40 | ||
41 | int def(foo f) | |
42 | { | |
5fee5ec3 | 43 | printf("def(%p), %d\n", f, (cast(int*)f)[0]); |
b4c522fa IB |
44 | assert(f.testc(3) == 50); |
45 | assert(f.testd(7) == 54); | |
46 | assert(f.testd(10) == 57); | |
47 | return 0; | |
48 | } | |
49 | ||
50 | void abc(bar b) | |
51 | { | |
5fee5ec3 | 52 | printf("abc(%p), %d\n", b, (cast(int*)b)[3]); |
b4c522fa IB |
53 | def(b); |
54 | } | |
55 | ||
56 | int main() | |
57 | { | |
58 | bar b = new bar(); | |
59 | ||
5fee5ec3 IB |
60 | printf("b.size = x%zx\n", b.classinfo.initializer.length); |
61 | printf("bar.size = x%zx\n", bar.classinfo.initializer.length); | |
b4c522fa IB |
62 | assert(b.classinfo.initializer.length == bar.classinfo.initializer.length); |
63 | abc(b); | |
64 | return 0; | |
65 | } |