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 { 43 printf("def(%p), %p\n", f, (cast(int*)f)[0]); 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 { 52 printf("abc(%p), %p\n", b, (cast(int*)b)[3]); 53 def(b); 54 } 55 56 int main() 57 { 58 bar b = new bar(); 59 60 printf("b.size = x%x\n", b.classinfo.initializer.length); 61 printf("bar.size = x%x\n", bar.classinfo.initializer.length); 62 assert(b.classinfo.initializer.length == bar.classinfo.initializer.length); 63 abc(b); 64 return 0; 65 } 66