blob: a14b4b13271f9e8da0de08513cf5142a8d916a1e [file] [log] [blame]
// PERMUTE_ARGS:
extern(C) int printf(const char*, ...);
interface foo
{
extern (C) int testc(int i);
extern (Windows) int testw(int i);
extern (D) int testd(int i);
}
class bar : foo
{
int x = 47;
extern (C)
int testc(int i)
{
printf("foo.testc(%p)\n", this);
assert(x == 47);
return i + x;
}
extern (Windows)
int testw(int i)
{
printf("foo.testw(%p)\n", this);
assert(x == 47);
return i + x;
}
extern (D)
int testd(int i)
{
printf("foo.testd(%p)\n", this);
assert(x == 47);
return i + x;
}
}
int def(foo f)
{
printf("def(%p), %d\n", f, (cast(int*)f)[0]);
assert(f.testc(3) == 50);
assert(f.testd(7) == 54);
assert(f.testd(10) == 57);
return 0;
}
void abc(bar b)
{
printf("abc(%p), %d\n", b, (cast(int*)b)[3]);
def(b);
}
int main()
{
bar b = new bar();
printf("b.size = x%zx\n", b.classinfo.initializer.length);
printf("bar.size = x%zx\n", bar.classinfo.initializer.length);
assert(b.classinfo.initializer.length == bar.classinfo.initializer.length);
abc(b);
return 0;
}