// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -emit-llvm -debug-info-kind=limited %s -o - | FileCheck %s

// Make sure we generate debug symbols for an indirectly referenced
// extension to an interface.

// This happens to be the order the members are emitted in... I'm assuming it's
// not meaningful/important, so if something causes the order to change, feel
// free to update the test to reflect the new order.
// CHECK: !DIDerivedType(tag: DW_TAG_member, name: "a"
// CHECK: !DIDerivedType(tag: DW_TAG_member, name: "d"
// CHECK: !DIDerivedType(tag: DW_TAG_member, name: "c"
// CHECK: !DIDerivedType(tag: DW_TAG_member, name: "b"

@interface I
{
    @public int a;
}
@end

void foo(I* pi) {
    int _a = pi->a;
}

// another layer of indirection
struct S
{
    I* i;
};

@interface I()
{
    @public int b;
}
@end

void gorf (struct S* s) {
    int _b = s->i->b;
}


I *source();

@interface I()
{
    @public int c;
}
@end

void use() {
    int _c = source()->c;
}

@interface I()
{
    @public int d;
}
@end

I *x();
