xref: /aosp_15_r20/external/clang/test/CodeGenObjC/debug-info-ivars-indirect.m (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -emit-llvm -debug-info-kind=limited %s -o - | FileCheck %s
2*67e74705SXin Li
3*67e74705SXin Li// Make sure we generate debug symbols for an indirectly referenced
4*67e74705SXin Li// extension to an interface.
5*67e74705SXin Li
6*67e74705SXin Li// This happens to be the order the members are emitted in... I'm assuming it's
7*67e74705SXin Li// not meaningful/important, so if something causes the order to change, feel
8*67e74705SXin Li// free to update the test to reflect the new order.
9*67e74705SXin Li// CHECK: !DIDerivedType(tag: DW_TAG_member, name: "a"
10*67e74705SXin Li// CHECK: !DIDerivedType(tag: DW_TAG_member, name: "d"
11*67e74705SXin Li// CHECK: !DIDerivedType(tag: DW_TAG_member, name: "c"
12*67e74705SXin Li// CHECK: !DIDerivedType(tag: DW_TAG_member, name: "b"
13*67e74705SXin Li
14*67e74705SXin Li@interface I
15*67e74705SXin Li{
16*67e74705SXin Li    @public int a;
17*67e74705SXin Li}
18*67e74705SXin Li@end
19*67e74705SXin Li
20*67e74705SXin Livoid foo(I* pi) {
21*67e74705SXin Li    int _a = pi->a;
22*67e74705SXin Li}
23*67e74705SXin Li
24*67e74705SXin Li// another layer of indirection
25*67e74705SXin Listruct S
26*67e74705SXin Li{
27*67e74705SXin Li    I* i;
28*67e74705SXin Li};
29*67e74705SXin Li
30*67e74705SXin Li@interface I()
31*67e74705SXin Li{
32*67e74705SXin Li    @public int b;
33*67e74705SXin Li}
34*67e74705SXin Li@end
35*67e74705SXin Li
36*67e74705SXin Livoid gorf (struct S* s) {
37*67e74705SXin Li    int _b = s->i->b;
38*67e74705SXin Li}
39*67e74705SXin Li
40*67e74705SXin Li
41*67e74705SXin LiI *source();
42*67e74705SXin Li
43*67e74705SXin Li@interface I()
44*67e74705SXin Li{
45*67e74705SXin Li    @public int c;
46*67e74705SXin Li}
47*67e74705SXin Li@end
48*67e74705SXin Li
49*67e74705SXin Livoid use() {
50*67e74705SXin Li    int _c = source()->c;
51*67e74705SXin Li}
52*67e74705SXin Li
53*67e74705SXin Li@interface I()
54*67e74705SXin Li{
55*67e74705SXin Li    @public int d;
56*67e74705SXin Li}
57*67e74705SXin Li@end
58*67e74705SXin Li
59*67e74705SXin LiI *x();
60